aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Smith-Rowland <3dw4rd@verizon.net>2017-08-12 19:09:40 +0000
committerEdward Smith-Rowland <3dw4rd@verizon.net>2017-08-12 19:09:40 +0000
commit40fa8ee5f9da161462fde48776ef6262366f9a13 (patch)
treed3c3bf913950c59ef83b8d9ede50b0978ec0c12f
parent3acaf2e51caf356a9afc763cfd70b91d1ab094b5 (diff)
Merged revisions r232323 through r251067 to the branchtr29124
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/tr29124@251068 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--ChangeLog11
-rw-r--r--MAINTAINERS8
-rwxr-xr-xconfigure8
-rw-r--r--configure.ac8
-rw-r--r--contrib/ChangeLog9
-rwxr-xr-xcontrib/mklog784
-rwxr-xr-xcontrib/mklog.pl362
-rw-r--r--gcc/ChangeLog2417
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/Makefile.in2
-rw-r--r--gcc/ada/ChangeLog14
-rw-r--r--gcc/ada/checks.adb7
-rw-r--r--gcc/ada/gcc-interface/trans.c2
-rw-r--r--gcc/ada/gcc-interface/utils.c2
-rw-r--r--gcc/alloc-pool.h5
-rw-r--r--gcc/asan.c6
-rw-r--r--gcc/attribs.c654
-rw-r--r--gcc/attribs.h156
-rw-r--r--gcc/auto-inc-dec.c6
-rw-r--r--gcc/auto-profile.c20
-rw-r--r--gcc/bb-reorder.c14
-rw-r--r--gcc/bitmap.c8
-rw-r--r--gcc/bitmap.h17
-rw-r--r--gcc/brig/ChangeLog7
-rw-r--r--gcc/brig/brigfrontend/brig-basic-inst-handler.cc7
-rw-r--r--gcc/brig/brigfrontend/brig-code-entry-handler.cc22
-rw-r--r--gcc/builtins.c270
-rw-r--r--gcc/c-family/ChangeLog117
-rw-r--r--gcc/c-family/array-notation-common.c2
-rw-r--r--gcc/c-family/c-ada-spec.c182
-rw-r--r--gcc/c-family/c-attribs.c43
-rw-r--r--gcc/c-family/c-common.c28
-rw-r--r--gcc/c-family/c-common.h5
-rw-r--r--gcc/c-family/c-format.c25
-rw-r--r--gcc/c-family/c-lex.c1
-rw-r--r--gcc/c-family/c-omp.c113
-rw-r--r--gcc/c-family/c-opts.c22
-rw-r--r--gcc/c-family/c-pretty-print.c1
-rw-r--r--gcc/c-family/c-ubsan.c10
-rw-r--r--gcc/c-family/c-warn.c61
-rw-r--r--gcc/c/ChangeLog173
-rw-r--r--gcc/c/c-array-notation.c32
-rw-r--r--gcc/c/c-convert.c3
-rw-r--r--gcc/c/c-decl.c24
-rw-r--r--gcc/c/c-parser.c671
-rw-r--r--gcc/c/c-parser.h8
-rw-r--r--gcc/c/c-tree.h4
-rw-r--r--gcc/c/c-typeck.c285
-rw-r--r--gcc/calls.c32
-rw-r--r--gcc/cfganal.c19
-rw-r--r--gcc/cfgcleanup.c34
-rw-r--r--gcc/cfgexpand.c2
-rw-r--r--gcc/cfgrtl.c105
-rw-r--r--gcc/cfgrtl.h1
-rw-r--r--gcc/cgraph.c12
-rw-r--r--gcc/cgraphunit.c2
-rw-r--r--gcc/common.opt18
-rw-r--r--gcc/config.gcc38
-rw-r--r--gcc/config/aarch64/aarch64-cores.def4
-rw-r--r--gcc/config/aarch64/aarch64-option-extensions.def4
-rw-r--r--gcc/config/aarch64/aarch64-protos.h4
-rw-r--r--gcc/config/aarch64/aarch64-simd.md61
-rw-r--r--gcc/config/aarch64/aarch64.c316
-rw-r--r--gcc/config/aarch64/aarch64.h8
-rw-r--r--gcc/config/aarch64/aarch64.md185
-rw-r--r--gcc/config/aarch64/arm_neon.h2
-rw-r--r--gcc/config/aarch64/constraints.md18
-rw-r--r--gcc/config/aarch64/cortex-a57-fma-steering.c15
-rw-r--r--gcc/config/aarch64/falkor.md681
-rw-r--r--gcc/config/aarch64/iterators.md14
-rw-r--r--gcc/config/aarch64/predicates.md4
-rw-r--r--gcc/config/aarch64/rtems.h17
-rw-r--r--gcc/config/alpha/alpha.c21
-rw-r--r--gcc/config/arc/arc.c1
-rw-r--r--gcc/config/arm/arm.c24
-rw-r--r--gcc/config/arm/arm.opt2
-rw-r--r--gcc/config/arm/iterators.md8
-rw-r--r--gcc/config/arm/neon.md26
-rw-r--r--gcc/config/arm/parsecpu.awk35
-rw-r--r--gcc/config/arm/rtems.h17
-rw-r--r--gcc/config/arm/t-vxworks10
-rw-r--r--gcc/config/arm/vxworks.h81
-rw-r--r--gcc/config/avr/avr-log.c8
-rw-r--r--gcc/config/avr/avr.c2
-rw-r--r--gcc/config/bfin/bfin.c2
-rw-r--r--gcc/config/bfin/rtems.h29
-rw-r--r--gcc/config/c6x/c6x.c1
-rw-r--r--gcc/config/cr16/cr16.c2
-rw-r--r--gcc/config/cris/cris.c2
-rw-r--r--gcc/config/darwin.c1
-rw-r--r--gcc/config/epiphany/epiphany.c1
-rw-r--r--gcc/config/fr30/fr30.c2
-rw-r--r--gcc/config/frv/frv.c1
-rw-r--r--gcc/config/ft32/ft32.c2
-rw-r--r--gcc/config/gnu-user.h34
-rw-r--r--gcc/config/h8300/h8300.c1
-rw-r--r--gcc/config/i386/constraints.md8
-rw-r--r--gcc/config/i386/cygming.opt4
-rw-r--r--gcc/config/i386/cygwin.h4
-rw-r--r--gcc/config/i386/gstabs.h7
-rw-r--r--gcc/config/i386/i386-protos.h2
-rw-r--r--gcc/config/i386/i386.c487
-rw-r--r--gcc/config/i386/i386.h63
-rw-r--r--gcc/config/i386/i386.md66
-rw-r--r--gcc/config/i386/i386.opt18
-rw-r--r--gcc/config/i386/mingw.opt4
-rw-r--r--gcc/config/i386/mmx.md16
-rw-r--r--gcc/config/i386/openbsd.h101
-rw-r--r--gcc/config/i386/rtemself.h29
-rw-r--r--gcc/config/i386/sse.md160
-rw-r--r--gcc/config/i386/t-openbsd4
-rw-r--r--gcc/config/i386/winnt-cxx.c25
-rw-r--r--gcc/config/i386/winnt.c1
-rw-r--r--gcc/config/ia64/ia64.c1
-rw-r--r--gcc/config/ia64/vect.md6
-rw-r--r--gcc/config/iq2000/iq2000.c2
-rw-r--r--gcc/config/lm32/lm32.c2
-rw-r--r--gcc/config/lm32/rtems.h29
-rw-r--r--gcc/config/m32c/m32c.c2
-rw-r--r--gcc/config/m32c/rtems.h29
-rw-r--r--gcc/config/m32r/m32r.c1
-rw-r--r--gcc/config/m68k/m68k.c2
-rw-r--r--gcc/config/m68k/rtemself.h29
-rw-r--r--gcc/config/mcore/mcore.c1
-rw-r--r--gcc/config/microblaze/microblaze.c2
-rw-r--r--gcc/config/microblaze/rtems.h29
-rw-r--r--gcc/config/mips/loongson.md2
-rw-r--r--gcc/config/mips/mips-msa.md6
-rw-r--r--gcc/config/mips/mips-ps-3d.md10
-rw-r--r--gcc/config/mips/mips.c1
-rw-r--r--gcc/config/mips/mips.md5
-rw-r--r--gcc/config/mips/rtems.h29
-rw-r--r--gcc/config/mmix/mmix.c2
-rw-r--r--gcc/config/mn10300/mn10300.c2
-rw-r--r--gcc/config/moxie/moxie.c2
-rw-r--r--gcc/config/moxie/rtems.h29
-rw-r--r--gcc/config/msp430/msp430.c2
-rw-r--r--gcc/config/nds32/nds32-isr.c2
-rw-r--r--gcc/config/nds32/nds32.c2
-rw-r--r--gcc/config/nios2/nios2.c2
-rw-r--r--gcc/config/nios2/rtems.h35
-rw-r--r--gcc/config/nvptx/nvptx.c13
-rw-r--r--gcc/config/pa/pa.c1
-rw-r--r--gcc/config/pdp11/pdp11.c2
-rw-r--r--gcc/config/powerpcspe/altivec.md14
-rw-r--r--gcc/config/powerpcspe/paired.md2
-rw-r--r--gcc/config/powerpcspe/powerpcspe.c1
-rw-r--r--gcc/config/powerpcspe/rtems.h9
-rw-r--r--gcc/config/powerpcspe/vector.md14
-rw-r--r--gcc/config/riscv/riscv.c2
-rw-r--r--gcc/config/riscv/rtems.h31
-rw-r--r--gcc/config/rl78/rl78.c1
-rw-r--r--gcc/config/rs6000/altivec.h4
-rw-r--r--gcc/config/rs6000/altivec.md55
-rw-r--r--gcc/config/rs6000/paired.md2
-rw-r--r--gcc/config/rs6000/ppc-auxv.h2
-rw-r--r--gcc/config/rs6000/predicates.md8
-rw-r--r--gcc/config/rs6000/rs6000-builtin.def22
-rw-r--r--gcc/config/rs6000/rs6000-c.c121
-rw-r--r--gcc/config/rs6000/rs6000-cpus.def31
-rw-r--r--gcc/config/rs6000/rs6000-protos.h2
-rw-r--r--gcc/config/rs6000/rs6000.c721
-rw-r--r--gcc/config/rs6000/rs6000.h11
-rw-r--r--gcc/config/rs6000/rs6000.md67
-rw-r--r--gcc/config/rs6000/rs6000.opt31
-rw-r--r--gcc/config/rs6000/rtems.h206
-rw-r--r--gcc/config/rs6000/sysv4.h46
-rw-r--r--gcc/config/rs6000/t-rtems6
-rw-r--r--gcc/config/rs6000/vector.md14
-rw-r--r--gcc/config/rs6000/vsx.md316
-rw-r--r--gcc/config/rtems.h40
-rw-r--r--gcc/config/rx/rx.c2
-rw-r--r--gcc/config/s390/driver-native.c6
-rw-r--r--gcc/config/s390/s390-builtins.def12
-rw-r--r--gcc/config/s390/s390-c.c4
-rw-r--r--gcc/config/s390/s390-opts.h2
-rw-r--r--gcc/config/s390/s390.c45
-rw-r--r--gcc/config/s390/s390.md6
-rw-r--r--gcc/config/s390/s390.opt5
-rw-r--r--gcc/config/s390/vector.md15
-rw-r--r--gcc/config/sh/rtems.h29
-rw-r--r--gcc/config/sh/rtemself.h29
-rw-r--r--gcc/config/sh/sh.c1
-rw-r--r--gcc/config/sol2.c1
-rw-r--r--gcc/config/sol2.h12
-rw-r--r--gcc/config/sparc/rtemself.h29
-rw-r--r--gcc/config/sparc/sparc.c66
-rw-r--r--gcc/config/sparc/sparc.h3
-rw-r--r--gcc/config/sparc/sparc.md6
-rw-r--r--gcc/config/sparc/sparc.opt4
-rw-r--r--gcc/config/spu/spu.c17
-rw-r--r--gcc/config/spu/spu.md11
-rw-r--r--gcc/config/stormy16/stormy16.c2
-rw-r--r--gcc/config/tilegx/tilegx.c1
-rw-r--r--gcc/config/tilepro/tilepro.c1
-rw-r--r--gcc/config/v850/rtems.h18
-rw-r--r--gcc/config/v850/v850.c1
-rw-r--r--gcc/config/vax/vax.c2
-rw-r--r--gcc/config/visium/visium.c1
-rw-r--r--gcc/config/vxworksae.h4
-rw-r--r--gcc/config/xtensa/xtensa.c1
-rwxr-xr-xgcc/configure6
-rw-r--r--gcc/configure.ac6
-rw-r--r--gcc/convert.c5
-rw-r--r--gcc/cp/ChangeLog313
-rw-r--r--gcc/cp/call.c61
-rw-r--r--gcc/cp/class.c244
-rw-r--r--gcc/cp/constexpr.c1
-rw-r--r--gcc/cp/cp-gimplify.c11
-rw-r--r--gcc/cp/cp-objcp-common.c7
-rw-r--r--gcc/cp/cp-tree.h25
-rw-r--r--gcc/cp/cp-ubsan.c5
-rw-r--r--gcc/cp/cvt.c2
-rw-r--r--gcc/cp/decl.c35
-rw-r--r--gcc/cp/decl2.c59
-rw-r--r--gcc/cp/error.c2
-rw-r--r--gcc/cp/except.c30
-rw-r--r--gcc/cp/init.c59
-rw-r--r--gcc/cp/lambda.c5
-rw-r--r--gcc/cp/lex.c4
-rw-r--r--gcc/cp/method.c55
-rw-r--r--gcc/cp/name-lookup.c17
-rw-r--r--gcc/cp/optimize.c12
-rw-r--r--gcc/cp/parser.c832
-rw-r--r--gcc/cp/pt.c154
-rw-r--r--gcc/cp/search.c172
-rw-r--r--gcc/cp/semantics.c26
-rw-r--r--gcc/cp/tree.c1
-rw-r--r--gcc/cp/typeck.c33
-rw-r--r--gcc/cp/typeck2.c11
-rw-r--r--gcc/dbxout.c47
-rw-r--r--gcc/debug.c11
-rw-r--r--gcc/debug.h6
-rw-r--r--gcc/defaults.h9
-rw-r--r--gcc/diagnostic-core.h2
-rw-r--r--gcc/diagnostic.c12
-rw-r--r--gcc/doc/extend.texi147
-rw-r--r--gcc/doc/generic.texi17
-rw-r--r--gcc/doc/invoke.texi152
-rw-r--r--gcc/doc/md.texi21
-rw-r--r--gcc/doc/tm.texi9
-rw-r--r--gcc/doc/tm.texi.in2
-rw-r--r--gcc/domwalk.c52
-rw-r--r--gcc/dwarf2asm.c4
-rw-r--r--gcc/dwarf2out.c209
-rw-r--r--gcc/emit-rtl.c2
-rw-r--r--gcc/expmed.c56
-rw-r--r--gcc/expr.c69
-rw-r--r--gcc/final.c5
-rw-r--r--gcc/flag-types.h4
-rw-r--r--gcc/fold-const.c251
-rw-r--r--gcc/fold-const.h24
-rw-r--r--gcc/fortran/ChangeLog100
-rw-r--r--gcc/fortran/check.c2
-rw-r--r--gcc/fortran/decl.c58
-rw-r--r--gcc/fortran/dump-parse-tree.c253
-rw-r--r--gcc/fortran/expr.c2
-rw-r--r--gcc/fortran/gfortran.h2
-rw-r--r--gcc/fortran/gfortran.texi14
-rw-r--r--gcc/fortran/interface.c4
-rw-r--r--gcc/fortran/intrinsic.c8
-rw-r--r--gcc/fortran/invoke.texi42
-rw-r--r--gcc/fortran/ioparm.def2
-rw-r--r--gcc/fortran/lang.opt4
-rw-r--r--gcc/fortran/options.c34
-rw-r--r--gcc/fortran/parse.c3
-rw-r--r--gcc/fortran/resolve.c29
-rw-r--r--gcc/fortran/trans-array.c5
-rw-r--r--gcc/fortran/trans-decl.c5
-rw-r--r--gcc/fortran/trans-types.c1
-rw-r--r--gcc/function.c77
-rw-r--r--gcc/gcc.c14
-rw-r--r--gcc/gcov.c10
-rw-r--r--gcc/gengenrtl.c2
-rw-r--r--gcc/genmatch.c165
-rw-r--r--gcc/gimple-expr.c2
-rw-r--r--gcc/gimple-fold.c4
-rw-r--r--gcc/gimple-match-head.c17
-rw-r--r--gcc/gimple-pretty-print.c49
-rw-r--r--gcc/gimple-ssa-store-merging.c6
-rw-r--r--gcc/gimple-ssa-strength-reduction.c36
-rw-r--r--gcc/gimple.c12
-rw-r--r--gcc/gimple.h11
-rw-r--r--gcc/gimplify.c22
-rw-r--r--gcc/go/ChangeLog10
-rw-r--r--gcc/go/go-backend.c8
-rw-r--r--gcc/go/go-gcc.cc2
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--gcc/go/gofrontend/expressions.cc187
-rw-r--r--gcc/go/gofrontend/expressions.h18
-rw-r--r--gcc/go/gofrontend/gogo.cc43
-rw-r--r--gcc/go/gofrontend/types.cc47
-rw-r--r--gcc/go/gofrontend/types.h12
-rw-r--r--gcc/hash-traits.h70
-rw-r--r--gcc/hsa-brig.c2
-rw-r--r--gcc/hsa-common.c2
-rw-r--r--gcc/hsa-gen.c2
-rw-r--r--gcc/input.c9
-rw-r--r--gcc/input.h1
-rw-r--r--gcc/internal-fn.c10
-rw-r--r--gcc/internal-fn.def2
-rw-r--r--gcc/ipa-chkp.c2
-rw-r--r--gcc/ipa-cp.c2
-rw-r--r--gcc/ipa-devirt.c58
-rw-r--r--gcc/ipa-fnsummary.c6
-rw-r--r--gcc/ipa-icf-gimple.c6
-rw-r--r--gcc/ipa-inline.c2
-rw-r--r--gcc/ipa-polymorphic-call.c19
-rw-r--r--gcc/ipa-visibility.c58
-rw-r--r--gcc/ipa.c3
-rw-r--r--gcc/jit/ChangeLog30
-rw-r--r--gcc/jit/docs/_build/texinfo/libgccjit.texi1011
-rw-r--r--gcc/jit/docs/cp/topics/types.rst14
-rw-r--r--gcc/jit/docs/topics/compatibility.rst7
-rw-r--r--gcc/jit/docs/topics/types.rst43
-rw-r--r--gcc/jit/jit-playback.c11
-rw-r--r--gcc/jit/jit-playback.h1
-rw-r--r--gcc/jit/jit-recording.c56
-rw-r--r--gcc/jit/jit-recording.h26
-rw-r--r--gcc/jit/libgccjit++.h8
-rw-r--r--gcc/jit/libgccjit.c28
-rw-r--r--gcc/jit/libgccjit.h15
-rw-r--r--gcc/jit/libgccjit.map5
-rw-r--r--gcc/lra-assigns.c7
-rw-r--r--gcc/lto-cgraph.c2
-rw-r--r--gcc/lto-streamer-in.c4
-rw-r--r--gcc/lto/ChangeLog21
-rw-r--r--gcc/lto/lto-lang.c14
-rw-r--r--gcc/lto/lto-symtab.c2
-rw-r--r--gcc/lto/lto-symtab.h8
-rw-r--r--gcc/lto/lto.c1
-rw-r--r--gcc/match.pd128
-rw-r--r--gcc/objc/ChangeLog18
-rw-r--r--gcc/objc/objc-gnu-runtime-abi-01.c2
-rw-r--r--gcc/objc/objc-next-runtime-abi-01.c2
-rw-r--r--gcc/objc/objc-next-runtime-abi-02.c6
-rw-r--r--gcc/objc/objc-runtime-shared-support.c52
-rw-r--r--gcc/omp-expand.c23
-rw-r--r--gcc/omp-general.c6
-rw-r--r--gcc/omp-low.c8
-rw-r--r--gcc/omp-offload.c2
-rw-r--r--gcc/omp-simd-clone.c10
-rw-r--r--gcc/opt-functions.awk4
-rw-r--r--gcc/optabs.c3
-rw-r--r--gcc/optabs.def5
-rw-r--r--gcc/optc-gen.awk3
-rw-r--r--gcc/opts-global.c2
-rw-r--r--gcc/opts.c41
-rw-r--r--gcc/passes.c3
-rw-r--r--gcc/po/ChangeLog16
-rw-r--r--gcc/po/es.po601
-rw-r--r--gcc/po/fr.po12
-rw-r--r--gcc/po/gcc.pot19563
-rw-r--r--gcc/po/uk.po671
-rw-r--r--gcc/predict.c2
-rw-r--r--gcc/predict.def5
-rw-r--r--gcc/pretty-print.c12
-rw-r--r--gcc/print-rtl.c2
-rw-r--r--gcc/print-tree.c54
-rw-r--r--gcc/rtl.c4
-rw-r--r--gcc/rtl.h6
-rw-r--r--gcc/sancov.c2
-rw-r--r--gcc/sanitizer.def8
-rw-r--r--gcc/sanopt.c15
-rw-r--r--gcc/sdbout.c2
-rw-r--r--gcc/stmt.c24
-rw-r--r--gcc/symtab.c8
-rw-r--r--gcc/target.def11
-rw-r--r--gcc/targhooks.c46
-rw-r--r--gcc/targhooks.h3
-rw-r--r--gcc/testsuite/ChangeLog1233
-rw-r--r--gcc/testsuite/c-c++-common/Wmultistatement-macros-12.c43
-rw-r--r--gcc/testsuite/c-c++-common/Wmultistatement-macros-13.c104
-rw-r--r--gcc/testsuite/c-c++-common/Wsign-compare-1.c33
-rw-r--r--gcc/testsuite/c-c++-common/dump-ada-spec-7.c15
-rw-r--r--gcc/testsuite/c-c++-common/missing-close-symbol.c33
-rw-r--r--gcc/testsuite/c-c++-common/missing-symbol.c50
-rw-r--r--gcc/testsuite/c-c++-common/patchable_function_entry-decl.c16
-rw-r--r--gcc/testsuite/c-c++-common/patchable_function_entry-default.c16
-rw-r--r--gcc/testsuite/c-c++-common/patchable_function_entry-definition.c16
-rw-r--r--gcc/testsuite/c-c++-common/pr57371-1.c341
-rw-r--r--gcc/testsuite/c-c++-common/pr57371-2.c17
-rw-r--r--gcc/testsuite/c-c++-common/pr57371-3.c13
-rw-r--r--gcc/testsuite/c-c++-common/pr57371-4.c72
-rw-r--r--gcc/testsuite/c-c++-common/pr81052.c28
-rw-r--r--gcc/testsuite/c-c++-common/ubsan/pr81148.c9
-rw-r--r--gcc/testsuite/c-c++-common/ubsan/pr81604.c31
-rw-r--r--gcc/testsuite/c-c++-common/ubsan/pr81705.c12
-rw-r--r--gcc/testsuite/c-c++-common/ubsan/ptr-overflow-1.c65
-rw-r--r--gcc/testsuite/c-c++-common/ubsan/ptr-overflow-2.c113
-rw-r--r--gcc/testsuite/g++.dg/asan/asan.exp2
-rw-r--r--gcc/testsuite/g++.dg/asan/pr81340.C22
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/inh-ctor29.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice17.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/move-return1.C22
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi10.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nullptr39.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr65558.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae59.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/lambda-generic-const4.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/class-deduction42.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/class-deduction43.C10
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/inline-ns-1.C23
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/inline-ns-2.C23
-rw-r--r--gcc/testsuite/g++.dg/diagnostic/unclosed-extern-c.C3
-rw-r--r--gcc/testsuite/g++.dg/diagnostic/unclosed-function.C3
-rw-r--r--gcc/testsuite/g++.dg/diagnostic/unclosed-namespace.C2
-rw-r--r--gcc/testsuite/g++.dg/diagnostic/unclosed-struct.C3
-rw-r--r--gcc/testsuite/g++.dg/ext/anon-struct6.C4
-rw-r--r--gcc/testsuite/g++.dg/ext/packed8.C4
-rw-r--r--gcc/testsuite/g++.dg/inherit/vdtor1.C7
-rw-r--r--gcc/testsuite/g++.dg/init/array16.C4
-rw-r--r--gcc/testsuite/g++.dg/other/bitfield6.C9
-rw-r--r--gcc/testsuite/g++.dg/other/crash-4.C4
-rw-r--r--gcc/testsuite/g++.dg/other/pr81355.C14
-rw-r--r--gcc/testsuite/g++.dg/parse/pragma2.C4
-rw-r--r--gcc/testsuite/g++.dg/pr69667.C2
-rw-r--r--gcc/testsuite/g++.dg/pr71294.C2
-rw-r--r--gcc/testsuite/g++.dg/template/crash127.C22
-rw-r--r--gcc/testsuite/g++.dg/torture/pr81354.C24
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr81719.C24
-rw-r--r--gcc/testsuite/g++.dg/ubsan/pr81530.C6
-rw-r--r--gcc/testsuite/g++.dg/warn/Wshadow-compatible-local-2.C21
-rw-r--r--gcc/testsuite/g++.dg/warn/Wsign-compare-2.C2
-rw-r--r--gcc/testsuite/g++.dg/warn/Wsign-compare-4.C4
-rw-r--r--gcc/testsuite/g++.dg/warn/Wsign-compare-6.C2
-rw-r--r--gcc/testsuite/g++.dg/warn/compare1.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/anon4.C4
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/builtins/memops-asm-lib.c4
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr81423.c36
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr81555.c24
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr81556.c23
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr81588.c45
-rw-r--r--gcc/testsuite/gcc.dg/Walloca-14.c2
-rw-r--r--gcc/testsuite/gcc.dg/Wattributes-5.c13
-rw-r--r--gcc/testsuite/gcc.dg/Wsign-compare-1.c83
-rw-r--r--gcc/testsuite/gcc.dg/asan/pr81186.c18
-rw-r--r--gcc/testsuite/gcc.dg/asan/pr81460.c8
-rw-r--r--gcc/testsuite/gcc.dg/assign-warn-1.c60
-rw-r--r--gcc/testsuite/gcc.dg/assign-warn-2.c60
-rw-r--r--gcc/testsuite/gcc.dg/attr-noipa.c189
-rw-r--r--gcc/testsuite/gcc.dg/builtin-stringop-chk-1.c1
-rw-r--r--gcc/testsuite/gcc.dg/builtin-unreachable-6.c2
-rw-r--r--gcc/testsuite/gcc.dg/c90-const-expr-5.c4
-rw-r--r--gcc/testsuite/gcc.dg/c99-const-expr-5.c4
-rw-r--r--gcc/testsuite/gcc.dg/compare1.c8
-rw-r--r--gcc/testsuite/gcc.dg/compare2.c48
-rw-r--r--gcc/testsuite/gcc.dg/compare3.c88
-rw-r--r--gcc/testsuite/gcc.dg/compare4.c4
-rw-r--r--gcc/testsuite/gcc.dg/compare5.c4
-rw-r--r--gcc/testsuite/gcc.dg/compare7.c2
-rw-r--r--gcc/testsuite/gcc.dg/compare8.c6
-rw-r--r--gcc/testsuite/gcc.dg/compare9.c8
-rw-r--r--gcc/testsuite/gcc.dg/conv-2.c16
-rw-r--r--gcc/testsuite/gcc.dg/debug/dwarf2/stacked-qualified-types-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/diagnostic-types-1.c57
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr25967-1.c70
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr25967-2.c64
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr68037-1.c12
-rw-r--r--gcc/testsuite/gcc.dg/init-bad-7.c2
-rw-r--r--gcc/testsuite/gcc.dg/ipa/ipa-pta-18.c26
-rw-r--r--gcc/testsuite/gcc.dg/ipa/ipa-sra-11.c39
-rw-r--r--gcc/testsuite/gcc.dg/ipa/pr81520.c11
-rw-r--r--gcc/testsuite/gcc.dg/ipa/pr81696.c26
-rw-r--r--gcc/testsuite/gcc.dg/no-strict-overflow-7.c6
-rw-r--r--gcc/testsuite/gcc.dg/noncompile/pr81289.c8
-rw-r--r--gcc/testsuite/gcc.dg/overflow-warn-1.c6
-rw-r--r--gcc/testsuite/gcc.dg/overflow-warn-2.c6
-rw-r--r--gcc/testsuite/gcc.dg/overflow-warn-3.c6
-rw-r--r--gcc/testsuite/gcc.dg/overflow-warn-4.c6
-rw-r--r--gcc/testsuite/gcc.dg/parm-impl-decl-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/parm-impl-decl-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/pie-7.c7
-rw-r--r--gcc/testsuite/gcc.dg/pie-static-1.c9
-rw-r--r--gcc/testsuite/gcc.dg/pie-static-2.c9
-rw-r--r--gcc/testsuite/gcc.dg/pointer-array-atomic.c16
-rw-r--r--gcc/testsuite/gcc.dg/pr11492.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr26865.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr35430.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr44290-1.c3
-rw-r--r--gcc/testsuite/gcc.dg/pr44290-2.c3
-rw-r--r--gcc/testsuite/gcc.dg/pr46932.c16
-rw-r--r--gcc/testsuite/gcc.dg/pr56727-1.c23
-rw-r--r--gcc/testsuite/gcc.dg/pr56727-2.c17
-rw-r--r--gcc/testsuite/gcc.dg/pr57371-5.c10
-rw-r--r--gcc/testsuite/gcc.dg/pr60087.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr61162-2.c8
-rw-r--r--gcc/testsuite/gcc.dg/pr61162.c6
-rw-r--r--gcc/testsuite/gcc.dg/pr67730-2.c8
-rw-r--r--gcc/testsuite/gcc.dg/pr69156.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr70174.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr70920-2.c4
-rw-r--r--gcc/testsuite/gcc.dg/pr70920-4.c4
-rw-r--r--gcc/testsuite/gcc.dg/pr78582.c1
-rw-r--r--gcc/testsuite/gcc.dg/pr79499.c13
-rw-r--r--gcc/testsuite/gcc.dg/pr81455.c15
-rw-r--r--gcc/testsuite/gcc.dg/pr81564.c21
-rw-r--r--gcc/testsuite/gcc.dg/pr81578.c12
-rw-r--r--gcc/testsuite/gcc.dg/pr81588.c26
-rw-r--r--gcc/testsuite/gcc.dg/pr81621.c5
-rw-r--r--gcc/testsuite/gcc.dg/pr81650.c9
-rw-r--r--gcc/testsuite/gcc.dg/pr81695.c11
-rw-r--r--gcc/testsuite/gcc.dg/pr81737.c6
-rw-r--r--gcc/testsuite/gcc.dg/pr81795.c14
-rw-r--r--gcc/testsuite/gcc.dg/predict-15.c17
-rw-r--r--gcc/testsuite/gcc.dg/string-opt-1.c51
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr25967-1.c63
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr25967-2.c58
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70992-2.c9
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70992.c41
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr78218.c11
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr80163.c1
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr81181.c30
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr81297.c16
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr81500.c13
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr81510-2.c19
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr81510.c29
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr81571.c13
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr81573.c16
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/assoc-2.c19
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/attr-hotcold-2.c13
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr81388-1.c6
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr81588.c15
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr81620-1.c20
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr81620-2.c25
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr81627.c28
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr81744.c13
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-1.c62
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-10.c44
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-11.c51
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-2.c62
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-3.c108
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-4.c61
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-5.c63
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-6.c65
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-7.c63
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-8.c60
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-9.c90
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/reassoc-23.c7
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/slsr-4.c8
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/split-path-5.c18
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dce-3.c9
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp24.c10
-rw-r--r--gcc/testsuite/gcc.dg/ubsan/pr81505.c17
-rw-r--r--gcc/testsuite/gcc.dg/unclosed-init.c3
-rw-r--r--gcc/testsuite/gcc.dg/uninit-23.c4
-rw-r--r--gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c4
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr80815-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr81136.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr81410.c7
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr81633.c33
-rw-r--r--gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-28.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-33-big-array.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-70.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-87.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-88.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-91.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-93.c4
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-alias-check-3.c120
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-alias-check-4.c35
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-alias-check-5.c19
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-alias-check-6.c16
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-alias-check-7.c16
-rw-r--r--gcc/testsuite/gcc.target/aarch64/_Float16_1.c1
-rw-r--r--gcc/testsuite/gcc.target/aarch64/_Float16_2.c1
-rw-r--r--gcc/testsuite/gcc.target/aarch64/_Float16_3.c1
-rw-r--r--gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c3
-rw-r--r--gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c3
-rw-r--r--gcc/testsuite/gcc.target/aarch64/dbl_mov_immediate_1.c53
-rw-r--r--gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_1.c49
-rw-r--r--gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_2.c45
-rw-r--r--gcc/testsuite/gcc.target/aarch64/flt_mov_immediate_1.c52
-rw-r--r--gcc/testsuite/gcc.target/aarch64/int_mov_immediate_1.c59
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr63304_1.c18
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr79041-2.c12
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr81414.C9
-rw-r--r--gcc/testsuite/gcc.target/aarch64/simd/vmla_elem_1.c67
-rw-r--r--gcc/testsuite/gcc.target/aarch64/target_attr_1.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/target_attr_10.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/target_attr_13.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/target_attr_15.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/target_attr_2.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/target_attr_3.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/target_attr_4.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/target_attr_7.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/target_attr_crypto_ice_1.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/target_attr_crypto_ice_2.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/tst_imm_split_1.c18
-rw-r--r--gcc/testsuite/gcc.target/aarch64/vect-xorsign_exec.c58
-rw-r--r--gcc/testsuite/gcc.target/aarch64/xorsign.c86
-rw-r--r--gcc/testsuite/gcc.target/aarch64/xorsign_exec.c26
-rw-r--r--gcc/testsuite/gcc.target/i386/avx-pr80846.c39
-rw-r--r--gcc/testsuite/gcc.target/i386/avx2-pr80846.c5
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512-check.h113
-rw-r--r--gcc/testsuite/gcc.target/i386/avx5124fmaps-check.h47
-rw-r--r--gcc/testsuite/gcc.target/i386/avx5124vnniw-check.h47
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512bw-check.h50
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512bw-pr81532.c5
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512cd-check.h46
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512dq-check.h50
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512dq-pr81532.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512er-check.h49
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512f-check.h49
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512f-helper.h64
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512f-pr71559.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512f-pr80846.c5
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512ifma-check.h46
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vbmi-check.h46
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-check.h51
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vpopcntdq-check.h47
-rw-r--r--gcc/testsuite/gcc.target/i386/funcspec-56.inc2
-rw-r--r--gcc/testsuite/gcc.target/i386/interrupt-5.c13
-rw-r--r--gcc/testsuite/gcc.target/i386/mpx/pr79987.c5
-rw-r--r--gcc/testsuite/gcc.target/i386/naked-1.c14
-rw-r--r--gcc/testsuite/gcc.target/i386/naked-2.c14
-rw-r--r--gcc/testsuite/gcc.target/i386/naked-3.c39
-rw-r--r--gcc/testsuite/gcc.target/i386/naked-4.c17
-rw-r--r--gcc/testsuite/gcc.target/i386/pr79793-1.c14
-rw-r--r--gcc/testsuite/gcc.target/i386/pr79793-2.c16
-rw-r--r--gcc/testsuite/gcc.target/i386/pr80569.c9
-rw-r--r--gcc/testsuite/gcc.target/i386/pr80833-3.c14
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81213.c19
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81502.c34
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81563.c14
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81639.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81641.c11
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81644.c15
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81654.c8
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81736-1.c13
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81736-2.c14
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81736-3.c11
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81736-4.c11
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81736-5.c20
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81736-6.c16
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81736-7.c13
-rw-r--r--gcc/testsuite/gcc.target/i386/stack-prot-guard.c6
-rw-r--r--gcc/testsuite/gcc.target/i386/stack-prot-sym.c6
-rw-r--r--gcc/testsuite/gcc.target/i386/vect-insert-1.c15
-rw-r--r--gcc/testsuite/gcc.target/nvptx/patchable_function_entry-default.c15
-rw-r--r--gcc/testsuite/gcc.target/nvptx/slp-2.c2
-rw-r--r--gcc/testsuite/gcc.target/nvptx/slp.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-eq-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-gt-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-lt-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-unordered-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-1.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-4.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-5.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-1.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-4.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-5.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-1.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-10.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-11.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-4.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-5.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-7.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-8.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-11.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-6.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-7.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-exp-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-exp-3.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-sig-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-sig-3.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-3.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-6.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-7.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-3.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/builtins-2-p9-runnable.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/builtins-3-p8.c35
-rw-r--r--gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c35
-rw-r--r--gcc/testsuite/gcc.target/powerpc/builtins-3.c32
-rw-r--r--gcc/testsuite/gcc.target/powerpc/builtins-4-p9-runnable.c95
-rw-r--r--gcc/testsuite/gcc.target/powerpc/builtins-4-runnable.c321
-rw-r--r--gcc/testsuite/gcc.target/powerpc/byte-in-either-range-1.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/byte-in-range-1.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/byte-in-set-1.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/byte-in-set-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/cmpb-3.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/cpu-builtin-1.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c14
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dform-1.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dform-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dform-3.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-1.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-21.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-26.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-41.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-46.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-6.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-61.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-66.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-char.c22
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-int.c22
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-longlong.c22
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-short.c22
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fold-vec-madd-double.c17
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fold-vec-madd-float.c17
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fold-vec-madd-short.c38
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fold-vec-msum-char.c25
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fold-vec-msum-short.c25
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fold-vec-pack-double.c18
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fold-vec-pack-int.c28
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fold-vec-pack-longlong.c28
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fold-vec-pack-short.c28
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-check.h35
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-packs.c91
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-packssdw-1.c60
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-packsswb-1.c60
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-packuswb-1.c50
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-paddb-1.c42
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-paddd-1.c42
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-paddsb-1.c51
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-paddsw-1.c51
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-paddusb-1.c51
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-paddusw-1.c52
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-paddw-1.c42
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-pcmpeqb-1.c42
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-pcmpeqd-1.c42
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-pcmpeqw-1.c42
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-pcmpgtb-1.c42
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-pcmpgtd-1.c42
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-pcmpgtw-1.c42
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-pmaddwd-1.c43
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-pmulhw-1.c46
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-pmullw-1.c46
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-pslld-1.c45
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-psllw-1.c45
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-psrad-1.c44
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-psraw-1.c44
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-psrld-1.c44
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-psrlw-1.c44
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-psubb-2.c42
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-psubd-2.c42
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-psubsb-1.c51
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-psubsw-1.c51
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-psubusb-1.c51
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-psubusw-1.c52
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-psubw-2.c42
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-punpckhbw-1.c44
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-punpckhdq-1.c40
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-punpckhwd-1.c44
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-punpcklbw-1.c44
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-punpckldq-1.c40
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmx-punpcklwd-1.c44
-rw-r--r--gcc/testsuite/gcc.target/powerpc/p8vector-fp.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/p9-dimode1.c12
-rw-r--r--gcc/testsuite/gcc.target/powerpc/p9-dimode2.c10
-rw-r--r--gcc/testsuite/gcc.target/powerpc/p9-vparity.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/ppc-fpconv-1.c16
-rw-r--r--gcc/testsuite/gcc.target/powerpc/ppc-fpconv-10.c4
-rw-r--r--gcc/testsuite/gcc.target/powerpc/ppc-fpconv-5.c12
-rw-r--r--gcc/testsuite/gcc.target/powerpc/ppc-fpconv-9.c12
-rw-r--r--gcc/testsuite/gcc.target/powerpc/ppc-round.c18
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr63491.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr65849-1.c728
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr65849-2.c728
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr67808.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr68805.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr69461.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr71656-1.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr71656-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr71680.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr71698.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr71720.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr72853.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr77289.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr78458.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr78543.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr78953.c4
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr79907.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr80099-1.c12
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr80099-2.c128
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr80099-3.c128
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr80099-4.c128
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr80099-5.c128
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr81622.c13
-rw-r--r--gcc/testsuite/gcc.target/powerpc/upper-regs-df.c6
-rw-r--r--gcc/testsuite/gcc.target/powerpc/upper-regs-sf.c6
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vec-extract-1.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vec-init-3.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vec-init-6.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vec-init-7.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vec-set-char.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vec-set-int.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vec-set-short.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vec-setup-be-double.c12
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vec-setup-be-long.c11
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vec-setup-double.c11
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vec-setup-long.c9
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vec-setup.h366
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-7.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-7.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-7.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-12.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-13.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsu/vec-xlx-7.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsu/vec-xrx-7.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-12.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-13.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsx-extract-6.c25
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsx-extract-7.c25
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsx-himode.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsx-himode2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsx-himode3.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsx-qimode.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsx-qimode2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsx-qimode3.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsx-simode.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsx-simode2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsx-simode3.c2
-rw-r--r--gcc/testsuite/gcc.target/s390/pr81534.c17
-rw-r--r--gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/do-test.S200
-rw-r--r--gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.c74
-rw-r--r--gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp153
-rw-r--r--gcc/testsuite/gfortran.dg/bind_c_usage_30.f906
-rw-r--r--gcc/testsuite/gfortran.dg/dec_d_lines_1.f9
-rw-r--r--gcc/testsuite/gfortran.dg/dec_d_lines_2.f8
-rw-r--r--gcc/testsuite/gfortran.dg/dec_structure_18.f9038
-rw-r--r--gcc/testsuite/gfortran.dg/dec_structure_19.f9038
-rw-r--r--gcc/testsuite/gfortran.dg/dec_structure_20.f9018
-rw-r--r--gcc/testsuite/gfortran.dg/dec_structure_21.f9010
-rw-r--r--gcc/testsuite/gfortran.dg/dim_sum_1.f9037
-rw-r--r--gcc/testsuite/gfortran.dg/dim_sum_2.f9037
-rw-r--r--gcc/testsuite/gfortran.dg/dim_sum_3.f9037
-rw-r--r--gcc/testsuite/gfortran.dg/logical_assignment_1.f9010
-rw-r--r--gcc/testsuite/gfortran.dg/o_fast_stacksize.f9017
-rw-r--r--gcc/testsuite/gfortran.dg/pr81529.f9032
-rw-r--r--gcc/testsuite/gfortran.dg/pr81723.f56
-rw-r--r--gcc/testsuite/gfortran.dg/realloc_on_assign_28.f9040
-rw-r--r--gcc/testsuite/gfortran.dg/use_30.f9017
-rw-r--r--gcc/testsuite/gnat.dg/debug13.adb38
-rw-r--r--gcc/testsuite/gnat.dg/debug13.ads5
-rw-r--r--gcc/testsuite/gnat.dg/opt66.adb13
-rw-r--r--gcc/testsuite/jit.dg/all-non-failing-tests.h2
-rw-r--r--gcc/testsuite/jit.dg/test-error-gcc_jit_type_get_vector-bad-type.c30
-rw-r--r--gcc/testsuite/jit.dg/test-error-gcc_jit_type_get_vector-non-power-of-two.c29
-rw-r--r--gcc/testsuite/jit.dg/test-vector-types.cc185
-rw-r--r--gcc/testsuite/lib/target-supports.exp18
-rw-r--r--gcc/testsuite/objc.dg/proto-lossage-4.m6
-rw-r--r--gcc/toplev.c18
-rw-r--r--gcc/trans-mem.c3
-rw-r--r--gcc/tree-cfg.c35
-rw-r--r--gcc/tree-chkp.c5
-rw-r--r--gcc/tree-data-ref.c496
-rw-r--r--gcc/tree-data-ref.h66
-rw-r--r--gcc/tree-dump.c1
-rw-r--r--gcc/tree-eh.c2
-rw-r--r--gcc/tree-inline.c3
-rw-r--r--gcc/tree-into-ssa.c2
-rw-r--r--gcc/tree-object-size.c2
-rw-r--r--gcc/tree-parloops.c40
-rw-r--r--gcc/tree-predcom.c685
-rw-r--r--gcc/tree-pretty-print.c17
-rw-r--r--gcc/tree-profile.c2
-rw-r--r--gcc/tree-sra.c8
-rw-r--r--gcc/tree-ssa-alias.c1
-rw-r--r--gcc/tree-ssa-ccp.c2
-rw-r--r--gcc/tree-ssa-live.c2
-rw-r--r--gcc/tree-ssa-loop-ch.c2
-rw-r--r--gcc/tree-ssa-loop-ivopts.c4
-rw-r--r--gcc/tree-ssa-loop-niter.c16
-rw-r--r--gcc/tree-ssa-loop-prefetch.c3
-rw-r--r--gcc/tree-ssa-loop-unswitch.c11
-rw-r--r--gcc/tree-ssa-loop.c2
-rw-r--r--gcc/tree-ssa-math-opts.c88
-rw-r--r--gcc/tree-ssa-operands.c45
-rw-r--r--gcc/tree-ssa-pre.c51
-rw-r--r--gcc/tree-ssa-reassoc.c68
-rw-r--r--gcc/tree-ssa-sccvn.c10
-rw-r--r--gcc/tree-ssa-scopedtables.c9
-rw-r--r--gcc/tree-ssa-structalias.c31
-rw-r--r--gcc/tree-ssa-tail-merge.c1
-rw-r--r--gcc/tree-ssa-uninit.c25
-rw-r--r--gcc/tree-ssa.c45
-rw-r--r--gcc/tree-streamer-in.c18
-rw-r--r--gcc/tree-vect-data-refs.c262
-rw-r--r--gcc/tree-vect-loop-manip.c49
-rw-r--r--gcc/tree-vect-loop.c231
-rw-r--r--gcc/tree-vect-slp.c247
-rw-r--r--gcc/tree-vect-stmts.c112
-rw-r--r--gcc/tree-vectorizer.c28
-rw-r--r--gcc/tree-vectorizer.h64
-rw-r--r--gcc/tree-vrp.c5
-rw-r--r--gcc/tree-vrp.h4
-rw-r--r--gcc/tree.c892
-rw-r--r--gcc/tree.def10
-rw-r--r--gcc/tree.h218
-rw-r--r--gcc/tsan.c2
-rw-r--r--gcc/ubsan.c317
-rw-r--r--gcc/ubsan.h1
-rw-r--r--gcc/varasm.c48
-rw-r--r--gcc/varpool.c8
-rw-r--r--gcc/vmsdbgout.c2
-rw-r--r--gotools/ChangeLog6
-rw-r--r--gotools/Makefile.am2
-rw-r--r--gotools/Makefile.in2
-rw-r--r--libbacktrace/ChangeLog30
-rw-r--r--libbacktrace/Makefile.am5
-rw-r--r--libbacktrace/Makefile.in4
-rw-r--r--libbacktrace/config.h.in9
-rwxr-xr-xlibbacktrace/configure63
-rw-r--r--libbacktrace/configure.ac30
-rw-r--r--libbacktrace/elf.c2
-rw-r--r--libbacktrace/fileline.c9
-rw-r--r--libbacktrace/filetype.awk3
-rw-r--r--libbacktrace/xcoff.c1485
-rw-r--r--libcc1/ChangeLog5
-rw-r--r--libcc1/libcp1plugin.cc8
-rw-r--r--libcpp/po/ChangeLog4
-rw-r--r--libcpp/po/cpplib.pot4
-rw-r--r--libgcc/ChangeLog51
-rw-r--r--libgcc/config.host20
-rw-r--r--libgcc/config/arm/t-vxworks71
-rw-r--r--libgcc/config/arm/unwind-arm-vxworks.c33
-rw-r--r--libgcc/config/i386/i386-asm.h89
-rw-r--r--libgcc/config/i386/resms64.S2
-rw-r--r--libgcc/config/i386/resms64f.S2
-rw-r--r--libgcc/config/i386/resms64fx.S2
-rw-r--r--libgcc/config/i386/resms64x.S2
-rw-r--r--libgcc/config/i386/savms64.S2
-rw-r--r--libgcc/config/i386/savms64f.S2
-rw-r--r--libgcc/config/rs6000/ibm-ldouble.c3
-rw-r--r--libgcc/config/t-vxworks11
-rw-r--r--libgcc/config/t-vxworks79
-rw-r--r--libgfortran/ChangeLog139
-rw-r--r--libgfortran/generated/iall_i1.c28
-rw-r--r--libgfortran/generated/iall_i16.c28
-rw-r--r--libgfortran/generated/iall_i2.c28
-rw-r--r--libgfortran/generated/iall_i4.c28
-rw-r--r--libgfortran/generated/iall_i8.c28
-rw-r--r--libgfortran/generated/iany_i1.c28
-rw-r--r--libgfortran/generated/iany_i16.c28
-rw-r--r--libgfortran/generated/iany_i2.c28
-rw-r--r--libgfortran/generated/iany_i4.c28
-rw-r--r--libgfortran/generated/iany_i8.c28
-rw-r--r--libgfortran/generated/iparity_i1.c28
-rw-r--r--libgfortran/generated/iparity_i16.c28
-rw-r--r--libgfortran/generated/iparity_i2.c28
-rw-r--r--libgfortran/generated/iparity_i4.c28
-rw-r--r--libgfortran/generated/iparity_i8.c28
-rw-r--r--libgfortran/generated/maxloc1_16_i1.c28
-rw-r--r--libgfortran/generated/maxloc1_16_i16.c28
-rw-r--r--libgfortran/generated/maxloc1_16_i2.c28
-rw-r--r--libgfortran/generated/maxloc1_16_i4.c28
-rw-r--r--libgfortran/generated/maxloc1_16_i8.c28
-rw-r--r--libgfortran/generated/maxloc1_16_r10.c28
-rw-r--r--libgfortran/generated/maxloc1_16_r16.c28
-rw-r--r--libgfortran/generated/maxloc1_16_r4.c28
-rw-r--r--libgfortran/generated/maxloc1_16_r8.c28
-rw-r--r--libgfortran/generated/maxloc1_4_i1.c28
-rw-r--r--libgfortran/generated/maxloc1_4_i16.c28
-rw-r--r--libgfortran/generated/maxloc1_4_i2.c28
-rw-r--r--libgfortran/generated/maxloc1_4_i4.c28
-rw-r--r--libgfortran/generated/maxloc1_4_i8.c28
-rw-r--r--libgfortran/generated/maxloc1_4_r10.c28
-rw-r--r--libgfortran/generated/maxloc1_4_r16.c28
-rw-r--r--libgfortran/generated/maxloc1_4_r4.c28
-rw-r--r--libgfortran/generated/maxloc1_4_r8.c28
-rw-r--r--libgfortran/generated/maxloc1_8_i1.c28
-rw-r--r--libgfortran/generated/maxloc1_8_i16.c28
-rw-r--r--libgfortran/generated/maxloc1_8_i2.c28
-rw-r--r--libgfortran/generated/maxloc1_8_i4.c28
-rw-r--r--libgfortran/generated/maxloc1_8_i8.c28
-rw-r--r--libgfortran/generated/maxloc1_8_r10.c28
-rw-r--r--libgfortran/generated/maxloc1_8_r16.c28
-rw-r--r--libgfortran/generated/maxloc1_8_r4.c28
-rw-r--r--libgfortran/generated/maxloc1_8_r8.c28
-rw-r--r--libgfortran/generated/maxval_i1.c28
-rw-r--r--libgfortran/generated/maxval_i16.c28
-rw-r--r--libgfortran/generated/maxval_i2.c28
-rw-r--r--libgfortran/generated/maxval_i4.c28
-rw-r--r--libgfortran/generated/maxval_i8.c28
-rw-r--r--libgfortran/generated/maxval_r10.c28
-rw-r--r--libgfortran/generated/maxval_r16.c28
-rw-r--r--libgfortran/generated/maxval_r4.c28
-rw-r--r--libgfortran/generated/maxval_r8.c28
-rw-r--r--libgfortran/generated/minloc1_16_i1.c28
-rw-r--r--libgfortran/generated/minloc1_16_i16.c28
-rw-r--r--libgfortran/generated/minloc1_16_i2.c28
-rw-r--r--libgfortran/generated/minloc1_16_i4.c28
-rw-r--r--libgfortran/generated/minloc1_16_i8.c28
-rw-r--r--libgfortran/generated/minloc1_16_r10.c28
-rw-r--r--libgfortran/generated/minloc1_16_r16.c28
-rw-r--r--libgfortran/generated/minloc1_16_r4.c28
-rw-r--r--libgfortran/generated/minloc1_16_r8.c28
-rw-r--r--libgfortran/generated/minloc1_4_i1.c28
-rw-r--r--libgfortran/generated/minloc1_4_i16.c28
-rw-r--r--libgfortran/generated/minloc1_4_i2.c28
-rw-r--r--libgfortran/generated/minloc1_4_i4.c28
-rw-r--r--libgfortran/generated/minloc1_4_i8.c28
-rw-r--r--libgfortran/generated/minloc1_4_r10.c28
-rw-r--r--libgfortran/generated/minloc1_4_r16.c28
-rw-r--r--libgfortran/generated/minloc1_4_r4.c28
-rw-r--r--libgfortran/generated/minloc1_4_r8.c28
-rw-r--r--libgfortran/generated/minloc1_8_i1.c28
-rw-r--r--libgfortran/generated/minloc1_8_i16.c28
-rw-r--r--libgfortran/generated/minloc1_8_i2.c28
-rw-r--r--libgfortran/generated/minloc1_8_i4.c28
-rw-r--r--libgfortran/generated/minloc1_8_i8.c28
-rw-r--r--libgfortran/generated/minloc1_8_r10.c28
-rw-r--r--libgfortran/generated/minloc1_8_r16.c28
-rw-r--r--libgfortran/generated/minloc1_8_r4.c28
-rw-r--r--libgfortran/generated/minloc1_8_r8.c28
-rw-r--r--libgfortran/generated/minval_i1.c28
-rw-r--r--libgfortran/generated/minval_i16.c28
-rw-r--r--libgfortran/generated/minval_i2.c28
-rw-r--r--libgfortran/generated/minval_i4.c28
-rw-r--r--libgfortran/generated/minval_i8.c28
-rw-r--r--libgfortran/generated/minval_r10.c28
-rw-r--r--libgfortran/generated/minval_r16.c28
-rw-r--r--libgfortran/generated/minval_r4.c28
-rw-r--r--libgfortran/generated/minval_r8.c28
-rw-r--r--libgfortran/generated/norm2_r10.c9
-rw-r--r--libgfortran/generated/norm2_r16.c9
-rw-r--r--libgfortran/generated/norm2_r4.c9
-rw-r--r--libgfortran/generated/norm2_r8.c9
-rw-r--r--libgfortran/generated/parity_l1.c9
-rw-r--r--libgfortran/generated/parity_l16.c9
-rw-r--r--libgfortran/generated/parity_l2.c9
-rw-r--r--libgfortran/generated/parity_l4.c9
-rw-r--r--libgfortran/generated/parity_l8.c9
-rw-r--r--libgfortran/generated/product_c10.c28
-rw-r--r--libgfortran/generated/product_c16.c28
-rw-r--r--libgfortran/generated/product_c4.c28
-rw-r--r--libgfortran/generated/product_c8.c28
-rw-r--r--libgfortran/generated/product_i1.c28
-rw-r--r--libgfortran/generated/product_i16.c28
-rw-r--r--libgfortran/generated/product_i2.c28
-rw-r--r--libgfortran/generated/product_i4.c28
-rw-r--r--libgfortran/generated/product_i8.c28
-rw-r--r--libgfortran/generated/product_r10.c28
-rw-r--r--libgfortran/generated/product_r16.c28
-rw-r--r--libgfortran/generated/product_r4.c28
-rw-r--r--libgfortran/generated/product_r8.c28
-rw-r--r--libgfortran/generated/sum_c10.c28
-rw-r--r--libgfortran/generated/sum_c16.c28
-rw-r--r--libgfortran/generated/sum_c4.c28
-rw-r--r--libgfortran/generated/sum_c8.c28
-rw-r--r--libgfortran/generated/sum_i1.c28
-rw-r--r--libgfortran/generated/sum_i16.c28
-rw-r--r--libgfortran/generated/sum_i2.c28
-rw-r--r--libgfortran/generated/sum_i4.c28
-rw-r--r--libgfortran/generated/sum_i8.c28
-rw-r--r--libgfortran/generated/sum_r10.c28
-rw-r--r--libgfortran/generated/sum_r16.c28
-rw-r--r--libgfortran/generated/sum_r4.c28
-rw-r--r--libgfortran/generated/sum_r8.c28
-rw-r--r--libgfortran/io/unix.c3
-rw-r--r--libgfortran/m4/ifunction.m426
-rw-r--r--libgo/go/math/ldexp.go9
-rw-r--r--libgo/go/runtime/testdata/testprogcgo/callback.go4
-rw-r--r--libgo/go/syscall/libcall_linux.go4
-rw-r--r--libgo/mksigtab.sh13
-rw-r--r--libgo/runtime/go-caller.c14
-rw-r--r--libgo/runtime/go-signal.c51
-rw-r--r--libgomp/ChangeLog24
-rw-r--r--libgomp/testsuite/libgomp.c++/pr45784.C5
-rw-r--r--libgomp/testsuite/libgomp.c++/pr69389.C3
-rw-r--r--libgomp/testsuite/libgomp.c/pr45784.c41
-rw-r--r--libgomp/testsuite/libgomp.c/pr69389.c124
-rw-r--r--libgomp/testsuite/libgomp.c/pr81687-1.c23
-rw-r--r--libgomp/testsuite/libgomp.c/pr81687-2.c27
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/vprop-2.c45
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c1
-rw-r--r--libsanitizer/ChangeLog11
-rw-r--r--libsanitizer/include/system/sys/ptrace.h7
-rw-r--r--libsanitizer/ubsan/ubsan_checks.inc1
-rw-r--r--libsanitizer/ubsan/ubsan_handlers.cc31
-rw-r--r--libsanitizer/ubsan/ubsan_handlers.h7
-rw-r--r--libstdc++-v3/ChangeLog250
-rw-r--r--libstdc++-v3/config/allocator/malloc_allocator_base.h4
-rw-r--r--libstdc++-v3/config/allocator/new_allocator_base.h4
-rw-r--r--libstdc++-v3/config/cpu/aarch64/opt/bits/opt_random.h47
-rw-r--r--libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h180
-rw-r--r--libstdc++-v3/config/io/basic_file_stdio.cc6
-rw-r--r--libstdc++-v3/doc/xml/manual/using.xml18
-rw-r--r--libstdc++-v3/include/bits/algorithmfwd.h3
-rw-r--r--libstdc++-v3/include/bits/basic_ios.h4
-rw-r--r--libstdc++-v3/include/bits/basic_string.h6
-rw-r--r--libstdc++-v3/include/bits/c++config78
-rw-r--r--libstdc++-v3/include/bits/complex128.h215
-rw-r--r--libstdc++-v3/include/bits/complex128_math.h164
-rw-r--r--libstdc++-v3/include/bits/deque.tcc2
-rw-r--r--libstdc++-v3/include/bits/forward_list.h2
-rw-r--r--libstdc++-v3/include/bits/forward_list.tcc2
-rw-r--r--libstdc++-v3/include/bits/hashtable_policy.h6
-rw-r--r--libstdc++-v3/include/bits/ios_base.h4
-rw-r--r--libstdc++-v3/include/bits/istream.tcc50
-rw-r--r--libstdc++-v3/include/bits/list.tcc2
-rw-r--r--libstdc++-v3/include/bits/move.h9
-rw-r--r--libstdc++-v3/include/bits/quoted_string.h8
-rw-r--r--libstdc++-v3/include/bits/random.h7
-rw-r--r--libstdc++-v3/include/bits/random.tcc7
-rw-r--r--libstdc++-v3/include/bits/regex.h142
-rw-r--r--libstdc++-v3/include/bits/regex.tcc9
-rw-r--r--libstdc++-v3/include/bits/regex_automaton.h7
-rw-r--r--libstdc++-v3/include/bits/regex_automaton.tcc6
-rw-r--r--libstdc++-v3/include/bits/regex_compiler.h5
-rw-r--r--libstdc++-v3/include/bits/regex_compiler.tcc6
-rw-r--r--libstdc++-v3/include/bits/regex_constants.h9
-rw-r--r--libstdc++-v3/include/bits/regex_error.h7
-rw-r--r--libstdc++-v3/include/bits/regex_executor.h6
-rw-r--r--libstdc++-v3/include/bits/regex_executor.tcc6
-rw-r--r--libstdc++-v3/include/bits/regex_scanner.h6
-rw-r--r--libstdc++-v3/include/bits/regex_scanner.tcc6
-rw-r--r--libstdc++-v3/include/bits/sf_bernoulli.tcc191
-rw-r--r--libstdc++-v3/include/bits/sf_bessel.tcc32
-rw-r--r--libstdc++-v3/include/bits/sf_chebyshev.tcc33
-rw-r--r--libstdc++-v3/include/bits/sf_coulomb.tcc12
-rw-r--r--libstdc++-v3/include/bits/sf_euler.tcc261
-rw-r--r--libstdc++-v3/include/bits/sf_gamma.tcc33
-rw-r--r--libstdc++-v3/include/bits/sf_gegenbauer.tcc143
-rw-r--r--libstdc++-v3/include/bits/sf_hermite.tcc47
-rw-r--r--libstdc++-v3/include/bits/sf_jacobi.tcc166
-rw-r--r--libstdc++-v3/include/bits/sf_laguerre.tcc154
-rw-r--r--libstdc++-v3/include/bits/sf_legendre.tcc155
-rw-r--r--libstdc++-v3/include/bits/sf_mod_bessel.tcc14
-rw-r--r--libstdc++-v3/include/bits/sf_polylog.tcc4
-rw-r--r--libstdc++-v3/include/bits/sf_stirling.tcc345
-rw-r--r--libstdc++-v3/include/bits/sf_theta.tcc1323
-rw-r--r--libstdc++-v3/include/bits/sf_trig.tcc12
-rw-r--r--libstdc++-v3/include/bits/sf_zeta.tcc2
-rw-r--r--libstdc++-v3/include/bits/specfun.h297
-rw-r--r--libstdc++-v3/include/bits/specfun_state.h155
-rw-r--r--libstdc++-v3/include/bits/specfun_util.h7
-rw-r--r--libstdc++-v3/include/bits/stl_algo.h3
-rw-r--r--libstdc++-v3/include/bits/stl_algobase.h3
-rw-r--r--libstdc++-v3/include/bits/stl_bvector.h4
-rw-r--r--libstdc++-v3/include/bits/stl_deque.h2
-rw-r--r--libstdc++-v3/include/bits/stl_iterator.h13
-rw-r--r--libstdc++-v3/include/bits/stl_iterator_base_funcs.h4
-rw-r--r--libstdc++-v3/include/bits/stl_list.h9
-rw-r--r--libstdc++-v3/include/bits/stl_map.h4
-rw-r--r--libstdc++-v3/include/bits/stl_multimap.h4
-rw-r--r--libstdc++-v3/include/bits/stl_multiset.h4
-rw-r--r--libstdc++-v3/include/bits/stl_relops.h7
-rw-r--r--libstdc++-v3/include/bits/stl_set.h4
-rw-r--r--libstdc++-v3/include/bits/stl_stack.h2
-rw-r--r--libstdc++-v3/include/bits/stl_vector.h149
-rw-r--r--libstdc++-v3/include/bits/summation.tcc102
-rw-r--r--libstdc++-v3/include/bits/uniform_int_dist.h5
-rw-r--r--libstdc++-v3/include/bits/unordered_map.h4
-rw-r--r--libstdc++-v3/include/bits/unordered_set.h4
-rw-r--r--libstdc++-v3/include/bits/vector.tcc53
-rw-r--r--libstdc++-v3/include/decimal/decimal8
-rw-r--r--libstdc++-v3/include/decimal/decimal.h7
-rw-r--r--libstdc++-v3/include/experimental/algorithm8
-rw-r--r--libstdc++-v3/include/experimental/any7
-rw-r--r--libstdc++-v3/include/experimental/array6
-rw-r--r--libstdc++-v3/include/experimental/bits/erase_if.h6
-rw-r--r--libstdc++-v3/include/experimental/bits/fs_dir.h7
-rw-r--r--libstdc++-v3/include/experimental/bits/fs_fwd.h10
-rw-r--r--libstdc++-v3/include/experimental/bits/fs_ops.h7
-rw-r--r--libstdc++-v3/include/experimental/bits/fs_path.h6
-rw-r--r--libstdc++-v3/include/experimental/bits/lfts_config.h23
-rw-r--r--libstdc++-v3/include/experimental/bits/shared_ptr.h8
-rw-r--r--libstdc++-v3/include/experimental/bits/string_view.tcc8
-rw-r--r--libstdc++-v3/include/experimental/chrono5
-rw-r--r--libstdc++-v3/include/experimental/deque19
-rw-r--r--libstdc++-v3/include/experimental/filesystem8
-rw-r--r--libstdc++-v3/include/experimental/forward_list20
-rw-r--r--libstdc++-v3/include/experimental/functional12
-rw-r--r--libstdc++-v3/include/experimental/iterator8
-rw-r--r--libstdc++-v3/include/experimental/list12
-rw-r--r--libstdc++-v3/include/experimental/map25
-rw-r--r--libstdc++-v3/include/experimental/memory8
-rw-r--r--libstdc++-v3/include/experimental/memory_resource8
-rw-r--r--libstdc++-v3/include/experimental/numeric8
-rw-r--r--libstdc++-v3/include/experimental/optional11
-rw-r--r--libstdc++-v3/include/experimental/propagate_const7
-rw-r--r--libstdc++-v3/include/experimental/random8
-rw-r--r--libstdc++-v3/include/experimental/ratio8
-rw-r--r--libstdc++-v3/include/experimental/regex5
-rw-r--r--libstdc++-v3/include/experimental/set26
-rw-r--r--libstdc++-v3/include/experimental/source_location8
-rw-r--r--libstdc++-v3/include/experimental/string39
-rw-r--r--libstdc++-v3/include/experimental/string_view21
-rw-r--r--libstdc++-v3/include/experimental/system_error8
-rw-r--r--libstdc++-v3/include/experimental/tuple8
-rw-r--r--libstdc++-v3/include/experimental/type_traits11
-rw-r--r--libstdc++-v3/include/experimental/unordered_map28
-rw-r--r--libstdc++-v3/include/experimental/unordered_set28
-rw-r--r--libstdc++-v3/include/experimental/utility8
-rw-r--r--libstdc++-v3/include/experimental/vector20
-rw-r--r--libstdc++-v3/include/ext/bitmap_allocator.h8
-rw-r--r--libstdc++-v3/include/ext/codecvt_specializations.h4
-rw-r--r--libstdc++-v3/include/ext/math_util.h2
-rw-r--r--libstdc++-v3/include/ext/polynomial.tcc2
-rw-r--r--libstdc++-v3/include/ext/random5
-rw-r--r--libstdc++-v3/include/ext/rope10
-rw-r--r--libstdc++-v3/include/ext/typelist.h21
-rw-r--r--libstdc++-v3/include/std/chrono25
-rw-r--r--libstdc++-v3/include/std/complex376
-rw-r--r--libstdc++-v3/include/std/functional6
-rw-r--r--libstdc++-v3/include/std/istream12
-rw-r--r--libstdc++-v3/include/std/numeric10
-rw-r--r--libstdc++-v3/include/std/streambuf7
-rw-r--r--libstdc++-v3/include/std/string_view11
-rw-r--r--libstdc++-v3/include/std/thread7
-rw-r--r--libstdc++-v3/include/std/type_traits18
-rw-r--r--libstdc++-v3/include/std/variant105
-rw-r--r--libstdc++-v3/include/tr1/array6
-rw-r--r--libstdc++-v3/include/tr1/bessel_function.tcc8
-rw-r--r--libstdc++-v3/include/tr1/beta_function.tcc8
-rw-r--r--libstdc++-v3/include/tr1/cmath47
-rw-r--r--libstdc++-v3/include/tr1/complex6
-rw-r--r--libstdc++-v3/include/tr1/ell_integral.tcc8
-rw-r--r--libstdc++-v3/include/tr1/exp_integral.tcc8
-rw-r--r--libstdc++-v3/include/tr1/functional15
-rw-r--r--libstdc++-v3/include/tr1/functional_hash.h6
-rw-r--r--libstdc++-v3/include/tr1/gamma.tcc8
-rw-r--r--libstdc++-v3/include/tr1/hashtable.h6
-rw-r--r--libstdc++-v3/include/tr1/hashtable_policy.h7
-rw-r--r--libstdc++-v3/include/tr1/hypergeometric.tcc8
-rw-r--r--libstdc++-v3/include/tr1/legendre_function.tcc8
-rw-r--r--libstdc++-v3/include/tr1/modified_bessel_func.tcc8
-rw-r--r--libstdc++-v3/include/tr1/poly_hermite.tcc8
-rw-r--r--libstdc++-v3/include/tr1/poly_laguerre.tcc8
-rw-r--r--libstdc++-v3/include/tr1/random.h11
-rw-r--r--libstdc++-v3/include/tr1/random.tcc9
-rw-r--r--libstdc++-v3/include/tr1/regex9
-rw-r--r--libstdc++-v3/include/tr1/riemann_zeta.tcc8
-rw-r--r--libstdc++-v3/include/tr1/shared_ptr.h6
-rw-r--r--libstdc++-v3/include/tr1/special_function_util.h8
-rw-r--r--libstdc++-v3/include/tr1/tuple6
-rw-r--r--libstdc++-v3/include/tr1/type_traits6
-rw-r--r--libstdc++-v3/include/tr1/unordered_map.h6
-rw-r--r--libstdc++-v3/include/tr1/unordered_set.h6
-rw-r--r--libstdc++-v3/include/tr1/utility6
-rw-r--r--libstdc++-v3/include/tr2/bool_set6
-rw-r--r--libstdc++-v3/include/tr2/bool_set.tcc6
-rw-r--r--libstdc++-v3/include/tr2/dynamic_bitset6
-rw-r--r--libstdc++-v3/include/tr2/dynamic_bitset.tcc6
-rw-r--r--libstdc++-v3/include/tr2/ratio6
-rw-r--r--libstdc++-v3/include/tr2/type_traits6
-rw-r--r--libstdc++-v3/python/libstdcxx/v6/printers.py12
-rw-r--r--libstdc++-v3/src/c++11/chrono.cc8
-rw-r--r--libstdc++-v3/src/c++11/compatibility-c++0x.cc7
-rw-r--r--libstdc++-v3/src/c++11/compatibility-chrono.cc8
-rw-r--r--libstdc++-v3/src/c++11/cxx11-shim_facets.cc6
-rw-r--r--libstdc++-v3/src/c++11/hashtable_c++0x.cc6
-rw-r--r--libstdc++-v3/src/c++11/placeholders.cc6
-rw-r--r--libstdc++-v3/src/c++11/thread.cc7
-rw-r--r--libstdc++-v3/src/c++98/bitmap_allocator.cc6
-rw-r--r--libstdc++-v3/src/c++98/hashtable_tr1.cc4
-rw-r--r--libstdc++-v3/src/c++98/list.cc8
-rw-r--r--libstdc++-v3/src/shared/hashtable-aux.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/duration/literals/range.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/forward/c_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/forward/f_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc8
-rw-r--r--libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc8
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/pr60037-neg.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_fstream/53984.cc64
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/53984.cc41
-rw-r--r--libstdc++-v3/testsuite/27_io/types/1.cc8
-rw-r--r--libstdc++-v3/testsuite/27_io/types/4.cc29
-rw-r--r--libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc39
-rw-r--r--libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc53
-rw-r--r--lto-plugin/ChangeLog7
-rw-r--r--lto-plugin/lto-plugin.c13
1289 files changed, 47876 insertions, 22647 deletions
diff --git a/ChangeLog b/ChangeLog
index 15eb1c75492..6f9c0fcaad3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2017-07-31 Robin Dapp <rdapp@linux.vnet.ibm.com>
+
+ * MAINTAINERS (write after approval): Add myself.
+
+2017-07-28 Tony Reix <tony.reix@atos.net>
+
+ * configure.ac (target-libffi): Don't disable for AIX.
+ (go): Don't add to unsupported_languages on AIX.
+ (target-libgo): Don't disable for AIX.
+ * configure: Regenerate.
+
2017-07-19 Yury Gribov <tetra2005@gmail.com>
* MAINTAINERS: Add myself.
diff --git a/MAINTAINERS b/MAINTAINERS
index 1b9c5bdcbbe..7effec1287f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -22,7 +22,6 @@ Maintainers
Richard Earnshaw <richard.earnshaw@arm.com>
Richard Biener <rguenther@suse.de>
-Richard Henderson <rth@redhat.com>
Jakub Jelinek <jakub@redhat.com>
Richard Kenner <kenner@nyu.edu>
Jeff Law <law@redhat.com>
@@ -42,7 +41,7 @@ their own patches from other maintainers or reviewers.
aarch64 port Marcus Shawcroft <marcus.shawcroft@arm.com>
aarch64 port Richard Earnshaw <richard.earnshaw@arm.com>
-alpha port Richard Henderson <rth@redhat.com>
+alpha port Richard Henderson <rth@twiddle.net>
arc port Joern Rennecke <gnu@amylaar.uk>
arm port Nick Clifton <nickc@redhat.com>
arm port Richard Earnshaw <richard.earnshaw@arm.com>
@@ -101,7 +100,6 @@ s390 port Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
score port Chen Liqin <liqin.gcc@gmail.com>
sh port Alexandre Oliva <aoliva@redhat.com>
sh port Oleg Endo <olegendo@gcc.gnu.org>
-sparc port Richard Henderson <rth@redhat.com>
sparc port David S. Miller <davem@redhat.com>
sparc port Eric Botcazou <ebotcazou@libertysurf.fr>
spu port Trevor Smigiel <trevor_smigiel@playstation.sony.com>
@@ -141,7 +139,6 @@ cygwin, mingw-w64 Jonathan Yong <10walls@gmail.com>
Language Front Ends Maintainers
C front end/ISO C99 Joseph Myers <joseph@codesourcery.com>
-C front end/ISO C99 Richard Henderson <rth@redhat.com>
Ada front end Arnaud Charlet <charlet@adacore.com>
Ada front end Eric Botcazou <ebotcazou@libertysurf.fr>
BRIG (HSAIL) front end Pekka Jääskeläinen <pekka.jaaskelainen@parmance.com>
@@ -162,7 +159,6 @@ fp-bit Ian Lance Taylor <ian@airs.com>
libdecnumber Ben Elliston <bje@gnu.org>
libgcc Ian Lance Taylor <ian@airs.com>
libgo Ian Lance Taylor <ian@airs.com>
-libgomp Richard Henderson <rth@redhat.com>
libgomp Jakub Jelinek <jakub@redhat.com>
libiberty DJ Delorie <dj@redhat.com>
libiberty Ian Lance Taylor <ian@airs.com>
@@ -356,6 +352,7 @@ Ludovic Courtès <ludo@gnu.org>
Lawrence Crowl <crowl@google.com>
Ian Dall <ian@beware.dropbear.id.au>
David Daney <david.daney@caviumnetworks.com>
+Robin Dapp <rdapp@linux.vnet.ibm.com>
Simon Dardis <simon.dardis@imgtec.com>
Bud Davis <jmdavis@link.com>
Chris Demetriou <cgd@google.com>
@@ -416,6 +413,7 @@ Mark Heffernan <meheff@google.com>
George Helffrich <george@gcc.gnu.org>
Daniel Hellstrom <daniel@gaisler.com>
Fergus Henderson <fjh@cs.mu.oz.au>
+Richard Henderson <rth@twiddle.net>
Stuart Henderson <shenders@gcc.gnu.org>
Matthew Hiller <hiller@redhat.com>
Kazu Hirata <kazu@codesourcery.com>
diff --git a/configure b/configure
index 8559fb6e963..8e5c7ab7969 100755
--- a/configure
+++ b/configure
@@ -3463,11 +3463,8 @@ case "${target}" in
noconfigdirs="$noconfigdirs target-libffi"
;;
powerpc-*-aix*)
- # copied from rs6000-*-* entry
- noconfigdirs="$noconfigdirs target-libffi"
;;
rs6000-*-aix*)
- noconfigdirs="$noconfigdirs target-libffi"
;;
ft32-*-*)
noconfigdirs="$noconfigdirs target-libffi"
@@ -3480,7 +3477,7 @@ esac
# Disable the go frontend on systems where it is known to not work. Please keep
# this in sync with contrib/config-list.mk.
case "${target}" in
-*-*-darwin* | *-*-cygwin* | *-*-mingw* | *-*-aix*)
+*-*-darwin* | *-*-cygwin* | *-*-mingw*)
unsupported_languages="$unsupported_languages go"
;;
esac
@@ -3496,9 +3493,6 @@ if test x$enable_libgo = x; then
*-*-cygwin* | *-*-mingw*)
noconfigdirs="$noconfigdirs target-libgo"
;;
- *-*-aix*)
- noconfigdirs="$noconfigdirs target-libgo"
- ;;
esac
fi
diff --git a/configure.ac b/configure.ac
index 24645d88cf9..173443fc247 100644
--- a/configure.ac
+++ b/configure.ac
@@ -791,11 +791,8 @@ case "${target}" in
noconfigdirs="$noconfigdirs target-libffi"
;;
powerpc-*-aix*)
- # copied from rs6000-*-* entry
- noconfigdirs="$noconfigdirs target-libffi"
;;
rs6000-*-aix*)
- noconfigdirs="$noconfigdirs target-libffi"
;;
ft32-*-*)
noconfigdirs="$noconfigdirs target-libffi"
@@ -808,7 +805,7 @@ esac
# Disable the go frontend on systems where it is known to not work. Please keep
# this in sync with contrib/config-list.mk.
case "${target}" in
-*-*-darwin* | *-*-cygwin* | *-*-mingw* | *-*-aix*)
+*-*-darwin* | *-*-cygwin* | *-*-mingw*)
unsupported_languages="$unsupported_languages go"
;;
esac
@@ -824,9 +821,6 @@ if test x$enable_libgo = x; then
*-*-cygwin* | *-*-mingw*)
noconfigdirs="$noconfigdirs target-libgo"
;;
- *-*-aix*)
- noconfigdirs="$noconfigdirs target-libgo"
- ;;
esac
fi
diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index 35bd9e2f232..5fa6e032be4 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,3 +1,12 @@
+2017-08-02 Yury Gribov <tetra2005@gmail.com>
+
+ * mklog: Added new implementation.
+
+2017-08-02 Yury Gribov <tetra2005@gmail.com>
+
+ * mklog: Rename to ...
+ * mklog.pl: this.
+
2017-07-17 Yury Gribov <tetra2005@gmail.com>
* mklog: Fix extraction of changed file name.
diff --git a/contrib/mklog b/contrib/mklog
index ff20cf1ba0f..0622d2e2e3d 100755
--- a/contrib/mklog
+++ b/contrib/mklog
@@ -1,5 +1,6 @@
-#!/usr/bin/perl
-# Copyright (C) 2012-2017 Free Software Foundation, Inc.
+#!/usr/bin/python
+
+# Copyright (C) 2017 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
@@ -20,343 +21,450 @@
# This script parses a .diff file generated with 'diff -up' or 'diff -cp'
# and adds a skeleton ChangeLog file to the file. It does not try to be
-# very smart when parsing function names, but it produces a reasonable
+# too smart when parsing function names, but it produces a reasonable
# approximation.
#
-# Author: Diego Novillo <dnovillo@google.com> and
-# Cary Coutant <ccoutant@google.com>
-
-use File::Temp;
-use File::Copy qw(cp mv);
-
-$date = `date +%Y-%m-%d`; chop ($date);
-
-$dot_mklog_format_msg =
- "The .mklog format is:\n"
- . "NAME = ...\n"
- . "EMAIL = ...\n";
-
-# Create a .mklog to reflect your profile, if necessary.
-my $conf = "$ENV{HOME}/.mklog";
-if (-f "$conf") {
- open (CONF, "$conf")
- or die "Could not open file '$conf' for reading: $!\n";
- while (<CONF>) {
- if (m/^\s*NAME\s*=\s*(.*?)\s*$/) {
- $name = $1;
- } elsif (m/^\s*EMAIL\s*=\s*(.*?)\s*$/) {
- $addr = $1;
- }
- }
- if (!($name && $addr)) {
- die "Could not read .mklog settings.\n"
- . $dot_mklog_format_msg;
- }
-} else {
- $name = `git config user.name`;
- chomp($name);
- $addr = `git config user.email`;
- chomp($addr);
-
- if (!($name && $addr)) {
- die "Could not read git user.name and user.email settings.\n"
- . "Please add missing git settings, or create a .mklog file in"
- . " $ENV{HOME}.\n"
- . $dot_mklog_format_msg;
- }
-}
-
-$gcc_root = $0;
-$gcc_root =~ s/[^\\\/]+$/../;
-
-#-----------------------------------------------------------------------------
-# Program starts here. You should not need to edit anything below this
-# line.
-#-----------------------------------------------------------------------------
-$inline = 0;
-if ($#ARGV == 1 && ("$ARGV[0]" eq "-i" || "$ARGV[0]" eq "--inline")) {
- shift;
- $inline = 1;
-} elsif ($#ARGV != 0) {
- $prog = `basename $0`; chop ($prog);
- print <<EOF;
-usage: $prog [ -i | --inline ] file.diff
-
-Generate ChangeLog template for file.diff.
-It assumes that patch has been created with -up or -cp.
-When -i is used, the ChangeLog template is followed by the contents of
-file.diff.
-When file.diff is -, read standard input.
-When -i is used and file.diff is not -, it writes to file.diff, otherwise it
-writes to stdout.
-EOF
- exit 1;
-}
-
-$diff = $ARGV[0];
-$dir = `dirname $diff`; chop ($dir);
-$basename = `basename $diff`; chop ($basename);
-$hdrline = "$date $name <$addr>";
-
-sub get_clname ($) {
- return ('ChangeLog', $_[0]) if ($_[0] !~ /[\/\\]/);
-
- my $dirname = $_[0];
- while ($dirname) {
- my $clname = "$dirname/ChangeLog";
- if (-f "$gcc_root/$clname" || -f "$clname") {
- my $relname = substr ($_[0], length ($dirname) + 1);
- return ($clname, $relname);
- } else {
- $dirname =~ s/[\/\\]?[^\/\\]*$//;
- }
- }
-
- return ('Unknown ChangeLog', $_[0]);
-}
-
-sub remove_suffixes ($) {
- my $filename = $_[0];
- $filename =~ s/^[ab]\///;
- $filename =~ s/\.jj$//;
- return $filename;
-}
-
-sub is_context_hunk_start {
- return @_[0] =~ /^\*\*\*\*\*\** ([a-zA-Z0-9_].*)/;
-}
-
-sub is_unified_hunk_start {
- return @_[0] =~ /^@@ .* @@ ([a-zA-Z0-9_].*)/;
-}
-
-# Check if line is a top-level declaration.
-sub is_top_level {
- my ($function, $is_context_diff) = (@_);
- if (is_unified_hunk_start ($function)
- || is_context_hunk_start ($function)) {
- return 1;
- }
- if ($is_context_diff) {
- $function =~ s/^..//;
- } else {
- $function =~ s/^.//;
- }
- return $function && $function !~ /^[\s{#]/;
-}
-
-# Read contents of .diff file
-open (DFILE, $diff) or die "Could not open file $diff for reading";
-chomp (my @diff_lines = <DFILE>);
-close (DFILE);
-
-# Array diff_lines is modified by the log generation, so save a copy in
-# orig_diff_lines if needed.
-if ($inline) {
- @orig_diff_lines = @diff_lines;
-}
-
-# For every file in the .diff print all the function names in ChangeLog
-# format.
-%cl_entries = ();
-$change_msg = undef;
-$look_for_funs = 0;
-$clname = get_clname('');
-$line_idx = 0;
-foreach (@diff_lines) {
- # Stop processing functions if we found a new file.
- # Remember both left and right names because one may be /dev/null.
- # Don't be fooled by line markers in case of context diff.
- if (!/\*\*\*$/ && /^[+*][+*][+*] +(\S+)/) {
- $left = remove_suffixes ($1);
- $look_for_funs = 0;
- }
- if (!/---$/ && /^--- +(\S+)?/) {
- $right = remove_suffixes ($1);
- $look_for_funs = 0;
- }
-
- # Check if the body of diff started.
- # We should now have both left and right name,
- # so we can decide filename.
-
- if ($left && (/^\*{15}/ || /^@@ /)) {
- # If we have not seen any function names in the previous file (ie,
- # $change_msg is empty), we just write out a ':' before starting the next
- # file.
- if ($clname) {
- $cl_entries{$clname} .= $change_msg ? "$change_msg" : ":\n";
- }
-
- if ($left eq $right) {
- $filename = $left;
- } elsif($left eq '/dev/null') {
- $filename = $right;
- } elsif($right eq '/dev/null') {
- $filename = $left;
- } else {
- my @ldirs = split /[\/\\]/, $left;
- my @rdirs = split /[\/\\]/, $right;
-
- $filename = '';
- while ((my $l = pop @ldirs) && (my $r = pop @rdirs)) {
- last if ($l ne $r);
- $filename = "$l/$filename";
- }
- $filename =~ s/\/$//;
-
- if (!$filename) {
- print STDERR "Error: failed to parse diff for $left and $right\n";
- exit 1;
- }
- }
- $left = $right = undef;
- ($clname, $relname) = get_clname ($filename);
- $cl_entries{$clname} .= "\t* $relname";
- $change_msg = '';
- $look_for_funs = $filename =~ '\.(c|cpp|C|cc|h|inc|def)$';
- }
-
+# This is a straightforward adaptation of original Perl script.
+#
+# Author: Yury Gribov <tetra2005@gmail.com>
+
+import sys
+import re
+import os.path
+import os
+import getopt
+import tempfile
+import time
+import shutil
+from subprocess import Popen, PIPE
+
+me = os.path.basename(sys.argv[0])
+
+def error(msg):
+ sys.stderr.write("%s: error: %s\n" % (me, msg))
+ sys.exit(1)
+
+def warn(msg):
+ sys.stderr.write("%s: warning: %s\n" % (me, msg))
+
+class RegexCache(object):
+ """Simple trick to Perl-like combined match-and-bind."""
+
+ def __init__(self):
+ self.last_match = None
+
+ def match(self, p, s):
+ self.last_match = re.match(p, s) if isinstance(p, str) else p.match(s)
+ return self.last_match
+
+ def search(self, p, s):
+ self.last_match = re.search(p, s) if isinstance(p, str) else p.search(s)
+ return self.last_match
+
+ def group(self, n):
+ return self.last_match.group(n)
+
+cache = RegexCache()
+
+def print_help_and_exit():
+ print """\
+Usage: %s [-i | --inline] [PATCH]
+Generate ChangeLog template for PATCH.
+PATCH must be generated using diff(1)'s -up or -cp options
+(or their equivalent in Subversion/git).
+
+When PATCH is - or missing, read standard input.
+
+When -i is used, prepends ChangeLog to PATCH.
+If PATCH is not stdin, modifies PATCH in-place, otherwise writes
+to stdout.
+""" % me
+ sys.exit(1)
+
+def run(cmd, die_on_error):
+ """Simple wrapper for Popen."""
+ proc = Popen(cmd.split(' '), stderr = PIPE, stdout = PIPE)
+ (out, err) = proc.communicate()
+ if die_on_error and proc.returncode != 0:
+ error("`%s` failed:\n" % (cmd, proc.stderr))
+ return proc.returncode, out, err
+
+def read_user_info():
+ dot_mklog_format_msg = """\
+The .mklog format is:
+NAME = ...
+EMAIL = ...
+"""
+
+ # First try to read .mklog config
+ mklog_conf = os.path.expanduser('~/.mklog')
+ if os.path.exists(mklog_conf):
+ attrs = {}
+ f = open(mklog_conf, 'rb')
+ for s in f:
+ if cache.match(r'^\s*([a-zA-Z0-9_]+)\s*=\s*(.*?)\s*$', s):
+ attrs[cache.group(1)] = cache.group(2)
+ f.close()
+ if 'NAME' not in attrs:
+ error("'NAME' not present in .mklog")
+ if 'EMAIL' not in attrs:
+ error("'EMAIL' not present in .mklog")
+ return attrs['NAME'], attrs['EMAIL']
+
+ # Otherwise go with git
+
+ rc1, name, _ = run('git config user.name', False)
+ name = name.rstrip()
+ rc2, email, _ = run('git config user.email', False)
+ email = email.rstrip()
+
+ if rc1 != 0 or rc2 != 0:
+ error("""\
+Could not read git user.name and user.email settings.
+Please add missing git settings, or create a %s.
+""" % mklog_conf)
+
+ return name, email
+
+def get_parent_changelog (s):
+ """See which ChangeLog this file change should go to."""
+
+ if s.find('\\') == -1 and s.find('/') == -1:
+ return "ChangeLog", s
+
+ gcc_root = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
+
+ d = s
+ while d:
+ clname = d + "/ChangeLog"
+ if os.path.exists(gcc_root + '/' + clname) or os.path.exists(clname):
+ relname = s[len(d)+1:]
+ return clname, relname
+ d, _ = os.path.split(d)
+
+ return "Unknown ChangeLog", s
+
+class FileDiff:
+ """Class to represent changes in a single file."""
+
+ def __init__(self, filename):
+ self.filename = filename
+ self.hunks = []
+ self.clname, self.relname = get_parent_changelog(filename);
+
+ def dump(self):
+ print "Diff for %s:\n ChangeLog = %s\n rel name = %s\n" % (self.filename, self.clname, self.relname)
+ for i, h in enumerate(self.hunks):
+ print "Next hunk %d:" % i
+ h.dump()
+
+class Hunk:
+ """Class to represent a single hunk of changes."""
+
+ def __init__(self, hdr):
+ self.hdr = hdr
+ self.lines = []
+ self.ctx_diff = is_ctx_hunk_start(hdr)
+
+ def dump(self):
+ print '%s' % self.hdr
+ print '%s' % '\n'.join(self.lines)
+
+ def is_file_addition(self):
+ """Does hunk describe addition of file?"""
+ if self.ctx_diff:
+ for line in self.lines:
+ if re.match(r'^\*\*\* 0 \*\*\*\*', line):
+ return True
+ else:
+ return re.match(r'^@@ -0,0 \+1.* @@', self.hdr)
+
+ def is_file_removal(self):
+ """Does hunk describe removal of file?"""
+ if self.ctx_diff:
+ for line in self.lines:
+ if re.match(r'^--- 0 ----', line):
+ return True
+ else:
+ return re.match(r'^@@ -1.* \+0,0 @@', self.hdr)
+
+def is_file_diff_start(s):
+ # Don't be fooled by context diff line markers:
+ # *** 385,391 ****
+ return ((s.startswith('***') and not s.endswith('***'))
+ or (s.startswith('---') and not s.endswith('---')))
+
+def is_ctx_hunk_start(s):
+ return re.match(r'^\*\*\*\*\*\**', s)
+
+def is_uni_hunk_start(s):
+ return re.match(r'^@@ .* @@', s)
+
+def is_hunk_start(s):
+ return is_ctx_hunk_start(s) or is_uni_hunk_start(s)
+
+def remove_suffixes(s):
+ if s.startswith('a/') or s.startswith('b/'):
+ s = s[2:]
+ if s.endswith('.jj'):
+ s = s[:-3]
+ return s
+
+def find_changed_funs(hunk):
+ """Find all functions touched by hunk. We don't try too hard
+ to find good matches. This should return a superset
+ of the actual set of functions in the .diff file.
+ """
+
+ fns = []
+ fn = None
+
+ if (cache.match(r'^\*\*\*\*\*\** ([a-zA-Z0-9_].*)', hunk.hdr)
+ or cache.match(r'^@@ .* @@ ([a-zA-Z0-9_].*)', hunk.hdr)):
+ fn = cache.group(1)
+
+ for i, line in enumerate(hunk.lines):
# Context diffs have extra whitespace after first char;
# remove it to make matching easier.
- if ($is_context_diff) {
- s/^([-+! ]) /\1/;
- }
-
- # Remember the last line in a diff block that might start
- # a new function.
- if (/^[-+! ]([a-zA-Z0-9_].*)/) {
- $save_fn = $1;
- }
-
- # Check if file is newly added.
- # Two patterns: for context and unified diff.
- if (/^\*\*\* 0 \*\*\*\*/
- || /^@@ -0,0 \+1.* @@/) {
- $change_msg = $filename =~ /testsuite.*(?<!\.exp)$/ ? ": New test.\n" : ": New file.\n";
- $look_for_funs = 0;
- }
-
- # Check if file was removed.
- # Two patterns: for context and unified diff.
- if (/^--- 0 ----/
- || /^@@ -1.* \+0,0 @@/) {
- $change_msg = ": Remove.\n";
- $look_for_funs = 0;
- }
-
- if (is_unified_hunk_start ($diff_lines[$line_idx])) {
- $is_context_diff = 0;
- }
- elsif (is_context_hunk_start ($diff_lines[$line_idx])) {
- $is_context_diff = 1;
- }
-
- # If we find a new function, print it in brackets. Special case if
- # this is the first function in a file.
- #
- # Note that we don't try too hard to find good matches. This should
- # return a superset of the actual set of functions in the .diff file.
- #
- # The first pattern works with context diff files (diff -c). The
- # second pattern works with unified diff files (diff -u).
- #
- # The third pattern looks for the starts of functions or classes
- # within a diff block both for context and unified diff files.
- if ($look_for_funs
- && (/^\*\*\*\*\*\** ([a-zA-Z0-9_].*)/
- || /^@@ .* @@ ([a-zA-Z0-9_].*)/
- || /^[-+! ](\{)/))
- {
- $_ = $1;
- my $fn;
- if (/^\{/) {
- # Beginning of a new function.
- $_ = $save_fn;
- } else {
- $save_fn = "";
- }
- if (/;$/) {
- # No usable function name found.
- } elsif (/^((class|struct|union|enum) [a-zA-Z0-9_]+)/) {
- # Discard stuff after the class/struct/etc. tag.
- $fn = $1;
- } elsif (/([a-zA-Z0-9_][^(]*)\(/) {
- # Discard template and function parameters.
- $fn = $1;
- 1 while ($fn =~ s/<[^<>]*>//);
- $fn =~ s/[ \t]*$//;
- }
- # Check is function really modified
- $no_real_change = 0;
- $idx = $line_idx;
- # Skip line info in context diffs.
- while ($idx <= $#diff_lines && $is_context_diff
- && $diff_lines[$idx + 1] =~ /^[-\*]{3} [0-9]/) {
- ++$idx;
- }
- # Check all lines till the first change
- # for the presence of really changed function
- do {
- ++$idx;
- $no_real_change = $idx > $#diff_lines
- || is_top_level ($diff_lines[$idx], $is_context_diff);
- } while (!$no_real_change && ($diff_lines[$idx] !~ /^[-+!]/));
- if ($fn && !$seen_names{$fn} && !$no_real_change) {
- # If this is the first function in the file, we display it next
- # to the filename, so we need an extra space before the opening
- # brace.
- if (!$change_msg) {
- $change_msg .= " ";
- } else {
- $change_msg .= "\t";
- }
-
- $change_msg .= "($fn):\n";
- $seen_names{$fn} = 1;
- }
- }
- $line_idx++;
-}
-
-# If we have not seen any function names (ie, $change_msg is empty), we just
-# write out a ':'. This happens when there is only one file with no
-# functions.
-$cl_entries{$clname} .= $change_msg ? "$change_msg\n" : ":\n";
-
-if ($inline && $diff ne "-") {
- # Get a temp filename, rather than an open filehandle, because we use
- # the open to truncate.
- $tmp = mktemp("tmp.XXXXXXXX") or die "Could not create temp file: $!";
-
- # Copy the permissions to the temp file (in File::Copy module version
- # 2.15 and later).
- cp $diff, $tmp or die "Could not copy patch file to temp file: $!";
-
- # Open the temp file, clearing contents.
- open (OUTPUTFILE, '>', $tmp) or die "Could not open temp file: $!";
-} else {
- *OUTPUTFILE = STDOUT;
-}
-
-# Print the log
-foreach my $clname (keys %cl_entries) {
- print OUTPUTFILE "$clname:\n\n$hdrline\n\n$cl_entries{$clname}\n";
-}
-
-if ($inline) {
- # Append the patch to the log
- foreach (@orig_diff_lines) {
- print OUTPUTFILE "$_\n";
- }
-}
-
-if ($inline && $diff ne "-") {
- # Close $tmp
- close(OUTPUTFILE);
-
- # Write new contents to $diff atomically
- mv $tmp, $diff or die "Could not move temp file to patch file: $!";
-}
-
-exit 0;
+ if hunk.ctx_diff:
+ line = re.sub(r'^([-+! ]) ', r'\1', line)
+
+ # Remember most recent identifier in hunk
+ # that might be a function name.
+ if cache.match(r'^[-+! ]([a-zA-Z0-9_#].*)', line):
+ fn = cache.group(1)
+
+ change = line and re.match(r'^[-+!][^-]', line)
+
+ # Top-level comment can not belong to function
+ if re.match(r'^[-+! ]\/\*', line):
+ fn = None
+
+ if change and fn:
+ if cache.match(r'^((class|struct|union|enum)\s+[a-zA-Z0-9_]+)', fn):
+ # Struct declaration
+ fn = cache.group(1)
+ elif cache.search(r'#\s*define\s+([a-zA-Z0-9_]+)', fn):
+ # Macro definition
+ fn = cache.group(1)
+ elif cache.match('^DEF[A-Z0-9_]+\s*\(([a-zA-Z0-9_]+)', fn):
+ # Supermacro
+ fn = cache.group(1)
+ elif cache.search(r'([a-zA-Z_][^()\s]*)\s*\([^*]', fn):
+ # Discard template and function parameters.
+ fn = cache.group(1)
+ fn = re.sub(r'<[^<>]*>', '', fn)
+ fn = fn.rstrip()
+ else:
+ fn = None
+
+ if fn and fn not in fns: # Avoid dups
+ fns.append(fn)
+
+ fn = None
+
+ return fns
+
+def parse_patch(contents):
+ """Parse patch contents to a sequence of FileDiffs."""
+
+ diffs = []
+
+ lines = contents.split('\n')
+
+ i = 0
+ while i < len(lines):
+ line = lines[i]
+
+ # Diff headers look like
+ # --- a/gcc/tree.c
+ # +++ b/gcc/tree.c
+ # or
+ # *** gcc/cfgexpand.c 2013-12-25 20:07:24.800350058 +0400
+ # --- gcc/cfgexpand.c 2013-12-25 20:06:30.612350178 +0400
+
+ if is_file_diff_start(line):
+ left = re.split(r'\s+', line)[1]
+ else:
+ i += 1
+ continue
+
+ left = remove_suffixes(left);
+
+ i += 1
+ line = lines[i]
+
+ if not cache.match(r'^[+-][+-][+-] +(\S+)', line):
+ error("expected filename in line %d" % i)
+ right = remove_suffixes(cache.group(1));
+
+ # Extract real file name from left and right names.
+ filename = None
+ if left == right:
+ filename = left
+ elif left == '/dev/null':
+ filename = right;
+ elif right == '/dev/null':
+ filename = left;
+ else:
+ comps = []
+ while left and right:
+ left, l = os.path.split(left)
+ right, r = os.path.split(right)
+ if l != r:
+ break
+ comps.append(l)
+
+ if not comps:
+ error("failed to extract common name for %s and %s" % (left, right))
+
+ comps.reverse()
+ filename = '/'.join(comps)
+
+ d = FileDiff(filename)
+ diffs.append(d)
+
+ # Collect hunks for current file.
+ hunk = None
+ i += 1
+ while i < len(lines):
+ line = lines[i]
+
+ # Create new hunk when we see hunk header
+ if is_hunk_start(line):
+ if hunk is not None:
+ d.hunks.append(hunk)
+ hunk = Hunk(line)
+ i += 1
+ continue
+
+ # Stop when we reach next diff
+ if (is_file_diff_start(line)
+ or line.startswith('diff ')
+ or line.startswith('Index: ')):
+ i -= 1
+ break
+
+ if hunk is not None:
+ hunk.lines.append(line)
+ i += 1
+
+ d.hunks.append(hunk)
+
+ return diffs
+
+def main():
+ name, email = read_user_info()
+
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], 'hiv', ['help', 'verbose', 'inline'])
+ except getopt.GetoptError, err:
+ error(str(err))
+
+ inline = False
+ verbose = 0
+
+ for o, a in opts:
+ if o in ('-h', '--help'):
+ print_help_and_exit()
+ elif o in ('-i', '--inline'):
+ inline = True
+ elif o in ('-v', '--verbose'):
+ verbose += 1
+ else:
+ assert False, "unhandled option"
+
+ if len(args) == 0:
+ args = ['-']
+
+ if len(args) == 1 and args[0] == '-':
+ input = sys.stdin
+ elif len(args) == 1:
+ input = open(args[0], 'rb')
+ else:
+ error("too many arguments; for more details run with -h")
+
+ contents = input.read()
+ diffs = parse_patch(contents)
+
+ if verbose:
+ print "Parse results:"
+ for d in diffs:
+ d.dump()
+
+ # Generate template ChangeLog.
+
+ logs = {}
+ for d in diffs:
+ log_name = d.clname
+
+ logs.setdefault(log_name, '')
+ logs[log_name] += '\t* %s' % d.relname
+
+ change_msg = ''
+
+ # Check if file was removed or added.
+ # Two patterns for context and unified diff.
+ if len(d.hunks) == 1:
+ hunk0 = d.hunks[0]
+ if hunk0.is_file_addition():
+ if re.search(r'testsuite.*(?<!\.exp)$', d.filename):
+ change_msg = ': New test.\n'
+ else:
+ change_msg = ": New file.\n"
+ elif hunk0.is_file_removal():
+ change_msg = ": Remove.\n"
+
+ _, ext = os.path.splitext(d.filename)
+ if not change_msg and ext in ['.c', '.cpp', '.C', '.cc', '.h', '.inc', '.def']:
+ fns = []
+ for hunk in d.hunks:
+ for fn in find_changed_funs(hunk):
+ if fn not in fns:
+ fns.append(fn)
+
+ for fn in fns:
+ if change_msg:
+ change_msg += "\t(%s):\n" % fn
+ else:
+ change_msg = " (%s):\n" % fn
+
+ logs[log_name] += change_msg if change_msg else ":\n"
+
+ if inline and args[0] != '-':
+ # Get a temp filename, rather than an open filehandle, because we use
+ # the open to truncate.
+ fd, tmp = tempfile.mkstemp("tmp.XXXXXXXX")
+ os.close(fd)
+
+ # Copy permissions to temp file
+ # (old Pythons do not support shutil.copymode)
+ shutil.copymode(args[0], tmp)
+
+ # Open the temp file, clearing contents.
+ out = open(tmp, 'wb')
+ else:
+ tmp = None
+ out = sys.stdout
+
+ # Print log
+ date = time.strftime('%Y-%m-%d')
+ for log_name, msg in sorted(logs.iteritems()):
+ out.write("""\
+%s:
+
+%s %s <%s>
+
+%s\n""" % (log_name, date, name, email, msg))
+
+ if inline:
+ # Append patch body
+ out.write(contents)
+
+ if args[0] != '-':
+ # Write new contents atomically
+ out.close()
+ shutil.move(tmp, args[0])
+
+if __name__ == '__main__':
+ main()
diff --git a/contrib/mklog.pl b/contrib/mklog.pl
new file mode 100755
index 00000000000..ff20cf1ba0f
--- /dev/null
+++ b/contrib/mklog.pl
@@ -0,0 +1,362 @@
+#!/usr/bin/perl
+# Copyright (C) 2012-2017 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING. If not, write to
+# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+# This script parses a .diff file generated with 'diff -up' or 'diff -cp'
+# and adds a skeleton ChangeLog file to the file. It does not try to be
+# very smart when parsing function names, but it produces a reasonable
+# approximation.
+#
+# Author: Diego Novillo <dnovillo@google.com> and
+# Cary Coutant <ccoutant@google.com>
+
+use File::Temp;
+use File::Copy qw(cp mv);
+
+$date = `date +%Y-%m-%d`; chop ($date);
+
+$dot_mklog_format_msg =
+ "The .mklog format is:\n"
+ . "NAME = ...\n"
+ . "EMAIL = ...\n";
+
+# Create a .mklog to reflect your profile, if necessary.
+my $conf = "$ENV{HOME}/.mklog";
+if (-f "$conf") {
+ open (CONF, "$conf")
+ or die "Could not open file '$conf' for reading: $!\n";
+ while (<CONF>) {
+ if (m/^\s*NAME\s*=\s*(.*?)\s*$/) {
+ $name = $1;
+ } elsif (m/^\s*EMAIL\s*=\s*(.*?)\s*$/) {
+ $addr = $1;
+ }
+ }
+ if (!($name && $addr)) {
+ die "Could not read .mklog settings.\n"
+ . $dot_mklog_format_msg;
+ }
+} else {
+ $name = `git config user.name`;
+ chomp($name);
+ $addr = `git config user.email`;
+ chomp($addr);
+
+ if (!($name && $addr)) {
+ die "Could not read git user.name and user.email settings.\n"
+ . "Please add missing git settings, or create a .mklog file in"
+ . " $ENV{HOME}.\n"
+ . $dot_mklog_format_msg;
+ }
+}
+
+$gcc_root = $0;
+$gcc_root =~ s/[^\\\/]+$/../;
+
+#-----------------------------------------------------------------------------
+# Program starts here. You should not need to edit anything below this
+# line.
+#-----------------------------------------------------------------------------
+$inline = 0;
+if ($#ARGV == 1 && ("$ARGV[0]" eq "-i" || "$ARGV[0]" eq "--inline")) {
+ shift;
+ $inline = 1;
+} elsif ($#ARGV != 0) {
+ $prog = `basename $0`; chop ($prog);
+ print <<EOF;
+usage: $prog [ -i | --inline ] file.diff
+
+Generate ChangeLog template for file.diff.
+It assumes that patch has been created with -up or -cp.
+When -i is used, the ChangeLog template is followed by the contents of
+file.diff.
+When file.diff is -, read standard input.
+When -i is used and file.diff is not -, it writes to file.diff, otherwise it
+writes to stdout.
+EOF
+ exit 1;
+}
+
+$diff = $ARGV[0];
+$dir = `dirname $diff`; chop ($dir);
+$basename = `basename $diff`; chop ($basename);
+$hdrline = "$date $name <$addr>";
+
+sub get_clname ($) {
+ return ('ChangeLog', $_[0]) if ($_[0] !~ /[\/\\]/);
+
+ my $dirname = $_[0];
+ while ($dirname) {
+ my $clname = "$dirname/ChangeLog";
+ if (-f "$gcc_root/$clname" || -f "$clname") {
+ my $relname = substr ($_[0], length ($dirname) + 1);
+ return ($clname, $relname);
+ } else {
+ $dirname =~ s/[\/\\]?[^\/\\]*$//;
+ }
+ }
+
+ return ('Unknown ChangeLog', $_[0]);
+}
+
+sub remove_suffixes ($) {
+ my $filename = $_[0];
+ $filename =~ s/^[ab]\///;
+ $filename =~ s/\.jj$//;
+ return $filename;
+}
+
+sub is_context_hunk_start {
+ return @_[0] =~ /^\*\*\*\*\*\** ([a-zA-Z0-9_].*)/;
+}
+
+sub is_unified_hunk_start {
+ return @_[0] =~ /^@@ .* @@ ([a-zA-Z0-9_].*)/;
+}
+
+# Check if line is a top-level declaration.
+sub is_top_level {
+ my ($function, $is_context_diff) = (@_);
+ if (is_unified_hunk_start ($function)
+ || is_context_hunk_start ($function)) {
+ return 1;
+ }
+ if ($is_context_diff) {
+ $function =~ s/^..//;
+ } else {
+ $function =~ s/^.//;
+ }
+ return $function && $function !~ /^[\s{#]/;
+}
+
+# Read contents of .diff file
+open (DFILE, $diff) or die "Could not open file $diff for reading";
+chomp (my @diff_lines = <DFILE>);
+close (DFILE);
+
+# Array diff_lines is modified by the log generation, so save a copy in
+# orig_diff_lines if needed.
+if ($inline) {
+ @orig_diff_lines = @diff_lines;
+}
+
+# For every file in the .diff print all the function names in ChangeLog
+# format.
+%cl_entries = ();
+$change_msg = undef;
+$look_for_funs = 0;
+$clname = get_clname('');
+$line_idx = 0;
+foreach (@diff_lines) {
+ # Stop processing functions if we found a new file.
+ # Remember both left and right names because one may be /dev/null.
+ # Don't be fooled by line markers in case of context diff.
+ if (!/\*\*\*$/ && /^[+*][+*][+*] +(\S+)/) {
+ $left = remove_suffixes ($1);
+ $look_for_funs = 0;
+ }
+ if (!/---$/ && /^--- +(\S+)?/) {
+ $right = remove_suffixes ($1);
+ $look_for_funs = 0;
+ }
+
+ # Check if the body of diff started.
+ # We should now have both left and right name,
+ # so we can decide filename.
+
+ if ($left && (/^\*{15}/ || /^@@ /)) {
+ # If we have not seen any function names in the previous file (ie,
+ # $change_msg is empty), we just write out a ':' before starting the next
+ # file.
+ if ($clname) {
+ $cl_entries{$clname} .= $change_msg ? "$change_msg" : ":\n";
+ }
+
+ if ($left eq $right) {
+ $filename = $left;
+ } elsif($left eq '/dev/null') {
+ $filename = $right;
+ } elsif($right eq '/dev/null') {
+ $filename = $left;
+ } else {
+ my @ldirs = split /[\/\\]/, $left;
+ my @rdirs = split /[\/\\]/, $right;
+
+ $filename = '';
+ while ((my $l = pop @ldirs) && (my $r = pop @rdirs)) {
+ last if ($l ne $r);
+ $filename = "$l/$filename";
+ }
+ $filename =~ s/\/$//;
+
+ if (!$filename) {
+ print STDERR "Error: failed to parse diff for $left and $right\n";
+ exit 1;
+ }
+ }
+ $left = $right = undef;
+ ($clname, $relname) = get_clname ($filename);
+ $cl_entries{$clname} .= "\t* $relname";
+ $change_msg = '';
+ $look_for_funs = $filename =~ '\.(c|cpp|C|cc|h|inc|def)$';
+ }
+
+ # Context diffs have extra whitespace after first char;
+ # remove it to make matching easier.
+ if ($is_context_diff) {
+ s/^([-+! ]) /\1/;
+ }
+
+ # Remember the last line in a diff block that might start
+ # a new function.
+ if (/^[-+! ]([a-zA-Z0-9_].*)/) {
+ $save_fn = $1;
+ }
+
+ # Check if file is newly added.
+ # Two patterns: for context and unified diff.
+ if (/^\*\*\* 0 \*\*\*\*/
+ || /^@@ -0,0 \+1.* @@/) {
+ $change_msg = $filename =~ /testsuite.*(?<!\.exp)$/ ? ": New test.\n" : ": New file.\n";
+ $look_for_funs = 0;
+ }
+
+ # Check if file was removed.
+ # Two patterns: for context and unified diff.
+ if (/^--- 0 ----/
+ || /^@@ -1.* \+0,0 @@/) {
+ $change_msg = ": Remove.\n";
+ $look_for_funs = 0;
+ }
+
+ if (is_unified_hunk_start ($diff_lines[$line_idx])) {
+ $is_context_diff = 0;
+ }
+ elsif (is_context_hunk_start ($diff_lines[$line_idx])) {
+ $is_context_diff = 1;
+ }
+
+ # If we find a new function, print it in brackets. Special case if
+ # this is the first function in a file.
+ #
+ # Note that we don't try too hard to find good matches. This should
+ # return a superset of the actual set of functions in the .diff file.
+ #
+ # The first pattern works with context diff files (diff -c). The
+ # second pattern works with unified diff files (diff -u).
+ #
+ # The third pattern looks for the starts of functions or classes
+ # within a diff block both for context and unified diff files.
+ if ($look_for_funs
+ && (/^\*\*\*\*\*\** ([a-zA-Z0-9_].*)/
+ || /^@@ .* @@ ([a-zA-Z0-9_].*)/
+ || /^[-+! ](\{)/))
+ {
+ $_ = $1;
+ my $fn;
+ if (/^\{/) {
+ # Beginning of a new function.
+ $_ = $save_fn;
+ } else {
+ $save_fn = "";
+ }
+ if (/;$/) {
+ # No usable function name found.
+ } elsif (/^((class|struct|union|enum) [a-zA-Z0-9_]+)/) {
+ # Discard stuff after the class/struct/etc. tag.
+ $fn = $1;
+ } elsif (/([a-zA-Z0-9_][^(]*)\(/) {
+ # Discard template and function parameters.
+ $fn = $1;
+ 1 while ($fn =~ s/<[^<>]*>//);
+ $fn =~ s/[ \t]*$//;
+ }
+ # Check is function really modified
+ $no_real_change = 0;
+ $idx = $line_idx;
+ # Skip line info in context diffs.
+ while ($idx <= $#diff_lines && $is_context_diff
+ && $diff_lines[$idx + 1] =~ /^[-\*]{3} [0-9]/) {
+ ++$idx;
+ }
+ # Check all lines till the first change
+ # for the presence of really changed function
+ do {
+ ++$idx;
+ $no_real_change = $idx > $#diff_lines
+ || is_top_level ($diff_lines[$idx], $is_context_diff);
+ } while (!$no_real_change && ($diff_lines[$idx] !~ /^[-+!]/));
+ if ($fn && !$seen_names{$fn} && !$no_real_change) {
+ # If this is the first function in the file, we display it next
+ # to the filename, so we need an extra space before the opening
+ # brace.
+ if (!$change_msg) {
+ $change_msg .= " ";
+ } else {
+ $change_msg .= "\t";
+ }
+
+ $change_msg .= "($fn):\n";
+ $seen_names{$fn} = 1;
+ }
+ }
+ $line_idx++;
+}
+
+# If we have not seen any function names (ie, $change_msg is empty), we just
+# write out a ':'. This happens when there is only one file with no
+# functions.
+$cl_entries{$clname} .= $change_msg ? "$change_msg\n" : ":\n";
+
+if ($inline && $diff ne "-") {
+ # Get a temp filename, rather than an open filehandle, because we use
+ # the open to truncate.
+ $tmp = mktemp("tmp.XXXXXXXX") or die "Could not create temp file: $!";
+
+ # Copy the permissions to the temp file (in File::Copy module version
+ # 2.15 and later).
+ cp $diff, $tmp or die "Could not copy patch file to temp file: $!";
+
+ # Open the temp file, clearing contents.
+ open (OUTPUTFILE, '>', $tmp) or die "Could not open temp file: $!";
+} else {
+ *OUTPUTFILE = STDOUT;
+}
+
+# Print the log
+foreach my $clname (keys %cl_entries) {
+ print OUTPUTFILE "$clname:\n\n$hdrline\n\n$cl_entries{$clname}\n";
+}
+
+if ($inline) {
+ # Append the patch to the log
+ foreach (@orig_diff_lines) {
+ print OUTPUTFILE "$_\n";
+ }
+}
+
+if ($inline && $diff ne "-") {
+ # Close $tmp
+ close(OUTPUTFILE);
+
+ # Write new contents to $diff atomically
+ mv $tmp, $diff or die "Could not move temp file to patch file: $!";
+}
+
+exit 0;
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d489138e2c2..bbe66587669 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,2379 @@
-2017-07-18 Jan Hubicka <hubicka@ucw.cz>
+2017-08-12 Pierre-Marie de Rodat <derodat@adacore.com>
+
+ PR ada/79542
+ * dwarf2out.c (modified_type_die): For C typedef types that have
+ an ultimate origin, process the ultimate origin instead of the
+ input type.
+ (gen_typedef_die): Assert that input DECLs have no ultimate
+ origin.
+ (gen_type_die_with_usage): For typedef variants that have an
+ ultimate origin, just call gen_decl_die on the original DECL.
+ (process_scope_var): Avoid creating DIEs for local typedefs and
+ concrete static variables.
+
+2017-08-12 Alan Modra <amodra@gmail.com>
+
+ PR target/81170
+ PR target/81295
+ * config/rs6000/sysv4.h (STARTFILE_LINUX_SPEC): Upgrade to
+ match gnu-user.h startfile.
+ (ENDFILE_LINUX_SPEC): Similarly.
+
+2017-08-11 Thomas Schwinge <thomas@codesourcery.com>
+
+ PR lto/81430
+ * config/nvptx/nvptx.c (nvptx_override_options_after_change):
+ Remove function.
+ (TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): Remove definition.
+
+2017-08-11 Tamar Christina <tamar.christina@arm.com>
+ * config/aarch64/aarch64.md (mov<mode>): Change.
+ (*movhf_aarch64, *movsf_aarch64, *movdf_aarch64):
+ aarch64_reg_or_fp_float into aarch64_reg_or_fp_zero.
+ * config/aarch64/predicates.md (aarch64_reg_or_fp_float): Removed.
+
+2017-08-11 Eric Botcazou <ebotcazou@adacore.com>
+
+ * tree-sra.c (build_access_from_expr_1): Use more precise diagnostics
+ for storage order barriers.
+
+2017-08-11 Martin Liska <mliska@suse.cz>
+
+ PR tree-opt/79987
+ * tree-chkp.c (chkp_get_bounds_for_decl_addr): Do not instrument
+ variables of void type.
+
+2017-08-11 Martin Liska <mliska@suse.cz>
+
+ * asan.c (asan_protect_global): Replace ASM_OUTPUT_DEF with
+ TARGET_SUPPORTS_ALIASES.
+ * cgraph.c (cgraph_node::create_same_body_alias): Likewise.
+ * ipa-visibility.c (can_replace_by_local_alias): Likewise.
+ (optimize_weakref): Likewise.
+ * symtab.c (symtab_node::noninterposable_alias): Likewise.
+ * varpool.c (varpool_node::create_extra_name_alias): Likewise.
+ * defaults.h: Introduce TARGET_SUPPORTS_ALIASES.
+
+2017-08-11 Martin Liska <mliska@suse.cz>
+
+ PR ipa/81213
+ * config/i386/i386.c (make_resolver_func): Do complete
+ refactoring of the function.
+
+2017-08-10 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/81708
+ * config/i386/i386.opt (mstack-protector-guard-symbol=): New option
+ * config/i386/i386.c (ix86_stack_protect_guard): Use
+ ix86_stack_protect_guard_symbol_str to generate varible declaration.
+ * doc/invoke.texi (x86 Options): Document
+ -mstack-protector-guard-symbol= option.
+
+2017-08-10 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386-protos.h (ix86_split_stack_guard): New prototype.
+ * config/i386/i386.c (ix86_split_stack_guard): New function.
+ (ix86_xpand_split_stack_prologue): Call ix86_split_stack_guard.
+ (ix86_legitimate_address_p) <case UNSPEC_STACK_CHECK>: Remove.
+ (i386_asm_output_addr_const_extra) <case UNSPEC_STACK_CHECK>: Ditto.
+ (optput_pic_addr_const): Remove UNSPEC_STACK_CHECK handling.
+ * config/i386/i386.md (unspec): Remove UNSPEC_STACK_CHECK.
+ (split_stack_space_check): Call ix86_split_stack_guard.
+
+2017-08-10 Martin Sebor <msebor@redhat.com>
+
+ * print-tree.c (print_node): Print location using the established
+ format %s:%i%i.
+ Replace spaces with colons.
+ (debug_raw, debug): Ditto.
+
+2017-08-10 Martin Sebor <msebor@redhat.com>
+
+ PR c++/81586
+ * pretty-print.c (pp_format): Correct the handling of %s precision.
+
+2017-08-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/81736
+ * config/i386/i386.c (ix86_finalize_stack_realign_flags): Renamed
+ to ...
+ (ix86_finalize_stack_frame_flags): This. Also clear
+ frame_pointer_needed if -fno-omit-frame-pointer is used without
+ stack access.
+ (ix86_expand_prologue): Replace ix86_finalize_stack_realign_flags
+ with ix86_finalize_stack_frame_flags.
+ (ix86_expand_epilogue): Likewise.
+ (ix86_expand_split_stack_prologue): Likewise.
+ * doc/invoke.texi: Add a note for -fno-omit-frame-pointer.
+
+2017-08-10 Martin Liska <mliska@suse.cz>
+
+ PR c++/81355
+ * c-attribs.c (handle_target_attribute):
+ Report warning for an empty string argument of target attribute.
+
+2017-08-09 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/81687
+ * omp-low.c (omp_copy_decl): Don't remap FORCED_LABEL or DECL_NONLOCAL
+ LABEL_DECLs.
+ * tree-cfg.c (move_stmt_op): Don't adjust DECL_CONTEXT of FORCED_LABEL
+ or DECL_NONLOCAL labels.
+ (move_stmt_r) <case GIMPLE_LABEL>: Adjust DECL_CONTEXT of FORCED_LABEL
+ or DECL_NONLOCAL labels here.
+
+2017-08-09 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_option_override_internal): Add blurb
+ to indicate when early gimple folding has been disabled.
+ (rs6000_gimple_fold_builtin): Add debug content.
+ (rs6000_invalid_builtin): Fix whitespace.
+ (rs6000_expand_builtin): Fix whitespace.
+ * config/rs6000/rs6000.opt: Add option for -mfold-gimple.
+
+2017-08-09 Segher Boessenkool <segher@kernel.crashing.org>
+
+ PR target/80938
+ * config/rs6000/rs6000.c (rs6000_savres_strategy): Don't use
+ SAVE_MULTIPLE if not all the registers that saves, should be saved.
+
+2017-08-09 Jim Wilson <jim.wilson@linaro.org>
+
+ * config/aarch64/aarch64-cores.def (falkor): Use falkor pipeline.
+ (qdf24xx): Likewise.
+ * config/aarch64/aarch64.md: Include falkor.md.
+ * config/aarch64/falkor.md: New.
+
+2017-08-09 Marek Polacek <polacek@redhat.com>
+
+ PR c/81233
+ * diagnostic-core.h (emit_diagnostic_valist): Add declaration.
+ * diagnostic.c (emit_diagnostic): Add a comment.
+ (emit_diagnostic_valist): New function.
+
+2017-08-09 Marek Polacek <polacek@redhat.com>
+
+ PR c/81417
+ * input.c (make_location): New overload.
+ * input.h (make_location): Declare.
+
+2017-08-08 Alan Modra <amodra@gmail.com>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ PR driver/81523
+ * gcc.c (NO_PIE_SPEC): Delete.
+ (PIE_SPEC): Define as !no-pie/pie. Move static|shared|r
+ exclusion..
+ (LINK_PIE_SPEC): ..to here.
+ (LINK_COMMAND_SPEC): Support -no-pie.
+ * config/gnu-user.h (GNU_USER_TARGET_STARTFILE_SPEC): Correct
+ chain of crtbegin*.o selection, update for PIE_SPEC changes and
+ format.
+ (GNU_USER_TARGET_ENDFILE_SPEC): Similarly.
+ * config/sol2.h (STARTFILE_CRTBEGIN_SPEC): Similarly.
+ (ENDFILE_CRTEND_SPEC): Similarly.
+
+2017-08-08 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/81708
+ * config/i386/i386.opt (mstack-protector-guard-reg=): New option
+ (mstack-protector-guard-offset=): Ditto.
+ * config/i386/i386.c (ix86_option_override): Handle
+ -mstack-protector-guard-reg= and -mstack-protector-guard-offset=
+ options.
+ (ix86_stack_protect_guard): Use ix86_stack_protect_guard_reg and
+ ix86_stack_protect_guard_offset variables.
+ (TARGET_STACK_PROTECT_GUARD): Always define.
+ * doc/invoke.texi (x86 Options): Document -mstack-protector-guard-reg=
+ and -mstack-protector-guard-offset= options.
+
+2017-08-08 Bin Cheng <bin.cheng@arm.com>
+
+ * tree-ssa-loop-ivopts.c (relate_compare_use_with_all_cands): Handle
+ boundary case for the last candidate.
+
+2017-08-08 Bin Cheng <bin.cheng@arm.com>
+
+ * doc/invoke.texi: Document -ftree-loop-distribution for O3.
+ * opts.c (default_options_table): Add OPT_ftree_loop_distribution.
+
+2017-08-08 Tamar Christina <tamar.christina@arm.com>
+
+ PR middle-end/19706
+ * config/aarch64/aarch64.md (xorsign<mode>3): New optabs.
+ * config/aarch64/aarch64-builtins.c
+ (aarch64_builtin_vectorized_function): Added CASE_CFN_XORSIGN.
+ * config/aarch64/aarch64-simd-builtins.def: Added xorsign BINOP.
+ * config/aarch64/aarch64-simd.md: Added xorsign<mode>3
+
+2017-08-08 Tamar Christina <tamar.christina@arm.com>
+ Andrew Pinski <pinskia@gmail.com>
+
+ PR middle-end/19706
+ * internal-fn.def (XORSIGN): New.
+ * optabs.def (xorsign_optab): New.
+ * tree-ssa-math-opts.c (is_copysign_call_with_1): New.
+ (convert_expand_mult_copysign): New.
+ (pass_optimize_widening_mul::execute): Call
+ convert_expand_mult_copysign.
+
+2017-08-08 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR tree-optimization/81354
+ * gimple-ssa-strength-reduction.c (create_add_on_incoming_edge):
+ Insert on edges rather than explicitly creating landing pads.
+ (analyze_candidates_and_replace): Commit edge inserts.
+
+2017-08-08 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/81719
+ * tree-ssa-loop-niter.c: Include tree-dfa.h.
+ (expand_simple_operations): Also look through ADDR_EXPRs with
+ MEM_REF bases treating them as POINTER_PLUS_EXPR.
+
+2017-08-08 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81723
+ * tree-vect-slp.c (struct bst_traits): New hash traits.
+ (bst_fail): New global.
+ (vect_build_slp_tree_2): New worker, split out from ...
+ (vect_build_slp_tree): ... this now wrapping it with using
+ bst_fail set to cache SLP tree build fails. Properly handle
+ max_tree_size.
+ (vect_analyze_slp_instance): Allocate and free bst_fail.
+
+2017-08-08 Martin Liska <mliska@suse.cz>
+
+ PR tree-opt/81696
+ * ipa-icf-gimple.c (func_checker::compare_cst_or_decl): Consider
+ LABEL_DECLs that can be from a different function.
+
+2017-08-08 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/81744
+ * tree-predcom.c (prepare_finalizers_chain): Deep copy expr of
+ loop's number of iterations.
+
+2017-08-08 Martin Liska <mliska@suse.cz>
+
+ * asan.c: Include header files.
+ * attribs.c (build_decl_attribute_variant): New function moved
+ from tree.[ch].
+ (build_type_attribute_qual_variant): Likewise.
+ (cmp_attrib_identifiers): Likewise.
+ (simple_cst_list_equal): Likewise.
+ (omp_declare_simd_clauses_equal): Likewise.
+ (attribute_value_equal): Likewise.
+ (comp_type_attributes): Likewise.
+ (build_type_attribute_variant): Likewise.
+ (lookup_ident_attribute): Likewise.
+ (remove_attribute): Likewise.
+ (merge_attributes): Likewise.
+ (merge_type_attributes): Likewise.
+ (merge_decl_attributes): Likewise.
+ (merge_dllimport_decl_attributes): Likewise.
+ (handle_dll_attribute): Likewise.
+ (attribute_list_equal): Likewise.
+ (attribute_list_contained): Likewise.
+ * attribs.h (lookup_attribute): New function moved from tree.[ch].
+ (lookup_attribute_by_prefix): Likewise.
+ * bb-reorder.c: Include header files.
+ * builtins.c: Likewise.
+ * calls.c: Likewise.
+ * cfgexpand.c: Likewise.
+ * cgraph.c: Likewise.
+ * cgraphunit.c: Likewise.
+ * convert.c: Likewise.
+ * dwarf2out.c: Likewise.
+ * final.c: Likewise.
+ * fold-const.c: Likewise.
+ * function.c: Likewise.
+ * gimple-expr.c: Likewise.
+ * gimple-fold.c: Likewise.
+ * gimple-pretty-print.c: Likewise.
+ * gimple.c: Likewise.
+ * gimplify.c: Likewise.
+ * hsa-common.c: Likewise.
+ * hsa-gen.c: Likewise.
+ * internal-fn.c: Likewise.
+ * ipa-chkp.c: Likewise.
+ * ipa-cp.c: Likewise.
+ * ipa-devirt.c: Likewise.
+ * ipa-fnsummary.c: Likewise.
+ * ipa-inline.c: Likewise.
+ * ipa-visibility.c: Likewise.
+ * ipa.c: Likewise.
+ * lto-cgraph.c: Likewise.
+ * omp-expand.c: Likewise.
+ * omp-general.c: Likewise.
+ * omp-low.c: Likewise.
+ * omp-offload.c: Likewise.
+ * omp-simd-clone.c: Likewise.
+ * opts-global.c: Likewise.
+ * passes.c: Likewise.
+ * predict.c: Likewise.
+ * sancov.c: Likewise.
+ * sanopt.c: Likewise.
+ * symtab.c: Likewise.
+ * toplev.c: Likewise.
+ * trans-mem.c: Likewise.
+ * tree-chkp.c: Likewise.
+ * tree-eh.c: Likewise.
+ * tree-into-ssa.c: Likewise.
+ * tree-object-size.c: Likewise.
+ * tree-parloops.c: Likewise.
+ * tree-profile.c: Likewise.
+ * tree-ssa-ccp.c: Likewise.
+ * tree-ssa-live.c: Likewise.
+ * tree-ssa-loop.c: Likewise.
+ * tree-ssa-sccvn.c: Likewise.
+ * tree-ssa-structalias.c: Likewise.
+ * tree-ssa.c: Likewise.
+ * tree-streamer-in.c: Likewise.
+ * tree-vectorizer.c: Likewise.
+ * tree-vrp.c: Likewise.
+ * tsan.c: Likewise.
+ * ubsan.c: Likewise.
+ * varasm.c: Likewise.
+ * varpool.c: Likewise.
+ * tree.c: Remove functions moved to attribs.[ch].
+ * tree.h: Likewise.
+ * config/aarch64/aarch64.c: Add attrs.h header file.
+ * config/alpha/alpha.c: Likewise.
+ * config/arc/arc.c: Likewise.
+ * config/arm/arm.c: Likewise.
+ * config/avr/avr.c: Likewise.
+ * config/bfin/bfin.c: Likewise.
+ * config/c6x/c6x.c: Likewise.
+ * config/cr16/cr16.c: Likewise.
+ * config/cris/cris.c: Likewise.
+ * config/darwin.c: Likewise.
+ * config/epiphany/epiphany.c: Likewise.
+ * config/fr30/fr30.c: Likewise.
+ * config/frv/frv.c: Likewise.
+ * config/ft32/ft32.c: Likewise.
+ * config/h8300/h8300.c: Likewise.
+ * config/i386/winnt.c: Likewise.
+ * config/ia64/ia64.c: Likewise.
+ * config/iq2000/iq2000.c: Likewise.
+ * config/lm32/lm32.c: Likewise.
+ * config/m32c/m32c.c: Likewise.
+ * config/m32r/m32r.c: Likewise.
+ * config/m68k/m68k.c: Likewise.
+ * config/mcore/mcore.c: Likewise.
+ * config/microblaze/microblaze.c: Likewise.
+ * config/mips/mips.c: Likewise.
+ * config/mmix/mmix.c: Likewise.
+ * config/mn10300/mn10300.c: Likewise.
+ * config/moxie/moxie.c: Likewise.
+ * config/msp430/msp430.c: Likewise.
+ * config/nds32/nds32-isr.c: Likewise.
+ * config/nds32/nds32.c: Likewise.
+ * config/nios2/nios2.c: Likewise.
+ * config/nvptx/nvptx.c: Likewise.
+ * config/pa/pa.c: Likewise.
+ * config/pdp11/pdp11.c: Likewise.
+ * config/powerpcspe/powerpcspe.c: Likewise.
+ * config/riscv/riscv.c: Likewise.
+ * config/rl78/rl78.c: Likewise.
+ * config/rx/rx.c: Likewise.
+ * config/s390/s390.c: Likewise.
+ * config/sh/sh.c: Likewise.
+ * config/sol2.c: Likewise.
+ * config/sparc/sparc.c: Likewise.
+ * config/spu/spu.c: Likewise.
+ * config/stormy16/stormy16.c: Likewise.
+ * config/tilegx/tilegx.c: Likewise.
+ * config/tilepro/tilepro.c: Likewise.
+ * config/v850/v850.c: Likewise.
+ * config/vax/vax.c: Likewise.
+ * config/visium/visium.c: Likewise.
+ * config/xtensa/xtensa.c: Likewise.
+
+2017-08-07 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/81593
+ * config/rs6000/vsx.md (vsx_concat_<mode>, VSX_D): Cleanup
+ constraints since the -mupper-regs-* switches have been
+ eliminated.
+ (vsx_concat_<mode>_1): New combiner insns to recognize inserting
+ into a vector from a double word element that was extracted from
+ another vector, and eliminate extra XXPERMDI instructions.
+ (vsx_concat_<mode>_2): Likewise.
+ (vsx_concat_<mode>_3): Likewise.
+ (vsx_set_<mode>, VSX_D): Rewrite vector set in terms of vector
+ concat to allow optimizing inserts from previous extracts.
+
+2017-08-07 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (ix86_stack_protect_guard): Generate
+ memory reference to a SSP offset in TLS address space.
+ (ix86_print_operand) <case '@'>: Remove.
+ (ix86_print_operand_punct_valid_p): Remove '@' code.
+ * config/i386/i386.md (unspec): Remove UNSPEC_SP_TLS_SET and
+ UNSPEC_SP_TLS_TEST.
+ (stack_tls_protect_set_<mode>): Remove.
+ (stack_protect_set): Do not call gen_stack_tls_protect_set_<mode>.
+ (stack_tls_protect_test_<mode>): Remove.
+ (stack_protect_test): Do not call gen_stack_tls_protect_test_<mode>.
+
+2017-08-07 Olivier Hainque <hainque@adacore.com>
+
+ PR target/81755
+ * config/vxworksae.h (VXWORKS_HAVE_TLS): Define.
+
+2017-08-07 Douglas Rupp <rupp@adacore.com>
+
+ * Makefile.in (install-mkheaders): Fix typo, where the multi_dir
+ variable was referenced as multidir in command.
+
+2017-08-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/69389
+ * gimplify.c (goa_stabilize_expr): Handle BIT_INSERT_EXPR and
+ BIT_FIELD_REF.
+
+2017-08-07 Martin Liska <mliska@suse.cz>
+
+ * config/m32c/m32c.c: Add include of stringpool.h and attribs.h.
+ * config/rl78/rl78.c: Add include of attribs.h.
+ * config/sh/sh.c: Likewise.
+ * config/v850/v850.c: Likewise.
+
+2017-08-07 Tom de Vries <tom@codesourcery.com>
+
+ PR middle-end/78266
+ * omp-expand.c (expand_oacc_for): Ensure diff_type is large enough.
+
+2017-08-07 Martin Liska <mliska@suse.cz>
+
+ * config/mips/mips.c: Include attribs.h.
+
+2017-08-07 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/68829
+ * doc/invoke.texi: Document change in behvaior for -Ofast for
+ Fortran.
+
+2017-08-07 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * config/aarch64/aarch64.c (aarch64_pushwb_single_reg):
+ Use gen_frame_mem.
+ (aarch64_pop_regs): Likewise.
+ (aarch64_gen_load_pair): Likewise.
+ (aarch64_save_callee_saves): Likewise.
+ (aarch64_restore_callee_saves): Likewise.
+
+2017-08-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/i386/i386.c: Revert the last change.
+
+2017-08-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/81736
+ * config/i386/i386.c (ix86_finalize_stack_realign_flags): Renamed
+ to ...
+ (ix86_finalize_stack_frame_flags): This. Also clear
+ frame_pointer_needed if -fno-omit-frame-pointer is used without
+ stack access.
+ (ix86_expand_prologue): Replace ix86_finalize_stack_realign_flags
+ with ix86_finalize_stack_frame_flags.
+ (ix86_expand_epilogue): Likewise.
+ (ix86_expand_split_stack_prologue): Likewise.
+
+2017-08-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/81743
+ * config/i386/i386.c (get_builtin_code_for_version): Set priority
+ to P_AES for Westmere.
+
+2017-08-07 Jonathan Yong <10walls@gmail.com>
+
+ * config/i386/mingw.opt (fset-stack-executable): Removed.
+ * config/i386/cygming.opt (fset-stack-executable): Moved
+ from mingw.opt.
+ * config/i386/cygwin.h: Define CHECK_EXECUTE_STACK_ENABLED.
+
+2017-08-07 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * print-rtl.c (print_exp): Print NOT as "~" instead of as "!".
+
+2017-08-07 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/81737
+ * fold-const.c (fold_indirect_ref_1): Check type_domain.
+
+2017-08-07 Martin Liska <mliska@suse.cz>
+
+ * attribs.h (canonicalize_attr_name): New function.
+ (cmp_attribs): Move from c-format.c and adjusted.
+ (is_attribute_p): Moved from tree.h.
+ * tree-inline.c: Add new includes.
+ * tree.c (cmp_attrib_identifiers): Use cmp_attribs.
+ (private_is_attribute_p): Remove.
+ (private_lookup_attribute): Likewise.
+ (private_lookup_attribute_by_prefix): Simplify.
+ (remove_attribute): Use is_attribute_p.
+ * tree.h: Remove removed declarations.
+
+2017-08-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/81698
+ * stmt.c (emit_case_dispatch_table): Add DEFAULT_EDGE argument,
+ instead of computing it in the function. Formatting fix.
+ (expand_case): Don't rely on default_edge being the first edge,
+ clear it if removing it, pass default_edge to
+ emit_case_dispatch_table.
+ (expand_sjlj_dispatch_table): Pass NULL as DEFAULT_EDGE, formatting
+ fix.
+
+2017-08-06 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/alpha/alpha.c (alpha_reorg): If trap is the last active
+ insn in the function, emit NOP after the insn.
+
+2017-08-06 Tom de Vries <tom@codesourcery.com>
+
+ * omp-expand.c (expand_oacc_for): Add missing edge probability for tile
+ and element loops.
+
+2017-08-06 Tom de Vries <tom@codesourcery.com>
+
+ * omp-expand.c (expand_oacc_for): Add missing edge probability for chunk
+ loop.
+
+2017-08-04 Yury Gribov <tetra2005@gmail.com>
+
+ PR tree-optimization/57371
+ * match.pd: New pattern.
+
+2017-08-04 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/81695
+ * fold-const.c (fold_indirect_ref_1): For ((int *)&a + 4 -> a[1],
+ perform the computation in offset_int.
+
+2017-08-04 Richard Sandiford <richard.sandiford@linaro.org>
+
+ PR tree-optimization/81136
+ * tree-vectorizer.h: Include tree-hash-traits.h.
+ (vec_base_alignments): New typedef.
+ (vec_info): Add a base_alignments field.
+ (vect_record_base_alignments): Declare.
+ * tree-data-ref.h (data_reference): Add an is_conditional_in_stmt
+ field.
+ (DR_IS_CONDITIONAL_IN_STMT): New macro.
+ (create_data_ref): Add an is_conditional_in_stmt argument.
+ * tree-data-ref.c (create_data_ref): Likewise. Use it to initialize
+ the is_conditional_in_stmt field.
+ (data_ref_loc): Add an is_conditional_in_stmt field.
+ (get_references_in_stmt): Set the is_conditional_in_stmt field.
+ (find_data_references_in_stmt): Update call to create_data_ref.
+ (graphite_find_data_references_in_stmt): Likewise.
+ * tree-ssa-loop-prefetch.c (determine_loop_nest_reuse): Likewise.
+ * tree-vect-data-refs.c (vect_analyze_data_refs): Likewise.
+ (vect_record_base_alignment): New function.
+ (vect_record_base_alignments): Likewise.
+ (vect_compute_data_ref_alignment): Adjust base_addr and aligned_to
+ for nested statements even if we fail to compute a misalignment.
+ Use pooled base alignments for unconditional references.
+ (vect_find_same_alignment_drs): Compare base addresses instead
+ of base objects.
+ (vect_analyze_data_refs_alignment): Call vect_record_base_alignments.
+ * tree-vect-slp.c (vect_slp_analyze_bb_1): Likewise.
+
+2017-08-04 Richard Sandiford <richard.sandiford@linaro.org>
+
+ * tree-vectorizer.h (vec_info): Add a constructor and destructor.
+ Add an explicit name for the enum. Use auto_vec for slp_instances
+ and grouped_stores.
+ (_loop_vec_info): Add a constructor and destructor. Use auto_vec
+ for all vectors.
+ (_bb_vec_info): Add a constructor and destructor.
+ (vinfo_for_stmt): Return NULL for uids of -1 as well.
+ (destroy_loop_vec_info): Delete.
+ (vect_destroy_datarefs): Likewise.
+ * tree-vectorizer.c (vect_destroy_datarefs): Delete.
+ (vec_info::vec_info): New function.
+ (vec_info::~vec_info): Likewise.
+ (vectorize_loops): Use delete instead of destroy_loop_vec_info.
+ * tree-parloops.c (gather_scalar_reductions): Use delete instead of
+ destroy_loop_vec_info.
+ * tree-vect-loop.c (new_loop_vec_info): Replace with...
+ (_loop_vec_info::_loop_vec_info): ...this.
+ (destroy_loop_vec_info): Replace with...
+ (_loop_vec_info::~_loop_vec_info): ...this. Unconditionally delete
+ the stmt_vec_infos. Leave handling of vec_info information to its
+ destructor. Remove explicit vector releases.
+ (vect_analyze_loop_form): Use new instead of new_loop_vec_info.
+ (vect_analyze_loop): Use delete instead of destroy_loop_vec_info.
+ * tree-vect-slp.c (new_bb_vec_info): Replace with...
+ (_bb_vec_info::_bb_vec_info): ...this. Don't reserve space in
+ BB_VINFO_GROUPED_STORES or BB_VINFO_SLP_INSTANCES.
+ (destroy_bb_vec_info): Replace with...
+ (_bb_vec_info::~_bb_vec_info): ...this. Leave handling of vec_info
+ information to its destructor.
+ (vect_slp_analyze_bb_1): Use new and delete instead of
+ new_bb_vec_info and destroy_bb_vec_info.
+ (vect_slp_bb): Replace 2 calls to destroy_bb_vec_info with a
+ single delete.
+
+2017-08-04 Richard Sandiford <richard.sandiford@linaro.org>
+
+ * tree-data-ref.h (subscript): Add access_fn field.
+ (data_dependence_relation): Add could_be_independent_p.
+ (SUB_ACCESS_FN, DDR_COULD_BE_INDEPENDENT_P): New macros.
+ (same_access_functions): Move to tree-data-ref.c.
+ * tree-data-ref.c (ref_contains_union_access_p): New function.
+ (access_fn_component_p): Likewise.
+ (access_fn_components_comparable_p): Likewise.
+ (dr_analyze_indices): Add a reference to access_fn_component_p.
+ (dump_data_dependence_relation): Use SUB_ACCESS_FN instead of
+ DR_ACCESS_FN.
+ (constant_access_functions): Likewise.
+ (add_other_self_distances): Likewise.
+ (same_access_functions): Likewise. (Moved from tree-data-ref.h.)
+ (initialize_data_dependence_relation): Use XCNEW and remove
+ explicit zeroing of DDR_REVERSED_P. Look for a subsequence
+ of access functions that have the same type. Allow the
+ subsequence to end with different bases in some circumstances.
+ Record the chosen access functions in SUB_ACCESS_FN.
+ (build_classic_dist_vector_1): Replace ddr_a and ddr_b with
+ a_index and b_index. Use SUB_ACCESS_FN instead of DR_ACCESS_FN.
+ (subscript_dependence_tester_1): Likewise dra and drb.
+ (build_classic_dist_vector): Update calls accordingly.
+ (subscript_dependence_tester): Likewise.
+ * tree-ssa-loop-prefetch.c (determine_loop_nest_reuse): Check
+ DDR_COULD_BE_INDEPENDENT_P.
+ * tree-vectorizer.h (LOOP_REQUIRES_VERSIONING_FOR_ALIAS): Test
+ comp_alias_ddrs instead of may_alias_ddrs.
+ * tree-vect-data-refs.c (vect_analyze_possibly_independent_ddr):
+ New function.
+ (vect_analyze_data_ref_dependence): Use it if
+ DDR_COULD_BE_INDEPENDENT_P, but fall back to using the recorded
+ distance vectors if that fails.
+ (dependence_distance_ge_vf): New function.
+ (vect_prune_runtime_alias_test_list): Use it. Don't clear
+ LOOP_VINFO_MAY_ALIAS_DDRS.
+
+2017-08-04 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/81705
+ * fold-const.c (fold_binary_loc): Properly restrict
+ minus_var0 && minus_var1 case when associating undefined overflow
+ entities.
+
+2017-08-04 Tom de Vries <tom@codesourcery.com>
+
+ * omp-simd-clone.c (simd_clone_adjust): Add missing edge probability.
+
+2017-08-03 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
+ Don't start diagnostic messages with a capital letter.
+ * config/rs6000/rs6000.c (rs6000_option_override_internal):
+ Likewise.
+ (rs6000_invalid_builtin): Likewise.
+ (rs6000_trampoline_init): Likewise.
+
+2017-08-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/81621
+ * bb-reorder.c (pass_partition_blocks::execute): Return TODO_df_finish
+ after setting changeable df flags.
+
+2017-08-03 Richard Biener <rguenther@suse.de>
+
+ * tree-ssa-reassoc.c (should_break_up_subtract): Also break
+ up if the use is in USE - X.
+
+2017-08-03 Alexander Monakov <amonakov@ispras.ru>
+
+ * toplev.c (dumpfile.h): New include.
+ (internal_error_reentered): New static function. Use it...
+ (internal_error_function): ...here to handle reentered internal_error.
+
+2017-08-03 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/81148
+ * fold-const.c (split_tree): Add minus_var and minus_con
+ arguments, remove unused loc arg. Never generate NEGATE_EXPRs
+ here but always use minus_*.
+ (associate_trees): Assert we never associate with MINUS_EXPR
+ and NULL first operand. Do not recurse for PLUS_EXPR operands
+ when associating as MINUS_EXPR either.
+ (fold_binary_loc): Track minus_var and minus_con.
+
+2017-08-03 Tom de Vries <tom@codesourcery.com>
+
+ PR lto/81430
+ * tree-streamer-in.c (lto_input_ts_function_decl_tree_pointers): If
+ ACCEL_COMPILER, apply finish_options on
+ DECL_FUNCTION_SPECIFIC_OPTIMIZATION.
+
+2017-08-03 Tom de Vries <tom@codesourcery.com>
+
+ PR target/81662
+ * config/nvptx/nvptx.c (nvptx_option_override): Emit sorry if
+ function_entry_patch_area_size > 0.
+
+2017-08-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR driver/81650
+ * calls.c (alloc_max_size): Use HOST_WIDE_INT_UC (10??)
+ instead of 10??LU, perform unit multiplication in wide_int,
+ don't change alloc_object_size_limit if the limit is larger
+ than SSIZE_MAX.
+
+ PR tree-optimization/81655
+ PR tree-optimization/81588
+ * tree-ssa-reassoc.c (optimize_range_tests_var_bound): Handle also
+ the case when ranges[i].low and high are 1 for unsigned type with
+ precision 1.
+
+ PR middle-end/81052
+ * omp-low.c (diagnose_sb_0): Handle flag_openmp_simd like flag_openmp.
+ (pass_diagnose_omp_blocks::gate): Enable also for flag_openmp_simd.
+
+2017-08-03 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
+
+ * tree-vrp.h: Add include guard.
+
+2017-08-02 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/81644
+ * config/i386/i386.md (unspecv): Add UNSPECV_UD2.
+ (ud2): New insn pattern.
+ * config/i386/i386.c (ix86_expand_epilogue):
+ For naked functions, generate ud2 instead of trap insn.
+
+2017-08-02 Marek Polacek <polacek@redhat.com>
+
+ PR other/81667
+ * alloc-pool.h (base_pool_allocator): Initialize m_elt_size.
+
+2017-08-02 Tom de Vries <tom@codesourcery.com>
+ Cesar Philippidis <cesar@codesourcery.com>
+
+ * config/nvptx/nvptx.c (nvptx_lockless_update, nvptx_lockfull_update):
+ Add missing edge probabilities.
+
+2017-08-02 Tamar Christina <tamar.christina@arm.com>
+
+ * config/aarch64/aarch64.c (aarch64_reinterpret_float_as_int):
+ Correct endianness.
+
+2017-08-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/79499
+ * function.c (thread_prologue_and_epilogue_insns): Determine blocks
+ for find_many_sub_basic_blocks bitmap by looking up BLOCK_FOR_INSN
+ of first NONDEBUG_INSN_P in each of the split_prologue_seq and
+ prologue_seq sequences - if any.
+
+2017-08-02 Richard Biener <rguenther@suse.de>
+
+ * tree-vect-stmts.c (vectorizable_store): Perform vector extracts
+ via vectors if supported, integer extracts via punning if supported
+ or otherwise vector extracts.
+
+2017-08-02 Richard Biener <rguenther@suse.de>
+
+ * tree-ssa-pre.c (bitmap_insert_into_set_1): Remove and inline
+ into ...
+ (bitmap_insert_into_set): ... this.
+
+2017-08-02 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81633
+ Revert
+ 2015-08-17 Alan Hayward <alan.hayward@arm.com>
+
+ PR tree-optimization/71752
+ * tree-vect-slp.c (vect_get_slp_defs): Handle null operands.
+
+2017-08-01 Daniel Santos <daniel.santos@pobox.com>
+
+ * config/i386/i386.h (ix86_frame::outlined_save_offset): Remove field.
+ (machine_function::call_ms2sysv_pad_out): Remove field.
+ * config/i386/i386.c (xlogue_layout::get_stack_space_used): Modify.
+ (ix86_compute_frame_layout): Likewise.
+
+2017-08-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/81654
+ * config/i386/i386.c (ix86_set_func_type): Disallow naked
+ attribute with interrupt attribute.
+
+2017-08-01 Andrew Pinski <apinski@cavium.com>
+
+ * tree-ssa-scopedtables.c (hashable_expr_equal_p): Check
+ BIT_INSERT_EXPR's operand 1
+ to see if the types precision matches.
+
+2017-08-01 Martin Liska <mliska@suse.cz>
+
+ PR middle-end/70140
+ * builtins.c (expand_builtin_memcpy_args): Remove.
+ (expand_builtin_memcpy): Call newly added function
+ expand_builtin_memory_copy_args.
+ (expand_builtin_memcpy_with_bounds): Likewise.
+ (expand_builtin_mempcpy): Remove last argument.
+ (expand_builtin_mempcpy_with_bounds): Likewise.
+ (expand_builtin_memory_copy_args): New function created from
+ expand_builtin_mempcpy_args with small modifications.
+ (expand_builtin_mempcpy_args): Remove.
+ (expand_builtin_stpcpy): Remove unused argument.
+ (expand_builtin): Likewise.
+ (expand_builtin_with_bounds): Likewise.
+
+2017-08-01 Martin Liska <mliska@suse.cz>
+
+ Revert r250771
+ Make mempcpy more optimal (PR middle-end/70140).
+
+2017-08-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/81622
+ * config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin): For
+ __builtin_vec_cmpne verify both arguments are compatible vectors
+ before looking at TYPE_MODE on the element type. For __builtin_vec_ld
+ verify arg1_type is a pointer or array type. For __builtin_vec_st,
+ move computation of aligned to after checking the argument types.
+ Formatting fixes.
+
+ PR target/80846
+ * config/rs6000/vsx.md (vextract_fp_from_shorth,
+ vextract_fp_from_shortl): Add element mode after mode in gen_vec_init*
+ calls.
+
+2017-08-01 Jerome Lambourg <lambourg@adacore.com>
+ Doug Rupp <rupp@adacore.com>
+ Olivier Hainque <hainque@adacore.com>
+
+ * config.gcc (arm-wrs-vxworks*): Rework to handle arm-wrs-vxworks7 as
+ well as arm-wrs-vxworks. Update target_cpu_name from arm6 (arch v3) to
+ arm8 (arch v4).
+ * config/arm/vxworks.h (MAYBE_TARGET_BPABI_CPP_BUILTINS): New, helper
+ for TARGET_OS_CPP_BUILTIN.
+ (TARGET_OS_CPP_BUILTIN): Invoke MAYBE_TARGET_BPABI_CPP_BUILTINS(),
+ refine CPU definitions for arm_arch5 and add those for arm_arch6 and
+ arm_arch7.
+ (MAYBE_ASM_ABI_SPEC): New, helper for SUBTARGET_EXTRA_ASM_SPEC,
+ passing required abi options to the assembler for EABI configurations.
+ (EXTRA_CC1_SPEC): New macro, to help prevent the implicit production
+ of .text.hot and .text.unlikely sections for kernel modules when
+ using ARM style exceptions.
+ (CC1_SPEC): Remove obsolete attempt at mimicking Diab toolchain
+ options. Add EXTRA_CC1_SPEC.
+ (VXWORKS_ENDIAN_SPEC): Adjust comment and remove handling of Diab
+ toolchain options.
+ (DWARF2_UNWIND_INFO): Redefine to handle the pre/post VxWorks 7
+ transition.
+ (ARM_TARGET2_DWARF_FORMAT): Define.
+ * config/arm/t-vxworks: Adjust multilib control to removal of the
+ Diab command line options.
+
+2017-08-01 Martin Liska <mliska@suse.cz>
+
+ PR gcov-profile/81561
+ * gcov.c (unblock): Make unblocking safe as we need to preserve
+ index correspondence of blocks and block_lists.
+
+2017-08-01 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81181
+ * tree-ssa-pre.c (compute_antic_aux): Defer clean() to ...
+ (compute_antic): ... end of iteration here.
+
+2017-08-01 James Greenhalgh <james.greenhalgh@arm.com>
+
+ * common.opt (ftree-vectorize): No longer set flag_tree_vectorize.
+ (ftree-loop-vectorize): Set as EnabledBy ftree-vectorize.
+ (ftree-slp-vectorize): Likewise.
+ * omp-expand (expand_omp_simd): Remove flag_tree_vectorize, as it
+ can no longer be set independent of flag_tree_loop_vectorize.
+ * omp-general.c (emp_max_vf): Likewise.
+ * opts.c (enable_fdo_optimizations): Remove references to
+ flag_tree_vectorize, these are now implicit.
+ (common_handle_option): Remove handling for OPT_ftree_vectorize,
+ and leave it for the options machinery.
+
+2017-08-01 Martin Liska <mliska@suse.cz>
+
+ PR middle-end/70140
+ * builtins.c (expand_builtin_memcpy_args): Remove.
+ (expand_builtin_memcpy): Call newly added function
+ expand_builtin_memory_copy_args.
+ (expand_builtin_memcpy_with_bounds): Likewise.
+ (expand_builtin_mempcpy): Remove last argument.
+ (expand_builtin_mempcpy_with_bounds): Likewise.
+ (expand_builtin_memory_copy_args): New function created from
+ expand_builtin_mempcpy_args with small modifications.
+ (expand_builtin_mempcpy_args): Remove.
+ (expand_builtin_stpcpy): Remove unused argument.
+ (expand_builtin): Likewise.
+ (expand_builtin_with_bounds): Likewise.
+
+2017-08-01 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/81641
+ * config/i386/i386.c (ix86_print_operand_address_as): For -masm=intel
+ print "ds:" only for immediates in generic address space.
+
+2017-08-01 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/81639
+ * config/i386/i386.c (ix86_funciton_naked): New prototype.
+ (ix86_function_ok_for_sibcall): Return false for naked functions.
+
+2017-08-01 Richard Biener <rguenther@suse.de>
+
+ * tree-ssa-pre.c (print_pre_expr): Handle NULL expr.
+ (compute_antic): Seed worklist with exit block predecessors.
+ * cfganal.c (dfs_find_deadend): For a cycle return the source
+ of the edge closing it.
+
+2017-08-01 Tamar Christina <tamar.christina@arm.com>
+
+ * config/aarch64/aarch64.c
+ (aarch64_can_const_movi_rtx_p): Move 0 check.
+
+2017-08-01 Bin Cheng <bin.cheng@arm.com>
+
+ * tree.h (POINTER_TYPE_OVERFLOW_UNDEFINED): Delete.
+ * fold-const.c (fold_comparison, fold_binary_loc): Delete use of
+ above macro.
+ * match.pd: Ditto in address comparison pattern.
+
+2017-08-01 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/81627
+ * tree-predcom.c (prepare_finalizers): Always rewrite into loop
+ closed ssa form for store-store chain.
+
+2017-08-01 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/81620
+ * tree-predcom.c (add_ref_to_chain): Don't set has_max_use_after
+ for store-store chain.
+
+2017-08-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/81588
+ * tree-ssa-reassoc.c (optimize_range_tests_var_bound): If
+ ranges[i].in_p, invert comparison code ccode. For >/>=,
+ swap rhs1 and rhs2 and comparison code unconditionally,
+ for </<= don't do that. Don't swap rhs1/rhs2 again if
+ ranges[i].in_p, instead invert comparison code ccode if
+ opcode or oe->rank is BIT_IOR_EXPR.
+
+ PR target/80846
+ * optabs.def (vec_extract_optab, vec_init_optab): Change from
+ a direct optab to conversion optab.
+ * optabs.c (expand_vector_broadcast): Use convert_optab_handler
+ with GET_MODE_INNER as last argument instead of optab_handler.
+ * expmed.c (extract_bit_field_1): Likewise. Use vector from
+ vector extraction if possible and optab is available.
+ * expr.c (store_constructor): Use convert_optab_handler instead
+ of optab_handler. Use vector initialization from smaller
+ vectors if possible and optab is available.
+ * tree-vect-stmts.c (vectorizable_load): Likewise.
+ * doc/md.texi (vec_extract, vec_init): Document that the optabs
+ now have two modes.
+ * config/i386/i386.c (ix86_expand_vector_init): Handle expansion
+ of vec_init from half-sized vectors with the same element mode.
+ * config/i386/sse.md (ssehalfvecmode): Add V4TI case.
+ (ssehalfvecmodelower, ssescalarmodelower): New mode attributes.
+ (reduc_plus_scal_v8df, reduc_plus_scal_v4df, reduc_plus_scal_v2df,
+ reduc_plus_scal_v16sf, reduc_plus_scal_v8sf, reduc_plus_scal_v4sf,
+ reduc_<code>_scal_<mode>, reduc_umin_scal_v8hi): Add element mode
+ after mode in gen_vec_extract* calls.
+ (vec_extract<mode>): Renamed to ...
+ (vec_extract<mode><ssescalarmodelower>): ... this.
+ (vec_extract<mode><ssehalfvecmodelower>): New expander.
+ (rotl<mode>3, rotr<mode>3, <shift_insn><mode>3, ashrv2di3): Add
+ element mode after mode in gen_vec_init* calls.
+ (VEC_INIT_HALF_MODE): New mode iterator.
+ (vec_init<mode>): Renamed to ...
+ (vec_init<mode><ssescalarmodelower>): ... this.
+ (vec_init<mode><ssehalfvecmodelower>): New expander.
+ * config/i386/mmx.md (vec_extractv2sf): Renamed to ...
+ (vec_extractv2sfsf): ... this.
+ (vec_initv2sf): Renamed to ...
+ (vec_initv2sfsf): ... this.
+ (vec_extractv2si): Renamed to ...
+ (vec_extractv2sisi): ... this.
+ (vec_initv2si): Renamed to ...
+ (vec_initv2sisi): ... this.
+ (vec_extractv4hi): Renamed to ...
+ (vec_extractv4hihi): ... this.
+ (vec_initv4hi): Renamed to ...
+ (vec_initv4hihi): ... this.
+ (vec_extractv8qi): Renamed to ...
+ (vec_extractv8qiqi): ... this.
+ (vec_initv8qi): Renamed to ...
+ (vec_initv8qiqi): ... this.
+ * config/rs6000/vector.md (VEC_base_l): New mode attribute.
+ (vec_init<mode>): Renamed to ...
+ (vec_init<mode><VEC_base_l>): ... this.
+ (vec_extract<mode>): Renamed to ...
+ (vec_extract<mode><VEC_base_l>): ... this.
+ * config/rs6000/paired.md (vec_initv2sf): Renamed to ...
+ (vec_initv2sfsf): ... this.
+ * config/rs6000/altivec.md (splitter, altivec_copysign_v4sf3,
+ vec_unpacku_hi_v16qi, vec_unpacku_hi_v8hi, vec_unpacku_lo_v16qi,
+ vec_unpacku_lo_v8hi, mulv16qi3, altivec_vreve<mode>2): Add
+ element mode after mode in gen_vec_init* calls.
+ * config/aarch64/aarch64-simd.md (vec_init<mode>): Renamed to ...
+ (vec_init<mode><Vel>): ... this.
+ (vec_extract<mode>): Renamed to ...
+ (vec_extract<mode><Vel>): ... this.
+ * config/aarch64/iterators.md (Vel): New mode attribute.
+ * config/s390/s390.c (s390_expand_vec_strlen, s390_expand_vec_movstr):
+ Add element mode after mode in gen_vec_extract* calls.
+ * config/s390/vector.md (non_vec_l): New mode attribute.
+ (vec_extract<mode>): Renamed to ...
+ (vec_extract<mode><non_vec_l>): ... this.
+ (vec_init<mode>): Renamed to ...
+ (vec_init<mode><non_vec_l>): ... this.
+ * config/s390/s390-builtins.def (s390_vlgvb, s390_vlgvh, s390_vlgvf,
+ s390_vlgvf_flt, s390_vlgvg, s390_vlgvg_dbl): Add element mode after
+ vec_extract mode.
+ * config/arm/iterators.md (V_elem_l): New mode attribute.
+ * config/arm/neon.md (vec_extract<mode>): Renamed to ...
+ (vec_extract<mode><V_elem_l>): ... this.
+ (vec_extractv2di): Renamed to ...
+ (vec_extractv2didi): ... this.
+ (vec_init<mode>): Renamed to ...
+ (vec_init<mode><V_elem_l>): ... this.
+ (reduc_plus_scal_<mode>, reduc_plus_scal_v2di, reduc_smin_scal_<mode>,
+ reduc_smax_scal_<mode>, reduc_umin_scal_<mode>,
+ reduc_umax_scal_<mode>, neon_vget_lane<mode>, neon_vget_laneu<mode>):
+ Add element mode after gen_vec_extract* calls.
+ * config/mips/mips-msa.md (vec_init<mode>): Renamed to ...
+ (vec_init<mode><unitmode>): ... this.
+ (vec_extract<mode>): Renamed to ...
+ (vec_extract<mode><unitmode>): ... this.
+ * config/mips/loongson.md (vec_init<mode>): Renamed to ...
+ (vec_init<mode><unitmode>): ... this.
+ * config/mips/mips-ps-3d.md (vec_initv2sf): Renamed to ...
+ (vec_initv2sfsf): ... this.
+ (vec_extractv2sf): Renamed to ...
+ (vec_extractv2sfsf): ... this.
+ (reduc_plus_scal_v2sf, reduc_smin_scal_v2sf, reduc_smax_scal_v2sf):
+ Add element mode after gen_vec_extract* calls.
+ * config/mips/mips.md (unitmode): New mode iterator.
+ * config/spu/spu.c (spu_expand_prologue, spu_allocate_stack,
+ spu_builtin_extract): Add element mode after gen_vec_extract* calls.
+ * config/spu/spu.md (inner_l): New mode attribute.
+ (vec_init<mode>): Renamed to ...
+ (vec_init<mode><inner_l>): ... this.
+ (vec_extract<mode>): Renamed to ...
+ (vec_extract<mode><inner_l>): ... this.
+ * config/sparc/sparc.md (veltmode): New mode iterator.
+ (vec_init<VMALL:mode>): Renamed to ...
+ (vec_init<VMALL:mode><VMALL:veltmode>): ... this.
+ * config/ia64/vect.md (vec_initv2si): Renamed to ...
+ (vec_initv2sisi): ... this.
+ (vec_initv2sf): Renamed to ...
+ (vec_initv2sfsf): ... this.
+ (vec_extractv2sf): Renamed to ...
+ (vec_extractv2sfsf): ... this.
+ * config/powerpcspe/vector.md (VEC_base_l): New mode attribute.
+ (vec_init<mode>): Renamed to ...
+ (vec_init<mode><VEC_base_l>): ... this.
+ (vec_extract<mode>): Renamed to ...
+ (vec_extract<mode><VEC_base_l>): ... this.
+ * config/powerpcspe/paired.md (vec_initv2sf): Renamed to ...
+ (vec_initv2sfsf): ... this.
+ * config/powerpcspe/altivec.md (splitter, altivec_copysign_v4sf3,
+ vec_unpacku_hi_v16qi, vec_unpacku_hi_v8hi, vec_unpacku_lo_v16qi,
+ vec_unpacku_lo_v8hi, mulv16qi3): Add element mode after mode in
+ gen_vec_init* calls.
+
+2017-08-01 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81297
+ * tree-vrp.c (get_single_symbol): Remove assert, instead drop
+ TREE_OVERFLOW from INTEGER_CSTs.
+
+2017-07-31 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * config/rs6000/rs6000.c (enum rs6000_reg_type): Delete trailing comma.
+
+2017-07-31 Carl Love <cel@us.ibm.com>
+
+ * config/rs6000/rs6000-c: Add support for built-in functions
+ vector signed char vec_xl_be (signed long long, signed char *);
+ vector unsigned char vec_xl_be (signed long long, unsigned char *);
+ vector signed int vec_xl_be (signed long long, signed int *);
+ vector unsigned int vec_xl_be (signed long long, unsigned int *);
+ vector signed long long vec_xl_be (signed long long, signed long long *);
+ vector unsigned long long vec_xl_be (signed long long, unsigned long long *);
+ vector signed short vec_xl_be (signed long long, signed short *);
+ vector unsigned short vec_xl_be (signed long long, unsigned short *);
+ vector double vec_xl_be (signed long long, double *);
+ vector float vec_xl_be (signed long long, float *);
+ * config/rs6000/altivec.h (vec_xl_be): Add #define.
+ * config/rs6000/rs6000-builtin.def (XL_BE_V16QI, XL_BE_V8HI, XL_BE_V4SI)
+ XL_BE_V2DI, XL_BE_V4SF, XL_BE_V2DF, XL_BE): Add definitions
+ for the builtins.
+ * config/rs6000/rs6000.c (altivec_expand_xl_be_builtin): Add function.
+ (altivec_expand_builtin): Add switch statement to call
+ altivec_expand_xl_be for each builtin.
+ (altivec_init_builtins): Add def_builtin for _builtin_vsx_le_be_v8hi,
+ __builtin_vsx_le_be_v4si, __builtin_vsx_le_be_v2di,
+ __builtin_vsx_le_be_v4sf, __builtin_vsx_le_be_v2df,
+ __builtin_vsx_le_be_v16qi.
+ * doc/extend.texi: Update the built-in documentation file for the
+ new built-in functions.
+
+2017-07-31 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/25967
+ * config/i386/i386.c (ix86_allocate_stack_slots_for_args):
+ New function.
+ (TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS): Define.
+
+2017-07-31 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config.gcc: Add z14.
+ * config/s390/driver-native.c (s390_host_detect_local_cpu): Add
+ CPU model numbers for z13s and z14.
+ * config/s390/s390-c.c (s390_resolve_overloaded_builtin): Replace
+ arch12 with z14.
+ * config/s390/s390-opts.h (enum processor_type): Rename
+ PROCESSOR_ARCH12 to PROCESSOR_3906_Z14.
+ * config/s390/s390.c (processor_table): Add field for CPU name to
+ be passed to Binutils.
+ (s390_asm_output_machine_for_arch): Use the new field in
+ processor_table for Binutils.
+ (s390_expand_builtin): Replace arch12 with z14.
+ (s390_issue_rate): Rename PROCESSOR_ARCH12 to PROCESSOR_3906_Z14.
+ (s390_get_sched_attrmask): Likewise.
+ (s390_get_unit_mask): Likewise.
+ * config/s390/s390.opt: Add z14 to processor_type enum.
+
+2017-07-31 Martin Jambor <mjambor@suse.cz>
+
+ PR hsa/81477
+ * ipa-fnsummary.c (ipa_fn_summary_generate): Set versionable
+ regardless of optimization level.
+
+2017-07-31 Jan Hubicka <hubicka@ucw.cz>
+ Martin Liska <mliska@suse.cz>
+
+ * predict.def: Remove old comment and adjust probability.
+ * gimplify.c (should_warn_for_implicit_fallthrough): Ignore
+ PREDICT statements.
+
+2017-07-31 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/25967
+ * config/i386/i386.c (ix86_function_naked): New function.
+ (ix86_can_use_return_insn_p): Return false for naked functions.
+ (ix86_expand_prologue): Skip prologue for naked functions.
+ (ix86_expand_epilogue): Skip epilogue for naked functions
+ and emit trap instruction.
+ (ix86_warn_func_return): New function.
+ (ix86_attribute_table): Add "naked" attribute specification.
+ (TARGET_WARN_FUNC_RETURN): Define.
+ * doc/extend.texi (x86 Function Attributes) <naked>: Document it.
+
+2017-07-31 Martin Liska <mliska@suse.cz>
+
+ * gimple-pretty-print.c (dump_gimple_label): Never dump BB info.
+ (dump_gimple_bb_header): Always dump BB info.
+ (pp_cfg_jump): Do not append info about BB when dumping a jump.
+
+2017-07-31 Martin Liska <mliska@suse.cz>
+
+ PR sanitize/81530
+ * convert.c (convert_to_integer_1): Guard condition with flag_sanitize_p
+ also with current_function_decl non-null equality.
+
+2017-07-31 Jakub Jelinek <jakub@redhat.com>
+
+ PR sanitizer/81604
+ * ubsan.c (ubsan_type_descriptor): For UBSAN_PRINT_ARRAY don't
+ change type to the element type, instead add eltype variable and
+ use it where we are interested in the element type.
+
+ PR tree-optimization/81603
+ * ipa-polymorphic-call.c
+ (ipa_polymorphic_call_context::ipa_polymorphic_call_context): Perform
+ offset arithmetic in offset_int, bail out if the resulting bit offset
+ doesn't fit into shwi.
+
+2017-07-31 Martin Liska <mliska@suse.cz>
+
+ * gimplify.c (mostly_copy_tree_r): Remove Java specific hunk.
+ (gimplify_save_expr): Fix comment.
+
+2017-07-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/79793
+ * config/i386/i386.c (ix86_function_arg): Update arguments for
+ exception handler.
+ (ix86_compute_frame_layout): Set the initial stack offset to
+ INCOMING_FRAME_SP_OFFSET. Update red-zone offset with
+ INCOMING_FRAME_SP_OFFSET.
+ (ix86_expand_epilogue): Don't pop the 'ERROR_CODE' off the
+ stack before exception handler returns.
+ * config/i386/i386.h (INCOMING_FRAME_SP_OFFSET): Add the
+ the 'ERROR_CODE' for exception handler.
+
+2017-07-30 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.h (ASM_PRINTF_EXTENSIONS): New macro.
+ (ASM_OUTPUT_REG_PUSH): Rewrite with new operand modifiers.
+ (ASM_OUTPUT_REG_POP): Ditto.
+ * config/i386/i386.c (ix86_asm_output_function_label): Use fputs
+ instead of asm_fprintf to output pure string.
+
+2017-07-29 Jakub Jelinek <jakub@redhat.com>
+
+ * debug.h (struct gcc_debug_hooks): Add IMPLICIT argument
+ to imported_module_or_decl hook.
+ (debug_nothing_tree_tree_tree_bool): Remove.
+ (debug_nothing_tree_tree_tree_bool_bool): New declaration.
+ * debug.c (do_nothing_debug_hooks): Use
+ debug_nothing_tree_tree_tree_bool_bool instead of
+ debug_nothing_tree_tree_tree_bool.
+ * vmsdbgout.c (vmsdbg_debug_hooks): Likewise.
+ * dbxout.c (dbx_debug_hooks, xcoff_debug_hooks): Likewise.
+ * sdbout.c (sdb_debug_hooks): Likewise.
+ * dwarf2out.c (dwarf2_lineno_debug_hooks): Likewise.
+ (gen_namespace_die): Add DW_AT_export_symbols attribute if
+ langhook wants it.
+ (dwarf2out_imported_module_or_decl): Add IMPLICIT argument,
+ if true, -gdwarf-5 and decl will have DW_AT_export_symbols
+ attribute, don't add anything.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * fold-const.c (fold_build1_stat_loc): Remove _stat from name.
+ (fold_build2_stat_loc): Likewise.
+ (fold_build3_stat_loc): Likewise.
+ * fold-const.h (fold_build1, fold_build2, fold_build3): Adjust.
+ (fold_build1_loc): Remove macro.
+ (fold_build2_loc): Likewise.
+ (fold_build3_loc): Likewise.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * gimple.c (gimple_build_debug_bind_stat): Remove _stat from name.
+ (gimple_build_debug_bind_source_stat): Likewise.
+ * gimple.h (gimple_build_debug_bind): Remove macro.
+ (gimple_build_debug_bind_source): Likewise.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * bitmap.c (bitmap_alloc): Adjust.
+ (bitmap_gc_alloc): Likewise.
+ * bitmap.h (bitmap_initialize_stat): Remove _stat from name.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * bitmap.c (bitmap_obstack_alloc_stat): Rename to bitmap_alloc.
+ (bitmap_gc_alloc_stat): Rename to bitmap_gc_alloc.
+ * bitmap.h (bitmap_obstack_alloc_stat): Adjust prototype.
+ (bitmap_gc_alloc_stat): Likewise.
+ (BITMAP_ALLOC, BITMAP_GGC_ALLOC): Adjust.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * rtl.c (shallow_copy_rtx_stat): Remove _stat from name.
+ * rtl.h (shallow_copy_rtx): Remove macro.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * emit-rtl.c (gen_raw_REG): Adjust.
+ * gengenrtl.c (gendef): Likewise.
+ * rtl.c (rtx_alloc_stat): Remove _stat from name.
+ * rtl.h (rtx_alloc): Remove macro.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * tree.c (build_tree_list_vec_stat): Remove _stat from name.
+ (build_tree_list_stat): Likewise.
+ * tree.h (build_tree_list): Remove macro.
+ (build_tree_list_vec): Likewise.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * tree.c (make_vector_stat): Remove _stat from name.
+ (build_vector_stat): Likewise.
+ * tree.h (make_vector_stat): Remove macro.
+ (build_vector_stat): Likewise.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * tree.h (build_var_debug_value): Remove prototype.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * tree.c (tree_cons_stat): Remove _stat from name.
+ * tree.h (tree_cons): Remove macro.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * tree.c (build_vl_exp_stat): Remove _stat from name.
+ * tree.h (build_vl_exp): Remove macro.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * tree.c (build_decl_stat): Remove _stat from name.
+ * tree.h (build_decl): Remove macro.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * gimple.c (gimple_build_with_ops_stat): Adjust.
+ (gimple_alloc_stat): Remove _stat from name.
+ * gimple.h (gimple_alloc): Remove macro.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * tree.c (make_tree_vec_stat): Remove _stat from name.
+ (grow_tree_vec_stat): Likewise.
+ * tree.h (make_tree_vec_stat): Adjust prototype.
+ (grow_tree_vec_stat): Likewise.
+ (make_tree_vec): Remove macro.
+ (grow_tree_vec): Likewise.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * fold-const.c (fold_build1_stat_loc): Adjust.
+ (fold_build2_stat_loc): Likewise.
+ (fold_build3_stat_loc): Likewise.
+ * tree.c (build0_stat): Remove _stat from name.
+ (build1_stat): Likewise.
+ (build2_stat): Likewise.
+ (build3_stat): Likewise.
+ (build4_stat): Likewise.
+ (build5_stat): Likewise.
+ * tree.h (build1_loc): Remove macro, and rename _stat function
+ to this.
+ (build2_loc): Likewise.
+ (build3_loc): Likewise.
+ (build4_loc): Likewise.
+ (build5_loc): Likewise.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * tree.c (make_int_cst_stat): Remove _stat from name.
+ * tree.h (make_int_cst_stat): Adjust prototype.
+ (make_int_cst): Remove macro.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * tree.c (make_tre_binfo_stat): Remove _stat from name.
+ * tree.h (make_tree_binfo_stat): Adjust prototype.
+ (make_tree_binfo): Remove.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * tree.c (copy_node_stat): Rename to copy_node.
+ (build_distinct_type_copy): Adjust.
+ * tree.h (copy_node_stat): Adjust prototype.
+ (copy_node): Remove macro.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * tree.c (make_node_stat): rename to make_node.
+ (build_tree_list_stat): Adjust.
+ (build0_stat): Likewise.
+ (build2_stat): Likewise.
+ (build3_stat): Likewise.
+ (build4_stat): Likewise.
+ (build5_stat): Likewise.
+ (build_decl_stat): Likewise.
+ * tree.h (make_node_stat): Adjust prototype.
+ (make_node): remove macro.
+
+2017-07-28 Peter Bergner <bergner@vnet.ibm.com>
+
+ * config/rs6000/ppc-auxv.h (PPC_FEATURE2_DARN): New define.
+ (PPC_FEATURE2_SCV): Likewise.
+ * config/rs6000/rs6000.c (cpu_supports_info): Use them.
+
+2017-07-28 Tamar Christina <tamar.christina@arm.com>
+
+ * config/aarch64/aarch64.c
+ (aarch64_internal_mov_immediate): Add new special pattern.
+ * config/aarch64/aarch64.md (*movdi_aarch64):
+ Add reg/32bit const mov case.
+
+2017-07-28 Tamar Christina <tamar.christina@arm.com>
+ Richard Sandiford <richard.sandiford@linaro.org>
+
+ * config/aarch64/aarch64.md (mov<mode>): Generalize.
+ (*movhf_aarch64, *movsf_aarch64, *movdf_aarch64):
+ Add integer and movi cases.
+ (movi-split-hf-df-sf split, fp16): New.
+ (enabled): Added TARGET_FP_F16INST.
+ * config/aarch64/iterators.md (GPF_HF): New.
+ * config/aarch64/predicates.md (aarch64_reg_or_fp_float): New.
+
+2017-07-28 Tamar Christina <tamar.christina@arm.com>
+
+ * config/aarch64/aarch64.c
+ (aarch64_simd_container_mode): Add prototype.
+ (aarch64_expand_mov_immediate): Add HI support.
+ (aarch64_reinterpret_float_as_int, aarch64_float_const_rtx_p: New.
+ (aarch64_can_const_movi_rtx_p): New.
+ (aarch64_preferred_reload_class):
+ Remove restrictions of using FP registers for certain SIMD operations.
+ (aarch64_rtx_costs): Added new cost for CONST_DOUBLE moves.
+ (aarch64_valid_floating_const): Add integer move validation.
+ (aarch64_simd_imm_scalar_p): Remove.
+ (aarch64_output_scalar_simd_mov_immediate): Generalize function.
+ (aarch64_legitimate_constant_p): Expand list of supported cases.
+ * config/aarch64/aarch64-protos.h
+ (aarch64_float_const_rtx_p, aarch64_can_const_movi_rtx_p): New.
+ (aarch64_reinterpret_float_as_int): New.
+ (aarch64_simd_imm_scalar_p): Remove.
+ * config/aarch64/constraints.md (Uvi): New.
+ (Dd): Split into Ds and new Dd.
+ * config/aarch64/aarch64.md (*movsi_aarch64):
+ Add SIMD mov case.
+ (*movdi_aarch64): Add SIMD mov case.
+
+2017-07-28 Bin Cheng <bin.cheng@arm.com>
+
+ * tree-predcom.c: (struct chain): Handle store-store chain in which
+ stores for elimination only store loop invariant values.
+ (execute_pred_commoning_chain): Ditto.
+ (prepare_initializers_chain_store_elim): Ditto.
+ (prepare_finalizers): Ditto.
+ (is_inv_store_elimination_chain): New function.
+ (initialize_root_vars_store_elim_1): New function.
+
+2017-07-28 Bin Cheng <bin.cheng@arm.com>
+
+ * tree-predcom.c: Revise general description of the pass.
+ (enum chain_type): New enum type for store elimination.
+ (struct chain): New field supporting store elimination.
+ (struct component): Ditto.
+ (dump_chain): Dump store-stores chain.
+ (release_chain): Release resources.
+ (split_data_refs_to_components): Compute and create component
+ contains only stores for elimination.
+ (get_chain_last_ref_at): New function.
+ (make_invariant_chain): Initialization.
+ (make_rooted_chain): Specify chain type in parameter and record it.
+ (add_looparound_copies): Skip for store-stores chain.
+ (determine_roots_comp): Compute type of chain and pass it to
+ make_rooted_chain.
+ (initialize_root_vars_store_elim_2): New function.
+ (finalize_eliminated_stores): New function.
+ (remove_stmt): Handle store for elimination.
+ (execute_pred_commoning_chain): Execute predictive commoning on
+ store-store chains.
+ (determine_unroll_factor): Skip unroll for store-stores chain.
+ (prepare_initializers_chain_store_elim): New function.
+ (prepare_initializers_chain): Hanlde store-store chain.
+ (prepare_finalizers_chain, prepare_finalizers): New function.
+ (tree_predictive_commoning_loop): Return integer value indicating
+ if loop is unrolled or lcssa form is corrupted.
+ (tree_predictive_commoning): Rewrite for lcssa form if necessary.
+
+2017-07-28 Bin Cheng <bin.cheng@arm.com>
+
+ * tree-predcom.c (initialize_root): Delete.
+ (execute_pred_commoning_chain): Initialize root vars and replace
+ reference of non-combined chain directly, rather than call above
+ function.
+
+2017-07-28 Bin Cheng <bin.cheng@arm.com>
+
+ * tree-predcom.c (ref_at_iteration): Add parameter NITERS. Compute
+ memory reference to DR at (NITERS + ITERS)-th iteration of loop.
+
+2017-07-28 Bin Cheng <bin.cheng@arm.com>
+
+ * tree-predcom.c (struct chain): New field init_seq.
+ (release_chain): Release init_seq.
+ (prepare_initializers_chain): Record intialization stmts in above
+ field.
+ (insert_init_seqs): New function.
+ (tree_predictive_commoning_loop): Call insert_init_seqs.
+
+2017-07-28 Bin Cheng <bin.cheng@arm.com>
+
+ * tree-predcom.c (determine_roots_comp): Skip trivial components.
+
+2017-07-28 Richard Biener <rguenther@suse.de>
+
+ * match.pd: Remove superfluous :c.
+ * genmatch.c (simplify::id): Add member.
+ (lower_commutative, lower_opt_convert, lower_cond, lower_for):
+ Copy id.
+ (current_id): New global.
+ (dt_node::parent): Move from ...
+ (dt_operand::parent): ... here. Add for_id member.
+ (is_a_helper <dt_operand *>::test): DT_TRUE is also a dt_operand.
+ (decision_tree::find_node): Relax order requirement when
+ merging DT_TRUE nodes to ones inbetween the current simplify
+ and the one we try to merge with. Add diagnostic whenever
+ we need to enforce pattern order by not merging.
+ (decision_tree::insert): Set current_id.
+ (decision_tree::print_node): Dump parent node and for_id.
+ (parser::last_id): Add member.
+ (parser::push_simplify): Assign unique id.
+ (parser::parser): Initialize last_id.
+
+2017-07-28 Martin Liska <mliska@suse.cz>
+
+ PR sanitizer/81340
+ * sanopt.c (sanitize_rewrite_addressable_params): Set VALUE_EXPR after
+ gimple_build_debug_bind.
+
+2017-07-28 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81502
+ * match.pd: Add pattern combining BIT_INSERT_EXPR with
+ BIT_FIELD_REF.
+ * tree-cfg.c (verify_expr): Verify types of BIT_FIELD_REF
+ size/pos operands.
+ (verify_gimple_assign_ternary): Likewise for BIT_INSERT_EXPR pos.
+ * gimple-fold.c (maybe_canonicalize_mem_ref_addr): Use bitsizetype
+ for BIT_FIELD_REF args.
+ * fold-const.c (make_bit_field_ref): Likewise.
+ * tree-vect-stmts.c (vectorizable_simd_clone_call): Likewise.
+
+2017-07-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR sanitizer/80998
+ * sanopt.c (pass_sanopt::execute): Handle IFN_UBSAN_PTR.
+ * tree-ssa-alias.c (call_may_clobber_ref_p_1): Likewise.
+ * flag-types.h (enum sanitize_code): Add SANITIZER_POINTER_OVERFLOW.
+ Or it into SANITIZER_UNDEFINED.
+ * ubsan.c: Include gimple-fold.h and varasm.h.
+ (ubsan_expand_ptr_ifn): New function.
+ (instrument_pointer_overflow): New function.
+ (maybe_instrument_pointer_overflow): New function.
+ (instrument_object_size): Formatting fix.
+ (pass_ubsan::execute): Call instrument_pointer_overflow
+ and maybe_instrument_pointer_overflow.
+ * internal-fn.c (expand_UBSAN_PTR): New function.
+ * ubsan.h (ubsan_expand_ptr_ifn): Declare.
+ * sanitizer.def (__ubsan_handle_pointer_overflow,
+ __ubsan_handle_pointer_overflow_abort): New builtins.
+ * tree-ssa-tail-merge.c (merge_stmts_p): Handle IFN_UBSAN_PTR.
+ * internal-fn.def (UBSAN_PTR): New internal function.
+ * opts.c (sanitizer_opts): Add pointer-overflow.
+ * lto-streamer-in.c (input_function): Handle IFN_UBSAN_PTR.
+ * fold-const.c (build_range_check): Compute pointer range check in
+ integral type if pointer arithmetics would be needed. Formatting
+ fixes.
+
+2017-07-28 Martin Liska <mliska@suse.cz>
+
+ PR sanitizer/81460
+ * sanopt.c (sanitize_rewrite_addressable_params): Do not rewrite
+ parameters that are of a variable-length.
+
+2017-07-28 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * config.gcc (powerpc-*-rtems*): Remove rs6000/eabi.h. Add
+ rs6000/biarch64.h.
+ * config/rs6000/rtems.h (ASM_DECLARE_FUNCTION_SIZE): New macro.
+ (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Likewise.
+ (CRT_CALL_STATIC_FUNCTION): Likewise.
+ (ASM_DEFAULT_SPEC): New define.
+ (ASM_SPEC32): Likewise.
+ (ASM_SPEC64): Likewise.
+ (ASM_SPEC_COMMON): Likewise.
+ (ASM_SPEC): Likewise.
+ (INVALID_64BIT): Likewise.
+ (LINK_OS_DEFAULT_SPEC): Likewise.
+ (LINK_OS_SPEC32): Likewise.
+ (LINK_OS_SPEC64): Likewise.
+ (POWERPC_LINUX): Likewise.
+ (PTRDIFF_TYPE): Likewise.
+ (RESTORE_FP_PREFIX): Likewise.
+ (RESTORE_FP_SUFFIX): Likewise.
+ (SAVE_FP_PREFIX): Likewise.
+ (SAVE_FP_SUFFIX): Likewise.
+ (SIZE_TYPE): Likewise.
+ (SUBSUBTARGET_OVERRIDE_OPTIONS): Likewise.
+ (TARGET_64BIT): Likewise.
+ (TARGET_64BIT): Likewise.
+ (TARGET_AIX): Likewise.
+ (WCHAR_TYPE_SIZE): Likewise.
+ (WCHAR_TYPE): Undefine.
+ (TARGET_OS_CPP_BUILTINS): Add 64-bit PowerPC defines.
+ (CPP_OS_DEFAULT_SPEC): Use previous CPP_OS_RTEMS_SPEC.
+ (CPP_OS_RTEMS_SPEC): Delete.
+ (SUBSUBTARGET_EXTRA_SPECS): Remove cpp_os_rtems. Add
+ asm_spec_common, asm_spec32, asm_spec64, link_os_spec32, and
+ link_os_spec64.
+ * config/rs6000/t-rtems: Add mcpu=e6500/m64 multilibs.
+
+2017-07-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/81578
+ * tree-parloops.c (build_new_reduction): Bail out if
+ reduction_code isn't one of the standard OpenMP reductions.
+ Move the details printing after that decision.
+
+2017-07-27 Peter Bergner <bergner@vnet.ibm.com>
+
+ * config/rs6000/predicates.md (volatile_mem_operand): Remove code
+ related to reload_in_progress.
+ (splat_input_operand): Likewise.
+ * config/rs6000/rs6000-protos.h (rs6000_secondary_memory_needed_rtx):
+ Delete prototype.
+ * config/rs6000/rs6000.c (machine_function): Remove sdmode_stack_slot
+ field.
+ (TARGET_EXPAND_TO_RTL_HOOK): Delete.
+ (TARGET_INSTANTIATE_DECLS): Likewise.
+ (legitimate_indexed_address_p): Delete reload_in_progress code.
+ (rs6000_debug_legitimate_address_p): Likewise.
+ (rs6000_eliminate_indexed_memrefs): Likewise.
+ (rs6000_emit_le_vsx_store): Likewise.
+ (rs6000_emit_move_si_sf_subreg): Likewise.
+ (rs6000_emit_move): Likewise.
+ (register_to_reg_type): Likewise.
+ (rs6000_pre_atomic_barrier): Likewise.
+ (rs6000_machopic_legitimize_pic_address): Likewise.
+ (rs6000_allocate_stack_temp): Likewise.
+ (rs6000_address_for_fpconvert): Likewise.
+ (rs6000_address_for_altivec): Likewise.
+ (rs6000_secondary_memory_needed_rtx): Delete function.
+ (rs6000_check_sdmode): Likewise.
+ (rs6000_alloc_sdmode_stack_slot): Likewise.
+ (rs6000_instantiate_decls): Likewise.
+ * config/rs6000/rs6000.h (SECONDARY_MEMORY_NEEDED_RTX): Delete.
+ * config/rs6000/rs6000.md (splitter for *movsi_got_internal):
+ Delete reload_in_progress.
+ (*vec_reload_and_plus_<mptrsize>): Likewise.
+ * config/rs6000/vsx.md (vsx_mul_v2di): Likewise.
+ (vsx_div_v2di): Likewise.
+ (vsx_udiv_v2di): Likewise.
+
+2017-07-27 Peter Bergner <bergner@vnet.ibm.com>
+
+ * config/rs6000/rs6000.opt (mlra): Replace with stub.
+ * config/rs6000/rs6000-cpus.def (POWERPC_MASKS): Delete OPTION_MASK_LRA.
+ * config/rs6000/rs6000.c (TARGET_LRA_P): Delete.
+ (rs6000_debug_reg_global): Delete print of LRA status.
+ (rs6000_option_override_internal): Delete dead LRA related code.
+ (rs6000_lra_p): Delete function.
+ * doc/invoke.texi (RS/6000 and PowerPC Options): Delete -mlra.
+
+2017-07-27 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * config.gcc (riscv*-*-elf*): Add (riscv*-*-rtems*).
+ * config/riscv/rtems.h: New file.
+
+2017-07-27 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+ Sudakshina Das <sudi.das@arm.com>
+
+ * config/aarch64/aarch64.md
+ (define_split for and<mode>3nr_compare): Move
+ non aarch64_logical_operand to a register.
+ (define_split for and_<SHIFT:optab><mode>3nr_compare0): Move non
+ register immediate operand to a register.
+ * config/aarch64/predicates.md (aarch64_mov_imm_operand): New.
+
+2017-07-27 Peter Bergner <bergner@vnet.ibm.com>
+
+ PR middle-end/81564
+ * tree-cfg.c (group_case_labels_stmt): Handle already deleted blocks.
+
+2017-07-27 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81573
+ PR tree-optimization/81494
+ * tree-vect-loop.c (vect_create_epilog_for_reduction): Handle
+ multi defuse cycle case.
+
+2017-07-27 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81571
+ * tree-vect-slp.c (vect_build_slp_tree): Properly verify reduction
+ PHIs.
+
+2017-07-27 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/sparc/sparc.c (sparc_option_override): Set MASK_FSMULD flag
+ earlier and only if MASK_FPU is set. Adjust formatting.
+
+2017-07-27 Martin Liska <mliska@suse.cz>
+
+ * opt-functions.awk: Add validation of value of Init.
+ * optc-gen.awk: Pass new argument.
+
+2017-07-27 Martin Liska <mliska@suse.cz>
+
+ * auto-profile.c (autofdo_source_profile::update_inlined_ind_target):
+ Fix wrong condition.
+
+2017-07-27 Martin Liska <mliska@suse.cz>
+
+ * auto-profile.c (afdo_annotate_cfg): Assign zero counts to
+ BBs and edges seen by autoFDO.
+
+2017-07-27 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81502
+ * tree-ssa.c (non_rewritable_lvalue_p): Handle BIT_INSERT_EXPR
+ with incompatible but same sized type.
+ (execute_update_addresses_taken): Likewise.
+
+2017-07-27 James Greenhalgh <james.greenhalgh@arm.com>
+
+ * tree-ssa-loop-ch.c (pass_ch::process_loop_p): Guard on
+ flag_tree_loop_vectorize rather than flag_tree_vectorize.
+
+2017-07-27 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ PR target/81534
+ * config/s390/s390.md ("*atomic_compare_and_swap<mode>_1")
+ ("*atomic_compare_and_swapdi_2", "*atomic_compare_and_swapsi_3"):
+ Change s_operand to memory_operand.
+
+2017-07-27 Richard Sandiford <richard.sandiford@linaro.org>
+
+ * config/rs6000/rs6000-protos.h (rs6000_emit_le_vsx_permute): Declare.
+ * config/rs6000/rs6000.c (rs6000_gen_le_vsx_permute): Replace with...
+ (rs6000_emit_le_vsx_permute): ...this. Take the destination as input.
+ Emit instructions rather than returning an expression. Handle TFmode
+ and KFmode by casting to TImode.
+ (rs6000_emit_le_vsx_load): Update to use rs6000_emit_le_vsx_permute.
+ (rs6000_emit_le_vsx_store): Likewise.
+ * config/rs6000/vsx.md (VSX_TI): New iterator.
+ (*vsx_le_permute_<mode>): Use it instead of VSX_LE_128.
+ (*vsx_le_undo_permute_<mode>): Likewise.
+ (*vsx_le_perm_load_<mode>): Use rs6000_emit_le_vsx_permute to
+ emit the split sequence.
+ (*vsx_le_perm_store_<mode>): Likewise.
+
+2017-07-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/81555
+ PR tree-optimization/81556
+ * tree-ssa-reassoc.c (rewrite_expr_tree): Add NEXT_CHANGED argument,
+ if true, force CHANGED for the recursive invocation.
+ (reassociate_bb): Remember original length of ops array, pass
+ len != orig_len as NEXT_CHANGED in rewrite_expr_tree call.
+
+ * attribs.c (decl_attributes): Imply noinline, noclone and no_icf
+ attributes for noipa attribute. For naked attribute use
+ lookup_attribute first before lookup_attribute_spec.
+ * final.c (rest_of_handle_final): Disable IPA RA for functions with
+ noipa attribute.
+ * ipa-visibility.c (non_local_p): Fix comment typos. Return true
+ for functions with noipa attribute.
+ (cgraph_externally_visible_p): Return true for functions with noipa
+ attribute.
+ * cgraph.c (cgraph_node::get_availability): Return AVAIL_INTERPOSABLE
+ for functions with noipa attribute.
+ * doc/extend.texi: Document noipa function attribute.
+ * tree-ssa-structalias.c (refered_from_nonlocal_fn): Set *nonlocal_p
+ also for functions with noipa attribute.
+ (ipa_pta_execute): Set nonlocal_p also for nodes with noipa attribute.
+
+2017-07-26 Andrew Pinski <apinski@cavium.com>
+
+ * config/aarch64/aarch64.c (thunderx_vector_cost): Decrease cost of
+ vec_unalign_load_cost and vec_unalign_store_cost.
+
+2017-07-26 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000-cpus.def (ISA_2_7_MASKS_SERVER): Delete
+ -mvsx-small-integer option.
+ (ISA_3_0_MASKS_IEEE): Likewise.
+ (OTHER_VSX_VECTOR_MASKS): Likewise.
+ (POWERPC_MASKS): Likewise.
+ * config/rs6000/rs6000.opt (-mvsx-small-integer): Likewise.
+ * config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok): Simplify
+ code, only testing for DImode being allowed in non-VSX floating
+ point registers.
+ (rs6000_init_hard_regno_mode_ok): Change TARGET_VSX_SMALL_INTEGER
+ to TARGET_P8_VECTOR test. Remove redundant VSX test inside of
+ another VSX test.
+ (rs6000_option_override_internal): Delete -mvsx-small-integer.
+ (rs6000_expand_vector_set): Change TARGET_VSX_SMALL_INTEGER to
+ TARGET_P8_VECTOR test.
+ (rs6000_secondary_reload_simple_move): Likewise.
+ (rs6000_preferred_reload_class): Delete TARGET_VSX_SMALL_INTEGER,
+ since TARGET_P9_VECTOR was already tested.
+ (rs6000_opt_masks): Remove -mvsx-small-integer.
+ * config/rs6000/vsx.md (vsx_extract_<mode>): Delete
+ TARGET_VSX_SMALL_INTEGER, since a test for TARGET_P9_VECTOR was
+ used.
+ (vsx_extract_<mode>_p9): Delete TARGET_VSX_SMALL_INTEGER, since a
+ test for TARGET_VEXTRACTUB was used, and that uses
+ TARGET_P9_VECTOR.
+ (p9 extract splitter): Likewise.
+ (vsx_extract_<mode>_di_p9): Likewise.
+ (vsx_extract_<mode>_store_p9): Likewise.
+ (vsx_extract_si): Delete TARGET_VSX_SMALL_INTEGER, since a test
+ for TARGET_P9_VECTOR was used. Delete code that is now dead with
+ the elimination of TARGET_VSX_SMALL_INTEGER.
+ (vsx_extract_<mode>_p8): Likewise.
+ (vsx_ext_<VSX_EXTRACT_I:VS_scalar>_fl_<FL_CONV:mode>): Likewise.
+ (vsx_ext_<VSX_EXTRACT_I:VS_scalar>_ufl_<FL_CONV:mode>): Likewise.
+ (vsx_set_<mode>_p9): Likewise.
+ (vsx_set_v4sf_p9): Likewise.
+ (vsx_set_v4sf_p9_zero): Likewise.
+ (vsx_insert_extract_v4sf_p9): Likewise.
+ (vsx_insert_extract_v4sf_p9_2): Likewise.
+ * config/rs6000/rs6000.md (sign extend splitter): Change
+ TARGET_VSX_SMALL_INTEGER to TARGET_P8_VECTOR test.
+ (floatsi<mode>2_lfiwax_mem): Likewise.
+ (floatunssi<mode>2_lfiwzx_mem): Likewise.
+ (float<QHI:mode><FP_ISA3:mode>2): Delete TARGET_VSX_SMALL_INTEGER,
+ since a test for TARGET_P9_VECTOR was used.
+ (float<QHI:mode><FP_ISA3:mode>2_internal): Likewise.
+ (floatuns<QHI:mode><FP_ISA3:mode>2): Likewise.
+ (floatuns<QHI:mode><FP_ISA3:mode>2_internal): Likewise.
+ (fix_trunc<mode>si2): Change TARGET_VSX_SMALL_INTEGER to
+ TARGET_P8_VECTOR test.
+ (fix_trunc<mode>si2_stfiwx): Likewise.
+ (fix_trunc<mode>si2_internal): Likewise.
+ (fix_trunc<SFDF:mode><QHI:mode>2): Delete
+ TARGET_VSX_SMALL_INTEGER, since a test for TARGET_P9_VECTOR was
+ used.
+ (fix_trunc<SFDF:mode><QHI:mode>2_internal): Likewise.
+ (fixuns_trunc<mode>si2): Change TARGET_VSX_SMALL_INTEGER to
+ TARGET_P8_VECTOR test.
+ (fixuns_trunc<mode>si2_stfiwx): Likewise.
+ (fixuns_trunc<SFDF:mode><QHI:mode>2): Delete
+ TARGET_VSX_SMALL_INTEGER, since a test for TARGET_P9_VECTOR was
+ used.
+ (fixuns_trunc<SFDF:mode><QHI:mode>2_internal): Likewise.
+ (fctiw<u>z_<mode>_smallint): Delete TARGET_VSX_SMALL_INTEGER,
+ since a test for TARGET_P9_VECTOR was used.
+ (splitter for loading small constants): Likewise.
+
+2017-07-26 Andrew Pinski <apinski@cavium.com>
+
+ * config/aarch64/aarch64.c (thunderx_vector_cost): Fix
+ vec_fp_stmt_cost.
+
+2017-07-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/81563
+ * config/i386/i386.c (sp_valid_at): Properly check CFA offset.
+ (fp_valid_at): Likewise.
+
+2017-07-26 James Greenhalgh <james.greenhalgh@arm.com>
+
+ * config/aarch64/aarch64.c (cortexa57_addrcost_table): Remove.
+ (qdf24xx_addrcost_table): Likewise.
+ (cortexa57_tunings): Update to use generic_branch_cost.
+ (cortexa72_tunings): Likewise.
+ (cortexa73_tunings): Likewise.
+ (qdf24xx_tunings): Likewise.
+
+2017-07-26 James Greenhalgh <james.greenhalgh@arm.com>
+
+ * config/aarch64/aarch64.c (cortexa57_branch_cost): Remove.
+ (thunderx2t99_branch_cost): Likewise.
+ (cortexa35_tunings): Update to use generic_branch_cost.
+ (cortexa53_tunings): Likewise.
+ (cortexa57_tunings): Likewise.
+ (cortexa72_tunings): Likewise.
+ (cortexa73_tunings): Likewise.
+ (thunderx2t99_tunings): Likewise.
+
+2017-07-26 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * config/sparc/sparc.c (dump_target_flag_bits): Dump MASK_FSMULD.
+ (sparc_option_override): Honour MASK_FSMULD.
+ * config/sparc/sparc.h (MASK_FEATURES): Add MASK_FSMULD.
+ * config/sparc/sparc.md (muldf3_extend): Use TARGET_FSMULD.
+ * config/sparc/sparc.opt (mfsmuld): New option.
+ * doc/invoke.texi (mfsmuld): Document option.
+
+2017-07-26 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/70992
+ * tree.c (build2_stat): Don't set TREE_CONSTANT on divisions by zero.
+
+2017-07-26 Richard Biener <rguenther@suse.de>
+
+ * gimple-match-head.c (do_valueize): Return OP if valueize
+ returns NULL_TREE.
+ (get_def): New helper to get at the def stmt of a SSA name
+ if valueize allows.
+ * genmatch.c (dt_node::gen_kids_1): Use get_def instead of
+ do_valueize to get at the def stmt.
+ (dt_operand::gen_gimple_expr): Simplify do_valueize calls.
+
+2017-07-26 Wilco Dijkstra <wdijkstr@arm.com>
+
+ PR middle-end/46932
+ * auto-inc-dec.c (parse_add_or_inc): Block autoinc on sfp.
+
+2017-07-26 Martin Liska <mliska@suse.cz>
+
+ PR sanitize/81186
+ * function.c (expand_function_start): Make expansion of
+ nonlocal_goto_save_area after parm_birth_insn.
+
+2017-07-26 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * config/sparc/sparc.c (sparc_option_override): Remove MASK_FPU
+ from all CPU target flags enable members.
+
+2017-07-26 Richard Biener <rguenther@suse.de>
+
+ * genmatch.c (dt_simplify::gen): Make iterator vars const.
+ (decision_tree::gen): Make 'type' const.
+ (write_predicate): Likewise.
+
+2017-07-24 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_init_hard_regno_mode_ok):
+ Eliminate TARGET_UPPER_REGS_{DF,DI,SF} usage.
+ (rs6000_option_override_internal): Likewise.
+ (rs6000_expand_vector_set): Likewise.
+ * config/rs6000/rs6000.h (TARGET_UPPER_REGS_DF): Delete.
+ (TARGET_UPPER_REGS_SF): Likewise.
+ (TARGET_UPPER_REGS_DI): Likewise.
+ (TARGET_VEXTRACTUB): Eliminate TARGET_UPPER_REGS_{DF,DI,SF}.
+ (TARGET_DIRECT_MOVE_64BIT): Likewise.
+ * config/rs6000/rs6000.md (ALTIVEC_DFORM): Likewise.
+ (float<QHI:mode><FP_ISA3:mode>2_internal): Likewise.
+ (Splitters for DI constants in Altivec registers): Likewise.
+ * config/rs6000/vsx.md (vsx_set_<mode>_p9): Likewise.
+ (vsx_set_v4sf_p9): Likewise.
+ (vsx_set_v4sf_p9_zero): Likewise.
+ (vsx_insert_extract_v4sf_p9): Likewise.
+ (vsx_insert_extract_v4sf_p9_2): Likewise.
+
+2017-07-25 Carl Love <cel@us.ibm.com>
+
+ * doc/extend.texi: Update the built-in documentation file for the
+ existing built-in functions
+ vector signed char vec_cnttz (vector signed char);
+ vector unsigned char vec_cnttz (vector unsigned char);
+ vector signed short vec_cnttz (vector signed short);
+ vector unsigned short vec_cnttz (vector unsigned short);
+ vector signed int vec_cnttz (vector signed int);
+ vector unsigned int vec_cnttz (vector unsigned int);
+ vector signed long long vec_cnttz (vector signed long long);
+ vector unsigned long long vec_cnttz (vector unsigned long long);
+
+2017-07-25 Andrew Pinski <apinski@cavium.com>
+
+ * tree-ssa-uninit.c (warn_uninitialized_vars): Don't warn about memory
+ accesses where the use is for the first operand of a BIT_INSERT.
+
+2017-07-25 Jim Wilson <jim.wilson@linaro.org>
+
+ PR bootstrap/81521
+ * config/i386/winnt-cxx.c (i386_pe_adjust_class_at_definition): Look
+ for FUNCTION_DECLs in TYPE_FIELDS rather than TYPE_METHODS.
+
+2017-07-25 Jim Wilson <jim.wilson@linaro.org>
+
+ * config/i386/gstabs.h: Delete.
+ * config/i386/openbsd.h, config/i386/t-openbsd: Likewise.
+
+2017-07-25 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (ix86_decompose_address): Do not check for
+ register RTX when looking at index_reg or base_reg.
+ * config/i386/i386.h (INCOMING_RETURN_ADDR_RTX): Use stack_pointer_rtx.
+
+2017-07-25 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gimple.c (gimple_assign_set_rhs_with_ops): Do not ask gsi_replace
+ to update EH info here.
+
+2017-07-25 Alexander Monakov <amonakov@ispras.ru>
+
+ * match.pd ((X * CST1) * CST2): Simplify to X * (CST1 * CST2).
+
+2017-07-25 Alexander Monakov <amonakov@ispras.ru>
+
+ * match.pd ((X * CST) * Y): Reassociate to (X * Y) * CST.
+
+2017-07-25 Torsten Duwe <duwe@suse.de>
+
+ * common.opt: Introduce -fpatchable-function-entry
+ command line option, and its variables function_entry_patch_area_size
+ and function_entry_patch_area_start.
+ * opts.c (common_handle_option): Add -fpatchable_function_entry_ case,
+ including a two-value parser.
+ * target.def (print_patchable_function_entry): New target hook.
+ * targhooks.h (default_print_patchable_function_entry): New function.
+ * targhooks.c (default_print_patchable_function_entry): Likewise.
+ * toplev.c (process_options): Switch off IPA-RA if
+ patchable function entries are being generated.
+ * varasm.c (assemble_start_function): Look at the
+ patchable-function-entry command line switch and current
+ function attributes and maybe generate NOP instructions by
+ calling the print_patchable_function_entry hook.
+ * doc/extend.texi: Document patchable_function_entry attribute.
+ * doc/invoke.texi: Document -fpatchable_function_entry
+ command line option.
+ * doc/tm.texi.in (TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY):
+ New target hook.
+ * doc/tm.texi: Re-generate.
+
+2017-07-25 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/81532
+ * config/i386/constraints.md (Yd, Ye): Use ALL_SSE_REGS for
+ TARGET_AVX512DQ rather than TARGET_AVX512BW.
+
+2017-07-25 Tamar Christina <tamar.christina@arm.com>
+
+ * config/arm/parsecpu.awk (all_cores): Remove duplicates.
+
+2017-07-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81455
+ * tree-ssa-loop-unswitch.c (find_loop_guard): Make sure to
+ not walk in cycles when looking for guards.
+
+2017-07-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81529
+ * tree-vect-stmts.c (process_use): Disregard live induction PHIs
+ when optimizing backedge uses.
+
+2017-07-25 David Edelsohn <dje.gcc@gmail.com>
+
+ * dwarf2asm.c (dw2_asm_output_nstring): Encode double quote
+ character for AIX.
+ * dwarf2out.c (output_macinfo): Copy debug_line_section_label
+ to dl_section_ref. On AIX, append an expression to subtract
+ the size of the section length to dl_section_ref.
+
+2017-07-25 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * configure.ac: If any of the config.* scripts fail, exit 1.
+ * configure: Regenerate.
+
+2017-07-25 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/81546
+ * tree-ssa-operands.c (verify_imm_links): Remove cap on number
+ of immediate uses, be more verbose on errors.
+
+2017-07-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81510
+ * tree-vect-loop.c (vect_is_simple_reduction): When the
+ reduction stmt is not inside the loop bail out.
+
+2017-07-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81303
+ * tree-vect-loop-manip.c (vect_loop_versioning): Build
+ profitability check against LOOP_VINFO_NITERSM1.
+
+2017-07-25 Alexander Monakov <amonakov@ispras.ru>
+
+ * domwalk.c (cmp_bb_postorder): Simplify.
+ (sort_bbs_postorder): New function. Use it...
+ (dom_walker::walk): ...here to optimize common cases.
+
+2017-07-25 Martin Liska <mliska@suse.cz>
+
+ PR ipa/81520
+ * ipa-visibility.c (function_and_variable_visibility): Make the
+ redirection just on target that supports aliasing.
+ Fix GNU coding style.
+
+2017-07-25 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ PR libgcc/61152
+ * config/aarch64/rtems.h: Add GCC Runtime Library Exception.
+ Format changes.
+ * config/arm/rtems.h: Likewise.
+ * config/bfin/rtems.h: Likewise.
+ * config/i386/rtemself.h: Likewise.
+ * config/lm32/rtems.h: Likewise.
+ * config/m32c/rtems.h: Likewise.
+ * config/m68k/rtemself.h: Likewise.
+ * config/microblaze/rtems.h: Likewise.
+ * config/mips/rtems.h: Likewise.
+ * config/moxie/rtems.h: Likewise.
+ * config/nios2/rtems.h: Likewise.
+ * config/powerpcspe/rtems.h: Likewise.
+ * config/rs6000/rtems.h: Likewise.
+ * config/rtems.h: Likewise.
+ * config/sh/rtems.h: Likewise.
+ * config/sh/rtemself.h: Likewise.
+ * config/sparc/rtemself.h: Likewise.
+
+2017-07-25 Georg-Johann Lay <avr@gjlay.de>
+
+ PR 81487
+ * hsa-brig.c (brig_init): Use xasprintf instead of asprintf.
+ * gimple-pretty-print.c (dump_profile, dump_probability): Same.
+ * tree-ssa-structalias.c (alias_get_name): Same.
+
+2017-07-25 Bin Cheng <bin.cheng@arm.com>
+
+ PR target/81414
+ * config/aarch64/cortex-a57-fma-steering.c (analyze): Skip fmul/fmac
+ instructions if no du chain is found.
+
+2017-07-25 Georg-Johann Lay <avr@gjlay.de>
+
+ * config/avr/avr-log.c (avr_log_vadump) ['T']: Print NULL-TREE.
+
+2017-07-25 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/81505
+ * fold-const.c (fold_negate_const): TREE_OVERFLOW should be
+ sticky.
+
+2017-07-24 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000-cpus.def (ISA_2_6_MASKS_SERVER): Delete
+ upper-regs options.
+ (ISA_2_7_MASKS_SERVER): Likewise.
+ (ISA_3_0_MASKS_IEEE): Likewise.
+ (OTHER_P8_VECTOR_MASKS): Likewise.
+ (OTHER_VSX_VECTOR_MASKS): Likewise.
+ (POWERPC_MASKS): Likewise.
+ (power7 cpu): Use ISA_2_6_MASKS_SERVER instead of using a
+ duplicate list of options.
+ * config/rs6000/rs6000-c.c (rs6000_target_modify_macros): Remove
+ explicit -mupper-regs options.
+ * config/rs6000/rs6000.opt (-mvsx-scalar-memory): Delete
+ -mupper-regs* options. Delete -mvsx-scalar-memory, which was an
+ alias for -mupper-regs-df.
+ * config/rs6000/rs6000.c (rs6000_setup_reg_addr_masks): Likewise.
+ (rs6000_init_hard_regno_mode_ok): Likewise.
+ (rs6000_option_override_internal): Likewise.
+ (rs6000_opt_masks): Likewise.
+ * config/rs6000/rs6000.h (TARGET_UPPER_REGS_DF): Define upper regs
+ options in terms of whether -mvsx or -mpower8-vector was used.
+ (TARGET_UPPER_REGS_DI): Likewise.
+ (TARGET_UPPER_REGS_SF): Likewise.
+ * doc/invoke.texi (RS/6000 and PowerPC Options): Delete the
+ -mupper-regs-* options.
+
+2017-07-24 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * passes.c (emergency_dump_function): Print some empty lines and a
+ header before the RTL dump.
+
+2017-07-24 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * cfgrtl.c (rtl_dump_bb): Don't call NEXT_INSN on NULL.
+
+2017-07-24 Wilco Dijkstra <wdijkstr@arm.com>
+
+ PR target/79041
+ * config/aarch64/aarch64.c (aarch64_classify_symbol):
+ Avoid SYMBOL_SMALL_ABSOLUTE for literals with pc-relative literals.
+
+2017-07-24 Carl Love <cel@us.ibm.com>
+
+ * config/rs6000/rs6000-c.c: Add support for built-in functions
+ vector float vec_extract_fp32_from_shorth (vector unsigned short);
+ vector float vec_extract_fp32_from_shortl (vector unsigned short);
+ * config/rs6000/altivec.h (vec_extract_fp_from_shorth,
+ vec_extract_fp_from_shortl): Add defines for the two builtins.
+ * config/rs6000/rs6000-builtin.def (VEXTRACT_FP_FROM_SHORTH,
+ VEXTRACT_FP_FROM_SHORTL): Add BU_P9V_OVERLOAD_1 and BU_P9V_VSX_1
+ new builtins.
+ * config/rs6000/vsx.md vsx_xvcvhpsp): Add define_insn.
+ (vextract_fp_from_shorth, vextract_fp_from_shortl): Add define_expands.
+ * doc/extend.texi: Update the built-in documentation file for the
+ new built-in function.
+
+2017-07-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR bootstrap/81521
+ * tree.def: Remove TYPE_METHODS documentation, adjust TYPE_FIELDS
+ documentation.
+ * doc/generic.texi: Likewise.
+ * config/i386/winnt-cxx.c (i386_pe_adjust_class_at_definition): Look
+ for FUNCTION_DECLs in TYPE_FIELDS rather than TYPE_METHODS.
+
+2017-07-24 Jackson Woodruff <jackson.woodruff@arm.com>
+
+ * config/aarch64/aarch64-simd.md (aarch64_mla_elt_merge<mode>): New.
+ (aarch64_mls_elt_merge<mode>): Likewise.
+
+2017-07-23 Krister Walfridsson <krister.walfridsson@gmail.com>
+
+ * config.gcc (*-*-netbsd*): Remove check for NetBSD versions not
+ having __cxa_atexit.
+
+2017-07-23 Michael Collison <michael.collison@arm.com>
+
+ * config/arm/arm.c (arm_option_override): Deprecate
+ use of -mstructure-size-boundary.
+ * config/arm/arm.opt: Deprecate -mstructure-size-boundary.
+ * doc/invoke.texi: Deprecate -mstructure-size-boundary.
+
+2017-07-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR target/80695
+ * config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost):
+ Reduce cost estimate for direct moves.
+
+2017-07-23 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/80569
+ * config/i386/i386.c (ix86_option_override_internal): Disable
+ BMI, BMI2 and TBM instructions for -m16.
+
+2017-07-21 Carl Love <cel@us.ibm.com>
+
+ * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add
+ ALTIVEC_BUILTIN_VMULESW, ALTIVEC_BUILTIN_VMULEUW,
+ ALTIVEC_BUILTIN_VMULOSW, ALTIVEC_BUILTIN_VMULOUW entries.
+ * config/rs6000/rs6000.c (rs6000_gimple_fold_builtin,
+ builtin_function_type): Add ALTIVEC_BUILTIN_* case statements.
+ * config/rs6000/altivec.md (MVULEUW, VMULESW, VMULOUW,
+ VMULOSW): New enum "unspec" values.
+ (altivec_vmuleuw, altivec_vmulesw, altivec_vmulouw,
+ altivec_vmulosw): New patterns.
+ * config/rs6000/rs6000-builtin.def (VMLEUW, VMULESW, VMULOUW,
+ VMULOSW): Add definitions.
+
+2017-07-21 Jim Wilson <jim.wilson@linaro.org>
+
+ * config/aarch64/aarch64-cores.def (falkor): Add AARCH64_FL_RDMA.
+ (qdf24xx): Likewise.
+ * config/aarch64/aarch64-options-extensions.def (rdma); New.
+ * config/aarch64/aarch64.h (AARCH64_FL_RDMA): New.
+ (AARCH64_FL_V8_1): Renumber.
+ (AARCH64_FL_FOR_ARCH8_1): Add AARCH64_FL_RDMA.
+ (AARCH64_ISA_RDMA): Use AARCH64_FL_RDMA.
+ * config/aarch64/arm_neon.h: Use +rdma instead of arch=armv8.1-a.
+ * doc/invoke.texi (AArch64 Options): Mention +rmda in -march docs. Add
+ rdma to feature modifiers list.
+
+2017-07-21 Yury Gribov <tetra2005@gmail.com>
+
+ PR middle-end/56727
+ * ipa-visibility (function_and_variable_visibility): Convert
+ recursive PLT call to direct call if appropriate.
+
+2017-07-21 Andrew Pinski <apinski@cavium.com>
+
+ * tree-ssa-sccvn.c (vn_nary_op_eq): Check BIT_INSERT_EXPR's
+ operand 1 to see if the types precision matches.
+ * fold-const.c (operand_equal_p): Likewise.
+
+2017-07-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81303
+ * tree-vect-data-refs.c (vect_get_peeling_costs_all_drs): Pass
+ in datarefs vector. Allow NULL dr0 for no peeling cost estimate.
+ (vect_peeling_hash_get_lowest_cost): Adjust.
+ (vect_enhance_data_refs_alignment): Likewise. Use
+ vect_get_peeling_costs_all_drs to compute the penalty for no
+ peeling to match up costs.
+
+2017-07-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81500
+ * tree-vect-loop.c (vect_is_simple_reduction): Properly fail if
+ we didn't identify a reduction path.
+
+2017-07-21 Tom de Vries <tom@codesourcery.com>
+ Cesar Philippidis <cesar@codesourcery.com>
+
+ PR gcov-profile/81442
+ * config/nvptx/nvptx.c (nvptx_goacc_reduction_init): Add missing edge
+ probabilities.
+
+2017-07-21 Tom de Vries <tom@codesourcery.com>
+
+ PR lto/81430
+ * config/nvptx/nvptx.c (nvptx_override_options_after_change): New
+ function.
+ (TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): Define to
+ nvptx_override_options_after_change.
+
+2017-07-21 Ulrich Drepper <drepper@redhat.com>
+
+ * dwarf2out.c (output_file_names): Avoid double testing for
+ dwarf_version >= 5.
+
+2017-07-21 Georg-Johann Lay <avr@gjlay.de>
+
+ * doc/invoke.texi (AVR Built-in Functions): Re-layout section.
+
+2016-07-21 Jan Hubicka <hubicka@ucw.cz>
+
+ * cfgcleanup.c (flow_find_cross_jump): Do not crossjump across
+ hot/cold regions.
+ (try_crossjump_to_edge): Do not punt on partitioned functions.
+
+2016-07-21 Jan Hubicka <hubicka@ucw.cz>
+
+ * bb-reorder.c (find_rarely_executed_basic_blocks_and_crossing_edges):
+ Put all BBs reachable only via paths crossing cold region to cold
+ region.
+ * cfgrtl.c (find_bbs_reachable_by_hot_paths): New function.
+
+2016-07-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81303
+ * tree-vect-loop.c (vect_estimate_min_profitable_iters): Take
+ into account prologue and epilogue iterations when raising
+ min_profitable_iters to sth at least covering one vector iteration.
+
+2017-07-21 Tamar Christina <tamar.christina@arm.com>
+
+ * config/arm/arm.c (arm_test_cpu_arch_dat):
+ Check for overlap.
+
+2017-07-20 Nathan Sidwell <nathan@acm.org>
+
+ Remove TYPE_METHODS.
+ * tree.h (TYPE_METHODS): Delete.
+ * dwarf2out.c (gen_member_die): Member fns are on TYPE_FIELDS.
+ * dbxout.c (dbxout_type_fields): Ignore FUNCTION_DECLs.
+ (dbxout_type_methods): Scan TYPE_FIELDS.
+ (dbxout_type): Don't check TYPE_METHODS here.
+ * function.c (use_register_for_decl): Always ignore register for
+ class types when not optimizing.
+ * ipa-devirt.c (odr_types_equivalent_p): Delete TYPE_METHODS scan.
+ * tree.c (free_lang_data_in_type): Stitch out member functions and
+ templates from TYPE_FIELDS.
+ (build_distinct_type_copy, verify_type_variant,
+ verify_type): Member fns are on TYPE_FIELDS.
+ * tree-dump.c (dequeue_and_dump): No TYPE_METHODS.
+ * tree-pretty-print.c (dump_generic_node): Likewise.
+
+2017-07-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/80846
+ * config/i386/i386.c (ix86_expand_vector_init_general): Handle
+ V2TImode and V4TImode.
+ (ix86_expand_vector_extract): Likewise.
+ * config/i386/sse.md (VMOVE): Enable V4TImode even for just
+ TARGET_AVX512F, instead of only for TARGET_AVX512BW.
+ (ssescalarmode): Handle V4TImode and V2TImode.
+ (VEC_EXTRACT_MODE): Add V4TImode and V2TImode.
+ (*vec_extractv2ti, *vec_extractv4ti): New insns.
+ (VEXTRACTI128_MODE): New mode iterator.
+ (splitter for *vec_extractv?ti first element): New.
+ (VEC_INIT_MODE): New mode iterator.
+ (vec_init<mode>): Consolidate 3 expanders into one using
+ VEC_INIT_MODE mode iterator.
+
+2017-07-20 Alexander Monakov <amonakov@ispras.ru>
+
+ * lra-assigns.c (pseudo_compare_func): Fix comparison step based on
+ non_spilled_static_chain_regno_p.
+
+2017-07-20 Alexander Monakov <amonakov@ispras.ru>
+
+ * gimple-ssa-store-merging.c (sort_by_bitpos): Return 0 on equal bitpos.
+
+2017-07-20 Jan Hubicka <hubicka@ucw.cz>
* bb-reorder.c (connect_traces): Allow copying of blocks within
single partition.
@@ -236,10 +2611,10 @@
2017-07-18 Robin Dapp <rdapp@linux.vnet.ibm.com>
- * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Remove
+ * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Remove
body_cost_vec from _vect_peel_extended_info.
(vect_peeling_hash_get_lowest_cost): Do not set body_cost_vec.
- (vect_peeling_hash_choose_best_peeling): Remove body_cost_vec and
+ (vect_peeling_hash_choose_best_peeling): Remove body_cost_vec and
npeel.
2017-07-18 Bin Cheng <bin.cheng@arm.com>
@@ -283,7 +2658,7 @@
2017-07-17 Yury Gribov <tetra2005@gmail.com>
- * tree-vrp.c (compare_assert_loc): Fix comparison function
+ * tree-vrp.c (compare_assert_loc): Fix comparison function
to return predictable results.
2017-07-17 Claudiu Zissulescu <claziss@synopsys.com>
@@ -452,7 +2827,7 @@
2017-07-17 Sebastian Huber <sebastian.huber@embedded-brains.de>
- * gcc/config/sparc/rtemself.h (TARGET_OS_CPP_BUILTINS): Add
+ * config/sparc/rtemself.h (TARGET_OS_CPP_BUILTINS): Add
conditional builtin define __FIX_LEON3FT_B2BST.
2017-07-17 Daniel Cederman <cederman@gaisler.com>
@@ -1556,7 +3931,7 @@
2017-07-06 Julia Koval <julia.koval@intel.com>
- * gcc/config/i386/i386.c (ix86_erase_embedded_rounding):
+ * config/i386/i386.c (ix86_erase_embedded_rounding):
Remove code for old rounding pattern.
2017-07-06 Richard Earnshaw <rearnsha@arm.com>
@@ -3274,11 +5649,11 @@
2017-06-27 Jerome Lambourg <lambourg@adacore.com>
* config/vxworks.h (VXWORKS_LIBS_RTP): Alternative definition for
- 64bit configurations.
- (PTR_DIFF_TYPE): Alternative definition for TARGET_LP64.
- (SIZE_TYPE): Likewise.
- * config/vxworks.c (vxworks_emutls_var_fields): Use
- long_unsigned_type_node instead of unsigned_type_node as the offset
+ 64bit configurations.
+ (PTR_DIFF_TYPE): Alternative definition for TARGET_LP64.
+ (SIZE_TYPE): Likewise.
+ * config/vxworks.c (vxworks_emutls_var_fields): Use
+ long_unsigned_type_node instead of unsigned_type_node as the offset
field type, which is "pointer" mode in emutls.c.
2017-06-27 Jakub Jelinek <jakub@redhat.com>
@@ -15009,7 +17384,7 @@
2017-02-06 Palmer Dabbelt <palmer@dabbelt.com>
* config/riscv/riscv.c: New file.
- * gcc/common/config/riscv/riscv-common.c: Likewise.
+ * common/config/riscv/riscv-common.c: Likewise.
* config.gcc: Likewise.
* config/riscv/constraints.md: Likewise.
* config/riscv/elf.h: Likewise.
@@ -16272,7 +18647,7 @@
* config/i386/avx512bwintrin.h: Add k-mask test, kortest intrinsics.
* config/i386/avx512dqintrin.h: Ditto.
* config/i386/avx512fintrin.h: Ditto.
- * gcc/config/i386/i386.c: Handle new builtins.
+ * config/i386/i386.c: Handle new builtins.
* config/i386/i386-builtin.def: Add new builtins.
* config/i386/sse.md (ktest<mode>, kortest<mode>): New.
(UNSPEC_KORTEST, UNSPEC_KTEST): New.
@@ -16453,7 +18828,7 @@
* config/i386/avx512dqintrin.h: Ditto.
* config/i386/avx512fintrin.h: Ditto.
* config/i386/i386-builtin-types.def: Add new types.
- * gcc/config/i386/i386.c: Handle new types.
+ * config/i386/i386.c: Handle new types.
* config/i386/i386-builtin.def (__builtin_ia32_kshiftliqi)
(__builtin_ia32_kshiftlihi, __builtin_ia32_kshiftlisi)
(__builtin_ia32_kshiftlidi, __builtin_ia32_kshiftriqi)
@@ -16476,14 +18851,14 @@
(with_madd4): Add validation.
(all_defaults): Add madd4.
* config/mips/mips.opt (mmadd4): New option.
- * gcc/config/mips/mips.h (OPTION_DEFAULT_SPECS): Add a default for
+ * config/mips/mips.h (OPTION_DEFAULT_SPECS): Add a default for
mmadd4.
(TARGET_CPU_CPP_BUILTINS): Add builtin_define for
__mips_no_madd4.
(ISA_HAS_UNFUSED_MADD4): Gate with mips_madd4.
(ISA_HAS_FUSED_MADD4): Likewise.
- * gcc/doc/invoke.texi (-mmadd4): Document the new option.
- * gcc/doc/install.texi (--with-madd4): Document the new option.
+ * doc/invoke.texi (-mmadd4): Document the new option.
+ * doc/install.texi (--with-madd4): Document the new option.
2017-01-19 Jiong Wang <jiong.wang@arm.com>
@@ -16621,12 +18996,12 @@
(with_lxc1_sxc1): Add validation.
(all_defaults): Add lxc1-sxc1.
* config/mips/mips.opt (mlxc1-sxc1): New option.
- * gcc/config/mips/mips.h (OPTION_DEFAULT_SPECS): Add a default for
+ * config/mips/mips.h (OPTION_DEFAULT_SPECS): Add a default for
mlxc1-sxc1.
(TARGET_CPU_CPP_BUILTINS): Add builtin_define for
__mips_no_lxc1_sxc1.
(ISA_HAS_LXC1_SXC1): Gate with mips_lxc1_sxc1.
- * gcc/doc/invoke.texi (-mlxc1-sxc1): Document the new option.
+ * doc/invoke.texi (-mlxc1-sxc1): Document the new option.
* doc/install.texi (--with-lxc1-sxc1): Document the new option.
2017-01-19 Richard Biener <rguenther@suse.de>
@@ -18043,8 +20418,8 @@
'arm_const_bounds'.
* config/arm/types.md (coproc): New.
* config/arm/unspecs.md (VUNSPEC_CDP, VUNSPEC_CDP2): New.
- * gcc/doc/extend.texi (ACLE): Add a mention of Coprocessor intrinsics.
- * gcc/doc/sourcebuild.texi (arm_coproc1_ok, arm_coproc2_ok,
+ * doc/extend.texi (ACLE): Add a mention of Coprocessor intrinsics.
+ * doc/sourcebuild.texi (arm_coproc1_ok, arm_coproc2_ok,
arm_coproc3_ok, arm_coproc4_ok): Document new effective targets.
2017-01-06 Andre Vieira <andre.simoesdiasvieira@arm.com>
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index 5bef843941c..19a1412d5a8 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20170720
+20170812
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index efca9169671..0bde7acf914 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -3776,7 +3776,7 @@ install-mkheaders: stmp-int-hdrs install-itoolsdirs \
set -e; for ml in `cat fixinc_list`; do \
multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \
$(mkinstalldirs) $(DESTDIR)$(itoolsdatadir)/include$${multi_dir}; \
- $(INSTALL_DATA) include-fixed$${multidir}/limits.h $(DESTDIR)$(itoolsdatadir)/include$${multi_dir}/limits.h; \
+ $(INSTALL_DATA) include-fixed$${multi_dir}/limits.h $(DESTDIR)$(itoolsdatadir)/include$${multi_dir}/limits.h; \
done
$(INSTALL_SCRIPT) $(srcdir)/../mkinstalldirs \
$(DESTDIR)$(itoolsdir)/mkinstalldirs ; \
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 5d6939c7aae..b0b7cf351c3 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,17 @@
+2017-08-08 Martin Liska <mliska@suse.cz>
+
+ * gcc-interface/trans.c: Include header files.
+
+2017-07-29 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc-interface/utils.c (gnat_write_global_declarations): Pass false
+ as new argument to the imported_module_or_decl debug hook.
+
+2017-07-25 Javier Miranda <miranda@adacore.com>
+
+ * checks.adb (Apply_Divide_Checks): Ensure that operands are not
+ evaluated twice.
+
2017-07-19 Jakub Jelinek <jakub@redhat.com>
* gcc-interface/ada-tree.h (TYPE_OBJECT_RECORD_TYPE,
diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb
index 6162a0e38c0..a6670fa7697 100644
--- a/gcc/ada/checks.adb
+++ b/gcc/ada/checks.adb
@@ -1818,6 +1818,13 @@ package body Checks is
and then
((not LOK) or else (Llo = LLB))
then
+ -- Ensure that expressions are not evaluated twice (once
+ -- for their runtime checks and once for their regular
+ -- computation).
+
+ Force_Evaluation (Left, Mode => Strict);
+ Force_Evaluation (Right, Mode => Strict);
+
Insert_Action (N,
Make_Raise_Constraint_Error (Loc,
Condition =>
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index 7844bd7c5a8..67044b7b574 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -46,6 +46,8 @@
#include "gimplify.h"
#include "opts.h"
#include "common/common-target.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "ada.h"
#include "adadecode.h"
diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c
index 9e656579dda..475261b3682 100644
--- a/gcc/ada/gcc-interface/utils.c
+++ b/gcc/ada/gcc-interface/utils.c
@@ -5553,7 +5553,7 @@ gnat_write_global_declarations (void)
FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter)
if (TREE_CODE (iter) == IMPORTED_DECL && !DECL_IGNORED_P (iter))
debug_hooks->imported_module_or_decl (iter, DECL_NAME (iter),
- DECL_CONTEXT (iter), 0);
+ DECL_CONTEXT (iter), false, false);
}
/* ************************************************************************
diff --git a/gcc/alloc-pool.h b/gcc/alloc-pool.h
index a5236db3dae..1d04e5d2cfe 100644
--- a/gcc/alloc-pool.h
+++ b/gcc/alloc-pool.h
@@ -240,8 +240,9 @@ base_pool_allocator <TBlockAllocator>::base_pool_allocator (
const char *name, size_t size MEM_STAT_DECL):
m_name (name), m_id (0), m_elts_per_block (0), m_returned_free_list (NULL),
m_virgin_free_list (NULL), m_virgin_elts_remaining (0), m_elts_allocated (0),
- m_elts_free (0), m_blocks_allocated (0), m_block_list (NULL), m_size (size),
- m_initialized (false), m_location (ALLOC_POOL_ORIGIN, false PASS_MEM_STAT) {}
+ m_elts_free (0), m_blocks_allocated (0), m_block_list (NULL), m_elt_size (0),
+ m_size (size), m_initialized (false),
+ m_location (ALLOC_POOL_ORIGIN, false PASS_MEM_STAT) {}
/* Initialize a pool allocator. */
diff --git a/gcc/asan.c b/gcc/asan.c
index 5f9275f6425..ce1e0244ec6 100644
--- a/gcc/asan.c
+++ b/gcc/asan.c
@@ -47,6 +47,8 @@ along with GCC; see the file COPYING3. If not see
#include "varasm.h"
#include "stor-layout.h"
#include "tree-iterator.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
#include "dojump.h"
#include "explow.h"
@@ -1663,10 +1665,8 @@ asan_protect_global (tree decl)
if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
return false;
-#ifndef ASM_OUTPUT_DEF
- if (asan_needs_local_alias (decl))
+ if (!TARGET_SUPPORTS_ALIASES && asan_needs_local_alias (decl))
return false;
-#endif
return true;
}
diff --git a/gcc/attribs.c b/gcc/attribs.c
index 5eb19e82795..faa0649e190 100644
--- a/gcc/attribs.c
+++ b/gcc/attribs.c
@@ -404,8 +404,8 @@ decl_attributes (tree *node, tree attributes, int flags)
those targets that support it. */
if (TREE_CODE (*node) == FUNCTION_DECL
&& attributes
- && lookup_attribute_spec (get_identifier ("naked"))
- && lookup_attribute ("naked", attributes) != NULL)
+ && lookup_attribute ("naked", attributes) != NULL
+ && lookup_attribute_spec (get_identifier ("naked")))
{
if (lookup_attribute ("noinline", attributes) == NULL)
attributes = tree_cons (get_identifier ("noinline"), NULL, attributes);
@@ -414,6 +414,23 @@ decl_attributes (tree *node, tree attributes, int flags)
attributes = tree_cons (get_identifier ("noclone"), NULL, attributes);
}
+ /* A "noipa" function attribute implies "noinline", "noclone" and "no_icf"
+ for those targets that support it. */
+ if (TREE_CODE (*node) == FUNCTION_DECL
+ && attributes
+ && lookup_attribute ("noipa", attributes) != NULL
+ && lookup_attribute_spec (get_identifier ("noipa")))
+ {
+ if (lookup_attribute ("noinline", attributes) == NULL)
+ attributes = tree_cons (get_identifier ("noinline"), NULL, attributes);
+
+ if (lookup_attribute ("noclone", attributes) == NULL)
+ attributes = tree_cons (get_identifier ("noclone"), NULL, attributes);
+
+ if (lookup_attribute ("no_icf", attributes) == NULL)
+ attributes = tree_cons (get_identifier ("no_icf"), NULL, attributes);
+ }
+
targetm.insert_attributes (*node, &attributes);
for (a = attributes; a; a = TREE_CHAIN (a))
@@ -925,3 +942,636 @@ is_function_default_version (const tree decl)
return (TREE_CODE (attr) == STRING_CST
&& strcmp (TREE_STRING_POINTER (attr), "default") == 0);
}
+
+/* Return a declaration like DDECL except that its DECL_ATTRIBUTES
+ is ATTRIBUTE. */
+
+tree
+build_decl_attribute_variant (tree ddecl, tree attribute)
+{
+ DECL_ATTRIBUTES (ddecl) = attribute;
+ return ddecl;
+}
+
+/* Return a type like TTYPE except that its TYPE_ATTRIBUTE
+ is ATTRIBUTE and its qualifiers are QUALS.
+
+ Record such modified types already made so we don't make duplicates. */
+
+tree
+build_type_attribute_qual_variant (tree ttype, tree attribute, int quals)
+{
+ if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
+ {
+ tree ntype;
+
+ /* Building a distinct copy of a tagged type is inappropriate; it
+ causes breakage in code that expects there to be a one-to-one
+ relationship between a struct and its fields.
+ build_duplicate_type is another solution (as used in
+ handle_transparent_union_attribute), but that doesn't play well
+ with the stronger C++ type identity model. */
+ if (TREE_CODE (ttype) == RECORD_TYPE
+ || TREE_CODE (ttype) == UNION_TYPE
+ || TREE_CODE (ttype) == QUAL_UNION_TYPE
+ || TREE_CODE (ttype) == ENUMERAL_TYPE)
+ {
+ warning (OPT_Wattributes,
+ "ignoring attributes applied to %qT after definition",
+ TYPE_MAIN_VARIANT (ttype));
+ return build_qualified_type (ttype, quals);
+ }
+
+ ttype = build_qualified_type (ttype, TYPE_UNQUALIFIED);
+ ntype = build_distinct_type_copy (ttype);
+
+ TYPE_ATTRIBUTES (ntype) = attribute;
+
+ hashval_t hash = type_hash_canon_hash (ntype);
+ ntype = type_hash_canon (hash, ntype);
+
+ /* If the target-dependent attributes make NTYPE different from
+ its canonical type, we will need to use structural equality
+ checks for this type. */
+ if (TYPE_STRUCTURAL_EQUALITY_P (ttype)
+ || !comp_type_attributes (ntype, ttype))
+ SET_TYPE_STRUCTURAL_EQUALITY (ntype);
+ else if (TYPE_CANONICAL (ntype) == ntype)
+ TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype);
+
+ ttype = build_qualified_type (ntype, quals);
+ }
+ else if (TYPE_QUALS (ttype) != quals)
+ ttype = build_qualified_type (ttype, quals);
+
+ return ttype;
+}
+
+/* Compare two identifier nodes representing attributes.
+ Return true if they are the same, false otherwise. */
+
+static bool
+cmp_attrib_identifiers (const_tree attr1, const_tree attr2)
+{
+ /* Make sure we're dealing with IDENTIFIER_NODEs. */
+ gcc_checking_assert (TREE_CODE (attr1) == IDENTIFIER_NODE
+ && TREE_CODE (attr2) == IDENTIFIER_NODE);
+
+ /* Identifiers can be compared directly for equality. */
+ if (attr1 == attr2)
+ return true;
+
+ return cmp_attribs (IDENTIFIER_POINTER (attr1), IDENTIFIER_LENGTH (attr1),
+ IDENTIFIER_POINTER (attr2), IDENTIFIER_LENGTH (attr2));
+}
+
+/* Compare two constructor-element-type constants. Return 1 if the lists
+ are known to be equal; otherwise return 0. */
+
+static bool
+simple_cst_list_equal (const_tree l1, const_tree l2)
+{
+ while (l1 != NULL_TREE && l2 != NULL_TREE)
+ {
+ if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
+ return false;
+
+ l1 = TREE_CHAIN (l1);
+ l2 = TREE_CHAIN (l2);
+ }
+
+ return l1 == l2;
+}
+
+/* Check if "omp declare simd" attribute arguments, CLAUSES1 and CLAUSES2, are
+ the same. */
+
+static bool
+omp_declare_simd_clauses_equal (tree clauses1, tree clauses2)
+{
+ tree cl1, cl2;
+ for (cl1 = clauses1, cl2 = clauses2;
+ cl1 && cl2;
+ cl1 = OMP_CLAUSE_CHAIN (cl1), cl2 = OMP_CLAUSE_CHAIN (cl2))
+ {
+ if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_CODE (cl2))
+ return false;
+ if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_SIMDLEN)
+ {
+ if (simple_cst_equal (OMP_CLAUSE_DECL (cl1),
+ OMP_CLAUSE_DECL (cl2)) != 1)
+ return false;
+ }
+ switch (OMP_CLAUSE_CODE (cl1))
+ {
+ case OMP_CLAUSE_ALIGNED:
+ if (simple_cst_equal (OMP_CLAUSE_ALIGNED_ALIGNMENT (cl1),
+ OMP_CLAUSE_ALIGNED_ALIGNMENT (cl2)) != 1)
+ return false;
+ break;
+ case OMP_CLAUSE_LINEAR:
+ if (simple_cst_equal (OMP_CLAUSE_LINEAR_STEP (cl1),
+ OMP_CLAUSE_LINEAR_STEP (cl2)) != 1)
+ return false;
+ break;
+ case OMP_CLAUSE_SIMDLEN:
+ if (simple_cst_equal (OMP_CLAUSE_SIMDLEN_EXPR (cl1),
+ OMP_CLAUSE_SIMDLEN_EXPR (cl2)) != 1)
+ return false;
+ default:
+ break;
+ }
+ }
+ return true;
+}
+
+
+/* Compare two attributes for their value identity. Return true if the
+ attribute values are known to be equal; otherwise return false. */
+
+bool
+attribute_value_equal (const_tree attr1, const_tree attr2)
+{
+ if (TREE_VALUE (attr1) == TREE_VALUE (attr2))
+ return true;
+
+ if (TREE_VALUE (attr1) != NULL_TREE
+ && TREE_CODE (TREE_VALUE (attr1)) == TREE_LIST
+ && TREE_VALUE (attr2) != NULL_TREE
+ && TREE_CODE (TREE_VALUE (attr2)) == TREE_LIST)
+ {
+ /* Handle attribute format. */
+ if (is_attribute_p ("format", get_attribute_name (attr1)))
+ {
+ attr1 = TREE_VALUE (attr1);
+ attr2 = TREE_VALUE (attr2);
+ /* Compare the archetypes (printf/scanf/strftime/...). */
+ if (!cmp_attrib_identifiers (TREE_VALUE (attr1), TREE_VALUE (attr2)))
+ return false;
+ /* Archetypes are the same. Compare the rest. */
+ return (simple_cst_list_equal (TREE_CHAIN (attr1),
+ TREE_CHAIN (attr2)) == 1);
+ }
+ return (simple_cst_list_equal (TREE_VALUE (attr1),
+ TREE_VALUE (attr2)) == 1);
+ }
+
+ if ((flag_openmp || flag_openmp_simd)
+ && TREE_VALUE (attr1) && TREE_VALUE (attr2)
+ && TREE_CODE (TREE_VALUE (attr1)) == OMP_CLAUSE
+ && TREE_CODE (TREE_VALUE (attr2)) == OMP_CLAUSE)
+ return omp_declare_simd_clauses_equal (TREE_VALUE (attr1),
+ TREE_VALUE (attr2));
+
+ return (simple_cst_equal (TREE_VALUE (attr1), TREE_VALUE (attr2)) == 1);
+}
+
+/* Return 0 if the attributes for two types are incompatible, 1 if they
+ are compatible, and 2 if they are nearly compatible (which causes a
+ warning to be generated). */
+int
+comp_type_attributes (const_tree type1, const_tree type2)
+{
+ const_tree a1 = TYPE_ATTRIBUTES (type1);
+ const_tree a2 = TYPE_ATTRIBUTES (type2);
+ const_tree a;
+
+ if (a1 == a2)
+ return 1;
+ for (a = a1; a != NULL_TREE; a = TREE_CHAIN (a))
+ {
+ const struct attribute_spec *as;
+ const_tree attr;
+
+ as = lookup_attribute_spec (get_attribute_name (a));
+ if (!as || as->affects_type_identity == false)
+ continue;
+
+ attr = lookup_attribute (as->name, CONST_CAST_TREE (a2));
+ if (!attr || !attribute_value_equal (a, attr))
+ break;
+ }
+ if (!a)
+ {
+ for (a = a2; a != NULL_TREE; a = TREE_CHAIN (a))
+ {
+ const struct attribute_spec *as;
+
+ as = lookup_attribute_spec (get_attribute_name (a));
+ if (!as || as->affects_type_identity == false)
+ continue;
+
+ if (!lookup_attribute (as->name, CONST_CAST_TREE (a1)))
+ break;
+ /* We don't need to compare trees again, as we did this
+ already in first loop. */
+ }
+ /* All types - affecting identity - are equal, so
+ there is no need to call target hook for comparison. */
+ if (!a)
+ return 1;
+ }
+ if (lookup_attribute ("transaction_safe", CONST_CAST_TREE (a)))
+ return 0;
+ /* As some type combinations - like default calling-convention - might
+ be compatible, we have to call the target hook to get the final result. */
+ return targetm.comp_type_attributes (type1, type2);
+}
+
+/* Return a type like TTYPE except that its TYPE_ATTRIBUTE
+ is ATTRIBUTE.
+
+ Record such modified types already made so we don't make duplicates. */
+
+tree
+build_type_attribute_variant (tree ttype, tree attribute)
+{
+ return build_type_attribute_qual_variant (ttype, attribute,
+ TYPE_QUALS (ttype));
+}
+
+/* A variant of lookup_attribute() that can be used with an identifier
+ as the first argument, and where the identifier can be either
+ 'text' or '__text__'.
+
+ Given an attribute ATTR_IDENTIFIER, and a list of attributes LIST,
+ return a pointer to the attribute's list element if the attribute
+ is part of the list, or NULL_TREE if not found. If the attribute
+ appears more than once, this only returns the first occurrence; the
+ TREE_CHAIN of the return value should be passed back in if further
+ occurrences are wanted. ATTR_IDENTIFIER must be an identifier but
+ can be in the form 'text' or '__text__'. */
+static tree
+lookup_ident_attribute (tree attr_identifier, tree list)
+{
+ gcc_checking_assert (TREE_CODE (attr_identifier) == IDENTIFIER_NODE);
+
+ while (list)
+ {
+ gcc_checking_assert (TREE_CODE (get_attribute_name (list))
+ == IDENTIFIER_NODE);
+
+ if (cmp_attrib_identifiers (attr_identifier,
+ get_attribute_name (list)))
+ /* Found it. */
+ break;
+ list = TREE_CHAIN (list);
+ }
+
+ return list;
+}
+
+/* Remove any instances of attribute ATTR_NAME in LIST and return the
+ modified list. */
+
+tree
+remove_attribute (const char *attr_name, tree list)
+{
+ tree *p;
+ gcc_checking_assert (attr_name[0] != '_');
+
+ for (p = &list; *p;)
+ {
+ tree l = *p;
+
+ tree attr = get_attribute_name (l);
+ if (is_attribute_p (attr_name, attr))
+ *p = TREE_CHAIN (l);
+ else
+ p = &TREE_CHAIN (l);
+ }
+
+ return list;
+}
+
+/* Return an attribute list that is the union of a1 and a2. */
+
+tree
+merge_attributes (tree a1, tree a2)
+{
+ tree attributes;
+
+ /* Either one unset? Take the set one. */
+
+ if ((attributes = a1) == 0)
+ attributes = a2;
+
+ /* One that completely contains the other? Take it. */
+
+ else if (a2 != 0 && ! attribute_list_contained (a1, a2))
+ {
+ if (attribute_list_contained (a2, a1))
+ attributes = a2;
+ else
+ {
+ /* Pick the longest list, and hang on the other list. */
+
+ if (list_length (a1) < list_length (a2))
+ attributes = a2, a2 = a1;
+
+ for (; a2 != 0; a2 = TREE_CHAIN (a2))
+ {
+ tree a;
+ for (a = lookup_ident_attribute (get_attribute_name (a2),
+ attributes);
+ a != NULL_TREE && !attribute_value_equal (a, a2);
+ a = lookup_ident_attribute (get_attribute_name (a2),
+ TREE_CHAIN (a)))
+ ;
+ if (a == NULL_TREE)
+ {
+ a1 = copy_node (a2);
+ TREE_CHAIN (a1) = attributes;
+ attributes = a1;
+ }
+ }
+ }
+ }
+ return attributes;
+}
+
+/* Given types T1 and T2, merge their attributes and return
+ the result. */
+
+tree
+merge_type_attributes (tree t1, tree t2)
+{
+ return merge_attributes (TYPE_ATTRIBUTES (t1),
+ TYPE_ATTRIBUTES (t2));
+}
+
+/* Given decls OLDDECL and NEWDECL, merge their attributes and return
+ the result. */
+
+tree
+merge_decl_attributes (tree olddecl, tree newdecl)
+{
+ return merge_attributes (DECL_ATTRIBUTES (olddecl),
+ DECL_ATTRIBUTES (newdecl));
+}
+
+#if TARGET_DLLIMPORT_DECL_ATTRIBUTES
+
+/* Specialization of merge_decl_attributes for various Windows targets.
+
+ This handles the following situation:
+
+ __declspec (dllimport) int foo;
+ int foo;
+
+ The second instance of `foo' nullifies the dllimport. */
+
+tree
+merge_dllimport_decl_attributes (tree old, tree new_tree)
+{
+ tree a;
+ int delete_dllimport_p = 1;
+
+ /* What we need to do here is remove from `old' dllimport if it doesn't
+ appear in `new'. dllimport behaves like extern: if a declaration is
+ marked dllimport and a definition appears later, then the object
+ is not dllimport'd. We also remove a `new' dllimport if the old list
+ contains dllexport: dllexport always overrides dllimport, regardless
+ of the order of declaration. */
+ if (!VAR_OR_FUNCTION_DECL_P (new_tree))
+ delete_dllimport_p = 0;
+ else if (DECL_DLLIMPORT_P (new_tree)
+ && lookup_attribute ("dllexport", DECL_ATTRIBUTES (old)))
+ {
+ DECL_DLLIMPORT_P (new_tree) = 0;
+ warning (OPT_Wattributes, "%q+D already declared with dllexport "
+ "attribute: dllimport ignored", new_tree);
+ }
+ else if (DECL_DLLIMPORT_P (old) && !DECL_DLLIMPORT_P (new_tree))
+ {
+ /* Warn about overriding a symbol that has already been used, e.g.:
+ extern int __attribute__ ((dllimport)) foo;
+ int* bar () {return &foo;}
+ int foo;
+ */
+ if (TREE_USED (old))
+ {
+ warning (0, "%q+D redeclared without dllimport attribute "
+ "after being referenced with dll linkage", new_tree);
+ /* If we have used a variable's address with dllimport linkage,
+ keep the old DECL_DLLIMPORT_P flag: the ADDR_EXPR using the
+ decl may already have had TREE_CONSTANT computed.
+ We still remove the attribute so that assembler code refers
+ to '&foo rather than '_imp__foo'. */
+ if (VAR_P (old) && TREE_ADDRESSABLE (old))
+ DECL_DLLIMPORT_P (new_tree) = 1;
+ }
+
+ /* Let an inline definition silently override the external reference,
+ but otherwise warn about attribute inconsistency. */
+ else if (VAR_P (new_tree) || !DECL_DECLARED_INLINE_P (new_tree))
+ warning (OPT_Wattributes, "%q+D redeclared without dllimport "
+ "attribute: previous dllimport ignored", new_tree);
+ }
+ else
+ delete_dllimport_p = 0;
+
+ a = merge_attributes (DECL_ATTRIBUTES (old), DECL_ATTRIBUTES (new_tree));
+
+ if (delete_dllimport_p)
+ a = remove_attribute ("dllimport", a);
+
+ return a;
+}
+
+/* Handle a "dllimport" or "dllexport" attribute; arguments as in
+ struct attribute_spec.handler. */
+
+tree
+handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
+ bool *no_add_attrs)
+{
+ tree node = *pnode;
+ bool is_dllimport;
+
+ /* These attributes may apply to structure and union types being created,
+ but otherwise should pass to the declaration involved. */
+ if (!DECL_P (node))
+ {
+ if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
+ | (int) ATTR_FLAG_ARRAY_NEXT))
+ {
+ *no_add_attrs = true;
+ return tree_cons (name, args, NULL_TREE);
+ }
+ if (TREE_CODE (node) == RECORD_TYPE
+ || TREE_CODE (node) == UNION_TYPE)
+ {
+ node = TYPE_NAME (node);
+ if (!node)
+ return NULL_TREE;
+ }
+ else
+ {
+ warning (OPT_Wattributes, "%qE attribute ignored",
+ name);
+ *no_add_attrs = true;
+ return NULL_TREE;
+ }
+ }
+
+ if (!VAR_OR_FUNCTION_DECL_P (node) && TREE_CODE (node) != TYPE_DECL)
+ {
+ *no_add_attrs = true;
+ warning (OPT_Wattributes, "%qE attribute ignored",
+ name);
+ return NULL_TREE;
+ }
+
+ if (TREE_CODE (node) == TYPE_DECL
+ && TREE_CODE (TREE_TYPE (node)) != RECORD_TYPE
+ && TREE_CODE (TREE_TYPE (node)) != UNION_TYPE)
+ {
+ *no_add_attrs = true;
+ warning (OPT_Wattributes, "%qE attribute ignored",
+ name);
+ return NULL_TREE;
+ }
+
+ is_dllimport = is_attribute_p ("dllimport", name);
+
+ /* Report error on dllimport ambiguities seen now before they cause
+ any damage. */
+ if (is_dllimport)
+ {
+ /* Honor any target-specific overrides. */
+ if (!targetm.valid_dllimport_attribute_p (node))
+ *no_add_attrs = true;
+
+ else if (TREE_CODE (node) == FUNCTION_DECL
+ && DECL_DECLARED_INLINE_P (node))
+ {
+ warning (OPT_Wattributes, "inline function %q+D declared as "
+ " dllimport: attribute ignored", node);
+ *no_add_attrs = true;
+ }
+ /* Like MS, treat definition of dllimported variables and
+ non-inlined functions on declaration as syntax errors. */
+ else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node))
+ {
+ error ("function %q+D definition is marked dllimport", node);
+ *no_add_attrs = true;
+ }
+
+ else if (VAR_P (node))
+ {
+ if (DECL_INITIAL (node))
+ {
+ error ("variable %q+D definition is marked dllimport",
+ node);
+ *no_add_attrs = true;
+ }
+
+ /* `extern' needn't be specified with dllimport.
+ Specify `extern' now and hope for the best. Sigh. */
+ DECL_EXTERNAL (node) = 1;
+ /* Also, implicitly give dllimport'd variables declared within
+ a function global scope, unless declared static. */
+ if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
+ TREE_PUBLIC (node) = 1;
+ }
+
+ if (*no_add_attrs == false)
+ DECL_DLLIMPORT_P (node) = 1;
+ }
+ else if (TREE_CODE (node) == FUNCTION_DECL
+ && DECL_DECLARED_INLINE_P (node)
+ && flag_keep_inline_dllexport)
+ /* An exported function, even if inline, must be emitted. */
+ DECL_EXTERNAL (node) = 0;
+
+ /* Report error if symbol is not accessible at global scope. */
+ if (!TREE_PUBLIC (node) && VAR_OR_FUNCTION_DECL_P (node))
+ {
+ error ("external linkage required for symbol %q+D because of "
+ "%qE attribute", node, name);
+ *no_add_attrs = true;
+ }
+
+ /* A dllexport'd entity must have default visibility so that other
+ program units (shared libraries or the main executable) can see
+ it. A dllimport'd entity must have default visibility so that
+ the linker knows that undefined references within this program
+ unit can be resolved by the dynamic linker. */
+ if (!*no_add_attrs)
+ {
+ if (DECL_VISIBILITY_SPECIFIED (node)
+ && DECL_VISIBILITY (node) != VISIBILITY_DEFAULT)
+ error ("%qE implies default visibility, but %qD has already "
+ "been declared with a different visibility",
+ name, node);
+ DECL_VISIBILITY (node) = VISIBILITY_DEFAULT;
+ DECL_VISIBILITY_SPECIFIED (node) = 1;
+ }
+
+ return NULL_TREE;
+}
+
+#endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */
+
+/* Given two lists of attributes, return true if list l2 is
+ equivalent to l1. */
+
+int
+attribute_list_equal (const_tree l1, const_tree l2)
+{
+ if (l1 == l2)
+ return 1;
+
+ return attribute_list_contained (l1, l2)
+ && attribute_list_contained (l2, l1);
+}
+
+/* Given two lists of attributes, return true if list L2 is
+ completely contained within L1. */
+/* ??? This would be faster if attribute names were stored in a canonicalized
+ form. Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
+ must be used to show these elements are equivalent (which they are). */
+/* ??? It's not clear that attributes with arguments will always be handled
+ correctly. */
+
+int
+attribute_list_contained (const_tree l1, const_tree l2)
+{
+ const_tree t1, t2;
+
+ /* First check the obvious, maybe the lists are identical. */
+ if (l1 == l2)
+ return 1;
+
+ /* Maybe the lists are similar. */
+ for (t1 = l1, t2 = l2;
+ t1 != 0 && t2 != 0
+ && get_attribute_name (t1) == get_attribute_name (t2)
+ && TREE_VALUE (t1) == TREE_VALUE (t2);
+ t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
+ ;
+
+ /* Maybe the lists are equal. */
+ if (t1 == 0 && t2 == 0)
+ return 1;
+
+ for (; t2 != 0; t2 = TREE_CHAIN (t2))
+ {
+ const_tree attr;
+ /* This CONST_CAST is okay because lookup_attribute does not
+ modify its argument and the return value is assigned to a
+ const_tree. */
+ for (attr = lookup_ident_attribute (get_attribute_name (t2),
+ CONST_CAST_TREE (l1));
+ attr != NULL_TREE && !attribute_value_equal (t2, attr);
+ attr = lookup_ident_attribute (get_attribute_name (t2),
+ TREE_CHAIN (attr)))
+ ;
+
+ if (attr == NULL_TREE)
+ return 0;
+ }
+
+ return 1;
+}
diff --git a/gcc/attribs.h b/gcc/attribs.h
index 7f13332700e..06e6993e958 100644
--- a/gcc/attribs.h
+++ b/gcc/attribs.h
@@ -47,4 +47,160 @@ extern char *make_unique_name (tree, const char *, bool);
extern tree make_dispatcher_decl (const tree);
extern bool is_function_default_version (const tree);
+/* Return a type like TTYPE except that its TYPE_ATTRIBUTES
+ is ATTRIBUTE.
+
+ Such modified types already made are recorded so that duplicates
+ are not made. */
+
+extern tree build_type_attribute_variant (tree, tree);
+extern tree build_decl_attribute_variant (tree, tree);
+extern tree build_type_attribute_qual_variant (tree, tree, int);
+
+extern bool attribute_value_equal (const_tree, const_tree);
+
+/* Return 0 if the attributes for two types are incompatible, 1 if they
+ are compatible, and 2 if they are nearly compatible (which causes a
+ warning to be generated). */
+extern int comp_type_attributes (const_tree, const_tree);
+
+/* Default versions of target-overridable functions. */
+extern tree merge_decl_attributes (tree, tree);
+extern tree merge_type_attributes (tree, tree);
+
+/* Remove any instances of attribute ATTR_NAME in LIST and return the
+ modified list. */
+
+extern tree remove_attribute (const char *, tree);
+
+/* Given two attributes lists, return a list of their union. */
+
+extern tree merge_attributes (tree, tree);
+
+/* Given two Windows decl attributes lists, possibly including
+ dllimport, return a list of their union . */
+extern tree merge_dllimport_decl_attributes (tree, tree);
+
+/* Handle a "dllimport" or "dllexport" attribute. */
+extern tree handle_dll_attribute (tree *, tree, tree, int, bool *);
+
+extern int attribute_list_equal (const_tree, const_tree);
+extern int attribute_list_contained (const_tree, const_tree);
+
+/* For a given IDENTIFIER_NODE, strip leading and trailing '_' characters
+ so that we have a canonical form of attribute names. */
+
+static inline tree
+canonicalize_attr_name (tree attr_name)
+{
+ const size_t l = IDENTIFIER_LENGTH (attr_name);
+ const char *s = IDENTIFIER_POINTER (attr_name);
+
+ if (l > 4 && s[0] == '_' && s[1] == '_' && s[l - 1] == '_' && s[l - 2] == '_')
+ return get_identifier_with_length (s + 2, l - 4);
+
+ return attr_name;
+}
+
+/* Compare attribute identifiers ATTR1 and ATTR2 with length ATTR1_LEN and
+ ATTR2_LEN. */
+
+static inline bool
+cmp_attribs (const char *attr1, size_t attr1_len,
+ const char *attr2, size_t attr2_len)
+{
+ return attr1_len == attr2_len && strncmp (attr1, attr2, attr1_len) == 0;
+}
+
+/* Compare attribute identifiers ATTR1 and ATTR2. */
+
+static inline bool
+cmp_attribs (const char *attr1, const char *attr2)
+{
+ return cmp_attribs (attr1, strlen (attr1), attr2, strlen (attr2));
+}
+
+/* Given an identifier node IDENT and a string ATTR_NAME, return true
+ if the identifier node is a valid attribute name for the string. */
+
+static inline bool
+is_attribute_p (const char *attr_name, const_tree ident)
+{
+ return cmp_attribs (attr_name, strlen (attr_name),
+ IDENTIFIER_POINTER (ident), IDENTIFIER_LENGTH (ident));
+}
+
+/* Given an attribute name ATTR_NAME and a list of attributes LIST,
+ return a pointer to the attribute's list element if the attribute
+ is part of the list, or NULL_TREE if not found. If the attribute
+ appears more than once, this only returns the first occurrence; the
+ TREE_CHAIN of the return value should be passed back in if further
+ occurrences are wanted. ATTR_NAME must be in the form 'text' (not
+ '__text__'). */
+
+static inline tree
+lookup_attribute (const char *attr_name, tree list)
+{
+ gcc_checking_assert (attr_name[0] != '_');
+ /* In most cases, list is NULL_TREE. */
+ if (list == NULL_TREE)
+ return NULL_TREE;
+ else
+ {
+ size_t attr_len = strlen (attr_name);
+ /* Do the strlen() before calling the out-of-line implementation.
+ In most cases attr_name is a string constant, and the compiler
+ will optimize the strlen() away. */
+ while (list)
+ {
+ tree attr = get_attribute_name (list);
+ size_t ident_len = IDENTIFIER_LENGTH (attr);
+ if (cmp_attribs (attr_name, attr_len, IDENTIFIER_POINTER (attr),
+ ident_len))
+ break;
+ list = TREE_CHAIN (list);
+ }
+
+ return list;
+ }
+}
+
+/* Given an attribute name ATTR_NAME and a list of attributes LIST,
+ return a pointer to the attribute's list first element if the attribute
+ starts with ATTR_NAME. ATTR_NAME must be in the form 'text' (not
+ '__text__'). */
+
+static inline tree
+lookup_attribute_by_prefix (const char *attr_name, tree list)
+{
+ gcc_checking_assert (attr_name[0] != '_');
+ /* In most cases, list is NULL_TREE. */
+ if (list == NULL_TREE)
+ return NULL_TREE;
+ else
+ {
+ size_t attr_len = strlen (attr_name);
+ while (list)
+ {
+ size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
+
+ if (attr_len > ident_len)
+ {
+ list = TREE_CHAIN (list);
+ continue;
+ }
+
+ const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
+ gcc_checking_assert (attr_len == 0 || p[0] != '_');
+
+ if (strncmp (attr_name, p, attr_len) == 0)
+ break;
+
+ list = TREE_CHAIN (list);
+ }
+
+ return list;
+ }
+}
+
#endif // GCC_ATTRIBS_H
diff --git a/gcc/auto-inc-dec.c b/gcc/auto-inc-dec.c
index 91fa5cf0bbe..db1bd5bba2c 100644
--- a/gcc/auto-inc-dec.c
+++ b/gcc/auto-inc-dec.c
@@ -769,6 +769,12 @@ parse_add_or_inc (rtx_insn *insn, bool before_mem)
inc_insn.pat = pat;
inc_insn.reg_res = SET_DEST (pat);
inc_insn.reg0 = XEXP (SET_SRC (pat), 0);
+
+ /* Block any auto increment of the frame pointer since it expands into
+ an addition and cannot be removed by copy propagation. */
+ if (inc_insn.reg0 == frame_pointer_rtx)
+ return false;
+
if (rtx_equal_p (inc_insn.reg_res, inc_insn.reg0))
inc_insn.form = before_mem ? FORM_PRE_INC : FORM_POST_INC;
else
diff --git a/gcc/auto-profile.c b/gcc/auto-profile.c
index 71c06f30449..9226e202d50 100644
--- a/gcc/auto-profile.c
+++ b/gcc/auto-profile.c
@@ -774,15 +774,15 @@ autofdo_source_profile::update_inlined_ind_target (gcall *stmt,
hot any more. Will avoid promote the original target.
To check if original promoted target is still hot, we check the total
- count of the unpromoted targets (stored in old_info). If it is no less
- than half of the callsite count (stored in INFO), the original promoted
- target is considered not hot any more. */
- if (total >= info->count / 2)
+ count of the unpromoted targets (stored in TOTAL). If a callsite count
+ (stored in INFO) is smaller than half of the total count, the original
+ promoted target is considered not hot any more. */
+ if (info->count < total / 2)
{
if (dump_file)
- fprintf (dump_file, " not hot anymore %ld >= %ld",
- (long)total,
- (long)info->count /2);
+ fprintf (dump_file, " not hot anymore %ld < %ld",
+ (long)info->count,
+ (long)total /2);
return false;
}
@@ -1547,9 +1547,11 @@ afdo_annotate_cfg (const stmt_set &promoted_stmts)
edge e;
edge_iterator ei;
- bb->count = profile_count::uninitialized ();
+ /* As autoFDO uses sampling approach, we have to assume that all
+ counters are zero when not seen by autoFDO. */
+ bb->count = profile_count::zero ().afdo ();
FOR_EACH_EDGE (e, ei, bb->succs)
- e->count = profile_count::uninitialized ();
+ e->count = profile_count::zero ().afdo ();
if (afdo_set_bb_count (bb, promoted_stmts))
set_bb_annotated (bb, &annotated_bb);
diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c
index 3b7278f2be1..4dad298fe59 100644
--- a/gcc/bb-reorder.c
+++ b/gcc/bb-reorder.c
@@ -115,6 +115,8 @@
#include "bb-reorder.h"
#include "except.h"
#include "fibonacci_heap.h"
+#include "stringpool.h"
+#include "attribs.h"
/* The number of rounds. In most cases there will only be 4 rounds, but
when partitioning hot and cold basic blocks into separate sections of
@@ -1665,6 +1667,12 @@ find_rarely_executed_basic_blocks_and_crossing_edges (void)
&bbs_in_hot_partition);
if (cold_bb_count)
sanitize_hot_paths (false, cold_bb_count, &bbs_in_hot_partition);
+
+ hash_set <basic_block> set;
+ find_bbs_reachable_by_hot_paths (&set);
+ FOR_EACH_BB_FN (bb, cfun)
+ if (!set.contains (bb))
+ BB_SET_PARTITION (bb, BB_COLD_PARTITION);
}
/* The format of .gcc_except_table does not allow landing pads to
@@ -2898,7 +2906,8 @@ pass_partition_blocks::execute (function *fun)
crossing_edges = find_rarely_executed_basic_blocks_and_crossing_edges ();
if (!crossing_edges.exists ())
- return 0;
+ /* Make sure to process deferred rescans and clear changeable df flags. */
+ return TODO_df_finish;
crtl->has_bb_partition = true;
@@ -2964,7 +2973,8 @@ pass_partition_blocks::execute (function *fun)
df_analyze ();
}
- return 0;
+ /* Make sure to process deferred rescans and clear changeable df flags. */
+ return TODO_df_finish;
}
} // anon namespace
diff --git a/gcc/bitmap.c b/gcc/bitmap.c
index 7bebeecca55..03f6923db2f 100644
--- a/gcc/bitmap.c
+++ b/gcc/bitmap.c
@@ -273,7 +273,7 @@ bitmap_obstack_release (bitmap_obstack *bit_obstack)
it on the default bitmap obstack. */
bitmap
-bitmap_obstack_alloc_stat (bitmap_obstack *bit_obstack MEM_STAT_DECL)
+bitmap_alloc (bitmap_obstack *bit_obstack MEM_STAT_DECL)
{
bitmap map;
@@ -284,7 +284,7 @@ bitmap_obstack_alloc_stat (bitmap_obstack *bit_obstack MEM_STAT_DECL)
bit_obstack->heads = (struct bitmap_head *) map->first;
else
map = XOBNEW (&bit_obstack->obstack, bitmap_head);
- bitmap_initialize_stat (map, bit_obstack PASS_MEM_STAT);
+ bitmap_initialize (map, bit_obstack PASS_MEM_STAT);
if (GATHER_STATISTICS)
register_overhead (map, sizeof (bitmap_head));
@@ -295,12 +295,12 @@ bitmap_obstack_alloc_stat (bitmap_obstack *bit_obstack MEM_STAT_DECL)
/* Create a new GCd bitmap. */
bitmap
-bitmap_gc_alloc_stat (ALONE_MEM_STAT_DECL)
+bitmap_gc_alloc (ALONE_MEM_STAT_DECL)
{
bitmap map;
map = ggc_alloc<bitmap_head> ();
- bitmap_initialize_stat (map, NULL PASS_MEM_STAT);
+ bitmap_initialize (map, NULL PASS_MEM_STAT);
if (GATHER_STATISTICS)
register_overhead (map, sizeof (bitmap_head));
diff --git a/gcc/bitmap.h b/gcc/bitmap.h
index ad5398409d6..348032360f2 100644
--- a/gcc/bitmap.h
+++ b/gcc/bitmap.h
@@ -335,20 +335,19 @@ extern void dump_bitmap_statistics (void);
to allocate from, NULL for GC'd bitmap. */
static inline void
-bitmap_initialize_stat (bitmap head, bitmap_obstack *obstack MEM_STAT_DECL)
+bitmap_initialize (bitmap head, bitmap_obstack *obstack CXX_MEM_STAT_INFO)
{
head->first = head->current = NULL;
head->obstack = obstack;
if (GATHER_STATISTICS)
bitmap_register (head PASS_MEM_STAT);
}
-#define bitmap_initialize(h,o) bitmap_initialize_stat (h,o MEM_STAT_INFO)
/* Allocate and free bitmaps from obstack, malloc and gc'd memory. */
-extern bitmap bitmap_obstack_alloc_stat (bitmap_obstack *obstack MEM_STAT_DECL);
-#define bitmap_obstack_alloc(t) bitmap_obstack_alloc_stat (t MEM_STAT_INFO)
-extern bitmap bitmap_gc_alloc_stat (ALONE_MEM_STAT_DECL);
-#define bitmap_gc_alloc() bitmap_gc_alloc_stat (ALONE_MEM_STAT_INFO)
+extern bitmap bitmap_alloc (bitmap_obstack *obstack CXX_MEM_STAT_INFO);
+#define BITMAP_ALLOC bitmap_alloc
+extern bitmap bitmap_gc_alloc (ALONE_CXX_MEM_STAT_INFO);
+#define BITMAP_GGC_ALLOC bitmap_gc_alloc
extern void bitmap_obstack_free (bitmap);
/* A few compatibility/functions macros for compatibility with sbitmaps */
@@ -365,12 +364,6 @@ extern unsigned bitmap_last_set_bit (const_bitmap);
/* Compute bitmap hash (for purposes of hashing etc.) */
extern hashval_t bitmap_hash (const_bitmap);
-/* Allocate a bitmap from a bit obstack. */
-#define BITMAP_ALLOC(OBSTACK) bitmap_obstack_alloc (OBSTACK)
-
-/* Allocate a gc'd bitmap. */
-#define BITMAP_GGC_ALLOC() bitmap_gc_alloc ()
-
/* Do any cleanup needed on a bitmap when it is no longer used. */
#define BITMAP_FREE(BITMAP) \
((void) (bitmap_obstack_free ((bitmap) BITMAP), (BITMAP) = (bitmap) NULL))
diff --git a/gcc/brig/ChangeLog b/gcc/brig/ChangeLog
index f7c82f44107..08045329eeb 100644
--- a/gcc/brig/ChangeLog
+++ b/gcc/brig/ChangeLog
@@ -1,3 +1,10 @@
+2017-08-04 Henry Linjamäki <henry.linjamaki@parmance.com>
+
+ Fix PR 81713
+ * brigfrontend/brig-basic-inst-handler.cc: replace build_int_cst with
+ bitsize_int in building BIT_FIELD_REF.
+ * brigfrontend/brig-code-entry-handler.cc: likewise.
+
2017-07-05 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
diff --git a/gcc/brig/brigfrontend/brig-basic-inst-handler.cc b/gcc/brig/brigfrontend/brig-basic-inst-handler.cc
index 68d81986f1c..8288d665513 100644
--- a/gcc/brig/brigfrontend/brig-basic-inst-handler.cc
+++ b/gcc/brig/brigfrontend/brig-basic-inst-handler.cc
@@ -33,6 +33,7 @@
#include "stor-layout.h"
#include "diagnostic-core.h"
#include "brig-builtins.h"
+#include "fold-const.h"
brig_basic_inst_handler::brig_basic_inst_handler (brig_to_generic &parent)
: brig_code_entry_handler (parent)
@@ -112,10 +113,8 @@ brig_basic_inst_handler::build_shuffle (tree arith_type,
{
tree mask_element
= build3 (BIT_FIELD_REF, mask_element_type, mask_operand,
- build_int_cst (unsigned_char_type_node,
- input_mask_element_size),
- build_int_cst (unsigned_char_type_node,
- i * input_mask_element_size));
+ bitsize_int (input_mask_element_size),
+ bitsize_int (i * input_mask_element_size));
mask_element = convert (element_type, mask_element);
diff --git a/gcc/brig/brigfrontend/brig-code-entry-handler.cc b/gcc/brig/brigfrontend/brig-code-entry-handler.cc
index 906f47e76b3..8f07d372796 100644
--- a/gcc/brig/brigfrontend/brig-code-entry-handler.cc
+++ b/gcc/brig/brigfrontend/brig-code-entry-handler.cc
@@ -1423,9 +1423,8 @@ brig_code_entry_handler::build_output_assignment (const BrigInstBase &brig_inst,
tree element_ref
= build3 (BIT_FIELD_REF, element_type, input,
TYPE_SIZE (element_type),
- build_int_cst (uint32_type_node,
- i * int_size_in_bytes (element_type)
- * BITS_PER_UNIT));
+ bitsize_int (i * int_size_in_bytes (element_type)
+ * BITS_PER_UNIT));
last_assign
= build_output_assignment (brig_inst, element, element_ref);
@@ -1488,7 +1487,7 @@ brig_code_entry_handler::unpack (tree value, tree_stl_vec &elements)
tree element
= build3 (BIT_FIELD_REF, input_element_type, value,
TYPE_SIZE (input_element_type),
- build_int_cst (unsigned_char_type_node, i * element_size));
+ bitsize_int(i * element_size));
element = add_temp_var ("scalar", element);
elements.push_back (element);
@@ -1543,9 +1542,8 @@ tree_element_unary_visitor::operator () (brig_code_entry_handler &handler,
{
tree element = build3 (BIT_FIELD_REF, input_element_type, operand,
TYPE_SIZE (input_element_type),
- build_int_cst (unsigned_char_type_node,
- i * element_size
- * BITS_PER_UNIT));
+ bitsize_int (i * element_size
+ * BITS_PER_UNIT));
tree output = visit_element (handler, element);
output_element_type = TREE_TYPE (output);
@@ -1594,15 +1592,13 @@ tree_element_binary_visitor::operator () (brig_code_entry_handler &handler,
tree element0 = build3 (BIT_FIELD_REF, input_element_type, operand0,
TYPE_SIZE (input_element_type),
- build_int_cst (unsigned_char_type_node,
- i * element_size
- * BITS_PER_UNIT));
+ bitsize_int (i * element_size
+ * BITS_PER_UNIT));
tree element1 = build3 (BIT_FIELD_REF, input_element_type, operand1,
TYPE_SIZE (input_element_type),
- build_int_cst (unsigned_char_type_node,
- i * element_size
- * BITS_PER_UNIT));
+ bitsize_int (i * element_size
+ * BITS_PER_UNIT));
tree output = visit_element (handler, element0, element1);
output_element_type = TREE_TYPE (output);
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 2deef725620..fa0f89c8f33 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -60,6 +60,8 @@ along with GCC; see the file COPYING3. If not see
#include "langhooks.h"
#include "value-prof.h"
#include "builtins.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
#include "cilk.h"
#include "tree-chkp.h"
@@ -121,12 +123,12 @@ static rtx builtin_memcpy_read_str (void *, HOST_WIDE_INT, machine_mode);
static rtx expand_builtin_memchr (tree, rtx);
static rtx expand_builtin_memcpy (tree, rtx);
static rtx expand_builtin_memcpy_with_bounds (tree, rtx);
-static rtx expand_builtin_memcpy_args (tree, tree, tree, rtx, tree);
+static rtx expand_builtin_memory_copy_args (tree dest, tree src, tree len,
+ rtx target, tree exp, int endp);
static rtx expand_builtin_memmove (tree, rtx);
-static rtx expand_builtin_mempcpy (tree, rtx, machine_mode);
-static rtx expand_builtin_mempcpy_with_bounds (tree, rtx, machine_mode);
-static rtx expand_builtin_mempcpy_args (tree, tree, tree, rtx,
- machine_mode, int, tree);
+static rtx expand_builtin_mempcpy (tree, rtx);
+static rtx expand_builtin_mempcpy_with_bounds (tree, rtx);
+static rtx expand_builtin_mempcpy_args (tree, tree, tree, rtx, tree, int);
static rtx expand_builtin_strcat (tree, rtx);
static rtx expand_builtin_strcpy (tree, rtx);
static rtx expand_builtin_strcpy_args (tree, tree, rtx);
@@ -2961,81 +2963,6 @@ determine_block_size (tree len, rtx len_rtx,
GET_MODE_MASK (GET_MODE (len_rtx)));
}
-/* Helper function to do the actual work for expand_builtin_memcpy. */
-
-static rtx
-expand_builtin_memcpy_args (tree dest, tree src, tree len, rtx target, tree exp)
-{
- const char *src_str;
- unsigned int src_align = get_pointer_alignment (src);
- unsigned int dest_align = get_pointer_alignment (dest);
- rtx dest_mem, src_mem, dest_addr, len_rtx;
- HOST_WIDE_INT expected_size = -1;
- unsigned int expected_align = 0;
- unsigned HOST_WIDE_INT min_size;
- unsigned HOST_WIDE_INT max_size;
- unsigned HOST_WIDE_INT probable_max_size;
-
- /* If DEST is not a pointer type, call the normal function. */
- if (dest_align == 0)
- return NULL_RTX;
-
- /* If either SRC is not a pointer type, don't do this
- operation in-line. */
- if (src_align == 0)
- return NULL_RTX;
-
- if (currently_expanding_gimple_stmt)
- stringop_block_profile (currently_expanding_gimple_stmt,
- &expected_align, &expected_size);
-
- if (expected_align < dest_align)
- expected_align = dest_align;
- dest_mem = get_memory_rtx (dest, len);
- set_mem_align (dest_mem, dest_align);
- len_rtx = expand_normal (len);
- determine_block_size (len, len_rtx, &min_size, &max_size,
- &probable_max_size);
- src_str = c_getstr (src);
-
- /* If SRC is a string constant and block move would be done
- by pieces, we can avoid loading the string from memory
- and only stored the computed constants. */
- if (src_str
- && CONST_INT_P (len_rtx)
- && (unsigned HOST_WIDE_INT) INTVAL (len_rtx) <= strlen (src_str) + 1
- && can_store_by_pieces (INTVAL (len_rtx), builtin_memcpy_read_str,
- CONST_CAST (char *, src_str),
- dest_align, false))
- {
- dest_mem = store_by_pieces (dest_mem, INTVAL (len_rtx),
- builtin_memcpy_read_str,
- CONST_CAST (char *, src_str),
- dest_align, false, 0);
- dest_mem = force_operand (XEXP (dest_mem, 0), target);
- dest_mem = convert_memory_address (ptr_mode, dest_mem);
- return dest_mem;
- }
-
- src_mem = get_memory_rtx (src, len);
- set_mem_align (src_mem, src_align);
-
- /* Copy word part most expediently. */
- dest_addr = emit_block_move_hints (dest_mem, src_mem, len_rtx,
- CALL_EXPR_TAILCALL (exp)
- ? BLOCK_OP_TAILCALL : BLOCK_OP_NORMAL,
- expected_align, expected_size,
- min_size, max_size, probable_max_size);
-
- if (dest_addr == 0)
- {
- dest_addr = force_operand (XEXP (dest_mem, 0), target);
- dest_addr = convert_memory_address (ptr_mode, dest_addr);
- }
-
- return dest_addr;
-}
-
/* Try to verify that the sizes and lengths of the arguments to a string
manipulation function given by EXP are within valid bounds and that
the operation does not lead to buffer overflow. Arguments other than
@@ -3378,7 +3305,8 @@ expand_builtin_memcpy (tree exp, rtx target)
check_memop_sizes (exp, dest, src, len);
- return expand_builtin_memcpy_args (dest, src, len, target, exp);
+ return expand_builtin_memory_copy_args (dest, src, len, target, exp,
+ /*endp=*/ 0);
}
/* Check a call EXP to the memmove built-in for validity.
@@ -3418,7 +3346,8 @@ expand_builtin_memcpy_with_bounds (tree exp, rtx target)
tree dest = CALL_EXPR_ARG (exp, 0);
tree src = CALL_EXPR_ARG (exp, 2);
tree len = CALL_EXPR_ARG (exp, 4);
- rtx res = expand_builtin_memcpy_args (dest, src, len, target, exp);
+ rtx res = expand_builtin_memory_copy_args (dest, src, len, target, exp,
+ /*end_p=*/ 0);
/* Return src bounds with the result. */
if (res)
@@ -3440,7 +3369,7 @@ expand_builtin_memcpy_with_bounds (tree exp, rtx target)
stpcpy. */
static rtx
-expand_builtin_mempcpy (tree exp, rtx target, machine_mode mode)
+expand_builtin_mempcpy (tree exp, rtx target)
{
if (!validate_arglist (exp,
POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
@@ -3457,8 +3386,7 @@ expand_builtin_mempcpy (tree exp, rtx target, machine_mode mode)
return NULL_RTX;
return expand_builtin_mempcpy_args (dest, src, len,
- target, mode, /*endp=*/ 1,
- exp);
+ target, exp, /*endp=*/ 1);
}
/* Expand an instrumented call EXP to the mempcpy builtin.
@@ -3467,7 +3395,7 @@ expand_builtin_mempcpy (tree exp, rtx target, machine_mode mode)
mode MODE if that's convenient). */
static rtx
-expand_builtin_mempcpy_with_bounds (tree exp, rtx target, machine_mode mode)
+expand_builtin_mempcpy_with_bounds (tree exp, rtx target)
{
if (!validate_arglist (exp,
POINTER_TYPE, POINTER_BOUNDS_TYPE,
@@ -3480,7 +3408,7 @@ expand_builtin_mempcpy_with_bounds (tree exp, rtx target, machine_mode mode)
tree src = CALL_EXPR_ARG (exp, 2);
tree len = CALL_EXPR_ARG (exp, 4);
rtx res = expand_builtin_mempcpy_args (dest, src, len, target,
- mode, 1, exp);
+ exp, 1);
/* Return src bounds with the result. */
if (res)
@@ -3493,94 +3421,103 @@ expand_builtin_mempcpy_with_bounds (tree exp, rtx target, machine_mode mode)
}
}
-/* Helper function to do the actual work for expand_builtin_mempcpy. The
- arguments to the builtin_mempcpy call DEST, SRC, and LEN are broken out
- so that this can also be called without constructing an actual CALL_EXPR.
- The other arguments and return value are the same as for
- expand_builtin_mempcpy. */
+/* Helper function to do the actual work for expand of memory copy family
+ functions (memcpy, mempcpy, stpcpy). Expansing should assign LEN bytes
+ of memory from SRC to DEST and assign to TARGET if convenient.
+ If ENDP is 0 return the
+ destination pointer, if ENDP is 1 return the end pointer ala
+ mempcpy, and if ENDP is 2 return the end pointer minus one ala
+ stpcpy. */
static rtx
-expand_builtin_mempcpy_args (tree dest, tree src, tree len,
- rtx target, machine_mode mode, int endp,
- tree orig_exp)
+expand_builtin_memory_copy_args (tree dest, tree src, tree len,
+ rtx target, tree exp, int endp)
{
- tree fndecl = get_callee_fndecl (orig_exp);
+ const char *src_str;
+ unsigned int src_align = get_pointer_alignment (src);
+ unsigned int dest_align = get_pointer_alignment (dest);
+ rtx dest_mem, src_mem, dest_addr, len_rtx;
+ HOST_WIDE_INT expected_size = -1;
+ unsigned int expected_align = 0;
+ unsigned HOST_WIDE_INT min_size;
+ unsigned HOST_WIDE_INT max_size;
+ unsigned HOST_WIDE_INT probable_max_size;
- /* If return value is ignored, transform mempcpy into memcpy. */
- if (target == const0_rtx
- && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CHKP_MEMPCPY_NOBND_NOCHK_CHKP
- && builtin_decl_implicit_p (BUILT_IN_CHKP_MEMCPY_NOBND_NOCHK_CHKP))
- {
- tree fn = builtin_decl_implicit (BUILT_IN_CHKP_MEMCPY_NOBND_NOCHK_CHKP);
- tree result = build_call_nofold_loc (UNKNOWN_LOCATION, fn, 3,
- dest, src, len);
- return expand_expr (result, target, mode, EXPAND_NORMAL);
- }
- else if (target == const0_rtx
- && builtin_decl_implicit_p (BUILT_IN_MEMCPY))
- {
- tree fn = builtin_decl_implicit (BUILT_IN_MEMCPY);
- tree result = build_call_nofold_loc (UNKNOWN_LOCATION, fn, 3,
- dest, src, len);
- return expand_expr (result, target, mode, EXPAND_NORMAL);
- }
- else
- {
- const char *src_str;
- unsigned int src_align = get_pointer_alignment (src);
- unsigned int dest_align = get_pointer_alignment (dest);
- rtx dest_mem, src_mem, len_rtx;
+ /* If DEST is not a pointer type, call the normal function. */
+ if (dest_align == 0)
+ return NULL_RTX;
- /* If either SRC or DEST is not a pointer type, don't do this
- operation in-line. */
- if (dest_align == 0 || src_align == 0)
- return NULL_RTX;
+ /* If either SRC is not a pointer type, don't do this
+ operation in-line. */
+ if (src_align == 0)
+ return NULL_RTX;
- /* If LEN is not constant, call the normal function. */
- if (! tree_fits_uhwi_p (len))
- return NULL_RTX;
+ if (currently_expanding_gimple_stmt)
+ stringop_block_profile (currently_expanding_gimple_stmt,
+ &expected_align, &expected_size);
- len_rtx = expand_normal (len);
- src_str = c_getstr (src);
+ if (expected_align < dest_align)
+ expected_align = dest_align;
+ dest_mem = get_memory_rtx (dest, len);
+ set_mem_align (dest_mem, dest_align);
+ len_rtx = expand_normal (len);
+ determine_block_size (len, len_rtx, &min_size, &max_size,
+ &probable_max_size);
+ src_str = c_getstr (src);
- /* If SRC is a string constant and block move would be done
- by pieces, we can avoid loading the string from memory
- and only stored the computed constants. */
- if (src_str
- && CONST_INT_P (len_rtx)
- && (unsigned HOST_WIDE_INT) INTVAL (len_rtx) <= strlen (src_str) + 1
- && can_store_by_pieces (INTVAL (len_rtx), builtin_memcpy_read_str,
+ /* If SRC is a string constant and block move would be done
+ by pieces, we can avoid loading the string from memory
+ and only stored the computed constants. */
+ if (src_str
+ && CONST_INT_P (len_rtx)
+ && (unsigned HOST_WIDE_INT) INTVAL (len_rtx) <= strlen (src_str) + 1
+ && can_store_by_pieces (INTVAL (len_rtx), builtin_memcpy_read_str,
+ CONST_CAST (char *, src_str),
+ dest_align, false))
+ {
+ dest_mem = store_by_pieces (dest_mem, INTVAL (len_rtx),
+ builtin_memcpy_read_str,
CONST_CAST (char *, src_str),
- dest_align, false))
- {
- dest_mem = get_memory_rtx (dest, len);
- set_mem_align (dest_mem, dest_align);
- dest_mem = store_by_pieces (dest_mem, INTVAL (len_rtx),
- builtin_memcpy_read_str,
- CONST_CAST (char *, src_str),
- dest_align, false, endp);
- dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX);
- dest_mem = convert_memory_address (ptr_mode, dest_mem);
- return dest_mem;
- }
+ dest_align, false, endp);
+ dest_mem = force_operand (XEXP (dest_mem, 0), target);
+ dest_mem = convert_memory_address (ptr_mode, dest_mem);
+ return dest_mem;
+ }
- if (CONST_INT_P (len_rtx)
- && can_move_by_pieces (INTVAL (len_rtx),
- MIN (dest_align, src_align)))
- {
- dest_mem = get_memory_rtx (dest, len);
- set_mem_align (dest_mem, dest_align);
- src_mem = get_memory_rtx (src, len);
- set_mem_align (src_mem, src_align);
- dest_mem = move_by_pieces (dest_mem, src_mem, INTVAL (len_rtx),
- MIN (dest_align, src_align), endp);
- dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX);
- dest_mem = convert_memory_address (ptr_mode, dest_mem);
- return dest_mem;
- }
+ src_mem = get_memory_rtx (src, len);
+ set_mem_align (src_mem, src_align);
- return NULL_RTX;
+ /* Copy word part most expediently. */
+ dest_addr = emit_block_move_hints (dest_mem, src_mem, len_rtx,
+ CALL_EXPR_TAILCALL (exp)
+ && (endp == 0 || target == const0_rtx)
+ ? BLOCK_OP_TAILCALL : BLOCK_OP_NORMAL,
+ expected_align, expected_size,
+ min_size, max_size, probable_max_size);
+
+ if (dest_addr == 0)
+ {
+ dest_addr = force_operand (XEXP (dest_mem, 0), target);
+ dest_addr = convert_memory_address (ptr_mode, dest_addr);
}
+
+ if (endp && target != const0_rtx)
+ {
+ dest_addr = gen_rtx_PLUS (ptr_mode, dest_addr, len_rtx);
+ /* stpcpy pointer to last byte. */
+ if (endp == 2)
+ dest_addr = gen_rtx_MINUS (ptr_mode, dest_addr, const1_rtx);
+ }
+
+ return dest_addr;
+}
+
+static rtx
+expand_builtin_mempcpy_args (tree dest, tree src, tree len,
+ rtx target, tree orig_exp, int endp)
+{
+ return expand_builtin_memory_copy_args (dest, src, len, target, orig_exp,
+ endp);
}
/* Expand into a movstr instruction, if one is available. Return NULL_RTX if
@@ -3738,8 +3675,7 @@ expand_builtin_stpcpy (tree exp, rtx target, machine_mode mode)
lenp1 = size_binop_loc (loc, PLUS_EXPR, len, ssize_int (1));
ret = expand_builtin_mempcpy_args (dst, src, lenp1,
- target, mode, /*endp=*/2,
- exp);
+ target, exp, /*endp=*/2);
if (ret)
return ret;
@@ -6902,7 +6838,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
break;
case BUILT_IN_MEMPCPY:
- target = expand_builtin_mempcpy (exp, target, mode);
+ target = expand_builtin_mempcpy (exp, target);
if (target)
return target;
break;
@@ -7681,7 +7617,7 @@ expand_builtin_with_bounds (tree exp, rtx target,
break;
case BUILT_IN_CHKP_MEMPCPY_NOBND_NOCHK_CHKP:
- target = expand_builtin_mempcpy_with_bounds (exp, target, mode);
+ target = expand_builtin_mempcpy_with_bounds (exp, target);
if (target)
return target;
break;
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index e79a57141f1..6d33192c5ac 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,120 @@
+2017-08-11 Martin Liska <mliska@suse.cz>
+
+ * c-opts.c (c_common_post_options): Replace ASM_OUTPUT_DEF with
+ TARGET_SUPPORTS_ALIASES.
+
+2017-08-10 David Malcolm <dmalcolm@redhat.com>
+
+ * c-common.c (c_parse_error): Add rich_location * param, using it
+ rather implicitly using input_location.
+ * c-common.h (c_parse_error): Add rich_location * param.
+
+2017-08-09 Marek Polacek <polacek@redhat.com>
+
+ * c-common.c (pointer_int_sum): Use true/false instead of 1/0.
+ (c_common_truthvalue_conversion): Likewise.
+ * c-omp.c (c_finish_omp_atomic): Likewise.
+ * c-common.h (build_binary_op): Update declaration.
+
+2017-08-08 Martin Liska <mliska@suse.cz>
+
+ * c-ada-spec.c: Include header files.
+ * c-ubsan.c: Likewise.
+ * c-warn.c: Likewise.
+
+2017-08-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/69389
+ * c-omp.c (c_finish_omp_atomic): Handle atomics on bitfields.
+
+2017-08-07 Eric Botcazou <ebotcazou@adacore.com>
+
+ * c-ada-spec.c (has_nontrivial_methods): Test for FUNCTION_DECL.
+ (print_ada_methods): Likewise.
+ (print_ada_declaration): Likewise.
+
+2017-08-07 Martin Liska <mliska@suse.cz>
+
+ * array-notation-common.c: Add new includes.
+ * c-format.c( handle_format_attribute): Canonicalize a format
+ function name.
+ * c-lex.c (c_common_has_attribute): Canonicalize name of an
+ attribute.
+ * c-pretty-print.c: Add new include.
+
+2017-08-05 Eric Botcazou <ebotcazou@adacore.com>
+
+ * c-ada-spec.c (has_static_fields): Look only into variables.
+ (print_constructor): Add TYPE parameter and use it for the name.
+ (print_destructor): Likewise.
+ (print_ada_declaration): Adjust to new constructor/destructor names.
+ Adjust calls to print_constructor and print_destructor.
+ (print_ada_struct_decl): Do not test TREE_STATIC on FIELD_DECL.
+ Look only into variables in the final loop.
+
+2017-08-01 Eric Botcazou <ebotcazou@adacore.com>
+
+ * c-ada-spec.c (has_static_fields): Look only into fields.
+ (dump_generic_ada_node): Small tweak.
+ (dump_nested_types): Look only into fields.
+ (print_ada_declaration): Look only into methods. Small tweak.
+ (print_ada_struct_decl): Look only into fields. Use DECL_VIRTUAL_P.
+
+2017-08-01 Eric Botcazou <ebotcazou@adacore.com>
+
+ * c-ada-spec.c (print_generic_ada_decl): Pass correctly-typed constant.
+ (dump_ada_function_declaration): Likewise.
+ (dump_generic_ada_node): Likewise.
+ (print_ada_declaration): Add support for const-qualified variables.
+
+2017-07-31 Martin Liska <mliska@suse.cz>
+
+ PR sanitize/81530
+ * c-ubsan.c (ubsan_maybe_instrument_array_ref):
+ Guard condition with flag_sanitize_p also with current_function_decl
+ non-null equality.
+ (ubsan_maybe_instrument_reference_or_call): Likewise.
+
+2017-07-30 Uros Bizjak <ubizjak@gmail.com>
+
+ * c-format.c (asm_fprintf_char_table): Add 'z' to format_chars.
+
+2017-07-29 Eric Botcazou <ebotcazou@adacore.com>
+
+ * c-ada-spec.c (dump_generic_ada_node): Take into account signedness
+ for enumeral types.
+ (print_ada_declaration): Add missing guard for record types.
+
+2017-07-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/45784
+ * c-omp.c (c_finish_omp_for): If the condition is wrapped in
+ rhs of COMPOUND_EXPR(s), skip them and readd their lhs into
+ new COMPOUND_EXPRs around the rhs of the comparison.
+
+2017-07-27 Marek Polacek <polacek@redhat.com>
+
+ PR c/81417
+ * c-warn.c (warn_for_sign_compare): Tweak the warning message. Print
+ the types.
+
+2017-07-27 Jakub Jelinek <jakub@redhat.com>
+
+ * c-attribs.c (c_common_attribute_table): Add noipa attribute.
+ (handle_noipa_attribute): New function.
+
+2017-07-07 Torsten Duwe <duwe@suse.de>
+
+ * c-attribs.c (c_common_attribute_table): Add entry for
+ "patchable_function_entry".
+
+2017-07-20 Nathan Sidwell <nathan@acm.org>
+
+ Remove TYPE_METHODS.
+ * c-ada-spec.c (is_tagged_type, has_nontrivial_methods,
+ dump_ada_template, print_ada_methods,
+ print_ada_declaration): Member fns are on TYPE_FIELDS.
+
2017-07-18 Nathan Sidwell <nathan@acm.org>
* c-warn.c (warn_for_memset): Use TYPE_{MIN,MAX}_VALUE.
diff --git a/gcc/c-family/array-notation-common.c b/gcc/c-family/array-notation-common.c
index 3b95332adad..a4809948e20 100644
--- a/gcc/c-family/array-notation-common.c
+++ b/gcc/c-family/array-notation-common.c
@@ -27,6 +27,8 @@ along with GCC; see the file COPYING3. If not see
#include "options.h"
#include "c-family/c-common.h"
#include "tree-iterator.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Returns true if the function call in FNDECL is __sec_implicit_index. */
diff --git a/gcc/c-family/c-ada-spec.c b/gcc/c-family/c-ada-spec.c
index 6cf298a126a..0cd3d55b55b 100644
--- a/gcc/c-family/c-ada-spec.c
+++ b/gcc/c-family/c-ada-spec.c
@@ -28,6 +28,8 @@ along with GCC; see the file COPYING3. If not see
#include "fold-const.h"
#include "c-pragma.h"
#include "cpp-id-data.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Local functions, macros and variables. */
static int dump_generic_ada_node (pretty_printer *, tree, tree, int, int,
@@ -858,7 +860,7 @@ print_generic_ada_decl (pretty_printer *pp, tree decl, const char *source_file)
{
source_file_base = source_file;
- if (print_ada_declaration (pp, decl, 0, INDENT_INCR))
+ if (print_ada_declaration (pp, decl, NULL_TREE, INDENT_INCR))
{
pp_newline (pp);
pp_newline (pp);
@@ -1052,13 +1054,11 @@ get_underlying_decl (tree type)
static bool
has_static_fields (const_tree type)
{
- tree tmp;
-
if (!type || !RECORD_OR_UNION_TYPE_P (type))
return false;
- for (tmp = TYPE_FIELDS (type); tmp; tmp = TREE_CHAIN (tmp))
- if (DECL_NAME (tmp) && TREE_STATIC (tmp))
+ for (tree fld = TYPE_FIELDS (type); fld; fld = TREE_CHAIN (fld))
+ if (TREE_CODE (fld) == VAR_DECL && DECL_NAME (fld))
return true;
return false;
@@ -1070,16 +1070,11 @@ has_static_fields (const_tree type)
static bool
is_tagged_type (const_tree type)
{
- tree tmp;
-
if (!type || !RECORD_OR_UNION_TYPE_P (type))
return false;
- /* TYPE_METHODS is only set on the main variant. */
- type = TYPE_MAIN_VARIANT (type);
-
- for (tmp = TYPE_METHODS (type); tmp; tmp = TREE_CHAIN (tmp))
- if (TREE_CODE (tmp) == FUNCTION_DECL && DECL_VINDEX (tmp))
+ for (tree fld = TYPE_FIELDS (type); fld; fld = TREE_CHAIN (fld))
+ if (TREE_CODE (fld) == FUNCTION_DECL && DECL_VINDEX (fld))
return true;
return false;
@@ -1093,8 +1088,6 @@ is_tagged_type (const_tree type)
static bool
has_nontrivial_methods (tree type)
{
- tree tmp;
-
if (!type || !RECORD_OR_UNION_TYPE_P (type))
return false;
@@ -1106,12 +1099,9 @@ has_nontrivial_methods (tree type)
if (!cpp_check (type, IS_TRIVIAL))
return true;
- /* TYPE_METHODS is only set on the main variant. */
- type = TYPE_MAIN_VARIANT (type);
-
/* If there are user-defined methods, they are deemed non-trivial. */
- for (tmp = TYPE_METHODS (type); tmp; tmp = TREE_CHAIN (tmp))
- if (!DECL_ARTIFICIAL (tmp))
+ for (tree fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld))
+ if (TREE_CODE (fld) == FUNCTION_DECL && !DECL_ARTIFICIAL (fld))
return true;
return false;
@@ -1665,7 +1655,8 @@ dump_ada_function_declaration (pretty_printer *buffer, tree func,
if (DECL_NAME (arg))
{
check_name (buffer, arg);
- pp_ada_tree_identifier (buffer, DECL_NAME (arg), 0, false);
+ pp_ada_tree_identifier (buffer, DECL_NAME (arg), NULL_TREE,
+ false);
pp_string (buffer, " : ");
}
else
@@ -1896,7 +1887,7 @@ dump_ada_template (pretty_printer *buffer, tree t, int spc)
if (TREE_VEC_LENGTH (types) == 0)
break;
- if (!RECORD_OR_UNION_TYPE_P (instance) || !TYPE_METHODS (instance))
+ if (!RECORD_OR_UNION_TYPE_P (instance))
break;
/* We are interested in concrete template instantiations only: skip
@@ -2065,7 +2056,10 @@ dump_generic_ada_node (pretty_printer *buffer, tree node, tree type, int spc,
}
else
{
- pp_string (buffer, "unsigned");
+ if (TYPE_UNSIGNED (node))
+ pp_string (buffer, "unsigned");
+ else
+ pp_string (buffer, "int");
for (; value; value = TREE_CHAIN (value))
{
pp_semicolon (buffer);
@@ -2103,7 +2097,7 @@ dump_generic_ada_node (pretty_printer *buffer, tree node, tree type, int spc,
{
if (DECL_NAME (node))
pp_ada_tree_identifier
- (buffer, DECL_NAME (node), 0, limited_access);
+ (buffer, DECL_NAME (node), NULL_TREE, limited_access);
else
pp_string (buffer, "<unnamed type decl>");
}
@@ -2390,13 +2384,14 @@ dump_generic_ada_node (pretty_printer *buffer, tree node, tree type, int spc,
{
if (is_tagged_type (TREE_TYPE (node)))
{
- tree tmp = TYPE_FIELDS (TREE_TYPE (node));
int first = 1;
/* Look for ancestors. */
- for (; tmp; tmp = TREE_CHAIN (tmp))
+ for (tree fld = TYPE_FIELDS (TREE_TYPE (node));
+ fld;
+ fld = TREE_CHAIN (fld))
{
- if (!DECL_NAME (tmp) && is_tagged_type (TREE_TYPE (tmp)))
+ if (!DECL_NAME (fld) && is_tagged_type (TREE_TYPE (fld)))
{
if (first)
{
@@ -2406,8 +2401,8 @@ dump_generic_ada_node (pretty_printer *buffer, tree node, tree type, int spc,
else
pp_string (buffer, " and ");
- dump_ada_decl_name
- (buffer, TYPE_NAME (TREE_TYPE (tmp)), false);
+ dump_ada_decl_name (buffer, TYPE_NAME (TREE_TYPE (fld)),
+ false);
}
}
@@ -2442,25 +2437,23 @@ dump_generic_ada_node (pretty_printer *buffer, tree node, tree type, int spc,
static int
print_ada_methods (pretty_printer *buffer, tree node, int spc)
{
- tree t;
- int res;
-
if (!has_nontrivial_methods (node))
return 0;
pp_semicolon (buffer);
- res = 1;
- for (t = TYPE_METHODS (node); t; t = TREE_CHAIN (t))
- {
- if (res)
- {
- pp_newline (buffer);
- pp_newline (buffer);
- }
-
- res = print_ada_declaration (buffer, t, node, spc);
- }
+ int res = 1;
+ for (tree fld = TYPE_FIELDS (node); fld; fld = DECL_CHAIN (fld))
+ if (TREE_CODE (fld) == FUNCTION_DECL)
+ {
+ if (res)
+ {
+ pp_newline (buffer);
+ pp_newline (buffer);
+ }
+
+ res = print_ada_declaration (buffer, fld, node, spc);
+ }
return 1;
}
@@ -2512,7 +2505,7 @@ dump_nested_types (pretty_printer *buffer, tree t, tree parent, bool forward,
dump_nested_type (buffer, field, t, parent, spc);
for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
- if (!TYPE_NAME (TREE_TYPE (field)))
+ if (TREE_CODE (field) == FIELD_DECL && !TYPE_NAME (TREE_TYPE (field)))
dump_nested_type (buffer, field, t, parent, spc);
TREE_VISITED (t) = 1;
@@ -2644,12 +2637,12 @@ dump_nested_type (pretty_printer *buffer, tree field, tree t, tree parent,
}
}
-/* Dump in BUFFER constructor spec corresponding to T. */
+/* Dump in BUFFER constructor spec corresponding to T for TYPE. */
static void
-print_constructor (pretty_printer *buffer, tree t)
+print_constructor (pretty_printer *buffer, tree t, tree type)
{
- tree decl_name = DECL_NAME (DECL_ORIGIN (t));
+ tree decl_name = DECL_NAME (TYPE_NAME (type));
pp_string (buffer, "New_");
pp_ada_tree_identifier (buffer, decl_name, t, false);
@@ -2658,9 +2651,9 @@ print_constructor (pretty_printer *buffer, tree t)
/* Dump in BUFFER destructor spec corresponding to T. */
static void
-print_destructor (pretty_printer *buffer, tree t)
+print_destructor (pretty_printer *buffer, tree t, tree type)
{
- tree decl_name = DECL_NAME (DECL_ORIGIN (t));
+ tree decl_name = DECL_NAME (TYPE_NAME (type));
pp_string (buffer, "Delete_");
pp_ada_tree_identifier (buffer, decl_name, t, false);
@@ -2916,7 +2909,8 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
return 0;
/* Only consider constructors/destructors for complete objects. */
- if (strncmp (IDENTIFIER_POINTER (decl_name), "__comp", 6) != 0)
+ if (strncmp (IDENTIFIER_POINTER (decl_name), "__ct_comp", 9) != 0
+ && strncmp (IDENTIFIER_POINTER (decl_name), "__dt_comp", 9) != 0)
return 0;
}
@@ -2944,9 +2938,9 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
}
if (is_constructor)
- print_constructor (buffer, t);
+ print_constructor (buffer, t, type);
else if (is_destructor)
- print_destructor (buffer, t);
+ print_destructor (buffer, t, type);
else
dump_ada_decl_name (buffer, t, false);
@@ -2961,19 +2955,13 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
dump_generic_ada_node (buffer, ret_type, type, spc, false, true);
}
- if (is_constructor
- && RECORD_OR_UNION_TYPE_P (type)
- && TYPE_METHODS (type))
- {
- tree tmp;
-
- for (tmp = TYPE_METHODS (type); tmp; tmp = TREE_CHAIN (tmp))
- if (cpp_check (tmp, IS_ABSTRACT))
- {
- is_abstract_class = true;
- break;
- }
- }
+ if (is_constructor && RECORD_OR_UNION_TYPE_P (type))
+ for (tree fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld))
+ if (TREE_CODE (fld) == FUNCTION_DECL && cpp_check (fld, IS_ABSTRACT))
+ {
+ is_abstract_class = true;
+ break;
+ }
if (is_abstract || is_abstract_class)
pp_string (buffer, " is abstract");
@@ -2990,7 +2978,7 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
if (is_constructor)
{
pp_string (buffer, "pragma CPP_Constructor (");
- print_constructor (buffer, t);
+ print_constructor (buffer, t, type);
pp_string (buffer, ", \"");
pp_asm_name (buffer, t);
pp_string (buffer, "\");");
@@ -2998,7 +2986,7 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
else if (is_destructor)
{
pp_string (buffer, "pragma Import (CPP, ");
- print_destructor (buffer, t);
+ print_destructor (buffer, t, type);
pp_string (buffer, ", \"");
pp_asm_name (buffer, t);
pp_string (buffer, "\");");
@@ -3028,35 +3016,35 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
pp_string (buffer, " is ");
- /* Check whether we have an Ada interface compatible class. */
+ /* Check whether we have an Ada interface compatible class.
+ That is only have a vtable non-static data member and no
+ non-abstract methods. */
if (cpp_check
- && RECORD_OR_UNION_TYPE_P (TREE_TYPE (t))
- && TYPE_METHODS (TREE_TYPE (t)))
+ && RECORD_OR_UNION_TYPE_P (TREE_TYPE (t)))
{
- int num_fields = 0;
- tree tmp;
+ bool has_fields = false;
/* Check that there are no fields other than the virtual table. */
- for (tmp = TYPE_FIELDS (TREE_TYPE (t)); tmp; tmp = TREE_CHAIN (tmp))
- {
- if (TREE_CODE (tmp) == TYPE_DECL)
- continue;
- num_fields++;
- }
-
- if (num_fields == 1)
- is_interface = 1;
-
- /* Also check that there are only pure virtual methods. Since the
- class is empty, we can skip implicit constructors/destructors. */
- for (tmp = TYPE_METHODS (TREE_TYPE (t)); tmp; tmp = TREE_CHAIN (tmp))
+ for (tree fld = TYPE_FIELDS (TREE_TYPE (t));
+ fld;
+ fld = TREE_CHAIN (fld))
{
- if (DECL_ARTIFICIAL (tmp))
- continue;
- if (cpp_check (tmp, IS_ABSTRACT))
- is_abstract_record = 1;
- else
- is_interface = 0;
+ if (TREE_CODE (fld) == FIELD_DECL)
+ {
+ if (!has_fields && DECL_VIRTUAL_P (fld))
+ is_interface = 1;
+ else
+ is_interface = 0;
+ has_fields = true;
+ }
+ else if (TREE_CODE (fld) == FUNCTION_DECL
+ && !DECL_ARTIFICIAL (fld))
+ {
+ if (cpp_check (fld, IS_ABSTRACT))
+ is_abstract_record = 1;
+ else
+ is_interface = 0;
+ }
}
}
@@ -3114,10 +3102,13 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
{
pp_string (buffer, "aliased ");
+ if (TREE_READONLY (t))
+ pp_string (buffer, "constant ");
+
if (TYPE_NAME (TREE_TYPE (t)))
dump_generic_ada_node
(buffer, TREE_TYPE (t), t, spc, false, true);
- else
+ else if (type)
dump_ada_double_name (buffer, type, t);
}
else
@@ -3127,6 +3118,9 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
|| TREE_CODE (TREE_TYPE (t)) != INTEGER_TYPE))
pp_string (buffer, "aliased ");
+ if (TREE_READONLY (t))
+ pp_string (buffer, "constant ");
+
dump_generic_ada_node
(buffer, TREE_TYPE (t), TREE_TYPE (t), spc, false, true);
}
@@ -3222,10 +3216,10 @@ print_ada_struct_decl (pretty_printer *buffer, tree node, tree type, int spc,
field_num++;
}
}
- else if (TREE_CODE (tmp) != TYPE_DECL && !TREE_STATIC (tmp))
+ else if (TREE_CODE (tmp) == FIELD_DECL)
{
/* Skip internal virtual table field. */
- if (strncmp (IDENTIFIER_POINTER (DECL_NAME (tmp)), "_vptr", 5))
+ if (!DECL_VIRTUAL_P (tmp))
{
if (is_union)
{
@@ -3316,7 +3310,7 @@ print_ada_struct_decl (pretty_printer *buffer, tree node, tree type, int spc,
/* Print the static fields of the structure, if any. */
for (tmp = TYPE_FIELDS (node); tmp; tmp = TREE_CHAIN (tmp))
{
- if (DECL_NAME (tmp) && TREE_STATIC (tmp))
+ if (TREE_CODE (tmp) == VAR_DECL && DECL_NAME (tmp))
{
if (need_semicolon)
{
diff --git a/gcc/c-family/c-attribs.c b/gcc/c-family/c-attribs.c
index 626ffa1cde7..a40b0649ca3 100644
--- a/gcc/c-family/c-attribs.c
+++ b/gcc/c-family/c-attribs.c
@@ -66,6 +66,7 @@ static tree handle_stack_protect_attribute (tree *, tree, tree, int, bool *);
static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
static tree handle_noclone_attribute (tree *, tree, tree, int, bool *);
static tree handle_noicf_attribute (tree *, tree, tree, int, bool *);
+static tree handle_noipa_attribute (tree *, tree, tree, int, bool *);
static tree handle_leaf_attribute (tree *, tree, tree, int, bool *);
static tree handle_always_inline_attribute (tree *, tree, tree, int,
bool *);
@@ -142,6 +143,8 @@ static tree handle_bnd_variable_size_attribute (tree *, tree, tree, int, bool *)
static tree handle_bnd_legacy (tree *, tree, tree, int, bool *);
static tree handle_bnd_instrument (tree *, tree, tree, int, bool *);
static tree handle_fallthrough_attribute (tree *, tree, tree, int, bool *);
+static tree handle_patchable_function_entry_attribute (tree *, tree, tree,
+ int, bool *);
/* Table of machine-independent attributes common to all C-like languages.
@@ -176,6 +179,8 @@ const struct attribute_spec c_common_attribute_table[] =
handle_noclone_attribute, false },
{ "no_icf", 0, 0, true, false, false,
handle_noicf_attribute, false },
+ { "noipa", 0, 0, true, false, false,
+ handle_noipa_attribute, false },
{ "leaf", 0, 0, true, false, false,
handle_leaf_attribute, false },
{ "always_inline", 0, 0, true, false, false,
@@ -351,6 +356,9 @@ const struct attribute_spec c_common_attribute_table[] =
handle_bnd_instrument, false },
{ "fallthrough", 0, 0, false, false, false,
handle_fallthrough_attribute, false },
+ { "patchable_function_entry", 1, 2, true, false, false,
+ handle_patchable_function_entry_attribute,
+ false },
{ NULL, 0, 0, false, false, false, NULL, false }
};
@@ -699,6 +707,21 @@ handle_stack_protect_attribute (tree *node, tree name, tree, int,
warning (OPT_Wattributes, "%qE attribute ignored", name);
*no_add_attrs = true;
}
+
+ return NULL_TREE;
+}
+
+/* Handle a "noipa" attribute; arguments as in
+ struct attribute_spec.handler. */
+
+static tree
+handle_noipa_attribute (tree *node, tree name, tree, int, bool *no_add_attrs)
+{
+ if (TREE_CODE (*node) != FUNCTION_DECL)
+ {
+ warning (OPT_Wattributes, "%qE attribute ignored", name);
+ *no_add_attrs = true;
+ }
else
DECL_ATTRIBUTES (*node)
= tree_cons (get_identifier ("stack_protect"),
@@ -3116,6 +3139,19 @@ handle_target_attribute (tree *node, tree name, tree args, int flags,
flags))
*no_add_attrs = true;
+ /* Check that there's no empty string in values of the attribute. */
+ for (tree t = args; t != NULL_TREE; t = TREE_CHAIN (t))
+ {
+ tree value = TREE_VALUE (t);
+ if (TREE_CODE (value) == STRING_CST
+ && TREE_STRING_LENGTH (value) == 1
+ && TREE_STRING_POINTER (value)[0] == '\0')
+ {
+ warning (OPT_Wattributes, "empty string in attribute %<target%>");
+ *no_add_attrs = true;
+ }
+ }
+
return NULL_TREE;
}
@@ -3260,3 +3296,10 @@ handle_fallthrough_attribute (tree *, tree name, tree, int,
*no_add_attrs = true;
return NULL_TREE;
}
+
+static tree
+handle_patchable_function_entry_attribute (tree *, tree, tree, int, bool *)
+{
+ /* Nothing to be done here. */
+ return NULL_TREE;
+}
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index feb0904bcbf..4dc3b338e5e 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -3133,7 +3133,8 @@ pointer_int_sum (location_t loc, enum tree_code resultcode,
can result in a sum or difference with different type args. */
ptrop = build_binary_op (EXPR_LOCATION (TREE_OPERAND (intop, 1)),
subcode, ptrop,
- convert (int_type, TREE_OPERAND (intop, 1)), 1);
+ convert (int_type, TREE_OPERAND (intop, 1)),
+ true);
intop = convert (int_type, TREE_OPERAND (intop, 0));
}
@@ -3306,7 +3307,7 @@ c_common_truthvalue_conversion (location_t location, tree expr)
TREE_OPERAND (expr, 0)),
c_common_truthvalue_conversion (location,
TREE_OPERAND (expr, 1)),
- 0);
+ false);
goto ret;
case NEGATE_EXPR:
@@ -3457,7 +3458,7 @@ c_common_truthvalue_conversion (location_t location, tree expr)
c_common_truthvalue_conversion
(location,
build_unary_op (location, IMAGPART_EXPR, t, false)),
- 0));
+ false));
goto ret;
}
@@ -3466,10 +3467,10 @@ c_common_truthvalue_conversion (location_t location, tree expr)
tree fixed_zero_node = build_fixed (TREE_TYPE (expr),
FCONST0 (TYPE_MODE
(TREE_TYPE (expr))));
- return build_binary_op (location, NE_EXPR, expr, fixed_zero_node, 1);
+ return build_binary_op (location, NE_EXPR, expr, fixed_zero_node, true);
}
else
- return build_binary_op (location, NE_EXPR, expr, integer_zero_node, 1);
+ return build_binary_op (location, NE_EXPR, expr, integer_zero_node, true);
ret:
protected_set_expr_location (expr, location);
@@ -5949,12 +5950,13 @@ catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
return result;
}
-/* Issue the error given by GMSGID, indicating that it occurred before
- TOKEN, which had the associated VALUE. */
+/* Issue the error given by GMSGID at RICHLOC, indicating that it occurred
+ before TOKEN, which had the associated VALUE. */
void
c_parse_error (const char *gmsgid, enum cpp_ttype token_type,
- tree value, unsigned char token_flags)
+ tree value, unsigned char token_flags,
+ rich_location *richloc)
{
#define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
@@ -5995,7 +5997,7 @@ c_parse_error (const char *gmsgid, enum cpp_ttype token_type,
else
message = catenate_messages (gmsgid, " before %s'\\x%x'");
- error (message, prefix, val);
+ error_at_rich_loc (richloc, message, prefix, val);
free (message);
message = NULL;
}
@@ -6023,7 +6025,7 @@ c_parse_error (const char *gmsgid, enum cpp_ttype token_type,
else if (token_type == CPP_NAME)
{
message = catenate_messages (gmsgid, " before %qE");
- error (message, value);
+ error_at_rich_loc (richloc, message, value);
free (message);
message = NULL;
}
@@ -6036,16 +6038,16 @@ c_parse_error (const char *gmsgid, enum cpp_ttype token_type,
else if (token_type < N_TTYPES)
{
message = catenate_messages (gmsgid, " before %qs token");
- error (message, cpp_type2name (token_type, token_flags));
+ error_at_rich_loc (richloc, message, cpp_type2name (token_type, token_flags));
free (message);
message = NULL;
}
else
- error (gmsgid);
+ error_at_rich_loc (richloc, gmsgid);
if (message)
{
- error (message);
+ error_at_rich_loc (richloc, message);
free (message);
}
#undef catenate_messages
diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h
index a29f1ade25d..980d39662fc 100644
--- a/gcc/c-family/c-common.h
+++ b/gcc/c-family/c-common.h
@@ -960,7 +960,7 @@ extern tree build_real_imag_expr (location_t, enum tree_code, tree);
a variant of the C language. They are used in c-common.c. */
extern tree build_unary_op (location_t, enum tree_code, tree, bool);
-extern tree build_binary_op (location_t, enum tree_code, tree, tree, int);
+extern tree build_binary_op (location_t, enum tree_code, tree, tree, bool);
extern tree perform_integral_promotions (tree);
/* These functions must be defined by each front-end which implements
@@ -1124,7 +1124,8 @@ extern void builtin_define_with_int_value (const char *, HOST_WIDE_INT);
extern void builtin_define_type_sizeof (const char *, tree);
extern void c_stddef_cpp_builtins (void);
extern void fe_file_change (const line_map_ordinary *);
-extern void c_parse_error (const char *, enum cpp_ttype, tree, unsigned char);
+extern void c_parse_error (const char *, enum cpp_ttype, tree, unsigned char,
+ rich_location *richloc);
/* In c-ppoutput.c */
extern void init_pp_output (FILE *);
diff --git a/gcc/c-family/c-format.c b/gcc/c-family/c-format.c
index 732339b9b5e..5e5b494383f 100644
--- a/gcc/c-family/c-format.c
+++ b/gcc/c-family/c-format.c
@@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see
#include "substring-locations.h"
#include "selftest.h"
#include "builtins.h"
+#include "attribs.h"
/* Handle attributes associated with format checking. */
@@ -67,7 +68,6 @@ static bool check_format_string (tree argument,
static bool get_constant (tree expr, unsigned HOST_WIDE_INT *value,
int validated_p);
static const char *convert_format_name_to_system_name (const char *attr_name);
-static bool cmp_attribs (const char *tattr_name, const char *attr_name);
static int first_target_format_type;
static const char *format_name (int format_num);
@@ -672,6 +672,7 @@ static const format_char_info asm_fprintf_char_table[] =
{ "L", 0, STD_C89, NOARGUMENTS, "", "", NULL },
{ "U", 0, STD_C89, NOARGUMENTS, "", "", NULL },
{ "r", 0, STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "", NULL },
+ { "z", 0, STD_C89, NOARGUMENTS, "", "", NULL },
{ "@", 0, STD_C89, NOARGUMENTS, "", "", NULL },
{ NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL }
};
@@ -3975,24 +3976,6 @@ convert_format_name_to_system_name (const char *attr_name)
return attr_name;
}
-/* Return true if TATTR_NAME and ATTR_NAME are the same format attribute,
- counting "name" and "__name__" as the same, false otherwise. */
-static bool
-cmp_attribs (const char *tattr_name, const char *attr_name)
-{
- int alen = strlen (attr_name);
- int slen = (tattr_name ? strlen (tattr_name) : 0);
- if (alen > 4 && attr_name[0] == '_' && attr_name[1] == '_'
- && attr_name[alen - 1] == '_' && attr_name[alen - 2] == '_')
- {
- attr_name += 2;
- alen -= 4;
- }
- if (alen != slen || strncmp (tattr_name, attr_name, alen) != 0)
- return false;
- return true;
-}
-
/* Handle a "format" attribute; arguments as in
struct attribute_spec.handler. */
tree
@@ -4021,6 +4004,10 @@ handle_format_attribute (tree *node, tree ARG_UNUSED (name), tree args,
}
#endif
+ /* Canonicalize name of format function. */
+ if (TREE_CODE (TREE_VALUE (args)) == IDENTIFIER_NODE)
+ TREE_VALUE (args) = canonicalize_attr_name (TREE_VALUE (args));
+
if (!decode_format_attr (args, &info, 0))
{
*no_add_attrs = true;
diff --git a/gcc/c-family/c-lex.c b/gcc/c-family/c-lex.c
index e1c8bdff986..3765a800a57 100644
--- a/gcc/c-family/c-lex.c
+++ b/gcc/c-family/c-lex.c
@@ -316,6 +316,7 @@ c_common_has_attribute (cpp_reader *pfile)
{
attr_name = get_identifier ((const char *)
cpp_token_as_text (pfile, token));
+ attr_name = canonicalize_attr_name (attr_name);
if (c_dialect_cxx ())
{
int idx = 0;
diff --git a/gcc/c-family/c-omp.c b/gcc/c-family/c-omp.c
index 519c4e4ce66..eef7ac0c769 100644
--- a/gcc/c-family/c-omp.c
+++ b/gcc/c-family/c-omp.c
@@ -181,6 +181,7 @@ c_finish_omp_atomic (location_t loc, enum tree_code code,
bool test)
{
tree x, type, addr, pre = NULL_TREE;
+ HOST_WIDE_INT bitpos = 0, bitsize = 0;
if (lhs == error_mark_node || rhs == error_mark_node
|| v == error_mark_node || lhs1 == error_mark_node
@@ -209,6 +210,29 @@ c_finish_omp_atomic (location_t loc, enum tree_code code,
opcode = TRUNC_DIV_EXPR;
/* ??? Validate that rhs does not overlap lhs. */
+ tree blhs = NULL;
+ if (TREE_CODE (lhs) == COMPONENT_REF
+ && TREE_CODE (TREE_OPERAND (lhs, 1)) == FIELD_DECL
+ && DECL_C_BIT_FIELD (TREE_OPERAND (lhs, 1))
+ && DECL_BIT_FIELD_REPRESENTATIVE (TREE_OPERAND (lhs, 1)))
+ {
+ tree field = TREE_OPERAND (lhs, 1);
+ tree repr = DECL_BIT_FIELD_REPRESENTATIVE (field);
+ if (tree_fits_uhwi_p (DECL_FIELD_OFFSET (field))
+ && tree_fits_uhwi_p (DECL_FIELD_OFFSET (repr)))
+ bitpos = (tree_to_uhwi (DECL_FIELD_OFFSET (field))
+ - tree_to_uhwi (DECL_FIELD_OFFSET (repr))) * BITS_PER_UNIT;
+ else
+ bitpos = 0;
+ bitpos += (tree_to_uhwi (DECL_FIELD_BIT_OFFSET (field))
+ - tree_to_uhwi (DECL_FIELD_BIT_OFFSET (repr)));
+ gcc_assert (tree_fits_shwi_p (DECL_SIZE (field)));
+ bitsize = tree_to_shwi (DECL_SIZE (field));
+ blhs = lhs;
+ type = TREE_TYPE (repr);
+ lhs = build3 (COMPONENT_REF, TREE_TYPE (repr), TREE_OPERAND (lhs, 0),
+ repr, TREE_OPERAND (lhs, 2));
+ }
/* Take and save the address of the lhs. From then on we'll reference it
via indirection. */
@@ -228,13 +252,18 @@ c_finish_omp_atomic (location_t loc, enum tree_code code,
DECL_CONTEXT (var) = current_function_decl;
addr = build4 (TARGET_EXPR, TREE_TYPE (addr), var, addr, NULL, NULL);
}
+ tree orig_lhs = lhs;
lhs = build_indirect_ref (loc, addr, RO_NULL);
+ tree new_lhs = lhs;
if (code == OMP_ATOMIC_READ)
{
x = build1 (OMP_ATOMIC_READ, type, addr);
SET_EXPR_LOCATION (x, loc);
OMP_ATOMIC_SEQ_CST (x) = seq_cst;
+ if (blhs)
+ x = build3_loc (loc, BIT_FIELD_REF, TREE_TYPE (blhs), x,
+ bitsize_int (bitsize), bitsize_int (bitpos));
return build_modify_expr (loc, v, NULL_TREE, NOP_EXPR,
loc, x, NULL_TREE);
}
@@ -242,14 +271,25 @@ c_finish_omp_atomic (location_t loc, enum tree_code code,
/* There are lots of warnings, errors, and conversions that need to happen
in the course of interpreting a statement. Use the normal mechanisms
to do this, and then take it apart again. */
- if (swapped)
+ if (blhs)
+ {
+ lhs = build3_loc (loc, BIT_FIELD_REF, TREE_TYPE (blhs), lhs,
+ bitsize_int (bitsize), bitsize_int (bitpos));
+ if (swapped)
+ rhs = build_binary_op (loc, opcode, rhs, lhs, true);
+ else if (opcode != NOP_EXPR)
+ rhs = build_binary_op (loc, opcode, lhs, rhs, true);
+ opcode = NOP_EXPR;
+ }
+ else if (swapped)
{
- rhs = build_binary_op (loc, opcode, rhs, lhs, 1);
+ rhs = build_binary_op (loc, opcode, rhs, lhs, true);
opcode = NOP_EXPR;
}
bool save = in_late_binary_op;
in_late_binary_op = true;
- x = build_modify_expr (loc, lhs, NULL_TREE, opcode, loc, rhs, NULL_TREE);
+ x = build_modify_expr (loc, blhs ? blhs : lhs, NULL_TREE, opcode,
+ loc, rhs, NULL_TREE);
in_late_binary_op = save;
if (x == error_mark_node)
return error_mark_node;
@@ -262,6 +302,10 @@ c_finish_omp_atomic (location_t loc, enum tree_code code,
gcc_assert (TREE_CODE (x) == MODIFY_EXPR);
rhs = TREE_OPERAND (x, 1);
+ if (blhs)
+ rhs = build3_loc (loc, BIT_INSERT_EXPR, type, new_lhs,
+ rhs, bitsize_int (bitpos));
+
/* Punt the actual generation of atomic operations to common code. */
if (code == OMP_ATOMIC)
type = void_type_node;
@@ -273,8 +317,8 @@ c_finish_omp_atomic (location_t loc, enum tree_code code,
location, just diagnose different variables. */
if (rhs1
&& VAR_P (rhs1)
- && VAR_P (lhs)
- && rhs1 != lhs
+ && VAR_P (orig_lhs)
+ && rhs1 != orig_lhs
&& !test)
{
if (code == OMP_ATOMIC)
@@ -286,29 +330,57 @@ c_finish_omp_atomic (location_t loc, enum tree_code code,
return error_mark_node;
}
+ if (lhs1
+ && lhs1 != orig_lhs
+ && TREE_CODE (lhs1) == COMPONENT_REF
+ && TREE_CODE (TREE_OPERAND (lhs1, 1)) == FIELD_DECL
+ && DECL_C_BIT_FIELD (TREE_OPERAND (lhs1, 1))
+ && DECL_BIT_FIELD_REPRESENTATIVE (TREE_OPERAND (lhs1, 1)))
+ {
+ tree field = TREE_OPERAND (lhs1, 1);
+ tree repr = DECL_BIT_FIELD_REPRESENTATIVE (field);
+ lhs1 = build3 (COMPONENT_REF, TREE_TYPE (repr), TREE_OPERAND (lhs1, 0),
+ repr, TREE_OPERAND (lhs1, 2));
+ }
+ if (rhs1
+ && rhs1 != orig_lhs
+ && TREE_CODE (rhs1) == COMPONENT_REF
+ && TREE_CODE (TREE_OPERAND (rhs1, 1)) == FIELD_DECL
+ && DECL_C_BIT_FIELD (TREE_OPERAND (rhs1, 1))
+ && DECL_BIT_FIELD_REPRESENTATIVE (TREE_OPERAND (rhs1, 1)))
+ {
+ tree field = TREE_OPERAND (rhs1, 1);
+ tree repr = DECL_BIT_FIELD_REPRESENTATIVE (field);
+ rhs1 = build3 (COMPONENT_REF, TREE_TYPE (repr), TREE_OPERAND (rhs1, 0),
+ repr, TREE_OPERAND (rhs1, 2));
+ }
+
if (code != OMP_ATOMIC)
{
/* Generally it is hard to prove lhs1 and lhs are the same memory
location, just diagnose different variables. */
- if (lhs1 && VAR_P (lhs1) && VAR_P (lhs))
+ if (lhs1 && VAR_P (lhs1) && VAR_P (orig_lhs))
{
- if (lhs1 != lhs && !test)
+ if (lhs1 != orig_lhs && !test)
{
error_at (loc, "%<#pragma omp atomic capture%> uses two "
"different variables for memory");
return error_mark_node;
}
}
+ if (blhs)
+ x = build3_loc (loc, BIT_FIELD_REF, TREE_TYPE (blhs), x,
+ bitsize_int (bitsize), bitsize_int (bitpos));
x = build_modify_expr (loc, v, NULL_TREE, NOP_EXPR,
loc, x, NULL_TREE);
- if (rhs1 && rhs1 != lhs)
+ if (rhs1 && rhs1 != orig_lhs)
{
tree rhs1addr = build_unary_op (loc, ADDR_EXPR, rhs1, false);
if (rhs1addr == error_mark_node)
return error_mark_node;
x = omit_one_operand_loc (loc, type, x, rhs1addr);
}
- if (lhs1 && lhs1 != lhs)
+ if (lhs1 && lhs1 != orig_lhs)
{
tree lhs1addr = build_unary_op (loc, ADDR_EXPR, lhs1, false);
if (lhs1addr == error_mark_node)
@@ -323,7 +395,7 @@ c_finish_omp_atomic (location_t loc, enum tree_code code,
}
}
}
- else if (rhs1 && rhs1 != lhs)
+ else if (rhs1 && rhs1 != orig_lhs)
{
tree rhs1addr = build_unary_op (loc, ADDR_EXPR, rhs1, false);
if (rhs1addr == error_mark_node)
@@ -531,6 +603,12 @@ c_finish_omp_for (location_t locus, enum tree_code code, tree declv,
{
bool cond_ok = false;
+ /* E.g. C sizeof (vla) could add COMPOUND_EXPRs with
+ evaluation of the vla VAR_DECL. We need to readd
+ them to the non-decl operand. See PR45784. */
+ while (TREE_CODE (cond) == COMPOUND_EXPR)
+ cond = TREE_OPERAND (cond, 1);
+
if (EXPR_HAS_LOCATION (cond))
elocus = EXPR_LOCATION (cond);
@@ -605,6 +683,21 @@ c_finish_omp_for (location_t locus, enum tree_code code, tree declv,
else if (code != CILK_SIMD && code != CILK_FOR)
cond_ok = false;
}
+
+ if (cond_ok && TREE_VEC_ELT (condv, i) != cond)
+ {
+ tree ce = NULL_TREE, *pce = &ce;
+ tree type = TREE_TYPE (TREE_OPERAND (cond, 1));
+ for (tree c = TREE_VEC_ELT (condv, i); c != cond;
+ c = TREE_OPERAND (c, 1))
+ {
+ *pce = build2 (COMPOUND_EXPR, type, TREE_OPERAND (c, 0),
+ TREE_OPERAND (cond, 1));
+ pce = &TREE_OPERAND (*pce, 1);
+ }
+ TREE_OPERAND (cond, 1) = ce;
+ TREE_VEC_ELT (condv, i) = cond;
+ }
}
if (!cond_ok)
diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c
index 1657e7a4390..0b13a188c1b 100644
--- a/gcc/c-family/c-opts.c
+++ b/gcc/c-family/c-opts.c
@@ -957,16 +957,18 @@ c_common_post_options (const char **pfilename)
if (flag_extern_tls_init)
{
-#if !defined (ASM_OUTPUT_DEF) || !SUPPORTS_WEAK
- /* Lazy TLS initialization for a variable in another TU requires
- alias and weak reference support. */
- if (flag_extern_tls_init > 0)
- sorry ("external TLS initialization functions not supported "
- "on this target");
- flag_extern_tls_init = 0;
-#else
- flag_extern_tls_init = 1;
-#endif
+ if (!TARGET_SUPPORTS_ALIASES || !SUPPORTS_WEAK)
+ {
+ /* Lazy TLS initialization for a variable in another TU requires
+ alias and weak reference support. */
+ if (flag_extern_tls_init > 0)
+ sorry ("external TLS initialization functions not supported "
+ "on this target");
+
+ flag_extern_tls_init = 0;
+ }
+ else
+ flag_extern_tls_init = 1;
}
if (num_in_fnames > 1)
diff --git a/gcc/c-family/c-pretty-print.c b/gcc/c-family/c-pretty-print.c
index fdb7b41f592..b8b8f665ef3 100644
--- a/gcc/c-family/c-pretty-print.c
+++ b/gcc/c-family/c-pretty-print.c
@@ -24,6 +24,7 @@ along with GCC; see the file COPYING3. If not see
#include "c-pretty-print.h"
#include "diagnostic.h"
#include "stor-layout.h"
+#include "stringpool.h"
#include "attribs.h"
#include "intl.h"
#include "tree-pretty-print.h"
diff --git a/gcc/c-family/c-ubsan.c b/gcc/c-family/c-ubsan.c
index a072d19eda6..b1386db9c25 100644
--- a/gcc/c-family/c-ubsan.c
+++ b/gcc/c-family/c-ubsan.c
@@ -25,10 +25,12 @@ along with GCC; see the file COPYING3. If not see
#include "c-family/c-common.h"
#include "ubsan.h"
#include "c-family/c-ubsan.h"
-#include "asan.h"
#include "stor-layout.h"
#include "builtins.h"
#include "gimplify.h"
+#include "stringpool.h"
+#include "attribs.h"
+#include "asan.h"
/* Instrument division by zero and INT_MIN / -1. If not instrumenting,
return NULL_TREE. */
@@ -373,7 +375,8 @@ void
ubsan_maybe_instrument_array_ref (tree *expr_p, bool ignore_off_by_one)
{
if (!ubsan_array_ref_instrumented_p (*expr_p)
- && sanitize_flags_p (SANITIZE_BOUNDS | SANITIZE_BOUNDS_STRICT))
+ && sanitize_flags_p (SANITIZE_BOUNDS | SANITIZE_BOUNDS_STRICT)
+ && current_function_decl != NULL_TREE)
{
tree op0 = TREE_OPERAND (*expr_p, 0);
tree op1 = TREE_OPERAND (*expr_p, 1);
@@ -393,7 +396,8 @@ static tree
ubsan_maybe_instrument_reference_or_call (location_t loc, tree op, tree ptype,
enum ubsan_null_ckind ckind)
{
- if (!sanitize_flags_p (SANITIZE_ALIGNMENT | SANITIZE_NULL))
+ if (!sanitize_flags_p (SANITIZE_ALIGNMENT | SANITIZE_NULL)
+ || current_function_decl == NULL_TREE)
return NULL_TREE;
tree type = TREE_TYPE (ptype);
diff --git a/gcc/c-family/c-warn.c b/gcc/c-family/c-warn.c
index a8b38c1b98d..9c3073444cf 100644
--- a/gcc/c-family/c-warn.c
+++ b/gcc/c-family/c-warn.c
@@ -28,6 +28,8 @@ along with GCC; see the file COPYING3. If not see
#include "tm_p.h"
#include "diagnostic.h"
#include "intl.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
#include "gcc-rich-location.h"
#include "gimplify.h"
@@ -1891,9 +1893,10 @@ warn_for_sign_compare (location_t location,
c_common_signed_type (base_type)))
/* OK */;
else
- warning_at (location,
- OPT_Wsign_compare,
- "comparison between signed and unsigned integer expressions");
+ warning_at (location, OPT_Wsign_compare,
+ "comparison of integer expressions of different "
+ "signedness: %qT and %qT", TREE_TYPE (orig_op0),
+ TREE_TYPE (orig_op1));
}
/* Warn if two unsigned values are being compared in a size larger
@@ -2456,34 +2459,44 @@ warn_for_multistatement_macros (location_t body_loc, location_t next_loc,
|| body_loc_exp == next_loc_exp)
return;
- /* Find the macro map for the macro expansion BODY_LOC. */
- const line_map *map = linemap_lookup (line_table, body_loc);
- const line_map_macro *macro_map = linemap_check_macro (map);
-
- /* Now see if the following token is coming from the same macro
- expansion. If it is, it's a problem, because it should've been
- parsed at this point. We only look at odd-numbered indexes
- within the MACRO_MAP_LOCATIONS array, i.e. the spelling locations
- of the tokens. */
- bool found_guard = false;
- bool found_next = false;
- for (unsigned int i = 1;
- i < 2 * MACRO_MAP_NUM_MACRO_TOKENS (macro_map);
- i += 2)
- {
- if (MACRO_MAP_LOCATIONS (macro_map)[i] == next_loc_exp)
- found_next = true;
- if (MACRO_MAP_LOCATIONS (macro_map)[i] == guard_loc_exp)
- found_guard = true;
- }
+ /* Find the macro maps for the macro expansions. */
+ const line_map *body_map = linemap_lookup (line_table, body_loc);
+ const line_map *next_map = linemap_lookup (line_table, next_loc);
+ const line_map *guard_map = linemap_lookup (line_table, guard_loc);
+
+ /* Now see if the following token (after the body) is coming from the
+ same macro expansion. If it is, it might be a problem. */
+ if (body_map != next_map)
+ return;
/* The conditional itself must not come from the same expansion, because
we don't want to warn about
#define IF if (x) x++; y++
and similar. */
- if (!found_next || found_guard)
+ if (guard_map == body_map)
return;
+ /* Handle the case where NEXT and BODY come from the same expansion while
+ GUARD doesn't, yet we shouldn't warn. E.g.
+
+ #define GUARD if (...)
+ #define GUARD2 GUARD
+
+ and in the definition of another macro:
+
+ GUARD2
+ foo ();
+ return 1;
+ */
+ while (linemap_macro_expansion_map_p (guard_map))
+ {
+ const line_map_macro *mm = linemap_check_macro (guard_map);
+ guard_loc_exp = MACRO_MAP_EXPANSION_POINT_LOCATION (mm);
+ guard_map = linemap_lookup (line_table, guard_loc_exp);
+ if (guard_map == body_map)
+ return;
+ }
+
if (warning_at (body_loc, OPT_Wmultistatement_macros,
"macro expands to multiple statements"))
inform (guard_loc, "some parts of macro expansion are not guarded by "
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index bfa9e9a879f..cd0c128edc8 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,176 @@
+2017-08-11 Marek Polacek <polacek@redhat.com>
+
+ PR c/81795
+ * c-decl.c (pushtag): Only print inform if the warning was printed.
+ (grokdeclarator): Likewise.
+
+2017-08-10 David Malcolm <dmalcolm@redhat.com>
+
+ * c-parser.c (c_parser_error): Rename to...
+ (c_parser_error_richloc): ...this, making static, and adding
+ "richloc" parameter, passing it to the c_parse_error call,
+ rather than calling c_parser_set_source_position_from_token.
+ (c_parser_error): Reintroduce, reimplementing in terms of the
+ above, converting return type from void to bool.
+ (class token_pair): New class.
+ (struct matching_paren_traits): New struct.
+ (matching_parens): New typedef.
+ (struct matching_brace_traits): New struct.
+ (matching_braces): New typedef.
+ (get_matching_symbol): New function.
+ (c_parser_require): Add param MATCHING_LOCATION, using it to
+ highlight matching "opening" tokens for missing "closing" tokens.
+ (c_parser_skip_until_found): Likewise.
+ (c_parser_static_assert_declaration_no_semi): Convert explicit
+ parsing of CPP_OPEN_PAREN and CPP_CLOSE_PAREN to use of
+ class matching_parens, so that the pertinent open parenthesis is
+ highlighted when there are problems locating the close
+ parenthesis.
+ (c_parser_struct_or_union_specifier): Likewise.
+ (c_parser_typeof_specifier): Likewise.
+ (c_parser_alignas_specifier): Likewise.
+ (c_parser_simple_asm_expr): Likewise.
+ (c_parser_braced_init): Likewise, for matching_braces.
+ (c_parser_paren_condition): Likewise, for matching_parens.
+ (c_parser_switch_statement): Likewise.
+ (c_parser_for_statement): Likewise.
+ (c_parser_asm_statement): Likewise.
+ (c_parser_asm_operands): Likewise.
+ (c_parser_cast_expression): Likewise.
+ (c_parser_sizeof_expression): Likewise.
+ (c_parser_alignof_expression): Likewise.
+ (c_parser_generic_selection): Likewise.
+ (c_parser_postfix_expression): Likewise for cases RID_VA_ARG,
+ RID_OFFSETOF, RID_TYPES_COMPATIBLE_P, RID_AT_SELECTOR,
+ RID_AT_PROTOCOL, RID_AT_ENCODE, reindenting as necessary.
+ In case CPP_OPEN_PAREN, pass loc_open_paren to the
+ c_parser_skip_until_found call.
+ (c_parser_objc_class_definition): Use class matching_parens as
+ above.
+ (c_parser_objc_method_decl): Likewise.
+ (c_parser_objc_try_catch_finally_statement): Likewise.
+ (c_parser_objc_synchronized_statement): Likewise.
+ (c_parser_objc_at_property_declaration): Likewise.
+ (c_parser_oacc_wait_list): Likewise.
+ (c_parser_omp_var_list_parens): Likewise.
+ (c_parser_omp_clause_collapse): Likewise.
+ (c_parser_omp_clause_default): Likewise.
+ (c_parser_omp_clause_if): Likewise.
+ (c_parser_omp_clause_num_threads): Likewise.
+ (c_parser_omp_clause_num_tasks): Likewise.
+ (c_parser_omp_clause_grainsize): Likewise.
+ (c_parser_omp_clause_priority): Likewise.
+ (c_parser_omp_clause_hint): Likewise.
+ (c_parser_omp_clause_defaultmap): Likewise.
+ (c_parser_oacc_single_int_clause): Likewise.
+ (c_parser_omp_clause_ordered): Likewise.
+ (c_parser_omp_clause_reduction): Likewise.
+ (c_parser_omp_clause_schedule): Likewise.
+ (c_parser_omp_clause_num_teams): Likewise.
+ (c_parser_omp_clause_thread_limit): Likewise.
+ (c_parser_omp_clause_aligned): Likewise.
+ (c_parser_omp_clause_linear): Likewise.
+ (c_parser_omp_clause_safelen): Likewise.
+ (c_parser_omp_clause_simdlen): Likewise.
+ (c_parser_omp_clause_depend): Likewise.
+ (c_parser_omp_clause_map): Likewise.
+ (c_parser_omp_clause_device): Likewise.
+ (c_parser_omp_clause_dist_schedule): Likewise.
+ (c_parser_omp_clause_proc_bind): Likewise.
+ (c_parser_omp_clause_uniform): Likewise.
+ (c_parser_omp_for_loop): Likewise.
+ (c_parser_cilk_clause_vectorlength): Likewise.
+ (c_parser_cilk_clause_linear): Likewise.
+ (c_parser_transaction_expression): Likewise.
+ * c-parser.h (c_parser_require): Add param matching_location with
+ default UNKNOWN_LOCATION.
+ (c_parser_error): Convert return type from void to bool.
+ (c_parser_skip_until_found): Add param matching_location with
+ default UNKNOWN_LOCATION.
+
+2017-08-09 Marek Polacek <polacek@redhat.com>
+
+ * c-decl.c (build_enumerator): Use true/false instead of 1/0.
+ * c-tree.h (build_external_ref): Update declaration.
+ * c-typeck.c (build_array_ref): Use true/false instead of 1/0.
+ (build_external_ref): Change the type of a parameter to bool.
+ (parser_build_binary_op): Use true/false instead of 1/0.
+ (pointer_diff): Likewise.
+ (build_modify_expr): Likewise.
+ (set_designator): Change the type of a parameter to bool.
+ (set_init_index): Use true/false instead of 1/0.
+ (set_init_label): Likewise.
+ (output_init_element): Change the type of a parameter to bool.
+ (output_pending_init_elements): Use true/false instead of 1/0.
+ (process_init_element): Likewise.
+ (build_binary_op): Change the type of a parameter to bool.
+
+2017-08-09 Marek Polacek <polacek@redhat.com>
+
+ PR c/81233
+ * c-typeck.c (pedwarn_init): Make the function take a variable list.
+ Call emit_diagnostic_valist instead of pedwarn.
+ (convert_for_assignment): Unroll the PEDWARN_FOR_ASSIGNMENT macro.
+ Print the relevant types in diagnostics.
+
+2017-08-09 Marek Polacek <polacek@redhat.com>
+
+ PR c/81417
+ * c-array-notation.c (fix_builtin_array_notation_fn): Update calls to
+ build_conditional_expr.
+ * c-parser.c (c_parser_conditional_expression): Create locations for
+ EXP1 and EXP2 from their source ranges. Pass the locations down to
+ build_conditional_expr.
+ * c-tree.h (build_conditional_expr): Update declaration.
+ * c-typeck.c (build_conditional_expr): Add location_t parameters.
+ For -Wsign-compare, also print the types.
+
+2017-08-08 Martin Liska <mliska@suse.cz>
+
+ * c-convert.c: Include header files.
+ * c-typeck.c: Likewise.
+
+2017-08-07 Martin Liska <mliska@suse.cz>
+
+ * c-parser.c (c_parser_attributes): Canonicalize name of an
+ attribute.
+
+2017-08-02 Marek Polacek <polacek@redhat.com>
+
+ PR c/81289
+ * c-parser.c (c_parser_unary_expression): Use set_error.
+
+ PR c/81448
+ PR c/81306
+ * c-warn.c (warn_for_multistatement_macros): Prevent bogus
+ warnings. Avoid walking MACRO_MAP_LOCATIONS.
+
+2017-07-31 Jan Hubicka <hubicka@ucw.cz>
+ Martin Liska <mliska@suse.cz>
+
+ * c-typeck.c (c_finish_goto_label): Build gimple predict
+ statement.
+
+2017-07-31 Martin Liska <mliska@suse.cz>
+
+ PR sanitize/81530
+ * c-convert.c (convert): Guard condition with flag_sanitize_p
+ also with current_function_decl non-null equality.
+ * c-decl.c (grokdeclarator): Likewise.
+ * c-typeck.c (build_binary_op): Likewise.
+
+2017-07-25 Marek Polacek <polacek@redhat.com>
+
+ * c-decl.c (grokfield): Remove local variable.
+
+2017-07-25 Marek Polacek <polacek@redhat.com>
+
+ PR c/81364
+ * c-parser.c (c_parser_else_body): Don't warn about multistatement
+ macro expansion if the body is in { }.
+ (c_parser_while_statement): Likewise.
+ (c_parser_for_statement): Likewise.
+
2017-07-18 Nathan Sidwell <nathan@acm.org>
* c-parser.c (c_parser_array_notation): Use TYPE_{MIN,MAX}_VALUE.
diff --git a/gcc/c/c-array-notation.c b/gcc/c/c-array-notation.c
index e430f5c681b..40f1cfdabb8 100644
--- a/gcc/c/c-array-notation.c
+++ b/gcc/c/c-array-notation.c
@@ -355,8 +355,9 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
new_cond_expr = build2 (NE_EXPR, TREE_TYPE (func_parm), func_parm,
build_zero_cst (TREE_TYPE (func_parm)));
new_expr = build_conditional_expr
- (location, new_cond_expr, false, new_yes_expr,
- TREE_TYPE (new_yes_expr), new_no_expr, TREE_TYPE (new_no_expr));
+ (location, new_cond_expr, false,
+ new_yes_expr, TREE_TYPE (new_yes_expr), location,
+ new_no_expr, TREE_TYPE (new_no_expr), location);
break;
case BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_NONZERO:
new_var_init = build_modify_expr
@@ -375,8 +376,9 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
new_cond_expr = build2 (EQ_EXPR, TREE_TYPE (func_parm), func_parm,
build_zero_cst (TREE_TYPE (func_parm)));
new_expr = build_conditional_expr
- (location, new_cond_expr, false, new_yes_expr,
- TREE_TYPE (new_yes_expr), new_no_expr, TREE_TYPE (new_no_expr));
+ (location, new_cond_expr, false,
+ new_yes_expr, TREE_TYPE (new_yes_expr), location,
+ new_no_expr, TREE_TYPE (new_no_expr), location);
break;
case BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_ZERO:
new_var_init = build_modify_expr
@@ -394,8 +396,9 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
new_cond_expr = build2 (EQ_EXPR, TREE_TYPE (func_parm), func_parm,
build_zero_cst (TREE_TYPE (func_parm)));
new_expr = build_conditional_expr
- (location, new_cond_expr, false, new_yes_expr,
- TREE_TYPE (new_yes_expr), new_no_expr, TREE_TYPE (new_no_expr));
+ (location, new_cond_expr, false,
+ new_yes_expr, TREE_TYPE (new_yes_expr), location,
+ new_no_expr, TREE_TYPE (new_no_expr), location);
break;
case BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_NONZERO:
new_var_init = build_modify_expr
@@ -413,8 +416,9 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
new_cond_expr = build2 (NE_EXPR, TREE_TYPE (func_parm), func_parm,
build_zero_cst (TREE_TYPE (func_parm)));
new_expr = build_conditional_expr
- (location, new_cond_expr, false, new_yes_expr,
- TREE_TYPE (new_yes_expr), new_no_expr, TREE_TYPE (new_no_expr));
+ (location, new_cond_expr, false,
+ new_yes_expr, TREE_TYPE (new_yes_expr), location,
+ new_no_expr, TREE_TYPE (new_no_expr), location);
break;
case BUILT_IN_CILKPLUS_SEC_REDUCE_MAX:
if (TYPE_MIN_VALUE (new_var_type))
@@ -434,7 +438,8 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
new_expr = build_conditional_expr
(location,
build2 (LT_EXPR, TREE_TYPE (*new_var), *new_var, func_parm), false,
- new_yes_expr, TREE_TYPE (*new_var), new_no_expr, TREE_TYPE (*new_var));
+ new_yes_expr, TREE_TYPE (*new_var), location,
+ new_no_expr, TREE_TYPE (*new_var), location);
break;
case BUILT_IN_CILKPLUS_SEC_REDUCE_MIN:
if (TYPE_MAX_VALUE (new_var_type))
@@ -454,7 +459,8 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
new_expr = build_conditional_expr
(location,
build2 (GT_EXPR, TREE_TYPE (*new_var), *new_var, func_parm), false,
- new_yes_expr, TREE_TYPE (*new_var), new_no_expr, TREE_TYPE (*new_var));
+ new_yes_expr, TREE_TYPE (*new_var), location,
+ new_no_expr, TREE_TYPE (*new_var), location);
break;
case BUILT_IN_CILKPLUS_SEC_REDUCE_MAX_IND:
new_var_init = build_modify_expr
@@ -504,7 +510,8 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
build2 (LE_EXPR, TREE_TYPE (array_ind_value), array_ind_value,
func_parm),
false,
- new_yes_list, TREE_TYPE (*new_var), new_no_list, TREE_TYPE (*new_var));
+ new_yes_list, TREE_TYPE (*new_var), location,
+ new_no_list, TREE_TYPE (*new_var), location);
break;
case BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND:
new_var_init = build_modify_expr
@@ -554,7 +561,8 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
build2 (GE_EXPR, TREE_TYPE (array_ind_value), array_ind_value,
func_parm),
false,
- new_yes_list, TREE_TYPE (*new_var), new_no_list, TREE_TYPE (*new_var));
+ new_yes_list, TREE_TYPE (*new_var), location,
+ new_no_list, TREE_TYPE (*new_var), location);
break;
case BUILT_IN_CILKPLUS_SEC_REDUCE:
new_var_init = build_modify_expr
diff --git a/gcc/c/c-convert.c b/gcc/c/c-convert.c
index 33c9143e354..8752132d175 100644
--- a/gcc/c/c-convert.c
+++ b/gcc/c/c-convert.c
@@ -31,6 +31,8 @@ along with GCC; see the file COPYING3. If not see
#include "convert.h"
#include "langhooks.h"
#include "ubsan.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
/* Change of width--truncation and extension of integers or reals--
@@ -108,6 +110,7 @@ convert (tree type, tree expr)
case INTEGER_TYPE:
case ENUMERAL_TYPE:
if (sanitize_flags_p (SANITIZE_FLOAT_CAST)
+ && current_function_decl != NULL_TREE
&& TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
&& COMPLETE_TYPE_P (type))
{
diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c
index 50da185e363..323d4480609 100644
--- a/gcc/c/c-decl.c
+++ b/gcc/c/c-decl.c
@@ -1557,11 +1557,10 @@ pushtag (location_t loc, tree name, tree type)
&& (TYPE_MAIN_VARIANT (TREE_TYPE (b->decl))
!= TYPE_MAIN_VARIANT (type)))
{
- warning_at (loc, OPT_Wc___compat,
- ("using %qD as both a typedef and a tag is "
- "invalid in C++"),
- b->decl);
- if (b->locus != UNKNOWN_LOCATION)
+ if (warning_at (loc, OPT_Wc___compat,
+ ("using %qD as both a typedef and a tag is "
+ "invalid in C++"), b->decl)
+ && b->locus != UNKNOWN_LOCATION)
inform (b->locus, "originally defined here");
}
}
@@ -6052,6 +6051,7 @@ grokdeclarator (const struct c_declarator *declarator,
this_size_varies = size_varies = true;
warn_variable_length_array (name, size);
if (sanitize_flags_p (SANITIZE_VLA)
+ && current_function_decl != NULL_TREE
&& decl_context == NORMAL)
{
/* Evaluate the array size only once. */
@@ -6595,11 +6595,10 @@ grokdeclarator (const struct c_declarator *declarator,
|| (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
&& TYPE_MAIN_VARIANT (b->decl) != TYPE_MAIN_VARIANT (type))
{
- warning_at (declarator->id_loc, OPT_Wc___compat,
- ("using %qD as both a typedef and a tag is "
- "invalid in C++"),
- decl);
- if (b->locus != UNKNOWN_LOCATION)
+ if (warning_at (declarator->id_loc, OPT_Wc___compat,
+ ("using %qD as both a typedef and a tag is "
+ "invalid in C++"), decl)
+ && b->locus != UNKNOWN_LOCATION)
inform (b->locus, "originally defined here");
}
}
@@ -7559,10 +7558,9 @@ grokfield (location_t loc,
that took root before someone noticed the bug... */
tree type = declspecs->type;
- bool type_ok = RECORD_OR_UNION_TYPE_P (type);
bool ok = false;
- if (type_ok
+ if (RECORD_OR_UNION_TYPE_P (type)
&& (flag_ms_extensions
|| flag_plan9_extensions
|| !declspecs->typedef_p))
@@ -8475,7 +8473,7 @@ build_enumerator (location_t decl_loc, location_t loc,
/* Set basis for default for next value. */
the_enum->enum_next_value
= build_binary_op (EXPR_LOC_OR_LOC (value, input_location),
- PLUS_EXPR, value, integer_one_node, 0);
+ PLUS_EXPR, value, integer_one_node, false);
the_enum->enum_overflow = tree_int_cst_lt (the_enum->enum_next_value, value);
/* Now create a declaration for the enum value name. */
diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c
index eae7689319a..1402ba67204 100644
--- a/gcc/c/c-parser.c
+++ b/gcc/c/c-parser.c
@@ -850,21 +850,26 @@ c_parser_peek_conflict_marker (c_parser *parser, enum cpp_ttype tok1_kind,
MESSAGE (specified by the caller) is usually of the form "expected
OTHER-TOKEN".
+ Use RICHLOC as the location of the diagnostic.
+
Do not issue a diagnostic if still recovering from an error.
+ Return true iff an error was actually emitted.
+
??? This is taken from the C++ parser, but building up messages in
this way is not i18n-friendly and some other approach should be
used. */
-void
-c_parser_error (c_parser *parser, const char *gmsgid)
+static bool
+c_parser_error_richloc (c_parser *parser, const char *gmsgid,
+ rich_location *richloc)
{
c_token *token = c_parser_peek_token (parser);
if (parser->error)
- return;
+ return false;
parser->error = true;
if (!gmsgid)
- return;
+ return false;
/* If this is actually a conflict marker, report it as such. */
if (token->type == CPP_LSHIFT
@@ -875,13 +880,10 @@ c_parser_error (c_parser *parser, const char *gmsgid)
if (c_parser_peek_conflict_marker (parser, token->type, &loc))
{
error_at (loc, "version control conflict marker in file");
- return;
+ return true;
}
}
- /* This diagnostic makes more sense if it is tagged to the line of
- the token we just peeked at. */
- c_parser_set_source_position_from_token (token);
c_parse_error (gmsgid,
/* Because c_parse_error does not understand
CPP_KEYWORD, keywords are treated like
@@ -891,18 +893,157 @@ c_parser_error (c_parser *parser, const char *gmsgid)
token, we need to pass 0 here and we will not get
the source spelling of some tokens but rather the
canonical spelling. */
- token->value, /*flags=*/0);
+ token->value, /*flags=*/0, richloc);
+ return true;
+}
+
+/* As c_parser_error_richloc, but issue the message at the
+ location of PARSER's next token, or at input_location
+ if the next token is EOF. */
+
+bool
+c_parser_error (c_parser *parser, const char *gmsgid)
+{
+ c_token *token = c_parser_peek_token (parser);
+ c_parser_set_source_position_from_token (token);
+ rich_location richloc (line_table, input_location);
+ return c_parser_error_richloc (parser, gmsgid, &richloc);
+}
+
+/* Some tokens naturally come in pairs e.g.'(' and ')'.
+ This class is for tracking such a matching pair of symbols.
+ In particular, it tracks the location of the first token,
+ so that if the second token is missing, we can highlight the
+ location of the first token when notifying the user about the
+ problem. */
+
+template <typename traits_t>
+class token_pair
+{
+ public:
+ /* token_pair's ctor. */
+ token_pair () : m_open_loc (UNKNOWN_LOCATION) {}
+
+ /* If the next token is the opening symbol for this pair, consume it and
+ return true.
+ Otherwise, issue an error and return false.
+ In either case, record the location of the opening token. */
+
+ bool require_open (c_parser *parser)
+ {
+ c_token *token = c_parser_peek_token (parser);
+ if (token)
+ m_open_loc = token->location;
+
+ return c_parser_require (parser, traits_t::open_token_type,
+ traits_t::open_gmsgid);
+ }
+
+ /* Consume the next token from PARSER, recording its location as
+ that of the opening token within the pair. */
+
+ void consume_open (c_parser *parser)
+ {
+ c_token *token = c_parser_peek_token (parser);
+ gcc_assert (token->type == traits_t::open_token_type);
+ m_open_loc = token->location;
+ c_parser_consume_token (parser);
+ }
+
+ /* If the next token is the closing symbol for this pair, consume it
+ and return true.
+ Otherwise, issue an error, highlighting the location of the
+ corresponding opening token, and return false. */
+
+ bool require_close (c_parser *parser) const
+ {
+ return c_parser_require (parser, traits_t::close_token_type,
+ traits_t::close_gmsgid, m_open_loc);
+ }
+
+ /* Like token_pair::require_close, except that tokens will be skipped
+ until the desired token is found. An error message is still produced
+ if the next token is not as expected. */
+
+ void skip_until_found_close (c_parser *parser) const
+ {
+ c_parser_skip_until_found (parser, traits_t::close_token_type,
+ traits_t::close_gmsgid, m_open_loc);
+ }
+
+ private:
+ location_t m_open_loc;
+};
+
+/* Traits for token_pair<T> for tracking matching pairs of parentheses. */
+
+struct matching_paren_traits
+{
+ static const enum cpp_ttype open_token_type = CPP_OPEN_PAREN;
+ static const char * const open_gmsgid;
+ static const enum cpp_ttype close_token_type = CPP_CLOSE_PAREN;
+ static const char * const close_gmsgid;
+};
+
+const char * const matching_paren_traits::open_gmsgid = "expected %<(%>";
+const char * const matching_paren_traits::close_gmsgid = "expected %<)%>";
+
+/* "matching_parens" is a token_pair<T> class for tracking matching
+ pairs of parentheses. */
+
+typedef token_pair<matching_paren_traits> matching_parens;
+
+/* Traits for token_pair<T> for tracking matching pairs of braces. */
+
+struct matching_brace_traits
+{
+ static const enum cpp_ttype open_token_type = CPP_OPEN_BRACE;
+ static const char * const open_gmsgid;
+ static const enum cpp_ttype close_token_type = CPP_CLOSE_BRACE;
+ static const char * const close_gmsgid;
+};
+
+const char * const matching_brace_traits::open_gmsgid = "expected %<{%>";
+const char * const matching_brace_traits::close_gmsgid = "expected %<}%>";
+
+/* "matching_braces" is a token_pair<T> class for tracking matching
+ pairs of braces. */
+
+typedef token_pair<matching_brace_traits> matching_braces;
+
+/* Get a description of the matching symbol to TYPE e.g. "(" for
+ CPP_CLOSE_PAREN. */
+
+static const char *
+get_matching_symbol (enum cpp_ttype type)
+{
+ switch (type)
+ {
+ default:
+ gcc_unreachable ();
+ return "";
+ case CPP_CLOSE_PAREN:
+ return "(";
+ case CPP_CLOSE_BRACE:
+ return "{";
+ }
}
/* If the next token is of the indicated TYPE, consume it. Otherwise,
issue the error MSGID. If MSGID is NULL then a message has already
been produced and no message will be produced this time. Returns
- true if found, false otherwise. */
+ true if found, false otherwise.
+
+ If MATCHING_LOCATION is not UNKNOWN_LOCATION, then highlight it
+ within any error as the location of an "opening" token matching
+ the close token TYPE (e.g. the location of the '(' when TYPE is
+ CPP_CLOSE_PAREN). */
bool
c_parser_require (c_parser *parser,
enum cpp_ttype type,
- const char *msgid)
+ const char *msgid,
+ location_t matching_location)
{
if (c_parser_next_token_is (parser, type))
{
@@ -911,7 +1052,24 @@ c_parser_require (c_parser *parser,
}
else
{
- c_parser_error (parser, msgid);
+ location_t next_token_loc = c_parser_peek_token (parser)->location;
+ gcc_rich_location richloc (next_token_loc);
+
+ /* If matching_location != UNKNOWN_LOCATION, highlight it.
+ Attempt to consolidate diagnostics by printing it as a
+ secondary range within the main diagnostic. */
+ bool added_matching_location = false;
+ if (matching_location != UNKNOWN_LOCATION)
+ added_matching_location
+ = richloc.add_location_if_nearby (matching_location);
+
+ if (c_parser_error_richloc (parser, msgid, &richloc))
+ /* If we weren't able to consolidate matching_location, then
+ print it as a secondary diagnostic. */
+ if (matching_location != UNKNOWN_LOCATION && !added_matching_location)
+ inform (matching_location, "to match this %qs",
+ get_matching_symbol (type));
+
return false;
}
}
@@ -940,16 +1098,22 @@ c_parser_require_keyword (c_parser *parser,
desired token is found. An error message is still produced if the
next token is not as expected. If MSGID is NULL then a message has
already been produced and no message will be produced this
- time. */
+ time.
+
+ If MATCHING_LOCATION is not UNKNOWN_LOCATION, then highlight it
+ within any error as the location of an "opening" token matching
+ the close token TYPE (e.g. the location of the '(' when TYPE is
+ CPP_CLOSE_PAREN). */
void
c_parser_skip_until_found (c_parser *parser,
enum cpp_ttype type,
- const char *msgid)
+ const char *msgid,
+ location_t matching_location)
{
unsigned nesting_depth = 0;
- if (c_parser_require (parser, type, msgid))
+ if (c_parser_require (parser, type, msgid, matching_location))
return;
/* Skip tokens until the desired token is found. */
@@ -2210,7 +2374,8 @@ c_parser_static_assert_declaration_no_semi (c_parser *parser)
pedwarn_c99 (assert_loc, OPT_Wpedantic,
"ISO C90 does not support %<_Static_assert%>");
c_parser_consume_token (parser);
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return;
location_t value_tok_loc = c_parser_peek_token (parser)->location;
value = c_parser_expr_no_commas (parser, NULL).value;
@@ -2237,7 +2402,7 @@ c_parser_static_assert_declaration_no_semi (c_parser *parser)
parser->lex_untranslated_string = false;
return;
}
- c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.require_close (parser);
if (!INTEGRAL_TYPE_P (TREE_TYPE (value)))
{
@@ -2922,7 +3087,8 @@ c_parser_struct_or_union_specifier (c_parser *parser)
tree name;
gcc_assert (c_dialect_objc ());
c_parser_consume_token (parser);
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
goto end_at_defs;
if (c_parser_next_token_is (parser, CPP_NAME)
&& c_parser_peek_token (parser)->id_kind == C_ID_CLASSNAME)
@@ -2936,8 +3102,7 @@ c_parser_struct_or_union_specifier (c_parser *parser)
c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
goto end_at_defs;
}
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
- "expected %<)%>");
+ parens.skip_until_found_close (parser);
contents = nreverse (objc_get_class_ivars (name));
}
end_at_defs:
@@ -3224,7 +3389,8 @@ c_parser_typeof_specifier (c_parser *parser)
c_parser_consume_token (parser);
c_inhibit_evaluation_warnings++;
in_typeof++;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
{
c_inhibit_evaluation_warnings--;
in_typeof--;
@@ -3265,7 +3431,7 @@ c_parser_typeof_specifier (c_parser *parser)
if (ret.spec != error_mark_node && TYPE_ATOMIC (ret.spec))
ret.spec = c_build_qualified_type (ret.spec, TYPE_UNQUALIFIED);
}
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
return ret;
}
@@ -3291,7 +3457,8 @@ c_parser_alignas_specifier (c_parser * parser)
else
pedwarn_c99 (loc, OPT_Wpedantic,
"ISO C90 does not support %<_Alignas%>");
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return ret;
if (c_parser_next_tokens_start_typename (parser, cla_prefer_id))
{
@@ -3302,7 +3469,7 @@ c_parser_alignas_specifier (c_parser * parser)
}
else
ret = c_parser_expr_no_commas (parser, NULL).value;
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
return ret;
}
@@ -3953,14 +4120,15 @@ c_parser_simple_asm_expr (c_parser *parser)
lex_untranslated_string kludge. */
parser->lex_untranslated_string = true;
c_parser_consume_token (parser);
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
{
parser->lex_untranslated_string = false;
return NULL_TREE;
}
str = c_parser_asm_string_literal (parser);
parser->lex_untranslated_string = false;
- if (!c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>"))
+ if (!parens.require_close (parser))
{
c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
return NULL_TREE;
@@ -4170,9 +4338,11 @@ c_parser_attributes (c_parser *parser)
attr_name = c_parser_attribute_any_word (parser);
if (attr_name == NULL)
break;
+ attr_name = canonicalize_attr_name (attr_name);
if (is_cilkplus_vector_p (attr_name))
{
c_token *v_token = c_parser_peek_token (parser);
+ v_token->value = canonicalize_attr_name (v_token->value);
c_parser_cilk_simd_fn_vector_attrs (parser, *v_token);
/* If the next token isn't a comma, we're done. */
if (!c_parser_next_token_is (parser, CPP_COMMA))
@@ -4236,6 +4406,7 @@ c_parser_attributes (c_parser *parser)
release_tree_vector (expr_list);
}
}
+
attr = build_tree_list (attr_name, attr_args);
if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
c_parser_consume_token (parser);
@@ -4395,7 +4566,8 @@ c_parser_braced_init (c_parser *parser, tree type, bool nested_p,
location_t brace_loc = c_parser_peek_token (parser)->location;
gcc_obstack_init (&braced_init_obstack);
gcc_assert (c_parser_next_token_is (parser, CPP_OPEN_BRACE));
- c_parser_consume_token (parser);
+ matching_braces braces;
+ braces.consume_open (parser);
if (nested_p)
{
finish_implicit_inits (brace_loc, outer_obstack);
@@ -4433,7 +4605,7 @@ c_parser_braced_init (c_parser *parser, tree type, bool nested_p,
ret.value = error_mark_node;
ret.original_code = ERROR_MARK;
ret.original_type = NULL;
- c_parser_skip_until_found (parser, CPP_CLOSE_BRACE, "expected %<}%>");
+ braces.skip_until_found_close (parser);
pop_init_level (brace_loc, 0, &braced_init_obstack, last_init_list_comma);
obstack_free (&braced_init_obstack, NULL);
return ret;
@@ -5456,10 +5628,11 @@ static tree
c_parser_paren_condition (c_parser *parser)
{
tree cond;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return error_mark_node;
cond = c_parser_condition (parser);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
return cond;
}
@@ -5557,7 +5730,8 @@ c_parser_else_body (c_parser *parser, const token_indent_info &else_tinfo,
}
else
{
- body_loc_after_labels = c_parser_peek_token (parser)->location;
+ if (!c_parser_next_token_is (parser, CPP_OPEN_BRACE))
+ body_loc_after_labels = c_parser_peek_token (parser)->location;
c_parser_statement_after_labels (parser, NULL, chain);
}
@@ -5727,7 +5901,8 @@ c_parser_switch_statement (c_parser *parser, bool *if_p)
c_parser_consume_token (parser);
block = c_begin_compound_stmt (flag_isoc99);
bool explicit_cast_p = false;
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
switch_cond_loc = c_parser_peek_token (parser)->location;
if (c_parser_next_token_is (parser, CPP_OPEN_PAREN)
@@ -5742,7 +5917,7 @@ c_parser_switch_statement (c_parser *parser, bool *if_p)
"%<_Cilk_spawn%> statement cannot be used as a condition for switch statement",
switch_cond_loc))
expr = error_mark_node;
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
}
else
{
@@ -5811,6 +5986,7 @@ c_parser_while_statement (c_parser *parser, bool ivdep, bool *if_p)
= get_token_indent_info (c_parser_peek_token (parser));
location_t loc_after_labels;
+ bool open_brace = c_parser_next_token_is (parser, CPP_OPEN_BRACE);
body = c_parser_c99_block_statement (parser, if_p, &loc_after_labels);
c_finish_loop (loc, cond, NULL, body, c_break_label, c_cont_label, true);
add_stmt (c_end_compound_stmt (loc, block, flag_isoc99));
@@ -5820,7 +5996,7 @@ c_parser_while_statement (c_parser *parser, bool ivdep, bool *if_p)
= get_token_indent_info (c_parser_peek_token (parser));
warn_for_misleading_indentation (while_tinfo, body_tinfo, next_tinfo);
- if (next_tinfo.type != CPP_SEMICOLON)
+ if (next_tinfo.type != CPP_SEMICOLON && !open_brace)
warn_for_multistatement_macros (loc_after_labels, next_tinfo.location,
while_tinfo.location, RID_WHILE);
@@ -5951,7 +6127,8 @@ c_parser_for_statement (c_parser *parser, bool ivdep, bool *if_p)
block = c_begin_compound_stmt (flag_isoc99 || c_dialect_objc ());
cond = error_mark_node;
incr = error_mark_node;
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
/* Parse the initialization declaration or expression. */
object_expression = error_mark_node;
@@ -6098,7 +6275,7 @@ c_parser_for_statement (c_parser *parser, bool ivdep, bool *if_p)
incr = c_process_expr_stmt (loc, ce.value);
}
}
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
}
save_break = c_break_label;
c_break_label = NULL_TREE;
@@ -6109,6 +6286,7 @@ c_parser_for_statement (c_parser *parser, bool ivdep, bool *if_p)
= get_token_indent_info (c_parser_peek_token (parser));
location_t loc_after_labels;
+ bool open_brace = c_parser_next_token_is (parser, CPP_OPEN_BRACE);
body = c_parser_c99_block_statement (parser, if_p, &loc_after_labels);
if (is_foreach_statement)
@@ -6122,7 +6300,7 @@ c_parser_for_statement (c_parser *parser, bool ivdep, bool *if_p)
= get_token_indent_info (c_parser_peek_token (parser));
warn_for_misleading_indentation (for_tinfo, body_tinfo, next_tinfo);
- if (next_tinfo.type != CPP_SEMICOLON)
+ if (next_tinfo.type != CPP_SEMICOLON && !open_brace)
warn_for_multistatement_macros (loc_after_labels, next_tinfo.location,
for_tinfo.location, RID_FOR);
@@ -6191,7 +6369,8 @@ c_parser_asm_statement (c_parser *parser)
parser->lex_untranslated_string = true;
ret = NULL;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
goto error;
str = c_parser_asm_string_literal (parser);
@@ -6249,7 +6428,7 @@ c_parser_asm_statement (c_parser *parser)
}
done_asm:
- if (!c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>"))
+ if (!parens.require_close (parser))
{
c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
goto error;
@@ -6314,7 +6493,8 @@ c_parser_asm_operands (c_parser *parser)
if (str == NULL_TREE)
return NULL_TREE;
parser->lex_untranslated_string = false;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
{
parser->lex_untranslated_string = true;
return NULL_TREE;
@@ -6322,7 +6502,7 @@ c_parser_asm_operands (c_parser *parser)
expr = c_parser_expression (parser);
mark_exp_read (expr.value);
parser->lex_untranslated_string = true;
- if (!c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>"))
+ if (!parens.require_close (parser))
{
c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
return NULL_TREE;
@@ -6505,7 +6685,7 @@ c_parser_conditional_expression (c_parser *parser, struct c_expr *after,
tree omp_atomic_lhs)
{
struct c_expr cond, exp1, exp2, ret;
- location_t start, cond_loc, colon_loc, middle_loc;
+ location_t start, cond_loc, colon_loc;
gcc_assert (!after || c_dialect_objc ());
@@ -6524,7 +6704,7 @@ c_parser_conditional_expression (c_parser *parser, struct c_expr *after,
{
tree eptype = NULL_TREE;
- middle_loc = c_parser_peek_token (parser)->location;
+ location_t middle_loc = c_parser_peek_token (parser)->location;
pedwarn (middle_loc, OPT_Wpedantic,
"ISO C forbids omitting the middle term of a ?: expression");
if (TREE_CODE (cond.value) == EXCESS_PRECISION_EXPR)
@@ -6541,6 +6721,7 @@ c_parser_conditional_expression (c_parser *parser, struct c_expr *after,
if (eptype)
exp1.value = build1 (EXCESS_PRECISION_EXPR, eptype, exp1.value);
exp1.original_type = NULL;
+ exp1.src_range = cond.src_range;
cond.value = c_objc_common_truthvalue_conversion (cond_loc, exp1.value);
c_inhibit_evaluation_warnings += cond.value == truthvalue_true_node;
}
@@ -6572,10 +6753,12 @@ c_parser_conditional_expression (c_parser *parser, struct c_expr *after,
exp2 = convert_lvalue_to_rvalue (exp2_loc, exp2, true, true);
}
c_inhibit_evaluation_warnings -= cond.value == truthvalue_true_node;
+ location_t loc1 = make_location (exp1.get_start (), exp1.src_range);
+ location_t loc2 = make_location (exp2.get_start (), exp2.src_range);
ret.value = build_conditional_expr (colon_loc, cond.value,
cond.original_code == C_MAYBE_CONST_EXPR,
- exp1.value, exp1.original_type,
- exp2.value, exp2.original_type);
+ exp1.value, exp1.original_type, loc1,
+ exp2.value, exp2.original_type, loc2);
ret.original_code = ERROR_MARK;
if (exp1.value == error_mark_node || exp2.value == error_mark_node)
ret.original_type = NULL;
@@ -6931,9 +7114,10 @@ c_parser_cast_expression (c_parser *parser, struct c_expr *after)
struct c_type_name *type_name;
struct c_expr ret;
struct c_expr expr;
- c_parser_consume_token (parser);
+ matching_parens parens;
+ parens.consume_open (parser);
type_name = c_parser_type_name (parser);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (type_name == NULL)
{
ret.value = error_mark_node;
@@ -7096,9 +7280,9 @@ c_parser_unary_expression (c_parser *parser)
else
{
c_parser_error (parser, "expected identifier");
- ret.value = error_mark_node;
+ ret.set_error ();
}
- return ret;
+ return ret;
case CPP_KEYWORD:
switch (c_parser_peek_token (parser)->keyword)
{
@@ -7160,10 +7344,11 @@ c_parser_sizeof_expression (c_parser *parser)
/* Either sizeof ( type-name ) or sizeof unary-expression
starting with a compound literal. */
struct c_type_name *type_name;
- c_parser_consume_token (parser);
+ matching_parens parens;
+ parens.consume_open (parser);
expr_loc = c_parser_peek_token (parser)->location;
type_name = c_parser_type_name (parser);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
finish = parser->tokens_buf[0].location;
if (type_name == NULL)
{
@@ -7242,11 +7427,12 @@ c_parser_alignof_expression (c_parser *parser)
location_t loc;
struct c_type_name *type_name;
struct c_expr ret;
- c_parser_consume_token (parser);
+ matching_parens parens;
+ parens.consume_open (parser);
loc = c_parser_peek_token (parser)->location;
type_name = c_parser_type_name (parser);
end_loc = c_parser_peek_token (parser)->location;
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (type_name == NULL)
{
struct c_expr ret;
@@ -7405,7 +7591,8 @@ c_parser_generic_selection (c_parser *parser)
pedwarn_c99 (generic_loc, OPT_Wpedantic,
"ISO C90 does not support %<_Generic%>");
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return error_expr;
c_inhibit_evaluation_warnings++;
@@ -7547,7 +7734,7 @@ c_parser_generic_selection (c_parser *parser)
c_parser_consume_token (parser);
}
- if (!c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>"))
+ if (!parens.require_close (parser))
{
c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
return error_expr;
@@ -7793,7 +7980,7 @@ c_parser_postfix_expression (c_parser *parser)
location_t loc_close_paren = c_parser_peek_token (parser)->location;
set_c_expr_source_range (&expr, loc_open_paren, loc_close_paren);
c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
- "expected %<)%>");
+ "expected %<)%>", loc_open_paren);
}
break;
case CPP_KEYWORD:
@@ -7830,7 +8017,8 @@ c_parser_postfix_expression (c_parser *parser)
{
location_t start_loc = loc;
c_parser_consume_token (parser);
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
{
expr.set_error ();
break;
@@ -7870,25 +8058,25 @@ c_parser_postfix_expression (c_parser *parser)
}
break;
case RID_OFFSETOF:
- c_parser_consume_token (parser);
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
- {
- expr.set_error ();
- break;
- }
- t1 = c_parser_type_name (parser);
- if (t1 == NULL)
- parser->error = true;
- if (!c_parser_require (parser, CPP_COMMA, "expected %<,%>"))
- gcc_assert (parser->error);
- if (parser->error)
- {
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
- expr.set_error ();
- break;
- }
-
{
+ c_parser_consume_token (parser);
+ matching_parens parens;
+ if (!parens.require_open (parser))
+ {
+ expr.set_error ();
+ break;
+ }
+ t1 = c_parser_type_name (parser);
+ if (t1 == NULL)
+ parser->error = true;
+ if (!c_parser_require (parser, CPP_COMMA, "expected %<,%>"))
+ gcc_assert (parser->error);
+ if (parser->error)
+ {
+ c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
+ expr.set_error ();
+ break;
+ }
tree type = groktypename (t1, NULL, NULL);
tree offsetof_ref;
if (type == error_mark_node)
@@ -8005,34 +8193,34 @@ c_parser_postfix_expression (c_parser *parser)
break;
}
case RID_TYPES_COMPATIBLE_P:
- c_parser_consume_token (parser);
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
- {
- expr.set_error ();
- break;
- }
- t1 = c_parser_type_name (parser);
- if (t1 == NULL)
- {
- expr.set_error ();
- break;
- }
- if (!c_parser_require (parser, CPP_COMMA, "expected %<,%>"))
- {
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
- expr.set_error ();
- break;
- }
- t2 = c_parser_type_name (parser);
- if (t2 == NULL)
- {
- expr.set_error ();
- break;
- }
{
+ c_parser_consume_token (parser);
+ matching_parens parens;
+ if (!parens.require_open (parser))
+ {
+ expr.set_error ();
+ break;
+ }
+ t1 = c_parser_type_name (parser);
+ if (t1 == NULL)
+ {
+ expr.set_error ();
+ break;
+ }
+ if (!c_parser_require (parser, CPP_COMMA, "expected %<,%>"))
+ {
+ c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
+ expr.set_error ();
+ break;
+ }
+ t2 = c_parser_type_name (parser);
+ if (t2 == NULL)
+ {
+ expr.set_error ();
+ break;
+ }
location_t close_paren_loc = c_parser_peek_token (parser)->location;
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
- "expected %<)%>");
+ parens.skip_until_found_close (parser);
tree e1, e2;
e1 = groktypename (t1, NULL, NULL);
e2 = groktypename (t2, NULL, NULL);
@@ -8198,67 +8386,67 @@ c_parser_postfix_expression (c_parser *parser)
break;
}
case RID_AT_SELECTOR:
- gcc_assert (c_dialect_objc ());
- c_parser_consume_token (parser);
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
- {
- expr.set_error ();
- break;
- }
{
+ gcc_assert (c_dialect_objc ());
+ c_parser_consume_token (parser);
+ matching_parens parens;
+ if (!parens.require_open (parser))
+ {
+ expr.set_error ();
+ break;
+ }
tree sel = c_parser_objc_selector_arg (parser);
location_t close_loc = c_parser_peek_token (parser)->location;
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
- "expected %<)%>");
+ parens.skip_until_found_close (parser);
expr.value = objc_build_selector_expr (loc, sel);
set_c_expr_source_range (&expr, loc, close_loc);
}
break;
case RID_AT_PROTOCOL:
- gcc_assert (c_dialect_objc ());
- c_parser_consume_token (parser);
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
- {
- expr.set_error ();
- break;
- }
- if (c_parser_next_token_is_not (parser, CPP_NAME))
- {
- c_parser_error (parser, "expected identifier");
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
- expr.set_error ();
- break;
- }
{
+ gcc_assert (c_dialect_objc ());
+ c_parser_consume_token (parser);
+ matching_parens parens;
+ if (!parens.require_open (parser))
+ {
+ expr.set_error ();
+ break;
+ }
+ if (c_parser_next_token_is_not (parser, CPP_NAME))
+ {
+ c_parser_error (parser, "expected identifier");
+ c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
+ expr.set_error ();
+ break;
+ }
tree id = c_parser_peek_token (parser)->value;
c_parser_consume_token (parser);
location_t close_loc = c_parser_peek_token (parser)->location;
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
- "expected %<)%>");
+ parens.skip_until_found_close (parser);
expr.value = objc_build_protocol_expr (id);
set_c_expr_source_range (&expr, loc, close_loc);
}
break;
case RID_AT_ENCODE:
- /* Extension to support C-structures in the archiver. */
- gcc_assert (c_dialect_objc ());
- c_parser_consume_token (parser);
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
- {
- expr.set_error ();
- break;
- }
- t1 = c_parser_type_name (parser);
- if (t1 == NULL)
- {
- expr.set_error ();
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
- break;
- }
{
+ /* Extension to support C-structures in the archiver. */
+ gcc_assert (c_dialect_objc ());
+ c_parser_consume_token (parser);
+ matching_parens parens;
+ if (!parens.require_open (parser))
+ {
+ expr.set_error ();
+ break;
+ }
+ t1 = c_parser_type_name (parser);
+ if (t1 == NULL)
+ {
+ expr.set_error ();
+ c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
+ break;
+ }
location_t close_loc = c_parser_peek_token (parser)->location;
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
- "expected %<)%>");
+ parens.skip_until_found_close (parser);
tree type = groktypename (t1, NULL, NULL);
expr.value = objc_build_encode_expr (type);
set_c_expr_source_range (&expr, loc, close_loc);
@@ -8851,7 +9039,8 @@ c_parser_objc_class_definition (c_parser *parser, tree attributes)
/* We have a category or class extension. */
tree id2;
tree proto = NULL_TREE;
- c_parser_consume_token (parser);
+ matching_parens parens;
+ parens.consume_open (parser);
if (c_parser_next_token_is_not (parser, CPP_NAME))
{
if (iface_p && c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
@@ -8871,7 +9060,7 @@ c_parser_objc_class_definition (c_parser *parser, tree attributes)
id2 = c_parser_peek_token (parser)->value;
c_parser_consume_token (parser);
}
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (!iface_p)
{
objc_start_category_implementation (id1, id2);
@@ -9405,9 +9594,10 @@ c_parser_objc_method_decl (c_parser *parser, bool is_class_method,
*attributes = NULL_TREE;
if (c_parser_next_token_is (parser, CPP_OPEN_PAREN))
{
- c_parser_consume_token (parser);
+ matching_parens parens;
+ parens.consume_open (parser);
type = c_parser_objc_type_name (parser);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
}
sel = c_parser_objc_selector (parser);
/* If there is no selector, or a colon follows, we have an
@@ -9613,7 +9803,8 @@ c_parser_objc_try_catch_finally_statement (c_parser *parser)
bool seen_open_paren = false;
c_parser_consume_token (parser);
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
seen_open_paren = true;
if (c_parser_next_token_is (parser, CPP_ELLIPSIS))
{
@@ -9636,7 +9827,7 @@ c_parser_objc_try_catch_finally_statement (c_parser *parser)
parameter_declaration = grokparm (parm, NULL);
}
if (seen_open_paren)
- c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.require_close (parser);
else
{
/* If there was no open parenthesis, we are recovering from
@@ -9685,13 +9876,14 @@ c_parser_objc_synchronized_statement (c_parser *parser)
c_parser_consume_token (parser);
loc = c_parser_peek_token (parser)->location;
objc_maybe_warn_exceptions (loc);
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
struct c_expr ce = c_parser_expression (parser);
ce = convert_lvalue_to_rvalue (loc, ce, false, false);
expr = ce.value;
expr = c_fully_fold (expr, false, NULL);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
}
else
expr = error_mark_node;
@@ -9985,9 +10177,11 @@ c_parser_objc_at_property_declaration (c_parser *parser)
/* Parse the optional attribute list... */
if (c_parser_next_token_is (parser, CPP_OPEN_PAREN))
{
+ matching_parens parens;
+
/* Eat the '(' */
- c_parser_consume_token (parser);
-
+ parens.consume_open (parser);
+
/* Property attribute keywords are valid now. */
parser->objc_property_attr_context = true;
@@ -10075,7 +10269,7 @@ c_parser_objc_at_property_declaration (c_parser *parser)
break;
}
parser->objc_property_attr_context = false;
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
}
/* ... and the property declaration(s). */
properties = c_parser_struct_declaration (parser);
@@ -10735,7 +10929,8 @@ c_parser_oacc_wait_list (c_parser *parser, location_t clause_loc, tree list)
vec<tree, va_gc> *args;
tree t, args_tree;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
args = c_parser_expr_list (parser, false, true, NULL, NULL, NULL, NULL);
@@ -10772,7 +10967,7 @@ c_parser_oacc_wait_list (c_parser *parser, location_t clause_loc, tree list)
}
release_tree_vector (args);
- c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.require_close (parser);
return list;
}
@@ -10930,10 +11125,11 @@ c_parser_omp_var_list_parens (c_parser *parser, enum omp_clause_code kind,
/* The clauses location. */
location_t loc = c_parser_peek_token (parser)->location;
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
list = c_parser_omp_variable_list (parser, loc, kind, list);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
}
return list;
}
@@ -11070,10 +11266,11 @@ c_parser_omp_clause_collapse (c_parser *parser, tree list)
check_no_duplicate_clause (list, OMP_CLAUSE_TILE, "tile");
loc = c_parser_peek_token (parser)->location;
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
num = c_parser_expr_no_commas (parser, NULL).value;
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
}
if (num == error_mark_node)
return list;
@@ -11125,7 +11322,8 @@ c_parser_omp_clause_default (c_parser *parser, tree list, bool is_oacc)
location_t loc = c_parser_peek_token (parser)->location;
tree c;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
if (c_parser_next_token_is (parser, CPP_NAME))
{
@@ -11165,7 +11363,7 @@ c_parser_omp_clause_default (c_parser *parser, tree list, bool is_oacc)
else
c_parser_error (parser, "expected %<none%> or %<shared%>");
}
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
return list;
@@ -11228,7 +11426,8 @@ c_parser_omp_clause_if (c_parser *parser, tree list, bool is_omp)
location_t location = c_parser_peek_token (parser)->location;
enum tree_code if_modifier = ERROR_MARK;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
if (is_omp && c_parser_next_token_is (parser, CPP_NAME))
@@ -11309,7 +11508,7 @@ c_parser_omp_clause_if (c_parser *parser, tree list, bool is_omp)
}
tree t = c_parser_condition (parser), c;
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
for (c = list; c ; c = OMP_CLAUSE_CHAIN (c))
if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_IF)
@@ -11408,7 +11607,8 @@ static tree
c_parser_omp_clause_num_threads (c_parser *parser, tree list)
{
location_t num_threads_loc = c_parser_peek_token (parser)->location;
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
location_t expr_loc = c_parser_peek_token (parser)->location;
c_expr expr = c_parser_expression (parser);
@@ -11416,7 +11616,7 @@ c_parser_omp_clause_num_threads (c_parser *parser, tree list)
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (!INTEGRAL_TYPE_P (TREE_TYPE (t)))
{
@@ -11453,7 +11653,8 @@ static tree
c_parser_omp_clause_num_tasks (c_parser *parser, tree list)
{
location_t num_tasks_loc = c_parser_peek_token (parser)->location;
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
location_t expr_loc = c_parser_peek_token (parser)->location;
c_expr expr = c_parser_expression (parser);
@@ -11461,7 +11662,7 @@ c_parser_omp_clause_num_tasks (c_parser *parser, tree list)
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (!INTEGRAL_TYPE_P (TREE_TYPE (t)))
{
@@ -11498,7 +11699,8 @@ static tree
c_parser_omp_clause_grainsize (c_parser *parser, tree list)
{
location_t grainsize_loc = c_parser_peek_token (parser)->location;
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
location_t expr_loc = c_parser_peek_token (parser)->location;
c_expr expr = c_parser_expression (parser);
@@ -11506,7 +11708,7 @@ c_parser_omp_clause_grainsize (c_parser *parser, tree list)
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (!INTEGRAL_TYPE_P (TREE_TYPE (t)))
{
@@ -11543,7 +11745,8 @@ static tree
c_parser_omp_clause_priority (c_parser *parser, tree list)
{
location_t priority_loc = c_parser_peek_token (parser)->location;
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
location_t expr_loc = c_parser_peek_token (parser)->location;
c_expr expr = c_parser_expression (parser);
@@ -11551,7 +11754,7 @@ c_parser_omp_clause_priority (c_parser *parser, tree list)
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (!INTEGRAL_TYPE_P (TREE_TYPE (t)))
{
@@ -11589,7 +11792,8 @@ static tree
c_parser_omp_clause_hint (c_parser *parser, tree list)
{
location_t hint_loc = c_parser_peek_token (parser)->location;
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
location_t expr_loc = c_parser_peek_token (parser)->location;
c_expr expr = c_parser_expression (parser);
@@ -11597,7 +11801,7 @@ c_parser_omp_clause_hint (c_parser *parser, tree list)
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (!INTEGRAL_TYPE_P (TREE_TYPE (t)))
{
@@ -11626,7 +11830,8 @@ c_parser_omp_clause_defaultmap (c_parser *parser, tree list)
tree c;
const char *p;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
if (!c_parser_next_token_is (parser, CPP_NAME))
{
@@ -11654,14 +11859,14 @@ c_parser_omp_clause_defaultmap (c_parser *parser, tree list)
goto out_err;
}
c_parser_consume_token (parser);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULTMAP, "defaultmap");
c = build_omp_clause (loc, OMP_CLAUSE_DEFAULTMAP);
OMP_CLAUSE_CHAIN (c) = list;
return c;
out_err:
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
return list;
}
@@ -11698,7 +11903,8 @@ c_parser_oacc_single_int_clause (c_parser *parser, omp_clause_code code,
{
location_t loc = c_parser_peek_token (parser)->location;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
location_t expr_loc = c_parser_peek_token (parser)->location;
@@ -11707,7 +11913,7 @@ c_parser_oacc_single_int_clause (c_parser *parser, omp_clause_code code,
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (t == error_mark_node)
return list;
@@ -12037,9 +12243,10 @@ c_parser_omp_clause_ordered (c_parser *parser, tree list)
location_t loc = c_parser_peek_token (parser)->location;
if (c_parser_next_token_is (parser, CPP_OPEN_PAREN))
{
- c_parser_consume_token (parser);
+ matching_parens parens;
+ parens.consume_open (parser);
num = c_parser_expr_no_commas (parser, NULL).value;
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
}
if (num == error_mark_node)
return list;
@@ -12093,7 +12300,8 @@ static tree
c_parser_omp_clause_reduction (c_parser *parser, tree list)
{
location_t clause_loc = c_parser_peek_token (parser)->location;
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
enum tree_code code = ERROR_MARK;
tree reduc_id = NULL_TREE;
@@ -12191,7 +12399,7 @@ c_parser_omp_clause_reduction (c_parser *parser, tree list)
list = nl;
}
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
}
return list;
}
@@ -12219,7 +12427,8 @@ c_parser_omp_clause_schedule (c_parser *parser, tree list)
location_t loc = c_parser_peek_token (parser)->location;
int modifiers = 0, nmodifiers = 0;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
c = build_omp_clause (loc, OMP_CLAUSE_SCHEDULE);
@@ -12330,7 +12539,7 @@ c_parser_omp_clause_schedule (c_parser *parser, tree list)
else
c_parser_error (parser, "expected integer expression");
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
}
else
c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
@@ -12443,7 +12652,8 @@ static tree
c_parser_omp_clause_num_teams (c_parser *parser, tree list)
{
location_t num_teams_loc = c_parser_peek_token (parser)->location;
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
location_t expr_loc = c_parser_peek_token (parser)->location;
c_expr expr = c_parser_expression (parser);
@@ -12451,7 +12661,7 @@ c_parser_omp_clause_num_teams (c_parser *parser, tree list)
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (!INTEGRAL_TYPE_P (TREE_TYPE (t)))
{
@@ -12487,7 +12697,8 @@ static tree
c_parser_omp_clause_thread_limit (c_parser *parser, tree list)
{
location_t num_thread_limit_loc = c_parser_peek_token (parser)->location;
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
location_t expr_loc = c_parser_peek_token (parser)->location;
c_expr expr = c_parser_expression (parser);
@@ -12495,7 +12706,7 @@ c_parser_omp_clause_thread_limit (c_parser *parser, tree list)
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (!INTEGRAL_TYPE_P (TREE_TYPE (t)))
{
@@ -12535,7 +12746,8 @@ c_parser_omp_clause_aligned (c_parser *parser, tree list)
location_t clause_loc = c_parser_peek_token (parser)->location;
tree nl, c;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
nl = c_parser_omp_variable_list (parser, clause_loc,
@@ -12562,7 +12774,7 @@ c_parser_omp_clause_aligned (c_parser *parser, tree list)
OMP_CLAUSE_ALIGNED_ALIGNMENT (c) = alignment;
}
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
return nl;
}
@@ -12581,7 +12793,8 @@ c_parser_omp_clause_linear (c_parser *parser, tree list, bool is_cilk_simd_fn)
tree nl, c, step;
enum omp_clause_linear_kind kind = OMP_CLAUSE_LINEAR_DEFAULT;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
if (!is_cilk_simd_fn
@@ -12604,7 +12817,7 @@ c_parser_omp_clause_linear (c_parser *parser, tree list, bool is_cilk_simd_fn)
OMP_CLAUSE_LINEAR, list);
if (kind != OMP_CLAUSE_LINEAR_DEFAULT)
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (c_parser_next_token_is (parser, CPP_COLON))
{
@@ -12636,7 +12849,7 @@ c_parser_omp_clause_linear (c_parser *parser, tree list, bool is_cilk_simd_fn)
OMP_CLAUSE_LINEAR_KIND (c) = kind;
}
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
return nl;
}
@@ -12649,7 +12862,8 @@ c_parser_omp_clause_safelen (c_parser *parser, tree list)
location_t clause_loc = c_parser_peek_token (parser)->location;
tree c, t;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
location_t expr_loc = c_parser_peek_token (parser)->location;
@@ -12666,7 +12880,7 @@ c_parser_omp_clause_safelen (c_parser *parser, tree list)
t = NULL_TREE;
}
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (t == NULL_TREE || t == error_mark_node)
return list;
@@ -12687,7 +12901,8 @@ c_parser_omp_clause_simdlen (c_parser *parser, tree list)
location_t clause_loc = c_parser_peek_token (parser)->location;
tree c, t;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
location_t expr_loc = c_parser_peek_token (parser)->location;
@@ -12704,7 +12919,7 @@ c_parser_omp_clause_simdlen (c_parser *parser, tree list)
t = NULL_TREE;
}
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (t == NULL_TREE || t == error_mark_node)
return list;
@@ -12816,7 +13031,8 @@ c_parser_omp_clause_depend (c_parser *parser, tree list)
enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_INOUT;
tree nl, c;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
if (c_parser_next_token_is (parser, CPP_NAME))
@@ -12846,7 +13062,7 @@ c_parser_omp_clause_depend (c_parser *parser, tree list)
OMP_CLAUSE_DEPEND_KIND (c) = kind;
OMP_CLAUSE_DECL (c) = NULL_TREE;
OMP_CLAUSE_CHAIN (c) = list;
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
return c;
}
@@ -12864,13 +13080,13 @@ c_parser_omp_clause_depend (c_parser *parser, tree list)
OMP_CLAUSE_DEPEND_KIND (c) = kind;
}
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
return nl;
invalid_kind:
c_parser_error (parser, "invalid depend kind");
resync_fail:
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
return list;
}
@@ -12898,7 +13114,8 @@ c_parser_omp_clause_map (c_parser *parser, tree list)
tree always_id = NULL_TREE;
tree nl, c;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
if (c_parser_next_token_is (parser, CPP_NAME))
@@ -12965,7 +13182,7 @@ c_parser_omp_clause_map (c_parser *parser, tree list)
if (always_id_kind != C_ID_ID)
{
c_parser_error (parser, "expected identifier");
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
return list;
}
@@ -12985,7 +13202,7 @@ c_parser_omp_clause_map (c_parser *parser, tree list)
}
if (always == 1)
{
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
return list;
}
}
@@ -12995,7 +13212,7 @@ c_parser_omp_clause_map (c_parser *parser, tree list)
for (c = nl; c != list; c = OMP_CLAUSE_CHAIN (c))
OMP_CLAUSE_SET_MAP_KIND (c, kind);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
return nl;
}
@@ -13006,7 +13223,8 @@ static tree
c_parser_omp_clause_device (c_parser *parser, tree list)
{
location_t clause_loc = c_parser_peek_token (parser)->location;
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
location_t expr_loc = c_parser_peek_token (parser)->location;
c_expr expr = c_parser_expr_no_commas (parser, NULL);
@@ -13014,7 +13232,7 @@ c_parser_omp_clause_device (c_parser *parser, tree list)
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (!INTEGRAL_TYPE_P (TREE_TYPE (t)))
{
@@ -13043,7 +13261,8 @@ c_parser_omp_clause_dist_schedule (c_parser *parser, tree list)
tree c, t = NULL_TREE;
location_t loc = c_parser_peek_token (parser)->location;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
if (!c_parser_next_token_is_keyword (parser, RID_STATIC))
@@ -13064,7 +13283,7 @@ c_parser_omp_clause_dist_schedule (c_parser *parser, tree list)
expr = convert_lvalue_to_rvalue (expr_loc, expr, false, true);
t = expr.value;
t = c_fully_fold (t, false, NULL);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
}
else
c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
@@ -13093,7 +13312,8 @@ c_parser_omp_clause_proc_bind (c_parser *parser, tree list)
enum omp_clause_proc_bind_kind kind;
tree c;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
if (c_parser_next_token_is (parser, CPP_NAME))
@@ -13112,7 +13332,7 @@ c_parser_omp_clause_proc_bind (c_parser *parser, tree list)
goto invalid_kind;
c_parser_consume_token (parser);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
c = build_omp_clause (clause_loc, OMP_CLAUSE_PROC_BIND);
OMP_CLAUSE_PROC_BIND_KIND (c) = kind;
OMP_CLAUSE_CHAIN (c) = list;
@@ -13120,7 +13340,7 @@ c_parser_omp_clause_proc_bind (c_parser *parser, tree list)
invalid_kind:
c_parser_error (parser, "invalid proc_bind kind");
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
return list;
}
@@ -13151,11 +13371,12 @@ c_parser_omp_clause_uniform (c_parser *parser, tree list)
/* The clauses location. */
location_t loc = c_parser_peek_token (parser)->location;
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
list = c_parser_omp_variable_list (parser, loc, OMP_CLAUSE_UNIFORM,
list);
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
}
return list;
}
@@ -14948,7 +15169,8 @@ c_parser_omp_for_loop (location_t loc, c_parser *parser, enum tree_code code,
{
int bracecount = 0;
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
goto pop_scopes;
/* Parse the initialization declaration or expression. */
@@ -15055,7 +15277,7 @@ c_parser_omp_for_loop (location_t loc, c_parser *parser, enum tree_code code,
incr = c_process_expr_stmt (incr_loc,
c_parser_expression (parser).value);
}
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
if (decl == NULL || decl == error_mark_node || init == error_mark_node)
fail = true;
@@ -17562,7 +17784,8 @@ c_parser_cilk_clause_vectorlength (c_parser *parser, tree clauses,
clause. Represent it in OpenMP terms. */
check_no_duplicate_clause (clauses, OMP_CLAUSE_SAFELEN, "vectorlength");
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return clauses;
location_t loc = c_parser_peek_token (parser)->location;
@@ -17598,7 +17821,7 @@ c_parser_cilk_clause_vectorlength (c_parser *parser, tree clauses,
}
}
- c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.require_close (parser);
return clauses;
}
@@ -17620,7 +17843,8 @@ c_parser_cilk_clause_vectorlength (c_parser *parser, tree clauses,
static tree
c_parser_cilk_clause_linear (c_parser *parser, tree clauses)
{
- if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return clauses;
location_t loc = c_parser_peek_token (parser)->location;
@@ -17682,7 +17906,7 @@ c_parser_cilk_clause_linear (c_parser *parser, tree clauses)
c_parser_consume_token (parser);
}
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
+ parens.skip_until_found_close (parser);
return clauses;
}
@@ -18046,7 +18270,8 @@ c_parser_transaction_expression (c_parser *parser, enum rid keyword)
}
parser->in_transaction = this_in;
- if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ matching_parens parens;
+ if (parens.require_open (parser))
{
tree expr = c_parser_expression (parser).value;
ret.original_type = TREE_TYPE (expr);
@@ -18055,7 +18280,7 @@ c_parser_transaction_expression (c_parser *parser, enum rid keyword)
TRANSACTION_EXPR_RELAXED (ret.value) = 1;
SET_EXPR_LOCATION (ret.value, loc);
ret.original_code = TRANSACTION_EXPR;
- if (!c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>"))
+ if (!parens.require_close (parser))
{
c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
goto error;
diff --git a/gcc/c/c-parser.h b/gcc/c/c-parser.h
index 1e344c40e27..01a7b724081 100644
--- a/gcc/c/c-parser.h
+++ b/gcc/c/c-parser.h
@@ -136,11 +136,13 @@ extern c_token * c_parser_peek_token (c_parser *parser);
extern c_token * c_parser_peek_2nd_token (c_parser *parser);
extern c_token * c_parser_peek_nth_token (c_parser *parser, unsigned int n);
extern bool c_parser_require (c_parser *parser, enum cpp_ttype type,
- const char *msgid);
-extern void c_parser_error (c_parser *parser, const char *gmsgid);
+ const char *msgid,
+ location_t matching_location = UNKNOWN_LOCATION);
+extern bool c_parser_error (c_parser *parser, const char *gmsgid);
extern void c_parser_consume_token (c_parser *parser);
extern void c_parser_skip_until_found (c_parser *parser, enum cpp_ttype type,
- const char *msgid);
+ const char *msgid,
+ location_t = UNKNOWN_LOCATION);
extern bool c_parser_next_token_starts_declspecs (c_parser *parser);
bool c_parser_next_tokens_start_declaration (c_parser *parser);
bool c_token_starts_typename (c_token *token);
diff --git a/gcc/c/c-tree.h b/gcc/c/c-tree.h
index a8197eb768d..92bcc70653e 100644
--- a/gcc/c/c-tree.h
+++ b/gcc/c/c-tree.h
@@ -634,7 +634,7 @@ extern void mark_exp_read (tree);
extern tree composite_type (tree, tree);
extern tree build_component_ref (location_t, tree, tree, location_t);
extern tree build_array_ref (location_t, tree, tree);
-extern tree build_external_ref (location_t, tree, int, tree *);
+extern tree build_external_ref (location_t, tree, bool, tree *);
extern void pop_maybe_used (bool);
extern struct c_expr c_expr_sizeof_expr (location_t, struct c_expr);
extern struct c_expr c_expr_sizeof_type (location_t, struct c_type_name *);
@@ -644,7 +644,7 @@ extern struct c_expr parser_build_binary_op (location_t,
enum tree_code, struct c_expr,
struct c_expr);
extern tree build_conditional_expr (location_t, tree, bool, tree, tree,
- tree, tree);
+ location_t, tree, tree, location_t);
extern tree build_compound_expr (location_t, tree, tree);
extern tree c_cast_expr (location_t, struct c_type_name *, tree);
extern tree build_c_cast (location_t, tree, tree);
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index 4d067e96dd3..c33601f6b62 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -50,6 +50,8 @@ along with GCC; see the file COPYING3. If not see
#include "gomp-constants.h"
#include "spellcheck-tree.h"
#include "gcc-rich-location.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
/* Possible cases of implicit bad conversions. Used to select
@@ -104,10 +106,10 @@ static int spelling_length (void);
static char *print_spelling (char *);
static void warning_init (location_t, int, const char *);
static tree digest_init (location_t, tree, tree, tree, bool, bool, int);
-static void output_init_element (location_t, tree, tree, bool, tree, tree, int,
+static void output_init_element (location_t, tree, tree, bool, tree, tree, bool,
bool, struct obstack *);
static void output_pending_init_elements (int, struct obstack *);
-static bool set_designator (location_t, int, struct obstack *);
+static bool set_designator (location_t, bool, struct obstack *);
static void push_range_stack (tree, struct obstack *);
static void add_pending_init (location_t, tree, tree, tree, bool,
struct obstack *);
@@ -2721,7 +2723,7 @@ build_array_ref (location_t loc, tree array, tree index)
gcc_assert (TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) != FUNCTION_TYPE);
ret = build_indirect_ref (loc, build_binary_op (loc, PLUS_EXPR, ar,
- index, 0),
+ index, false),
RO_ARRAY_INDEXING);
if (non_lvalue)
ret = non_lvalue_loc (loc, ret);
@@ -2736,7 +2738,7 @@ build_array_ref (location_t loc, tree array, tree index)
for CONST_DECLs defined as enum constants. If the type of the
identifier is not available, *TYPE is set to NULL. */
tree
-build_external_ref (location_t loc, tree id, int fun, tree *type)
+build_external_ref (location_t loc, tree id, bool fun, tree *type)
{
tree ref;
tree decl = lookup_name (id);
@@ -3640,7 +3642,7 @@ parser_build_binary_op (location_t location, enum tree_code code,
: TREE_TYPE (arg2.value));
result.value = build_binary_op (location, code,
- arg1.value, arg2.value, 1);
+ arg1.value, arg2.value, true);
result.original_code = code;
result.original_type = NULL;
@@ -3829,7 +3831,7 @@ pointer_diff (location_t loc, tree op0, tree op1)
op0 = build_binary_op (loc,
MINUS_EXPR, convert (inttype, op0),
- convert (inttype, op1), 0);
+ convert (inttype, op1), false);
/* This generates an error if op1 is pointer to incomplete type. */
if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1))))
error_at (loc, "arithmetic on pointer to an incomplete type");
@@ -4096,7 +4098,7 @@ cas_loop:
add_stmt (loop_label);
/* newval = old + val; */
- rhs = build_binary_op (loc, modifycode, old, val, 1);
+ rhs = build_binary_op (loc, modifycode, old, val, true);
rhs = c_fully_fold (rhs, false, NULL);
rhs = convert_for_assignment (loc, UNKNOWN_LOCATION, nonatomic_lhs_type,
rhs, NULL_TREE, ic_assign, false, NULL_TREE,
@@ -4863,8 +4865,8 @@ ep_convert_and_check (location_t loc, tree type, tree expr,
tree
build_conditional_expr (location_t colon_loc, tree ifexp, bool ifexp_bcp,
- tree op1, tree op1_original_type, tree op2,
- tree op2_original_type)
+ tree op1, tree op1_original_type, location_t op1_loc,
+ tree op2, tree op2_original_type, location_t op2_loc)
{
tree type1;
tree type2;
@@ -5029,10 +5031,18 @@ build_conditional_expr (location_t colon_loc, tree ifexp, bool ifexp_bcp,
|| (unsigned_op1
&& tree_expr_nonnegative_warnv_p (op2, &ovf)))
/* OK */;
+ else if (unsigned_op2)
+ warning_at (op1_loc, OPT_Wsign_compare,
+ "operand of ?: changes signedness from "
+ "%qT to %qT due to unsignedness of other "
+ "operand", TREE_TYPE (orig_op1),
+ TREE_TYPE (orig_op2));
else
- warning_at (colon_loc, OPT_Wsign_compare,
- ("signed and unsigned type in "
- "conditional expression"));
+ warning_at (op2_loc, OPT_Wsign_compare,
+ "operand of ?: changes signedness from "
+ "%qT to %qT due to unsignedness of other "
+ "operand", TREE_TYPE (orig_op2),
+ TREE_TYPE (orig_op1));
}
if (!op1_maybe_const || TREE_CODE (op1) != INTEGER_CST)
op1 = c_wrap_maybe_const (op1, !op1_maybe_const);
@@ -5786,7 +5796,7 @@ build_modify_expr (location_t location, tree lhs, tree lhs_origtype,
rhseval = newrhs;
}
newrhs = build_binary_op (location,
- modifycode, lhs, newrhs, 1);
+ modifycode, lhs, newrhs, true);
/* The original type of the right hand side is no longer
meaningful. */
@@ -6055,20 +6065,19 @@ error_init (location_t loc, const char *gmsgid)
it is unconditionally given. GMSGID identifies the message. The
component name is taken from the spelling stack. */
-static void
-pedwarn_init (location_t loc, int opt, const char *gmsgid)
+static void ATTRIBUTE_GCC_DIAG (3,0)
+pedwarn_init (location_t loc, int opt, const char *gmsgid, ...)
{
- char *ofwhat;
- bool warned;
-
/* Use the location where a macro was expanded rather than where
it was defined to make sure macros defined in system headers
but used incorrectly elsewhere are diagnosed. */
source_location exploc = expansion_point_location_if_in_system_header (loc);
- /* The gmsgid may be a format string with %< and %>. */
- warned = pedwarn (exploc, opt, gmsgid);
- ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
+ va_list ap;
+ va_start (ap, gmsgid);
+ bool warned = emit_diagnostic_valist (DK_PEDWARN, exploc, opt, gmsgid, &ap);
+ va_end (ap);
+ char *ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
if (*ofwhat && warned)
inform (exploc, "(near initialization for %qs)", ofwhat);
}
@@ -6301,17 +6310,33 @@ convert_for_assignment (location_t location, location_t expr_loc, tree type,
if (checktype != error_mark_node
&& TREE_CODE (type) == ENUMERAL_TYPE
&& TYPE_MAIN_VARIANT (checktype) != TYPE_MAIN_VARIANT (type))
- {
- PEDWARN_FOR_ASSIGNMENT (location, expr_loc, OPT_Wc___compat,
- G_("enum conversion when passing argument "
- "%d of %qE is invalid in C++"),
- G_("enum conversion in assignment is "
- "invalid in C++"),
- G_("enum conversion in initialization is "
- "invalid in C++"),
- G_("enum conversion in return is "
- "invalid in C++"));
- }
+ switch (errtype)
+ {
+ case ic_argpass:
+ if (pedwarn (expr_loc, OPT_Wc___compat, "enum conversion when "
+ "passing argument %d of %qE is invalid in C++",
+ parmnum, rname))
+ inform ((fundecl && !DECL_IS_BUILTIN (fundecl))
+ ? DECL_SOURCE_LOCATION (fundecl) : expr_loc,
+ "expected %qT but argument is of type %qT",
+ type, rhstype);
+ break;
+ case ic_assign:
+ pedwarn (location, OPT_Wc___compat, "enum conversion from %qT to "
+ "%qT in assignment is invalid in C++", rhstype, type);
+ break;
+ case ic_init:
+ pedwarn_init (location, OPT_Wc___compat, "enum conversion from "
+ "%qT to %qT in initialization is invalid in C++",
+ rhstype, type);
+ break;
+ case ic_return:
+ pedwarn (location, OPT_Wc___compat, "enum conversion from %qT to "
+ "%qT in return is invalid in C++", rhstype, type);
+ break;
+ default:
+ gcc_unreachable ();
+ }
}
if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
@@ -6717,15 +6742,36 @@ convert_for_assignment (location_t location, location_t expr_loc, tree type,
;
/* If there is a mismatch, do warn. */
else if (warn_pointer_sign)
- PEDWARN_FOR_ASSIGNMENT (location, expr_loc, OPT_Wpointer_sign,
- G_("pointer targets in passing argument "
- "%d of %qE differ in signedness"),
- G_("pointer targets in assignment "
- "differ in signedness"),
- G_("pointer targets in initialization "
- "differ in signedness"),
- G_("pointer targets in return differ "
- "in signedness"));
+ switch (errtype)
+ {
+ case ic_argpass:
+ if (pedwarn (expr_loc, OPT_Wpointer_sign,
+ "pointer targets in passing argument %d of "
+ "%qE differ in signedness", parmnum, rname))
+ inform ((fundecl && !DECL_IS_BUILTIN (fundecl))
+ ? DECL_SOURCE_LOCATION (fundecl) : expr_loc,
+ "expected %qT but argument is of type %qT",
+ type, rhstype);
+ break;
+ case ic_assign:
+ pedwarn (location, OPT_Wpointer_sign,
+ "pointer targets in assignment from %qT to %qT "
+ "differ in signedness", rhstype, type);
+ break;
+ case ic_init:
+ pedwarn_init (location, OPT_Wpointer_sign,
+ "pointer targets in initialization of %qT "
+ "from %qT differ in signedness", type,
+ rhstype);
+ break;
+ case ic_return:
+ pedwarn (location, OPT_Wpointer_sign, "pointer targets in "
+ "returning %qT from a function with return type "
+ "%qT differ in signedness", rhstype, type);
+ break;
+ default:
+ gcc_unreachable ();
+ }
}
else if (TREE_CODE (ttl) == FUNCTION_TYPE
&& TREE_CODE (ttr) == FUNCTION_TYPE)
@@ -6750,17 +6796,39 @@ convert_for_assignment (location_t location, location_t expr_loc, tree type,
TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr));
}
}
- else
- /* Avoid warning about the volatile ObjC EH puts on decls. */
- if (!objc_ok)
- PEDWARN_FOR_ASSIGNMENT (location, expr_loc,
- OPT_Wincompatible_pointer_types,
- G_("passing argument %d of %qE from "
- "incompatible pointer type"),
- G_("assignment from incompatible pointer type"),
- G_("initialization from incompatible "
- "pointer type"),
- G_("return from incompatible pointer type"));
+ /* Avoid warning about the volatile ObjC EH puts on decls. */
+ else if (!objc_ok)
+ {
+ switch (errtype)
+ {
+ case ic_argpass:
+ if (pedwarn (expr_loc, OPT_Wincompatible_pointer_types,
+ "passing argument %d of %qE from incompatible "
+ "pointer type", parmnum, rname))
+ inform ((fundecl && !DECL_IS_BUILTIN (fundecl))
+ ? DECL_SOURCE_LOCATION (fundecl) : expr_loc,
+ "expected %qT but argument is of type %qT",
+ type, rhstype);
+ break;
+ case ic_assign:
+ pedwarn (location, OPT_Wincompatible_pointer_types,
+ "assignment to %qT from incompatible pointer type %qT",
+ type, rhstype);
+ break;
+ case ic_init:
+ pedwarn_init (location, OPT_Wincompatible_pointer_types,
+ "initialization of %qT from incompatible pointer "
+ "type %qT", type, rhstype);
+ break;
+ case ic_return:
+ pedwarn (location, OPT_Wincompatible_pointer_types,
+ "returning %qT from a function with incompatible "
+ "return type %qT", rhstype, type);
+ break;
+ default:
+ gcc_unreachable ();
+ }
+ }
return convert (type, rhs);
}
@@ -6777,31 +6845,70 @@ convert_for_assignment (location_t location, location_t expr_loc, tree type,
or one that results from arithmetic, even including
a cast to integer type. */
if (!null_pointer_constant)
- PEDWARN_FOR_ASSIGNMENT (location, expr_loc,
- OPT_Wint_conversion,
- G_("passing argument %d of %qE makes "
- "pointer from integer without a cast"),
- G_("assignment makes pointer from integer "
- "without a cast"),
- G_("initialization makes pointer from "
- "integer without a cast"),
- G_("return makes pointer from integer "
- "without a cast"));
+ switch (errtype)
+ {
+ case ic_argpass:
+ if (pedwarn (expr_loc, OPT_Wint_conversion,
+ "passing argument %d of %qE makes pointer from "
+ "integer without a cast", parmnum, rname))
+ inform ((fundecl && !DECL_IS_BUILTIN (fundecl))
+ ? DECL_SOURCE_LOCATION (fundecl) : expr_loc,
+ "expected %qT but argument is of type %qT",
+ type, rhstype);
+ break;
+ case ic_assign:
+ pedwarn (location, OPT_Wint_conversion,
+ "assignment to %qT from %qT makes pointer from integer "
+ "without a cast", type, rhstype);
+ break;
+ case ic_init:
+ pedwarn_init (location, OPT_Wint_conversion,
+ "initialization of %qT from %qT makes pointer from "
+ "integer without a cast", type, rhstype);
+ break;
+ case ic_return:
+ pedwarn (location, OPT_Wint_conversion, "returning %qT from a "
+ "function with return type %qT makes pointer from "
+ "integer without a cast", rhstype, type);
+ break;
+ default:
+ gcc_unreachable ();
+ }
return convert (type, rhs);
}
else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
{
- PEDWARN_FOR_ASSIGNMENT (location, expr_loc,
- OPT_Wint_conversion,
- G_("passing argument %d of %qE makes integer "
- "from pointer without a cast"),
- G_("assignment makes integer from pointer "
- "without a cast"),
- G_("initialization makes integer from pointer "
- "without a cast"),
- G_("return makes integer from pointer "
- "without a cast"));
+ switch (errtype)
+ {
+ case ic_argpass:
+ if (pedwarn (expr_loc, OPT_Wint_conversion,
+ "passing argument %d of %qE makes integer from "
+ "pointer without a cast", parmnum, rname))
+ inform ((fundecl && !DECL_IS_BUILTIN (fundecl))
+ ? DECL_SOURCE_LOCATION (fundecl) : expr_loc,
+ "expected %qT but argument is of type %qT",
+ type, rhstype);
+ break;
+ case ic_assign:
+ pedwarn (location, OPT_Wint_conversion,
+ "assignment to %qT from %qT makes integer from pointer "
+ "without a cast", type, rhstype);
+ break;
+ case ic_init:
+ pedwarn_init (location, OPT_Wint_conversion,
+ "initialization of %qT from %qT makes integer from "
+ "pointer without a cast", type, rhstype);
+ break;
+ case ic_return:
+ pedwarn (location, OPT_Wint_conversion, "returning %qT from a "
+ "function with return type %qT makes integer from "
+ "pointer without a cast", rhstype, type);
+ break;
+ default:
+ gcc_unreachable ();
+ }
+
return convert (type, rhs);
}
else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
@@ -8184,7 +8291,7 @@ pop_init_level (location_t loc, int implicit,
ARRAY argument is nonzero for array ranges. Returns false for success. */
static bool
-set_designator (location_t loc, int array,
+set_designator (location_t loc, bool array,
struct obstack *braced_init_obstack)
{
tree subtype;
@@ -8280,7 +8387,7 @@ void
set_init_index (location_t loc, tree first, tree last,
struct obstack *braced_init_obstack)
{
- if (set_designator (loc, 1, braced_init_obstack))
+ if (set_designator (loc, true, braced_init_obstack))
return;
designator_erroneous = 1;
@@ -8370,7 +8477,7 @@ set_init_label (location_t loc, tree fieldname, location_t fieldname_loc,
{
tree field;
- if (set_designator (loc, 0, braced_init_obstack))
+ if (set_designator (loc, false, braced_init_obstack))
return;
designator_erroneous = 1;
@@ -8410,7 +8517,7 @@ set_init_label (location_t loc, tree fieldname, location_t fieldname_loc,
field = TREE_CHAIN (field);
if (field)
{
- if (set_designator (loc, 0, braced_init_obstack))
+ if (set_designator (loc, false, braced_init_obstack))
return;
}
}
@@ -8843,9 +8950,9 @@ find_init_member (tree field, struct obstack * braced_init_obstack)
unparenthesized or we should not warn here for it being parenthesized.
For other types of VALUE, STRICT_STRING is not used.
- PENDING if non-nil means output pending elements that belong
- right after this element. (PENDING is normally 1;
- it is 0 while outputting pending elements, to avoid recursion.)
+ PENDING if true means output pending elements that belong
+ right after this element. (PENDING is normally true;
+ it is false while outputting pending elements, to avoid recursion.)
IMPLICIT is true if value comes from pop_init_level (1),
the new initializer has been merged with the existing one
@@ -8854,7 +8961,7 @@ find_init_member (tree field, struct obstack * braced_init_obstack)
static void
output_init_element (location_t loc, tree value, tree origtype,
- bool strict_string, tree type, tree field, int pending,
+ bool strict_string, tree type, tree field, bool pending,
bool implicit, struct obstack * braced_init_obstack)
{
tree semantic_type = NULL_TREE;
@@ -9097,7 +9204,7 @@ output_pending_init_elements (int all, struct obstack * braced_init_obstack)
constructor_unfilled_index))
output_init_element (input_location, elt->value, elt->origtype,
true, TREE_TYPE (constructor_type),
- constructor_unfilled_index, 0, false,
+ constructor_unfilled_index, false, false,
braced_init_obstack);
else if (tree_int_cst_lt (constructor_unfilled_index,
elt->purpose))
@@ -9151,7 +9258,7 @@ output_pending_init_elements (int all, struct obstack * braced_init_obstack)
constructor_unfilled_fields = elt->purpose;
output_init_element (input_location, elt->value, elt->origtype,
true, TREE_TYPE (elt->purpose),
- elt->purpose, 0, false,
+ elt->purpose, false, false,
braced_init_obstack);
}
else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
@@ -9395,7 +9502,7 @@ process_init_element (location_t loc, struct c_expr value, bool implicit,
push_member_name (constructor_fields);
output_init_element (loc, value.value, value.original_type,
strict_string, fieldtype,
- constructor_fields, 1, implicit,
+ constructor_fields, true, implicit,
braced_init_obstack);
RESTORE_SPELLING_DEPTH (constructor_depth);
}
@@ -9487,7 +9594,7 @@ process_init_element (location_t loc, struct c_expr value, bool implicit,
push_member_name (constructor_fields);
output_init_element (loc, value.value, value.original_type,
strict_string, fieldtype,
- constructor_fields, 1, implicit,
+ constructor_fields, true, implicit,
braced_init_obstack);
RESTORE_SPELLING_DEPTH (constructor_depth);
}
@@ -9539,7 +9646,7 @@ process_init_element (location_t loc, struct c_expr value, bool implicit,
push_array_bounds (tree_to_uhwi (constructor_index));
output_init_element (loc, value.value, value.original_type,
strict_string, elttype,
- constructor_index, 1, implicit,
+ constructor_index, true, implicit,
braced_init_obstack);
RESTORE_SPELLING_DEPTH (constructor_depth);
}
@@ -9574,7 +9681,7 @@ process_init_element (location_t loc, struct c_expr value, bool implicit,
elttype = TYPE_MAIN_VARIANT (constructor_type);
output_init_element (loc, value.value, value.original_type,
strict_string, elttype,
- constructor_index, 1, implicit,
+ constructor_index, true, implicit,
braced_init_obstack);
}
@@ -9603,7 +9710,7 @@ process_init_element (location_t loc, struct c_expr value, bool implicit,
if (value.value)
output_init_element (loc, value.value, value.original_type,
strict_string, constructor_type,
- NULL_TREE, 1, implicit,
+ NULL_TREE, true, implicit,
braced_init_obstack);
constructor_fields = NULL_TREE;
}
@@ -9824,6 +9931,7 @@ c_finish_goto_label (location_t loc, tree label)
return NULL_TREE;
TREE_USED (decl) = 1;
{
+ add_stmt (build_predict_expr (PRED_GOTO, NOT_TAKEN));
tree t = build1 (GOTO_EXPR, void_type_node, decl);
SET_EXPR_LOCATION (t, loc);
return add_stmt (t);
@@ -10734,7 +10842,7 @@ build_vec_cmp (tree_code code, tree type,
tree
build_binary_op (location_t location, enum tree_code code,
- tree orig_op0, tree orig_op1, int convert_p)
+ tree orig_op0, tree orig_op1, bool convert_p)
{
tree type0, type1, orig_type0, orig_type1;
tree eptype;
@@ -11838,6 +11946,7 @@ build_binary_op (location_t location, enum tree_code code,
if (sanitize_flags_p ((SANITIZE_SHIFT
| SANITIZE_DIVIDE | SANITIZE_FLOAT_DIVIDE))
+ && current_function_decl != NULL_TREE
&& (doing_div_or_mod || doing_shift)
&& !require_constant_value)
{
diff --git a/gcc/calls.c b/gcc/calls.c
index 8a23b50fc66..7599928c7cb 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -52,6 +52,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssanames.h"
#include "rtl-chkp.h"
#include "intl.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Like PREFERRED_STACK_BOUNDARY but in units of bytes, not bits. */
#define STACK_BYTES (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT)
@@ -1222,32 +1224,38 @@ alloc_max_size (void)
else if (!strcasecmp (end, "KiB") || strcmp (end, "KB"))
unit = 1024;
else if (!strcmp (end, "MB"))
- unit = 1000LU * 1000;
+ unit = HOST_WIDE_INT_UC (1000) * 1000;
else if (!strcasecmp (end, "MiB"))
- unit = 1024LU * 1024;
+ unit = HOST_WIDE_INT_UC (1024) * 1024;
else if (!strcasecmp (end, "GB"))
- unit = 1000LU * 1000 * 1000;
+ unit = HOST_WIDE_INT_UC (1000) * 1000 * 1000;
else if (!strcasecmp (end, "GiB"))
- unit = 1024LU * 1024 * 1024;
+ unit = HOST_WIDE_INT_UC (1024) * 1024 * 1024;
else if (!strcasecmp (end, "TB"))
- unit = 1000LU * 1000 * 1000 * 1000;
+ unit = HOST_WIDE_INT_UC (1000) * 1000 * 1000 * 1000;
else if (!strcasecmp (end, "TiB"))
- unit = 1024LU * 1024 * 1024 * 1024;
+ unit = HOST_WIDE_INT_UC (1024) * 1024 * 1024 * 1024;
else if (!strcasecmp (end, "PB"))
- unit = 1000LU * 1000 * 1000 * 1000 * 1000;
+ unit = HOST_WIDE_INT_UC (1000) * 1000 * 1000 * 1000 * 1000;
else if (!strcasecmp (end, "PiB"))
- unit = 1024LU * 1024 * 1024 * 1024 * 1024;
+ unit = HOST_WIDE_INT_UC (1024) * 1024 * 1024 * 1024 * 1024;
else if (!strcasecmp (end, "EB"))
- unit = 1000LU * 1000 * 1000 * 1000 * 1000 * 1000;
+ unit = HOST_WIDE_INT_UC (1000) * 1000 * 1000 * 1000 * 1000
+ * 1000;
else if (!strcasecmp (end, "EiB"))
- unit = 1024LU * 1024 * 1024 * 1024 * 1024 * 1024;
+ unit = HOST_WIDE_INT_UC (1024) * 1024 * 1024 * 1024 * 1024
+ * 1024;
else
unit = 0;
}
if (unit)
- alloc_object_size_limit
- = build_int_cst (ssizetype, limit * unit);
+ {
+ wide_int w = wi::uhwi (limit, HOST_BITS_PER_WIDE_INT + 64);
+ w *= unit;
+ if (wi::ltu_p (w, alloc_object_size_limit))
+ alloc_object_size_limit = wide_int_to_tree (ssizetype, w);
+ }
}
}
}
diff --git a/gcc/cfganal.c b/gcc/cfganal.c
index 792ea62cc56..394d986c945 100644
--- a/gcc/cfganal.c
+++ b/gcc/cfganal.c
@@ -737,23 +737,24 @@ post_order_compute (int *post_order, bool include_entry_exit,
basic_block
dfs_find_deadend (basic_block bb)
{
- bitmap visited = BITMAP_ALLOC (NULL);
+ auto_bitmap visited;
+ basic_block next = bb;
for (;;)
{
- if (EDGE_COUNT (bb->succs) == 0
- || ! bitmap_set_bit (visited, bb->index))
- {
- BITMAP_FREE (visited);
- return bb;
- }
+ if (EDGE_COUNT (next->succs) == 0)
+ return next;
+
+ if (! bitmap_set_bit (visited, next->index))
+ return bb;
+ bb = next;
/* If we are in an analyzed cycle make sure to try exiting it.
Note this is a heuristic only and expected to work when loop
fixup is needed as well. */
if (! bb->loop_father
|| ! loop_outer (bb->loop_father))
- bb = EDGE_SUCC (bb, 0)->dest;
+ next = EDGE_SUCC (bb, 0)->dest;
else
{
edge_iterator ei;
@@ -761,7 +762,7 @@ dfs_find_deadend (basic_block bb)
FOR_EACH_EDGE (e, ei, bb->succs)
if (loop_exit_edge_p (bb->loop_father, e))
break;
- bb = e ? e->dest : EDGE_SUCC (bb, 0)->dest;
+ next = e ? e->dest : EDGE_SUCC (bb, 0)->dest;
}
}
diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c
index 5d00fafffa3..365c971effb 100644
--- a/gcc/cfgcleanup.c
+++ b/gcc/cfgcleanup.c
@@ -1435,6 +1435,13 @@ flow_find_cross_jump (basic_block bb1, basic_block bb2, rtx_insn **f1,
if (i1 == BB_HEAD (bb1) || i2 == BB_HEAD (bb2))
break;
+ /* Do not turn corssing edge to non-crossing or vice versa after
+ reload. */
+ if (BB_PARTITION (BLOCK_FOR_INSN (i1))
+ != BB_PARTITION (BLOCK_FOR_INSN (i2))
+ && reload_completed)
+ break;
+
dir = merge_dir (dir, old_insns_match_p (0, i1, i2));
if (dir == dir_none || (!dir_p && dir != dir_both))
break;
@@ -1958,18 +1965,6 @@ try_crossjump_to_edge (int mode, edge e1, edge e2,
newpos1 = newpos2 = NULL;
- /* If we have partitioned hot/cold basic blocks, it is a bad idea
- to try this optimization.
-
- Basic block partitioning may result in some jumps that appear to
- be optimizable (or blocks that appear to be mergeable), but which really
- must be left untouched (they are required to make it safely across
- partition boundaries). See the comments at the top of
- bb-reorder.c:partition_hot_cold_basic_blocks for complete details. */
-
- if (crtl->has_bb_partition && reload_completed)
- return false;
-
/* Search backward through forwarder blocks. We don't need to worry
about multiple entry or chained forwarders, as they will be optimized
away. We do this to look past the unconditional jump following a
@@ -2003,6 +1998,11 @@ try_crossjump_to_edge (int mode, edge e1, edge e2,
if (EDGE_COUNT (src1->preds) == 0 || EDGE_COUNT (src2->preds) == 0)
return false;
+ /* Do not turn corssing edge to non-crossing or vice versa after reload. */
+ if (BB_PARTITION (src1) != BB_PARTITION (src2)
+ && reload_completed)
+ return false;
+
/* Look for the common insn sequence, part the first ... */
if (!outgoing_edges_match (mode, src1, src2))
return false;
@@ -2024,12 +2024,10 @@ try_crossjump_to_edge (int mode, edge e1, edge e2,
if (dir == dir_backward)
{
-#define SWAP(T, X, Y) do { T tmp = (X); (X) = (Y); (Y) = tmp; } while (0)
- SWAP (basic_block, osrc1, osrc2);
- SWAP (basic_block, src1, src2);
- SWAP (edge, e1, e2);
- SWAP (rtx_insn *, newpos1, newpos2);
-#undef SWAP
+ std::swap (osrc1, osrc2);
+ std::swap (src1, src2);
+ std::swap (e1, e2);
+ std::swap (newpos1, newpos2);
}
/* Don't proceed with the crossjump unless we found a sufficient number
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index c9d8118ed45..7f0130d0365 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -68,6 +68,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-outof-ssa.h"
#include "cfgloop.h"
#include "insn-attr.h" /* For INSN_SCHEDULING. */
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
#include "tree-ssa-address.h"
#include "output.h"
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index 8c60eede0b9..6ef47b7e61f 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -2109,8 +2109,6 @@ commit_edge_insertions (void)
static void
rtl_dump_bb (FILE *outf, basic_block bb, int indent, dump_flags_t flags)
{
- rtx_insn *insn;
- rtx_insn *last;
char *s_indent;
s_indent = (char *) alloca ((size_t) indent + 1);
@@ -2124,18 +2122,22 @@ rtl_dump_bb (FILE *outf, basic_block bb, int indent, dump_flags_t flags)
}
if (bb->index != ENTRY_BLOCK && bb->index != EXIT_BLOCK)
- for (insn = BB_HEAD (bb), last = NEXT_INSN (BB_END (bb)); insn != last;
- insn = NEXT_INSN (insn))
- {
- if (flags & TDF_DETAILS)
- df_dump_insn_top (insn, outf);
- if (! (flags & TDF_SLIM))
- print_rtl_single (outf, insn);
- else
- dump_insn_slim (outf, insn);
- if (flags & TDF_DETAILS)
- df_dump_insn_bottom (insn, outf);
- }
+ {
+ rtx_insn *last = BB_END (bb);
+ if (last)
+ last = NEXT_INSN (last);
+ for (rtx_insn *insn = BB_HEAD (bb); insn != last; insn = NEXT_INSN (insn))
+ {
+ if (flags & TDF_DETAILS)
+ df_dump_insn_top (insn, outf);
+ if (! (flags & TDF_SLIM))
+ print_rtl_single (outf, insn);
+ else
+ dump_insn_slim (outf, insn);
+ if (flags & TDF_DETAILS)
+ df_dump_insn_bottom (insn, outf);
+ }
+ }
if (df && (flags & TDF_DETAILS))
{
@@ -2282,6 +2284,29 @@ get_last_bb_insn (basic_block bb)
return end;
}
+/* Add all BBs reachable from entry via hot paths into the SET. */
+
+void
+find_bbs_reachable_by_hot_paths (hash_set<basic_block> *set)
+{
+ auto_vec<basic_block, 64> worklist;
+
+ set->add (ENTRY_BLOCK_PTR_FOR_FN (cfun));
+ worklist.safe_push (ENTRY_BLOCK_PTR_FOR_FN (cfun));
+
+ while (worklist.length () > 0)
+ {
+ basic_block bb = worklist.pop ();
+ edge_iterator ei;
+ edge e;
+
+ FOR_EACH_EDGE (e, ei, bb->succs)
+ if (BB_PARTITION (e->dest) != BB_COLD_PARTITION
+ && !set->add (e->dest))
+ worklist.safe_push (e->dest);
+ }
+}
+
/* Sanity check partition hotness to ensure that basic blocks in
  the cold partition don't dominate basic blocks in the hot partition.
If FLAG_ONLY is true, report violations as errors. Otherwise
@@ -2295,49 +2320,25 @@ find_partition_fixes (bool flag_only)
basic_block bb;
vec<basic_block> bbs_in_cold_partition = vNULL;
vec<basic_block> bbs_to_fix = vNULL;
+ hash_set<basic_block> set;
/* Callers check this. */
gcc_checking_assert (crtl->has_bb_partition);
- FOR_EACH_BB_FN (bb, cfun)
- if ((BB_PARTITION (bb) == BB_COLD_PARTITION))
- bbs_in_cold_partition.safe_push (bb);
-
- if (bbs_in_cold_partition.is_empty ())
- return vNULL;
-
- bool dom_calculated_here = !dom_info_available_p (CDI_DOMINATORS);
-
- if (dom_calculated_here)
- calculate_dominance_info (CDI_DOMINATORS);
-
- while (! bbs_in_cold_partition.is_empty ())
- {
- bb = bbs_in_cold_partition.pop ();
- /* Any blocks dominated by a block in the cold section
- must also be cold. */
- basic_block son;
- for (son = first_dom_son (CDI_DOMINATORS, bb);
- son;
- son = next_dom_son (CDI_DOMINATORS, son))
- {
- /* If son is not yet cold, then mark it cold here and
- enqueue it for further processing. */
- if ((BB_PARTITION (son) != BB_COLD_PARTITION))
- {
- if (flag_only)
- error ("non-cold basic block %d dominated "
- "by a block in the cold partition (%d)", son->index, bb->index);
- else
- BB_SET_PARTITION (son, BB_COLD_PARTITION);
- bbs_to_fix.safe_push (son);
- bbs_in_cold_partition.safe_push (son);
- }
- }
- }
+ find_bbs_reachable_by_hot_paths (&set);
- if (dom_calculated_here)
- free_dominance_info (CDI_DOMINATORS);
+ FOR_EACH_BB_FN (bb, cfun)
+ if (!set.contains (bb)
+ && BB_PARTITION (bb) != BB_COLD_PARTITION)
+ {
+ if (flag_only)
+ error ("non-cold basic block %d reachable only "
+ "by paths crossing the cold partition", bb->index);
+ else
+ BB_SET_PARTITION (bb, BB_COLD_PARTITION);
+ bbs_to_fix.safe_push (bb);
+ bbs_in_cold_partition.safe_push (bb);
+ }
return bbs_to_fix;
}
diff --git a/gcc/cfgrtl.h b/gcc/cfgrtl.h
index 9235b50ed66..93cb75d041e 100644
--- a/gcc/cfgrtl.h
+++ b/gcc/cfgrtl.h
@@ -54,5 +54,6 @@ extern void cfg_layout_initialize (int);
extern void cfg_layout_finalize (void);
extern void break_superblocks (void);
extern void init_rtl_bb_info (basic_block);
+extern void find_bbs_reachable_by_hot_paths (hash_set <basic_block> *);
#endif /* GCC_CFGRTL_H */
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 2f820f1bb67..69aa6c5bce2 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -61,6 +61,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-chkp.h"
#include "context.h"
#include "gimplify.h"
+#include "stringpool.h"
+#include "attribs.h"
/* FIXME: Only for PROP_loops, but cgraph shouldn't have to know about this. */
#include "tree-pass.h"
@@ -582,10 +584,11 @@ cgraph_node *
cgraph_node::create_same_body_alias (tree alias, tree decl)
{
cgraph_node *n;
-#ifndef ASM_OUTPUT_DEF
+
/* If aliases aren't supported by the assembler, fail. */
- return NULL;
-#endif
+ if (!TARGET_SUPPORTS_ALIASES)
+ return NULL;
+
/* Langhooks can create same body aliases of symbols not defined.
Those are useless. Drop them on the floor. */
if (symtab->global_info_ready)
@@ -2319,7 +2322,8 @@ cgraph_node::get_availability (symtab_node *ref)
avail = AVAIL_AVAILABLE;
else if (transparent_alias)
ultimate_alias_target (&avail, ref);
- else if (lookup_attribute ("ifunc", DECL_ATTRIBUTES (decl)))
+ else if (lookup_attribute ("ifunc", DECL_ATTRIBUTES (decl))
+ || lookup_attribute ("noipa", DECL_ATTRIBUTES (decl)))
avail = AVAIL_INTERPOSABLE;
else if (!externally_visible)
avail = AVAIL_AVAILABLE;
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 6072c567bc3..e8cc765095d 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -204,6 +204,8 @@ along with GCC; see the file COPYING3. If not see
#include "dbgcnt.h"
#include "tree-chkp.h"
#include "lto-section-names.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Queue of cgraph nodes scheduled to be added into cgraph. This is a
secondary queue used during optimization to accommodate passes that
diff --git a/gcc/common.opt b/gcc/common.opt
index e81165c488b..1cb1c83d306 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -163,6 +163,13 @@ bool flag_stack_usage_info = false
Variable
int flag_debug_asm
+; How many NOP insns to place at each function entry by default
+Variable
+HOST_WIDE_INT function_entry_patch_area_size
+
+; And how far the real asm entry point is into this area
+Variable
+HOST_WIDE_INT function_entry_patch_area_start
; Balance between GNAT encodings and standard DWARF to emit.
Variable
@@ -2030,6 +2037,10 @@ fprofile-reorder-functions
Common Report Var(flag_profile_reorder_functions)
Enable function reordering that improves code placement.
+fpatchable-function-entry=
+Common Joined Optimization
+Insert NOP instructions at each function entry.
+
frandom-seed
Common Var(common_deferred_options) Defer
@@ -2680,8 +2691,9 @@ fvar-tracking-uninit
Common Report Var(flag_var_tracking_uninit) PerFunction
Perform variable tracking and also tag variables that are uninitialized.
+; Alias to enable both -ftree-loop-vectorize and -ftree-slp-vectorize.
ftree-vectorize
-Common Report Var(flag_tree_vectorize) Optimization
+Common Report Optimization
Enable vectorization on trees.
ftree-vectorizer-verbose=
@@ -2689,11 +2701,11 @@ Common Joined RejectNegative Ignore
Does nothing. Preserved for backward compatibility.
ftree-loop-vectorize
-Common Report Var(flag_tree_loop_vectorize) Optimization
+Common Report Var(flag_tree_loop_vectorize) Optimization EnabledBy(ftree-vectorize)
Enable loop vectorization on trees.
ftree-slp-vectorize
-Common Report Var(flag_tree_slp_vectorize) Optimization
+Common Report Var(flag_tree_slp_vectorize) Optimization EnabledBy(ftree-vectorize)
Enable basic block vectorization (SLP) on trees.
fvect-cost-model=
diff --git a/gcc/config.gcc b/gcc/config.gcc
index b8b99692a5f..60f3d0ba141 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -798,14 +798,7 @@ case ${target} in
case ${enable_threads} in
"" | yes | posix) thread_file='posix' ;;
esac
-
- # NetBSD 2.0 and later provide __cxa_atexit(), which we use by
- # default (unless overridden by --disable-__cxa_atexit).
- case ${target} in
- *-*-netbsd[2-9]* | *-*-netbsdelf[2-9]*)
- default_use_cxa_atexit=yes
- ;;
- esac
+ default_use_cxa_atexit=yes
;;
*-*-openbsd*)
tmake_file="t-openbsd"
@@ -1066,11 +1059,23 @@ arc*-*-linux*)
big*) tm_file="arc/big.h ${tm_file}"
esac
;;
-arm-wrs-vxworks)
- tm_file="elfos.h arm/elf.h arm/aout.h ${tm_file} vx-common.h vxworks.h arm/vxworks.h"
+arm-wrs-vxworks|arm-wrs-vxworks7)
extra_options="${extra_options} arm/vxworks.opt"
tmake_file="${tmake_file} arm/t-arm arm/t-vxworks"
- target_cpu_cname="arm6"
+ case $target in
+ *-vxworks7)
+ # VxWorks7 on ARM adheres to the ARM Base Platform ABI
+ tmake_file="${tmake_file} arm/t-bpabi"
+ tm_file="arm/bpabi.h ${tm_file}"
+ # The BPABI long long divmod functions return a 128-bit value in
+ # registers r0-r3.
+ need_64bit_hwint=yes
+ default_use_cxa_atexit=yes
+ ;;
+ *) ;;
+ esac
+ tm_file="elfos.h arm/elf.h arm/aout.h ${tm_file} vx-common.h vxworks.h arm/vxworks.h"
+ target_cpu_cname="arm8"
;;
arm*-*-freebsd*) # ARM FreeBSD EABI
tm_file="dbxelf.h elfos.h ${fbsd_tm_file} arm/elf.h"
@@ -2047,7 +2052,7 @@ riscv*-*-linux*)
# automatically detect that GAS supports it, yet we require it.
gcc_cv_initfini_array=yes
;;
-riscv*-*-elf*)
+riscv*-*-elf* | riscv*-*-rtems*)
tm_file="elfos.h newlib-stdint.h ${tm_file} riscv/elf.h"
case "x${enable_multilib}" in
xno) ;;
@@ -2060,6 +2065,11 @@ riscv*-*-elf*)
# Force .init_array support. The configure script cannot always
# automatically detect that GAS supports it, yet we require it.
gcc_cv_initfini_array=yes
+ case ${target} in
+ riscv*-*-rtems*)
+ tm_file="${tm_file} rtems.h riscv/rtems.h"
+ ;;
+ esac
;;
mips*-*-netbsd*) # NetBSD/mips, either endian.
target_cpu_default="MASK_ABICALLS"
@@ -2431,7 +2441,7 @@ powerpc-*-rtems*spe*)
tmake_file="${tmake_file} powerpcspe/t-fprules powerpcspe/t-rtems powerpcspe/t-ppccomm"
;;
powerpc-*-rtems*)
- tm_file="${tm_file} dbxelf.h elfos.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/rtems.h rtems.h"
+ tm_file="rs6000/biarch64.h ${tm_file} dbxelf.h elfos.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/rtems.h rtems.h"
extra_options="${extra_options} rs6000/sysv4.opt"
tmake_file="${tmake_file} rs6000/t-fprules rs6000/t-rtems rs6000/t-ppccomm"
;;
@@ -4370,7 +4380,7 @@ case "${target}" in
for which in arch tune; do
eval "val=\$with_$which"
case ${val} in
- "" | native | g5 | g6 | z900 | z990 | z9-109 | z9-ec | z10 | z196 | zEC12 | z13 | arch3 | arch5 | arch6 | arch7 | arch8 | arch9 | arch10 | arch11 | arch12)
+ "" | native | g5 | g6 | z900 | z990 | z9-109 | z9-ec | z10 | z196 | zEC12 | z13 | z14 | arch3 | arch5 | arch6 | arch7 | arch8 | arch9 | arch10 | arch11 | arch12)
# OK
;;
*)
diff --git a/gcc/config/aarch64/aarch64-cores.def b/gcc/config/aarch64/aarch64-cores.def
index f8342ca722d..10893324d3f 100644
--- a/gcc/config/aarch64/aarch64-cores.def
+++ b/gcc/config/aarch64/aarch64-cores.def
@@ -65,8 +65,8 @@ AARCH64_CORE("thunderxt83", thunderxt83, thunderx, 8A, AARCH64_FL_FOR_ARCH
AARCH64_CORE("xgene1", xgene1, xgene1, 8A, AARCH64_FL_FOR_ARCH8, xgene1, 0x50, 0x000, -1)
/* Qualcomm ('Q') cores. */
-AARCH64_CORE("falkor", falkor, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, qdf24xx, 0x51, 0xC00, -1)
-AARCH64_CORE("qdf24xx", qdf24xx, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, qdf24xx, 0x51, 0xC00, -1)
+AARCH64_CORE("falkor", falkor, falkor, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO | AARCH64_FL_RDMA, qdf24xx, 0x51, 0xC00, -1)
+AARCH64_CORE("qdf24xx", qdf24xx, falkor, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO | AARCH64_FL_RDMA, qdf24xx, 0x51, 0xC00, -1)
/* Samsung ('S') cores. */
AARCH64_CORE("exynos-m1", exynosm1, exynosm1, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, exynosm1, 0x53, 0x001, -1)
diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def
index c0752ce3470..c4f059ab7c5 100644
--- a/gcc/config/aarch64/aarch64-option-extensions.def
+++ b/gcc/config/aarch64/aarch64-option-extensions.def
@@ -63,4 +63,8 @@ AARCH64_OPT_EXTENSION("fp16", AARCH64_FL_F16, AARCH64_FL_FP, 0, "fphp asimdhp")
/* Enabling or disabling "rcpc" only changes "rcpc". */
AARCH64_OPT_EXTENSION("rcpc", AARCH64_FL_RCPC, 0, 0, "lrcpc")
+/* Enabling "rdma" also enables "fp", "simd".
+ Disabling "rdma" just disables "rdma". */
+AARCH64_OPT_EXTENSION("rdma", AARCH64_FL_RDMA, AARCH64_FL_FP | AARCH64_FL_SIMD, 0, "rdma")
+
#undef AARCH64_OPT_EXTENSION
diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h
index e397ff4afa7..beff28e2272 100644
--- a/gcc/config/aarch64/aarch64-protos.h
+++ b/gcc/config/aarch64/aarch64-protos.h
@@ -319,6 +319,7 @@ unsigned HOST_WIDE_INT aarch64_and_split_imm2 (HOST_WIDE_INT val_in);
bool aarch64_and_bitmask_imm (unsigned HOST_WIDE_INT val_in, machine_mode mode);
int aarch64_branch_cost (bool, bool);
enum aarch64_symbol_type aarch64_classify_symbolic_expression (rtx);
+bool aarch64_can_const_movi_rtx_p (rtx x, machine_mode mode);
bool aarch64_const_vec_all_same_int_p (rtx, HOST_WIDE_INT);
bool aarch64_constant_address_p (rtx);
bool aarch64_emit_approx_div (rtx, rtx, rtx);
@@ -326,6 +327,7 @@ bool aarch64_emit_approx_sqrt (rtx, rtx, bool);
void aarch64_expand_call (rtx, rtx, bool);
bool aarch64_expand_movmem (rtx *);
bool aarch64_float_const_zero_rtx_p (rtx);
+bool aarch64_float_const_rtx_p (rtx);
bool aarch64_function_arg_regno_p (unsigned);
bool aarch64_fusion_enabled_p (enum aarch64_fusion_pairs);
bool aarch64_gen_movmemqi (rtx *);
@@ -351,9 +353,9 @@ bool aarch64_pad_arg_upward (machine_mode, const_tree);
bool aarch64_pad_reg_upward (machine_mode, const_tree, bool);
bool aarch64_regno_ok_for_base_p (int, bool);
bool aarch64_regno_ok_for_index_p (int, bool);
+bool aarch64_reinterpret_float_as_int (rtx value, unsigned HOST_WIDE_INT *fail);
bool aarch64_simd_check_vect_par_cnst_half (rtx op, machine_mode mode,
bool high);
-bool aarch64_simd_imm_scalar_p (rtx x, machine_mode mode);
bool aarch64_simd_imm_zero_p (rtx, machine_mode);
bool aarch64_simd_scalar_immediate_valid_for_move (rtx, machine_mode);
bool aarch64_simd_shift_imm_p (rtx, machine_mode, bool);
diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md
index 1cb6eeb3187..f74b68775cf 100644
--- a/gcc/config/aarch64/aarch64-simd.md
+++ b/gcc/config/aarch64/aarch64-simd.md
@@ -351,6 +351,35 @@
}
)
+(define_expand "xorsign<mode>3"
+ [(match_operand:VHSDF 0 "register_operand")
+ (match_operand:VHSDF 1 "register_operand")
+ (match_operand:VHSDF 2 "register_operand")]
+ "TARGET_SIMD"
+{
+
+ machine_mode imode = <V_cmp_result>mode;
+ rtx v_bitmask = gen_reg_rtx (imode);
+ rtx op1x = gen_reg_rtx (imode);
+ rtx op2x = gen_reg_rtx (imode);
+
+ rtx arg1 = lowpart_subreg (imode, operands[1], <MODE>mode);
+ rtx arg2 = lowpart_subreg (imode, operands[2], <MODE>mode);
+
+ int bits = GET_MODE_UNIT_BITSIZE (<MODE>mode) - 1;
+
+ emit_move_insn (v_bitmask,
+ aarch64_simd_gen_const_vector_dup (<V_cmp_result>mode,
+ HOST_WIDE_INT_M1U << bits));
+
+ emit_insn (gen_and<v_cmp_result>3 (op2x, v_bitmask, arg2));
+ emit_insn (gen_xor<v_cmp_result>3 (op1x, arg1, op2x));
+ emit_move_insn (operands[0],
+ lowpart_subreg (<MODE>mode, op1x, imode));
+ DONE;
+}
+)
+
(define_expand "copysign<mode>3"
[(match_operand:VHSDF 0 "register_operand")
(match_operand:VHSDF 1 "register_operand")
@@ -1033,6 +1062,18 @@
[(set_attr "type" "neon_mla_<Vetype>_scalar<q>")]
)
+(define_insn "*aarch64_mla_elt_merge<mode>"
+ [(set (match_operand:VDQHS 0 "register_operand" "=w")
+ (plus:VDQHS
+ (mult:VDQHS (vec_duplicate:VDQHS
+ (match_operand:<VEL> 1 "register_operand" "w"))
+ (match_operand:VDQHS 2 "register_operand" "w"))
+ (match_operand:VDQHS 3 "register_operand" "0")))]
+ "TARGET_SIMD"
+ "mla\t%0.<Vtype>, %2.<Vtype>, %1.<Vetype>[0]"
+ [(set_attr "type" "neon_mla_<Vetype>_scalar<q>")]
+)
+
(define_insn "aarch64_mls<mode>"
[(set (match_operand:VDQ_BHSI 0 "register_operand" "=w")
(minus:VDQ_BHSI (match_operand:VDQ_BHSI 1 "register_operand" "0")
@@ -1080,6 +1121,18 @@
[(set_attr "type" "neon_mla_<Vetype>_scalar<q>")]
)
+(define_insn "*aarch64_mls_elt_merge<mode>"
+ [(set (match_operand:VDQHS 0 "register_operand" "=w")
+ (minus:VDQHS
+ (match_operand:VDQHS 1 "register_operand" "0")
+ (mult:VDQHS (vec_duplicate:VDQHS
+ (match_operand:<VEL> 2 "register_operand" "w"))
+ (match_operand:VDQHS 3 "register_operand" "w"))))]
+ "TARGET_SIMD"
+ "mls\t%0.<Vtype>, %3.<Vtype>, %2.<Vetype>[0]"
+ [(set_attr "type" "neon_mla_<Vetype>_scalar<q>")]
+)
+
;; Max/Min operations.
(define_insn "<su><maxmin><mode>3"
[(set (match_operand:VDQ_BHSI 0 "register_operand" "=w")
@@ -5593,9 +5646,9 @@
DONE;
})
-;; Standard pattern name vec_init<mode>.
+;; Standard pattern name vec_init<mode><Vel>.
-(define_expand "vec_init<mode>"
+(define_expand "vec_init<mode><Vel>"
[(match_operand:VALL_F16 0 "register_operand" "")
(match_operand 1 "" "")]
"TARGET_SIMD"
@@ -5650,9 +5703,9 @@
"urecpe\\t%0.<Vtype>, %1.<Vtype>"
[(set_attr "type" "neon_fp_recpe_<Vetype><q>")])
-;; Standard pattern name vec_extract<mode>.
+;; Standard pattern name vec_extract<mode><Vel>.
-(define_expand "vec_extract<mode>"
+(define_expand "vec_extract<mode><Vel>"
[(match_operand:<VEL> 0 "aarch64_simd_nonimmediate_operand" "")
(match_operand:VALL_F16 1 "register_operand" "")
(match_operand:SI 2 "immediate_operand" "")]
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index b8a4160d9de..28c4e0e6476 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -33,6 +33,7 @@
#include "df.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "optabs.h"
#include "regs.h"
#include "emit-rtl.h"
@@ -147,6 +148,8 @@ static bool aarch64_builtin_support_vector_misalignment (machine_mode mode,
const_tree type,
int misalignment,
bool is_packed);
+static machine_mode
+aarch64_simd_container_mode (machine_mode mode, unsigned width);
/* Major revision number of the ARM Architecture implemented by the target. */
unsigned aarch64_architecture_version;
@@ -206,22 +209,6 @@ static const struct cpu_addrcost_table generic_addrcost_table =
0 /* imm_offset */
};
-static const struct cpu_addrcost_table cortexa57_addrcost_table =
-{
- {
- 1, /* hi */
- 0, /* si */
- 0, /* di */
- 1, /* ti */
- },
- 0, /* pre_modify */
- 0, /* post_modify */
- 0, /* register_offset */
- 0, /* register_sextend */
- 0, /* register_zextend */
- 0, /* imm_offset */
-};
-
static const struct cpu_addrcost_table exynosm1_addrcost_table =
{
{
@@ -254,22 +241,6 @@ static const struct cpu_addrcost_table xgene1_addrcost_table =
0, /* imm_offset */
};
-static const struct cpu_addrcost_table qdf24xx_addrcost_table =
-{
- {
- 1, /* hi */
- 0, /* si */
- 0, /* di */
- 1, /* ti */
- },
- 0, /* pre_modify */
- 0, /* post_modify */
- 0, /* register_offset */
- 0, /* register_sextend */
- 0, /* register_zextend */
- 0 /* imm_offset */
-};
-
static const struct cpu_addrcost_table thunderx2t99_addrcost_table =
{
{
@@ -390,13 +361,13 @@ static const struct cpu_vector_cost thunderx_vector_cost =
3, /* scalar_load_cost */
1, /* scalar_store_cost */
4, /* vec_int_stmt_cost */
- 4, /* vec_fp_stmt_cost */
+ 1, /* vec_fp_stmt_cost */
4, /* vec_permute_cost */
2, /* vec_to_scalar_cost */
2, /* scalar_to_vec_cost */
3, /* vec_align_load_cost */
- 10, /* vec_unalign_load_cost */
- 10, /* vec_unalign_store_cost */
+ 5, /* vec_unalign_load_cost */
+ 5, /* vec_unalign_store_cost */
1, /* vec_store_cost */
3, /* cond_taken_branch_cost */
3 /* cond_not_taken_branch_cost */
@@ -488,20 +459,6 @@ static const struct cpu_branch_cost generic_branch_cost =
3 /* Unpredictable. */
};
-/* Branch costs for Cortex-A57. */
-static const struct cpu_branch_cost cortexa57_branch_cost =
-{
- 1, /* Predictable. */
- 3 /* Unpredictable. */
-};
-
-/* Branch costs for Vulcan. */
-static const struct cpu_branch_cost thunderx2t99_branch_cost =
-{
- 1, /* Predictable. */
- 3 /* Unpredictable. */
-};
-
/* Generic approximation modes. */
static const cpu_approx_modes generic_approx_modes =
{
@@ -612,7 +569,7 @@ static const struct tune_params cortexa35_tunings =
&generic_addrcost_table,
&cortexa53_regmove_cost,
&generic_vector_cost,
- &cortexa57_branch_cost,
+ &generic_branch_cost,
&generic_approx_modes,
4, /* memmov_cost */
1, /* issue_rate */
@@ -638,7 +595,7 @@ static const struct tune_params cortexa53_tunings =
&generic_addrcost_table,
&cortexa53_regmove_cost,
&generic_vector_cost,
- &cortexa57_branch_cost,
+ &generic_branch_cost,
&generic_approx_modes,
4, /* memmov_cost */
2, /* issue_rate */
@@ -661,10 +618,10 @@ static const struct tune_params cortexa53_tunings =
static const struct tune_params cortexa57_tunings =
{
&cortexa57_extra_costs,
- &cortexa57_addrcost_table,
+ &generic_addrcost_table,
&cortexa57_regmove_cost,
&cortexa57_vector_cost,
- &cortexa57_branch_cost,
+ &generic_branch_cost,
&generic_approx_modes,
4, /* memmov_cost */
3, /* issue_rate */
@@ -687,10 +644,10 @@ static const struct tune_params cortexa57_tunings =
static const struct tune_params cortexa72_tunings =
{
&cortexa57_extra_costs,
- &cortexa57_addrcost_table,
+ &generic_addrcost_table,
&cortexa57_regmove_cost,
&cortexa57_vector_cost,
- &cortexa57_branch_cost,
+ &generic_branch_cost,
&generic_approx_modes,
4, /* memmov_cost */
3, /* issue_rate */
@@ -713,10 +670,10 @@ static const struct tune_params cortexa72_tunings =
static const struct tune_params cortexa73_tunings =
{
&cortexa57_extra_costs,
- &cortexa57_addrcost_table,
+ &generic_addrcost_table,
&cortexa57_regmove_cost,
&cortexa57_vector_cost,
- &cortexa57_branch_cost,
+ &generic_branch_cost,
&generic_approx_modes,
4, /* memmov_cost. */
2, /* issue_rate. */
@@ -842,7 +799,7 @@ static const struct tune_params xgene1_tunings =
static const struct tune_params qdf24xx_tunings =
{
&qdf24xx_extra_costs,
- &qdf24xx_addrcost_table,
+ &generic_addrcost_table,
&qdf24xx_regmove_cost,
&generic_vector_cost,
&generic_branch_cost,
@@ -871,7 +828,7 @@ static const struct tune_params thunderx2t99_tunings =
&thunderx2t99_addrcost_table,
&thunderx2t99_regmove_cost,
&thunderx2t99_vector_cost,
- &thunderx2t99_branch_cost,
+ &generic_branch_cost,
&generic_approx_modes,
4, /* memmov_cost. */
4, /* issue_rate. */
@@ -1876,6 +1833,31 @@ aarch64_internal_mov_immediate (rtx dest, rtx imm, bool generate,
return 1;
}
+ /* Check to see if the low 32 bits are either 0xffffXXXX or 0xXXXXffff
+ (with XXXX non-zero). In that case check to see if the move can be done in
+ a smaller mode. */
+ val2 = val & 0xffffffff;
+ if (mode == DImode
+ && aarch64_move_imm (val2, SImode)
+ && (((val >> 32) & 0xffff) == 0 || (val >> 48) == 0))
+ {
+ if (generate)
+ emit_insn (gen_rtx_SET (dest, GEN_INT (val2)));
+
+ /* Check if we have to emit a second instruction by checking to see
+ if any of the upper 32 bits of the original DI mode value is set. */
+ if (val == val2)
+ return 1;
+
+ i = (val >> 48) ? 48 : 32;
+
+ if (generate)
+ emit_insn (gen_insv_immdi (dest, GEN_INT (i),
+ GEN_INT ((val >> i) & 0xffff)));
+
+ return 2;
+ }
+
if ((val >> 32) == 0 || mode == SImode)
{
if (generate)
@@ -3088,7 +3070,7 @@ aarch64_pushwb_single_reg (machine_mode mode, unsigned regno,
reg = gen_rtx_REG (mode, regno);
mem = gen_rtx_PRE_MODIFY (Pmode, base_rtx,
plus_constant (Pmode, base_rtx, -adjustment));
- mem = gen_rtx_MEM (mode, mem);
+ mem = gen_frame_mem (mode, mem);
insn = emit_move_insn (mem, reg);
RTX_FRAME_RELATED_P (insn) = 1;
@@ -3176,7 +3158,7 @@ aarch64_pop_regs (unsigned regno1, unsigned regno2, HOST_WIDE_INT adjustment,
{
rtx mem = plus_constant (Pmode, stack_pointer_rtx, adjustment);
mem = gen_rtx_POST_MODIFY (Pmode, stack_pointer_rtx, mem);
- emit_move_insn (reg1, gen_rtx_MEM (mode, mem));
+ emit_move_insn (reg1, gen_frame_mem (mode, mem));
}
else
{
@@ -3252,8 +3234,6 @@ aarch64_save_callee_saves (machine_mode mode, HOST_WIDE_INT start_offset,
unsigned start, unsigned limit, bool skip_wb)
{
rtx_insn *insn;
- rtx (*gen_mem_ref) (machine_mode, rtx) = (frame_pointer_needed
- ? gen_frame_mem : gen_rtx_MEM);
unsigned regno;
unsigned regno2;
@@ -3274,8 +3254,8 @@ aarch64_save_callee_saves (machine_mode mode, HOST_WIDE_INT start_offset,
reg = gen_rtx_REG (mode, regno);
offset = start_offset + cfun->machine->frame.reg_offset[regno];
- mem = gen_mem_ref (mode, plus_constant (Pmode, stack_pointer_rtx,
- offset));
+ mem = gen_frame_mem (mode, plus_constant (Pmode, stack_pointer_rtx,
+ offset));
regno2 = aarch64_next_callee_save (regno + 1, limit);
@@ -3289,8 +3269,8 @@ aarch64_save_callee_saves (machine_mode mode, HOST_WIDE_INT start_offset,
rtx mem2;
offset = start_offset + cfun->machine->frame.reg_offset[regno2];
- mem2 = gen_mem_ref (mode, plus_constant (Pmode, stack_pointer_rtx,
- offset));
+ mem2 = gen_frame_mem (mode, plus_constant (Pmode, stack_pointer_rtx,
+ offset));
insn = emit_insn (aarch64_gen_store_pair (mode, mem, reg, mem2,
reg2));
@@ -3319,8 +3299,6 @@ aarch64_restore_callee_saves (machine_mode mode,
unsigned limit, bool skip_wb, rtx *cfi_ops)
{
rtx base_rtx = stack_pointer_rtx;
- rtx (*gen_mem_ref) (machine_mode, rtx) = (frame_pointer_needed
- ? gen_frame_mem : gen_rtx_MEM);
unsigned regno;
unsigned regno2;
HOST_WIDE_INT offset;
@@ -3341,7 +3319,7 @@ aarch64_restore_callee_saves (machine_mode mode,
reg = gen_rtx_REG (mode, regno);
offset = start_offset + cfun->machine->frame.reg_offset[regno];
- mem = gen_mem_ref (mode, plus_constant (Pmode, base_rtx, offset));
+ mem = gen_frame_mem (mode, plus_constant (Pmode, base_rtx, offset));
regno2 = aarch64_next_callee_save (regno + 1, limit);
@@ -3354,7 +3332,7 @@ aarch64_restore_callee_saves (machine_mode mode,
rtx mem2;
offset = start_offset + cfun->machine->frame.reg_offset[regno2];
- mem2 = gen_mem_ref (mode, plus_constant (Pmode, base_rtx, offset));
+ mem2 = gen_frame_mem (mode, plus_constant (Pmode, base_rtx, offset));
emit_insn (aarch64_gen_load_pair (mode, reg, mem, reg2, mem2));
*cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg2, *cfi_ops);
@@ -4723,6 +4701,74 @@ aarch64_legitimize_address_displacement (rtx *disp, rtx *off, machine_mode mode)
return true;
}
+/* Return the binary representation of floating point constant VALUE in INTVAL.
+ If the value cannot be converted, return false without setting INTVAL.
+ The conversion is done in the given MODE. */
+bool
+aarch64_reinterpret_float_as_int (rtx value, unsigned HOST_WIDE_INT *intval)
+{
+
+ /* We make a general exception for 0. */
+ if (aarch64_float_const_zero_rtx_p (value))
+ {
+ *intval = 0;
+ return true;
+ }
+
+ machine_mode mode = GET_MODE (value);
+ if (GET_CODE (value) != CONST_DOUBLE
+ || !SCALAR_FLOAT_MODE_P (mode)
+ || GET_MODE_BITSIZE (mode) > HOST_BITS_PER_WIDE_INT
+ /* Only support up to DF mode. */
+ || GET_MODE_BITSIZE (mode) > GET_MODE_BITSIZE (DFmode))
+ return false;
+
+ unsigned HOST_WIDE_INT ival = 0;
+
+ long res[2];
+ real_to_target (res,
+ CONST_DOUBLE_REAL_VALUE (value),
+ REAL_MODE_FORMAT (mode));
+
+ if (mode == DFmode)
+ {
+ int order = BYTES_BIG_ENDIAN ? 1 : 0;
+ ival = zext_hwi (res[order], 32);
+ ival |= (zext_hwi (res[1 - order], 32) << 32);
+ }
+ else
+ ival = zext_hwi (res[0], 32);
+
+ *intval = ival;
+ return true;
+}
+
+/* Return TRUE if rtx X is an immediate constant that can be moved using a
+ single MOV(+MOVK) followed by an FMOV. */
+bool
+aarch64_float_const_rtx_p (rtx x)
+{
+ machine_mode mode = GET_MODE (x);
+ if (mode == VOIDmode)
+ return false;
+
+ /* Determine whether it's cheaper to write float constants as
+ mov/movk pairs over ldr/adrp pairs. */
+ unsigned HOST_WIDE_INT ival;
+
+ if (GET_CODE (x) == CONST_DOUBLE
+ && SCALAR_FLOAT_MODE_P (mode)
+ && aarch64_reinterpret_float_as_int (x, &ival))
+ {
+ machine_mode imode = mode == HFmode ? SImode : int_mode_for_mode (mode);
+ int num_instr = aarch64_internal_mov_immediate
+ (NULL_RTX, gen_int_mode (ival, imode), false, imode);
+ return num_instr < 3;
+ }
+
+ return false;
+}
+
/* Return TRUE if rtx X is immediate constant 0.0 */
bool
aarch64_float_const_zero_rtx_p (rtx x)
@@ -4735,6 +4781,49 @@ aarch64_float_const_zero_rtx_p (rtx x)
return real_equal (CONST_DOUBLE_REAL_VALUE (x), &dconst0);
}
+/* Return TRUE if rtx X is immediate constant that fits in a single
+ MOVI immediate operation. */
+bool
+aarch64_can_const_movi_rtx_p (rtx x, machine_mode mode)
+{
+ if (!TARGET_SIMD)
+ return false;
+
+ machine_mode vmode, imode;
+ unsigned HOST_WIDE_INT ival;
+
+ if (GET_CODE (x) == CONST_DOUBLE
+ && SCALAR_FLOAT_MODE_P (mode))
+ {
+ if (!aarch64_reinterpret_float_as_int (x, &ival))
+ return false;
+
+ /* We make a general exception for 0. */
+ if (aarch64_float_const_zero_rtx_p (x))
+ return true;
+
+ imode = int_mode_for_mode (mode);
+ }
+ else if (GET_CODE (x) == CONST_INT
+ && SCALAR_INT_MODE_P (mode))
+ {
+ imode = mode;
+ ival = INTVAL (x);
+ }
+ else
+ return false;
+
+ /* use a 64 bit mode for everything except for DI/DF mode, where we use
+ a 128 bit vector mode. */
+ int width = GET_MODE_BITSIZE (mode) == 64 ? 128 : 64;
+
+ vmode = aarch64_simd_container_mode (imode, width);
+ rtx v_op = aarch64_simd_gen_const_vector_dup (vmode, ival);
+
+ return aarch64_simd_valid_immediate (v_op, vmode, false, NULL);
+}
+
+
/* Return the fixed registers used for condition codes. */
static bool
@@ -5929,12 +6018,6 @@ aarch64_preferred_reload_class (rtx x, reg_class_t regclass)
return NO_REGS;
}
- /* If it's an integer immediate that MOVI can't handle, then
- FP_REGS is not an option, so we return NO_REGS instead. */
- if (CONST_INT_P (x) && reg_class_subset_p (regclass, FP_REGS)
- && !aarch64_simd_imm_scalar_p (x, GET_MODE (x)))
- return NO_REGS;
-
/* Register eliminiation can result in a request for
SP+constant->FP_REGS. We cannot support such operations which
use SP as source and an FP_REG as destination, so reject out
@@ -6884,6 +6967,25 @@ aarch64_rtx_costs (rtx x, machine_mode mode, int outer ATTRIBUTE_UNUSED,
return true;
case CONST_DOUBLE:
+
+ /* First determine number of instructions to do the move
+ as an integer constant. */
+ if (!aarch64_float_const_representable_p (x)
+ && !aarch64_can_const_movi_rtx_p (x, mode)
+ && aarch64_float_const_rtx_p (x))
+ {
+ unsigned HOST_WIDE_INT ival;
+ bool succeed = aarch64_reinterpret_float_as_int (x, &ival);
+ gcc_assert (succeed);
+
+ machine_mode imode = mode == HFmode ? SImode
+ : int_mode_for_mode (mode);
+ int ncost = aarch64_internal_mov_immediate
+ (NULL_RTX, gen_int_mode (ival, imode), false, imode);
+ *cost += COSTS_N_INSNS (ncost);
+ return true;
+ }
+
if (speed)
{
/* mov[df,sf]_aarch64. */
@@ -10193,7 +10295,7 @@ aarch64_classify_symbol (rtx x, rtx offset)
/* This is alright even in PIC code as the constant
pool reference is always PC relative and within
the same translation unit. */
- if (CONSTANT_POOL_ADDRESS_P (x))
+ if (!aarch64_pcrelative_literal_loads && CONSTANT_POOL_ADDRESS_P (x))
return SYMBOL_SMALL_ABSOLUTE;
else
return SYMBOL_FORCE_TO_MEM;
@@ -10228,18 +10330,16 @@ aarch64_legitimate_pic_operand_p (rtx x)
/* Return true if X holds either a quarter-precision or
floating-point +0.0 constant. */
static bool
-aarch64_valid_floating_const (machine_mode mode, rtx x)
+aarch64_valid_floating_const (rtx x)
{
if (!CONST_DOUBLE_P (x))
return false;
- if (aarch64_float_const_zero_rtx_p (x))
+ /* This call determines which constants can be used in mov<mode>
+ as integer moves instead of constant loads. */
+ if (aarch64_float_const_rtx_p (x))
return true;
- /* We only handle moving 0.0 to a TFmode register. */
- if (!(mode == SFmode || mode == DFmode))
- return false;
-
return aarch64_float_const_representable_p (x);
}
@@ -10251,11 +10351,15 @@ aarch64_legitimate_constant_p (machine_mode mode, rtx x)
if (TARGET_SIMD && aarch64_vect_struct_mode_p (mode))
return false;
- /* This could probably go away because
- we now decompose CONST_INTs according to expand_mov_immediate. */
+ /* For these cases we never want to use a literal load.
+ As such we have to prevent the compiler from forcing these
+ to memory. */
if ((GET_CODE (x) == CONST_VECTOR
&& aarch64_simd_valid_immediate (x, mode, false, NULL))
- || CONST_INT_P (x) || aarch64_valid_floating_const (mode, x))
+ || CONST_INT_P (x)
+ || aarch64_valid_floating_const (x)
+ || aarch64_can_const_movi_rtx_p (x, mode)
+ || aarch64_float_const_rtx_p (x))
return !targetm.cannot_force_const_mem (mode, x);
if (GET_CODE (x) == HIGH
@@ -11538,23 +11642,6 @@ aarch64_mask_from_zextract_ops (rtx width, rtx pos)
}
bool
-aarch64_simd_imm_scalar_p (rtx x, machine_mode mode ATTRIBUTE_UNUSED)
-{
- HOST_WIDE_INT imm = INTVAL (x);
- int i;
-
- for (i = 0; i < 8; i++)
- {
- unsigned int byte = imm & 0xff;
- if (byte != 0xff && byte != 0)
- return false;
- imm >>= 8;
- }
-
- return true;
-}
-
-bool
aarch64_mov_operand_p (rtx x, machine_mode mode)
{
if (GET_CODE (x) == HIGH
@@ -12945,15 +13032,28 @@ aarch64_output_simd_mov_immediate (rtx const_vector,
}
char*
-aarch64_output_scalar_simd_mov_immediate (rtx immediate,
- machine_mode mode)
+aarch64_output_scalar_simd_mov_immediate (rtx immediate, machine_mode mode)
{
+
+ /* If a floating point number was passed and we desire to use it in an
+ integer mode do the conversion to integer. */
+ if (CONST_DOUBLE_P (immediate) && GET_MODE_CLASS (mode) == MODE_INT)
+ {
+ unsigned HOST_WIDE_INT ival;
+ if (!aarch64_reinterpret_float_as_int (immediate, &ival))
+ gcc_unreachable ();
+ immediate = gen_int_mode (ival, mode);
+ }
+
machine_mode vmode;
+ /* use a 64 bit mode for everything except for DI/DF mode, where we use
+ a 128 bit vector mode. */
+ int width = GET_MODE_BITSIZE (mode) == 64 ? 128 : 64;
gcc_assert (!VECTOR_MODE_P (mode));
- vmode = aarch64_simd_container_mode (mode, 64);
+ vmode = aarch64_simd_container_mode (mode, width);
rtx v_op = aarch64_simd_gen_const_vector_dup (vmode, INTVAL (immediate));
- return aarch64_output_simd_mov_immediate (v_op, vmode, 64);
+ return aarch64_output_simd_mov_immediate (v_op, vmode, width);
}
/* Split operands into moves from op[1] + op[2] into op[0]. */
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 106cf3a5666..7f91edb5713 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -144,7 +144,8 @@ extern unsigned aarch64_architecture_version;
#define AARCH64_FL_CRC (1 << 3) /* Has CRC. */
/* ARMv8.1-A architecture extensions. */
#define AARCH64_FL_LSE (1 << 4) /* Has Large System Extensions. */
-#define AARCH64_FL_V8_1 (1 << 5) /* Has ARMv8.1-A extensions. */
+#define AARCH64_FL_RDMA (1 << 5) /* Has Round Double Multiply Add. */
+#define AARCH64_FL_V8_1 (1 << 6) /* Has ARMv8.1-A extensions. */
/* ARMv8.2-A architecture extensions. */
#define AARCH64_FL_V8_2 (1 << 8) /* Has ARMv8.2-A features. */
#define AARCH64_FL_F16 (1 << 9) /* Has ARMv8.2-A FP16 extensions. */
@@ -161,7 +162,8 @@ extern unsigned aarch64_architecture_version;
/* Architecture flags that effect instruction selection. */
#define AARCH64_FL_FOR_ARCH8 (AARCH64_FL_FPSIMD)
#define AARCH64_FL_FOR_ARCH8_1 \
- (AARCH64_FL_FOR_ARCH8 | AARCH64_FL_LSE | AARCH64_FL_CRC | AARCH64_FL_V8_1)
+ (AARCH64_FL_FOR_ARCH8 | AARCH64_FL_LSE | AARCH64_FL_CRC \
+ | AARCH64_FL_RDMA | AARCH64_FL_V8_1)
#define AARCH64_FL_FOR_ARCH8_2 \
(AARCH64_FL_FOR_ARCH8_1 | AARCH64_FL_V8_2)
#define AARCH64_FL_FOR_ARCH8_3 \
@@ -174,7 +176,7 @@ extern unsigned aarch64_architecture_version;
#define AARCH64_ISA_FP (aarch64_isa_flags & AARCH64_FL_FP)
#define AARCH64_ISA_SIMD (aarch64_isa_flags & AARCH64_FL_SIMD)
#define AARCH64_ISA_LSE (aarch64_isa_flags & AARCH64_FL_LSE)
-#define AARCH64_ISA_RDMA (aarch64_isa_flags & AARCH64_FL_V8_1)
+#define AARCH64_ISA_RDMA (aarch64_isa_flags & AARCH64_FL_RDMA)
#define AARCH64_ISA_V8_2 (aarch64_isa_flags & AARCH64_FL_V8_2)
#define AARCH64_ISA_F16 (aarch64_isa_flags & AARCH64_FL_F16)
#define AARCH64_ISA_V8_3 (aarch64_isa_flags & AARCH64_FL_V8_3)
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index f876a2b7208..64b60a903ed 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -181,6 +181,11 @@
;; will be disabled when !TARGET_FLOAT.
(define_attr "fp" "no,yes" (const_string "no"))
+;; Attribute that specifies whether or not the instruction touches half
+;; precision fp registers. When this is set to yes for an alternative,
+;; that alternative will be disabled when !TARGET_FP_F16INST.
+(define_attr "fp16" "no,yes" (const_string "no"))
+
;; Attribute that specifies whether or not the instruction touches simd
;; registers. When this is set to yes for an alternative, that alternative
;; will be disabled when !TARGET_SIMD.
@@ -194,11 +199,14 @@
;; registers when -mgeneral-regs-only is specified.
(define_attr "enabled" "no,yes"
(cond [(ior
- (and (eq_attr "fp" "yes")
- (eq (symbol_ref "TARGET_FLOAT") (const_int 0)))
- (and (eq_attr "simd" "yes")
- (eq (symbol_ref "TARGET_SIMD") (const_int 0))))
- (const_string "no")
+ (ior
+ (and (eq_attr "fp" "yes")
+ (eq (symbol_ref "TARGET_FLOAT") (const_int 0)))
+ (and (eq_attr "simd" "yes")
+ (eq (symbol_ref "TARGET_SIMD") (const_int 0))))
+ (and (eq_attr "fp16" "yes")
+ (eq (symbol_ref "TARGET_FP_F16INST") (const_int 0))))
+ (const_string "no")
] (const_string "yes")))
;; Attribute that specifies whether we are dealing with a branch to a
@@ -223,6 +231,7 @@
(include "../arm/cortex-a53.md")
(include "../arm/cortex-a57.md")
(include "../arm/exynos-m1.md")
+(include "falkor.md")
(include "thunderx.md")
(include "../arm/xgene1.md")
(include "thunderx2t99.md")
@@ -920,8 +929,8 @@
)
(define_insn_and_split "*movsi_aarch64"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=r,k,r,r,r,r,*w,m, m,r,r ,*w,r,*w")
- (match_operand:SI 1 "aarch64_mov_operand" " r,r,k,M,n,m, m,rZ,*w,Usa,Ush,rZ,w,*w"))]
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=r,k,r,r,r,r,*w,m, m,r,r ,*w, r,*w,w")
+ (match_operand:SI 1 "aarch64_mov_operand" " r,r,k,M,n,m, m,rZ,*w,Usa,Ush,rZ,w,*w,Ds"))]
"(register_operand (operands[0], SImode)
|| aarch64_reg_or_zero (operands[1], SImode))"
"@
@@ -938,8 +947,9 @@
adrp\\t%x0, %A1
fmov\\t%s0, %w1
fmov\\t%w0, %s1
- fmov\\t%s0, %s1"
- "CONST_INT_P (operands[1]) && !aarch64_move_imm (INTVAL (operands[1]), SImode)
+ fmov\\t%s0, %s1
+ * return aarch64_output_scalar_simd_mov_immediate (operands[1], SImode);"
+ "CONST_INT_P (operands[1]) && !aarch64_move_imm (INTVAL (operands[1]), SImode)
&& REG_P (operands[0]) && GP_REGNUM_P (REGNO (operands[0]))"
[(const_int 0)]
"{
@@ -947,13 +957,14 @@
DONE;
}"
[(set_attr "type" "mov_reg,mov_reg,mov_reg,mov_imm,mov_imm,load1,load1,store1,store1,\
- adr,adr,f_mcr,f_mrc,fmov")
- (set_attr "fp" "*,*,*,*,*,*,yes,*,yes,*,*,yes,yes,yes")]
+ adr,adr,f_mcr,f_mrc,fmov,neon_move")
+ (set_attr "fp" "*,*,*,*,*,*,yes,*,yes,*,*,yes,yes,yes,*")
+ (set_attr "simd" "*,*,*,*,*,*,*,*,*,*,*,*,*,*,yes")]
)
(define_insn_and_split "*movdi_aarch64"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=r,k,r,r,r,r,*w,m, m,r,r, *w,r,*w,w")
- (match_operand:DI 1 "aarch64_mov_operand" " r,r,k,N,n,m, m,rZ,*w,Usa,Ush,rZ,w,*w,Dd"))]
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=r,k,r,r,r,r,r,*w,m, m,r,r, *w,r,*w,w")
+ (match_operand:DI 1 "aarch64_mov_operand" " r,r,k,N,M,n,m, m,rZ,*w,Usa,Ush,rZ,w,*w,Dd"))]
"(register_operand (operands[0], DImode)
|| aarch64_reg_or_zero (operands[1], DImode))"
"@
@@ -961,6 +972,7 @@
mov\\t%0, %x1
mov\\t%x0, %1
mov\\t%x0, %1
+ mov\\t%w0, %1
#
ldr\\t%x0, %1
ldr\\t%d0, %1
@@ -971,7 +983,7 @@
fmov\\t%d0, %x1
fmov\\t%x0, %d1
fmov\\t%d0, %d1
- movi\\t%d0, %1"
+ * return aarch64_output_scalar_simd_mov_immediate (operands[1], DImode);"
"(CONST_INT_P (operands[1]) && !aarch64_move_imm (INTVAL (operands[1]), DImode))
&& REG_P (operands[0]) && GP_REGNUM_P (REGNO (operands[0]))"
[(const_int 0)]
@@ -979,10 +991,10 @@
aarch64_expand_mov_immediate (operands[0], operands[1]);
DONE;
}"
- [(set_attr "type" "mov_reg,mov_reg,mov_reg,mov_imm,mov_imm,load1,load1,store1,store1,\
- adr,adr,f_mcr,f_mrc,fmov,neon_move")
- (set_attr "fp" "*,*,*,*,*,*,yes,*,yes,*,*,yes,yes,yes,*")
- (set_attr "simd" "*,*,*,*,*,*,*,*,*,*,*,*,*,*,yes")]
+ [(set_attr "type" "mov_reg,mov_reg,mov_reg,mov_imm,mov_imm,mov_imm,load1,\
+ load1,store1,store1,adr,adr,f_mcr,f_mrc,fmov,neon_move")
+ (set_attr "fp" "*,*,*,*,*,*,*,yes,*,yes,*,*,yes,yes,yes,*")
+ (set_attr "simd" "*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,yes")]
)
(define_insn "insv_imm<mode>"
@@ -1062,28 +1074,31 @@
)
(define_insn "*movhf_aarch64"
- [(set (match_operand:HF 0 "nonimmediate_operand" "=w,w ,?r,w,w,m,r,m ,r")
- (match_operand:HF 1 "general_operand" "Y ,?rY, w,w,m,w,m,rY,r"))]
+ [(set (match_operand:HF 0 "nonimmediate_operand" "=w,w ,?r,w,w ,w ,w,m,r,m ,r")
+ (match_operand:HF 1 "general_operand" "Y ,?rY, w,w,Ufc,Uvi,m,w,m,rY,r"))]
"TARGET_FLOAT && (register_operand (operands[0], HFmode)
|| aarch64_reg_or_fp_zero (operands[1], HFmode))"
"@
movi\\t%0.4h, #0
- mov\\t%0.h[0], %w1
+ fmov\\t%h0, %w1
umov\\t%w0, %1.h[0]
mov\\t%0.h[0], %1.h[0]
+ fmov\\t%h0, %1
+ * return aarch64_output_scalar_simd_mov_immediate (operands[1], SImode);
ldr\\t%h0, %1
str\\t%h1, %0
ldrh\\t%w0, %1
strh\\t%w1, %0
mov\\t%w0, %w1"
- [(set_attr "type" "neon_move,neon_from_gp,neon_to_gp,neon_move,\
- f_loads,f_stores,load1,store1,mov_reg")
- (set_attr "simd" "yes,yes,yes,yes,*,*,*,*,*")]
+ [(set_attr "type" "neon_move,f_mcr,neon_to_gp,neon_move,fconsts, \
+ neon_move,f_loads,f_stores,load1,store1,mov_reg")
+ (set_attr "simd" "yes,*,yes,yes,*,yes,*,*,*,*,*")
+ (set_attr "fp16" "*,yes,*,*,yes,*,*,*,*,*,*")]
)
(define_insn "*movsf_aarch64"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=w,w ,?r,w,w ,w,m,r,m ,r")
- (match_operand:SF 1 "general_operand" "Y ,?rY, w,w,Ufc,m,w,m,rY,r"))]
+ [(set (match_operand:SF 0 "nonimmediate_operand" "=w,w ,?r,w,w ,w ,w,m,r,m ,r,r")
+ (match_operand:SF 1 "general_operand" "Y ,?rY, w,w,Ufc,Uvi,m,w,m,rY,r,M"))]
"TARGET_FLOAT && (register_operand (operands[0], SFmode)
|| aarch64_reg_or_fp_zero (operands[1], SFmode))"
"@
@@ -1092,19 +1107,22 @@
fmov\\t%w0, %s1
fmov\\t%s0, %s1
fmov\\t%s0, %1
+ * return aarch64_output_scalar_simd_mov_immediate (operands[1], SImode);
ldr\\t%s0, %1
str\\t%s1, %0
ldr\\t%w0, %1
str\\t%w1, %0
- mov\\t%w0, %w1"
- [(set_attr "type" "neon_move,f_mcr,f_mrc,fmov,fconsts,\
- f_loads,f_stores,load1,store1,mov_reg")
- (set_attr "simd" "yes,*,*,*,*,*,*,*,*,*")]
+ mov\\t%w0, %w1
+ mov\\t%w0, %1"
+ [(set_attr "type" "neon_move,f_mcr,f_mrc,fmov,fconsts,neon_move,\
+ f_loads,f_stores,load1,store1,mov_reg,\
+ fconsts")
+ (set_attr "simd" "yes,*,*,*,*,yes,*,*,*,*,*,*")]
)
(define_insn "*movdf_aarch64"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=w,w ,?r,w,w ,w,m,r,m ,r")
- (match_operand:DF 1 "general_operand" "Y ,?rY, w,w,Ufc,m,w,m,rY,r"))]
+ [(set (match_operand:DF 0 "nonimmediate_operand" "=w, w ,?r,w,w ,w ,w,m,r,m ,r,r")
+ (match_operand:DF 1 "general_operand" "Y , ?rY, w,w,Ufc,Uvi,m,w,m,rY,r,N"))]
"TARGET_FLOAT && (register_operand (operands[0], DFmode)
|| aarch64_reg_or_fp_zero (operands[1], DFmode))"
"@
@@ -1113,14 +1131,37 @@
fmov\\t%x0, %d1
fmov\\t%d0, %d1
fmov\\t%d0, %1
+ * return aarch64_output_scalar_simd_mov_immediate (operands[1], DImode);
ldr\\t%d0, %1
str\\t%d1, %0
ldr\\t%x0, %1
str\\t%x1, %0
- mov\\t%x0, %x1"
- [(set_attr "type" "neon_move,f_mcr,f_mrc,fmov,fconstd,\
- f_loadd,f_stored,load1,store1,mov_reg")
- (set_attr "simd" "yes,*,*,*,*,*,*,*,*,*")]
+ mov\\t%x0, %x1
+ mov\\t%x0, %1"
+ [(set_attr "type" "neon_move,f_mcr,f_mrc,fmov,fconstd,neon_move,\
+ f_loadd,f_stored,load1,store1,mov_reg,\
+ fconstd")
+ (set_attr "simd" "yes,*,*,*,*,yes,*,*,*,*,*,*")]
+)
+
+(define_split
+ [(set (match_operand:GPF_HF 0 "nonimmediate_operand")
+ (match_operand:GPF_HF 1 "general_operand"))]
+ "can_create_pseudo_p ()
+ && !aarch64_can_const_movi_rtx_p (operands[1], <MODE>mode)
+ && !aarch64_float_const_representable_p (operands[1])
+ && aarch64_float_const_rtx_p (operands[1])"
+ [(const_int 0)]
+ {
+ unsigned HOST_WIDE_INT ival;
+ if (!aarch64_reinterpret_float_as_int (operands[1], &ival))
+ FAIL;
+
+ rtx tmp = gen_reg_rtx (<FCVT_TARGET>mode);
+ emit_move_insn (tmp, gen_int_mode (ival, <FCVT_TARGET>mode));
+ emit_move_insn (operands[0], gen_lowpart (<MODE>mode, tmp));
+ DONE;
+ }
)
(define_insn "*movtf_aarch64"
@@ -3835,6 +3876,22 @@
[(set_attr "type" "logics_reg,logics_imm")]
)
+(define_split
+ [(set (reg:CC_NZ CC_REGNUM)
+ (compare:CC_NZ
+ (and:GPI (match_operand:GPI 0 "register_operand")
+ (match_operand:GPI 1 "aarch64_mov_imm_operand"))
+ (const_int 0)))
+ (clobber (match_operand:SI 2 "register_operand"))]
+ ""
+ [(set (match_dup 2) (match_dup 1))
+ (set (reg:CC_NZ CC_REGNUM)
+ (compare:CC_NZ
+ (and:GPI (match_dup 0)
+ (match_dup 2))
+ (const_int 0)))]
+)
+
(define_insn "*and<mode>3nr_compare0_zextract"
[(set (reg:CC_NZ CC_REGNUM)
(compare:CC_NZ
@@ -3870,6 +3927,26 @@
[(set_attr "type" "logics_shift_imm")]
)
+(define_split
+ [(set (reg:CC_NZ CC_REGNUM)
+ (compare:CC_NZ
+ (and:GPI (SHIFT:GPI
+ (match_operand:GPI 0 "register_operand")
+ (match_operand:QI 1 "aarch64_shift_imm_<mode>"))
+ (match_operand:GPI 2 "aarch64_mov_imm_operand"))
+ (const_int 0)))
+ (clobber (match_operand:SI 3 "register_operand"))]
+ ""
+ [(set (match_dup 3) (match_dup 2))
+ (set (reg:CC_NZ CC_REGNUM)
+ (compare:CC_NZ
+ (and:GPI (SHIFT:GPI
+ (match_dup 0)
+ (match_dup 1))
+ (match_dup 3))
+ (const_int 0)))]
+)
+
;; -------------------------------------------------------------------
;; Shifts
;; -------------------------------------------------------------------
@@ -5102,6 +5179,42 @@
}
)
+;; For xorsign (x, y), we want to generate:
+;;
+;; LDR d2, #1<<63
+;; AND v3.8B, v1.8B, v2.8B
+;; EOR v0.8B, v0.8B, v3.8B
+;;
+
+(define_expand "xorsign<mode>3"
+ [(match_operand:GPF 0 "register_operand")
+ (match_operand:GPF 1 "register_operand")
+ (match_operand:GPF 2 "register_operand")]
+ "TARGET_FLOAT && TARGET_SIMD"
+{
+
+ machine_mode imode = <V_cmp_result>mode;
+ rtx mask = gen_reg_rtx (imode);
+ rtx op1x = gen_reg_rtx (imode);
+ rtx op2x = gen_reg_rtx (imode);
+
+ int bits = GET_MODE_BITSIZE (<MODE>mode) - 1;
+ emit_move_insn (mask, GEN_INT (trunc_int_for_mode (HOST_WIDE_INT_M1U << bits,
+ imode)));
+
+ emit_insn (gen_and<v_cmp_result>3 (op2x, mask,
+ lowpart_subreg (imode, operands[2],
+ <MODE>mode)));
+ emit_insn (gen_xor<v_cmp_result>3 (op1x,
+ lowpart_subreg (imode, operands[1],
+ <MODE>mode),
+ op2x));
+ emit_move_insn (operands[0],
+ lowpart_subreg (<MODE>mode, op1x, imode));
+ DONE;
+}
+)
+
;; -------------------------------------------------------------------
;; Reload support
;; -------------------------------------------------------------------
diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h
index 0753da32f59..d7b30b0e5ee 100644
--- a/gcc/config/aarch64/arm_neon.h
+++ b/gcc/config/aarch64/arm_neon.h
@@ -12162,7 +12162,7 @@ vbslq_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c)
/* ARMv8.1-A instrinsics. */
#pragma GCC push_options
-#pragma GCC target ("arch=armv8.1-a")
+#pragma GCC target ("+nothing+rdma")
__extension__ extern __inline int16x4_t
__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
diff --git a/gcc/config/aarch64/constraints.md b/gcc/config/aarch64/constraints.md
index 88e840f2898..9ce3d4efaf3 100644
--- a/gcc/config/aarch64/constraints.md
+++ b/gcc/config/aarch64/constraints.md
@@ -176,6 +176,12 @@
(and (match_code "const_double")
(match_test "aarch64_float_const_representable_p (op)")))
+(define_constraint "Uvi"
+ "A floating point constant which can be used with a\
+ MOVI immediate operation."
+ (and (match_code "const_double")
+ (match_test "aarch64_can_const_movi_rtx_p (op, GET_MODE (op))")))
+
(define_constraint "Dn"
"@internal
A constraint that matches vector of immediates."
@@ -220,9 +226,17 @@
(define_constraint "Dd"
"@internal
- A constraint that matches an immediate operand valid for AdvSIMD scalar."
+ A constraint that matches an integer immediate operand valid\
+ for AdvSIMD scalar operations in DImode."
+ (and (match_code "const_int")
+ (match_test "aarch64_can_const_movi_rtx_p (op, DImode)")))
+
+(define_constraint "Ds"
+ "@internal
+ A constraint that matches an integer immediate operand valid\
+ for AdvSIMD scalar operations in SImode."
(and (match_code "const_int")
- (match_test "aarch64_simd_imm_scalar_p (op, GET_MODE (op))")))
+ (match_test "aarch64_can_const_movi_rtx_p (op, SImode)")))
(define_address_constraint "Dp"
"@internal
diff --git a/gcc/config/aarch64/cortex-a57-fma-steering.c b/gcc/config/aarch64/cortex-a57-fma-steering.c
index 6d90acdd4a2..fa8c56aab02 100644
--- a/gcc/config/aarch64/cortex-a57-fma-steering.c
+++ b/gcc/config/aarch64/cortex-a57-fma-steering.c
@@ -973,10 +973,17 @@ func_fma_steering::analyze ()
break;
}
- /* We didn't find a chain with a def for this instruction. */
- gcc_assert (i < dest_op_info->n_chains);
-
- this->analyze_fma_fmul_insn (forest, chain, head);
+ /* Due to implementation of regrename, dest register can slip away
+ from regrename's analysis. As a result, there is no chain for
+ the destination register of insn. We simply skip the insn even
+ it is a fmul/fmac instruction. This can happen when the dest
+ register is also a source register of insn and one of the below
+ conditions is satisfied:
+ 1) the source reg is setup in larger mode than this insn;
+ 2) the source reg is uninitialized;
+ 3) the source reg is passed in as parameter. */
+ if (i < dest_op_info->n_chains)
+ this->analyze_fma_fmul_insn (forest, chain, head);
}
}
free (bb_dfs_preorder);
diff --git a/gcc/config/aarch64/falkor.md b/gcc/config/aarch64/falkor.md
new file mode 100644
index 00000000000..b422ab30c44
--- /dev/null
+++ b/gcc/config/aarch64/falkor.md
@@ -0,0 +1,681 @@
+;; Falkor pipeline description
+;; Copyright (C) 2017 Free Software Foundation, Inc.
+;;
+;; This file is part of GCC.
+;;
+;; GCC is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+;;
+;; GCC is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;; General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING3. If not see
+;; <http://www.gnu.org/licenses/>.
+
+(define_automaton "falkor")
+
+;; Complex int instructions (e.g. multiply and divide) execute in the X
+;; pipeline. Simple int instructions execute in the X, Y, and Z pipelines.
+
+(define_cpu_unit "falkor_x" "falkor")
+(define_cpu_unit "falkor_y" "falkor")
+(define_cpu_unit "falkor_z" "falkor")
+
+;; Branches execute in the B pipeline or in one of the int pipelines depending
+;; on how complex it is. Simple int insns (like movz) can also execute here.
+
+(define_cpu_unit "falkor_b" "falkor")
+
+;; Vector and FP insns execute in the VX and VY pipelines.
+
+(define_automaton "falkor_vfp")
+
+(define_cpu_unit "falkor_vx" "falkor_vfp")
+(define_cpu_unit "falkor_vy" "falkor_vfp")
+
+;; Loads execute in the LD pipeline.
+;; Stores execute in the ST, SD, and VSD pipelines, for address, data, and
+;; vector data.
+
+(define_automaton "falkor_mem")
+
+(define_cpu_unit "falkor_ld" "falkor_mem")
+(define_cpu_unit "falkor_st" "falkor_mem")
+(define_cpu_unit "falkor_sd" "falkor_mem")
+(define_cpu_unit "falkor_vsd" "falkor_mem")
+
+;; The GTOV and VTOG pipelines are for general to vector reg moves, and vice
+;; versa.
+
+(define_cpu_unit "falkor_gtov" "falkor")
+(define_cpu_unit "falkor_vtog" "falkor")
+
+;; Common reservation combinations.
+
+(define_reservation "falkor_vxvy" "falkor_vx|falkor_vy")
+(define_reservation "falkor_zb" "falkor_z|falkor_b")
+(define_reservation "falkor_xyz" "falkor_x|falkor_y|falkor_z")
+(define_reservation "falkor_xyzb" "falkor_x|falkor_y|falkor_z|falkor_b")
+
+;; SIMD Floating-Point Instructions
+
+(define_insn_reservation "falkor_afp_1_vxvy" 1
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_neg_s,neon_fp_neg_d,neon_fp_abs_s,neon_fp_abs_d"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_1_vxvy_vxvy" 1
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_neg_s_q,neon_fp_neg_d_q,neon_fp_abs_s_q,neon_fp_abs_d_q"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_2_vxvy" 2
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_minmax_s,neon_fp_minmax_d,neon_fp_reduc_minmax_s,neon_fp_reduc_minmax_d,neon_fp_compare_s,neon_fp_compare_d,neon_fp_round_s,neon_fp_round_d"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_2_vxvy_vxvy" 2
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_minmax_s_q,neon_fp_minmax_d_q,neon_fp_compare_s_q,neon_fp_compare_d_q,neon_fp_round_s_q,neon_fp_round_d_q"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_3_vxvy" 3
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_reduc_minmax_s_q,neon_fp_reduc_minmax_d_q,neon_fp_abd_s,neon_fp_abd_d,neon_fp_addsub_s,neon_fp_addsub_d,neon_fp_reduc_add_s,neon_fp_reduc_add_d"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_3_vxvy_vxvy" 3
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_abd_s_q,neon_fp_abd_d_q,neon_fp_addsub_s_q,neon_fp_addsub_d_q,neon_fp_reduc_add_s_q,neon_fp_reduc_add_d_q"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_4_vxvy" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_to_int_s,neon_fp_to_int_d,neon_int_to_fp_s,neon_int_to_fp_d,neon_fp_cvt_widen_h,neon_fp_cvt_widen_s"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_4_vxvy_vxvy" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_to_int_s_q,neon_fp_to_int_d_q,neon_int_to_fp_s_q,neon_int_to_fp_d_q"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_5_vxvy_mul" 5
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_mul_s,neon_fp_mul_s_scalar"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_5_vxvy_mla" 5
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_mla_s,neon_fp_mla_s_scalar"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_5_vxvy_vxvy_mul" 5
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_mul_s_q,neon_fp_mul_s_scalar_q"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_5_vxvy_vxvy_mla" 5
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_mla_s_q,neon_fp_mla_s_scalar_q"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_6_vxvy_mul" 6
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_mul_d"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_6_vxvy_mla" 6
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_mla_d"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_6_vxvy_vxvy_mul" 6
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_mul_d_q,neon_fp_mul_d_scalar_q"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_6_vxvy_vxvy_mla" 6
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_mla_d_q,neon_fp_mla_d_scalar_q"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_4_vxvy_vxvy_vxvy" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_cvt_narrow_s_q,neon_fp_cvt_narrow_d_q"))
+ "falkor_vxvy+falkor_vxvy,falkor_vxvy")
+
+(define_insn_reservation "falkor_afp_6_vx_vy" 6
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_div_s"))
+ "falkor_vx+falkor_vy")
+
+(define_insn_reservation "falkor_afp_11_vx_vy" 11
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_div_d"))
+ "falkor_vx+falkor_vy")
+
+(define_insn_reservation "falkor_afp_6_vx_vy_vx_vy" 6
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_div_s_q"))
+ "(falkor_vx+falkor_vy),(falkor_vx+falkor_vy)")
+
+(define_insn_reservation "falkor_afp_11_vx_vy_vx_vy" 11
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_div_d_q"))
+ "(falkor_vx+falkor_vy),(falkor_vx+falkor_vy)")
+
+(define_insn_reservation "falkor_afp_12_vx_vy" 12
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_sqrt_s"))
+ "falkor_vx+falkor_vy")
+
+(define_insn_reservation "falkor_afp_22_vx_vy" 22
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_sqrt_d"))
+ "falkor_vx+falkor_vy")
+
+(define_insn_reservation "falkor_afp_12_vx_vy_vx_vy" 12
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_sqrt_s_q"))
+ "(falkor_vx+falkor_vy),(falkor_vx+falkor_vy)")
+
+(define_insn_reservation "falkor_afp_22_vx_vy_vx_vy" 22
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_sqrt_d_q"))
+ "(falkor_vx+falkor_vy),(falkor_vx+falkor_vy)")
+
+;; SIMD Integer Instructions
+
+(define_insn_reservation "falkor_ai_1_vxvy" 1
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_add,neon_reduc_add,neon_logic,neon_neg,neon_sub"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_ai_1_vxvy_vxvy" 1
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_shift_imm_long,neon_add_q,neon_reduc_add_q,neon_logic_q,neon_neg_q,neon_sub_q"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_ai_2_vxvy" 2
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_add_long,neon_sub_long,neon_add_halve,neon_sub_halve,neon_shift_imm,neon_shift_reg,neon_minmax,neon_abs,neon_compare,neon_compare_zero,neon_tst"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_ai_2_vxvy_vxvy" 2
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_add_halve_q,neon_sub_halve_q,neon_shift_imm_q,neon_shift_reg_q,neon_minmax_q,neon_abs_q,neon_compare_q,neon_compare_zero_q,neon_tst_q,neon_reduc_add_long"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_ai_3_vxvy" 3
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_shift_acc,neon_reduc_add_acc,neon_abd,neon_qadd,neon_qsub,neon_qabs,neon_qneg,neon_sat_shift_imm,neon_sat_shift_imm_narrow_q,neon_sat_shift_reg,neon_reduc_minmax"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_ai_4_vxvy" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_reduc_minmax_q"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_ai_3_vxvy_vxvy" 3
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_shift_acc_q,neon_reduc_add_acc_q,neon_abd_q,neon_abd_long,neon_qadd_q,neon_qsub_q,neon_qabs_q,neon_qneg_q,neon_sat_shift_imm_q,neon_sat_shift_reg_q"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_ai_4_vxvy_mul" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_mul_b,neon_mul_h,neon_mul_s,neon_mul_h_scalar,neon_mul_s_scalar,neon_sat_mul_b,neon_sat_mul_h,neon_sat_mul_s,neon_sat_mul_h_scalar,neon_sat_mul_s_scalar"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_ai_4_vxvy_mla" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_mla_b,neon_mla_h,neon_mla_s,neon_mla_h_scalar,neon_mla_s_scalar"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_ai_4_vxvy_vxvy_mul" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_mul_b_q,neon_mul_h_q,neon_mul_s_q,neon_mul_h_scalar_q,neon_mul_s_scalar_q,neon_sat_mul_b_q,neon_sat_mul_h_q,neon_sat_mul_s_q,neon_mul_b_long,neon_mul_h_long,neon_mul_s_long,neon_mul_d_long,neon_mul_h_scalar_long,neon_mul_s_scalar_long,neon_sat_mul_b_long,neon_sat_mul_h_long,neon_sat_mul_s_long,neon_sat_mul_h_scalar_q,neon_sat_mul_s_scalar_q,neon_sat_mul_h_scalar_long,neon_sat_mul_s_scalar_long"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_ai_4_vxvy_vxvy_mla" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_mla_b_q,neon_mla_h_q,neon_mla_s_q,neon_mla_h_scalar_q,neon_mla_s_scalar_q,neon_mla_b_long,neon_mla_h_long,neon_mla_s_long,neon_mla_h_scalar_long,neon_mla_s_scalar_long,neon_sat_mla_b_long,neon_sat_mla_h_long,neon_sat_mla_s_long,neon_sat_mla_h_scalar_long,neon_sat_mla_s_scalar_long"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_ai_4_vxvy_vxvy" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_add_halve_narrow_q,neon_sub_halve_narrow_q,neon_arith_acc"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_2_ai_vxvy_vxvy_vxvy_vxvy" 2
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_add_widen,neon_sub_widen"))
+ "(falkor_vxvy+falkor_vxvy),(falkor_vxvy+falkor_vxvy)")
+
+(define_insn_reservation "falkor_4_ai_vxvy_vxvy_vxvy_vxvy" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_arith_acc_q"))
+ "(falkor_vxvy+falkor_vxvy),(falkor_vxvy+falkor_vxvy)")
+
+;; SIMD Load Instructions
+
+(define_insn_reservation "falkor_ald_4_ld" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_load1_1reg,neon_load1_1reg_q,neon_load1_all_lanes,neon_load2_one_lane"))
+ "falkor_ld")
+
+(define_insn_reservation "falkor_ald_4_ld_none" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_load1_2reg,neon_load2_2reg,neon_load2_all_lanes"))
+ "falkor_ld")
+
+(define_insn_reservation "falkor_ald_4_ld_ld" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_load1_2reg_q,neon_load2_2reg_q,neon_load2_all_lanes_q,neon_load3_one_lane,neon_load4_one_lane,neon_ldp,neon_ldp_q"))
+ "falkor_ld,falkor_ld")
+
+(define_insn_reservation "falkor_ald_4_ld_ld_none" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_load1_3reg,neon_load3_3reg,neon_load3_all_lanes"))
+ "falkor_ld,falkor_ld")
+
+(define_insn_reservation "falkor_ald_4_ld_ld_ld" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_load1_3reg_q,neon_load3_3reg_q,neon_load3_all_lanes_q"))
+ "falkor_ld,falkor_ld,falkor_ld")
+
+(define_insn_reservation "falkor_ald_4_ld_ld_none_none" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_load1_4reg,neon_load4_4reg"))
+ "falkor_ld,falkor_ld")
+
+(define_insn_reservation "falkor_ald_4_ld_ld_ld_ld" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_load1_4reg_q,neon_load4_4reg_q,neon_load4_all_lanes,neon_load4_all_lanes_q"))
+ "falkor_ld,falkor_ld,falkor_ld,falkor_ld")
+
+;; Arithmetic and Logical Instructions
+
+(define_insn_reservation "falkor_alu_1_xyz" 1
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "alus_sreg,alus_imm,alus_shift_imm,csel,adc_reg,alu_imm,alu_sreg,alu_shift_imm,alu_ext,alus_ext,logic_imm,logic_reg,logic_shift_imm,logics_imm,logics_reg,logics_shift_imm,mov_reg"))
+ "falkor_xyz")
+
+;; SIMD Miscellaneous Instructions
+
+;; No separate type for ins and dup. But this is correct for both.
+
+(define_insn_reservation "falkor_am_3_gtov" 3
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_from_gp"))
+ "falkor_gtov")
+
+;; No separate type for ins and dup. Assuming dup is more common. Ins is
+;; gtov+vxvy and latency of 4.
+
+(define_insn_reservation "falkor_am_3_gtov_gtov" 3
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_from_gp_q"))
+ "falkor_gtov,falkor_gtov")
+
+;; neon_to_gp_q is used for 32-bit ARM instructions that move 64-bits of data
+;; so no use needed here.
+
+(define_insn_reservation "falkor_am_3_vtog" 3
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_to_gp"))
+ "falkor_vtog")
+
+(define_insn_reservation "falkor_am_1_vxvy" 1
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_bsl,neon_dup,neon_ext,neon_ins,neon_ins_q,neon_move,neon_rev,neon_tbl1,neon_permute,neon_shift_imm_narrow_q"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_am_1_vxvy_vxvy" 1
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_bsl_q,neon_dup_q,neon_ext_q,neon_move_q,neon_rev_q,neon_tbl1_q,neon_permute_q"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_am_2_vxvy" 2
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_cls,neon_cnt,neon_rbit"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_am_4_vxvy_vxvy" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_cls_q,neon_cnt_q,neon_rbit_q,neon_tbl2"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_am_3_vxvy" 3
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_recpe_s,neon_fp_recpe_d,neon_fp_rsqrte_s,neon_fp_rsqrte_d,neon_fp_recpx_s,neon_fp_recpx_d"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_am_3_vxvy_vxvy" 3
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_recpe_s_q,neon_fp_recpe_d_q,neon_fp_rsqrte_s_q,neon_fp_rsqrte_d_q"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_am_5_vxvy" 5
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_recps_s"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_am_5_vxvy_vxvy" 5
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_recps_s_q"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_am_6_vxvy" 6
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_recps_d,neon_fp_rsqrts_d"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_am_6_vxvy_vxvy" 6
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_fp_recps_d_q,neon_fp_rsqrts_d_q"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_am_5_vxvy_vxvy_vxvy" 5
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_tbl2_q,neon_tbl3"))
+ "(falkor_vxvy+falkor_vxvy),falkor_vxvy")
+
+(define_insn_reservation "falkor_am_6_vxvy_vxvy_vxvy_vxvy" 6
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_tbl3_q,neon_tbl4"))
+ "(falkor_vxvy+falkor_vxvy),(falkor_vxvy+falkor_vxvy)")
+
+(define_insn_reservation "falkor_am_7_vxvy_vxvy_vxvy_vxvy_vxvy" 7
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_tbl4_q"))
+ "(falkor_vxvy+falkor_vxvy),(falkor_vxvy+falkor_vxvy),falkor_vxvy")
+
+;; SIMD Store Instructions
+
+;; ??? stp is neon_store1_2reg in aarch64.md, but neon_stp in aarch64-simd.md.
+;; Similarly with ldp.
+
+(define_insn_reservation "falkor_ast_st_vsd" 0
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_store1_1reg,neon_store1_1reg_q,neon_store1_one_lane,neon_store1_one_lane_q,neon_store1_2reg,neon_store2_2reg,neon_store2_one_lane,neon_store2_one_lane_q,neon_stp"))
+ "falkor_st+falkor_vsd")
+
+(define_insn_reservation "falkor_as_0_st_vsd_st_vsd" 0
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_store1_2reg_q,neon_store1_3reg,neon_store1_4reg,neon_store2_2reg_q,neon_store3_3reg,neon_store4_4reg,neon_store3_one_lane,neon_store3_one_lane_q,neon_store4_one_lane,neon_store4_one_lane_q,neon_stp_q"))
+ "(falkor_st+falkor_vsd),(falkor_st+falkor_vsd)")
+
+(define_insn_reservation "falkor_as_0_st_vsd_st_vsd_st_vsd" 0
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_store1_3reg_q,neon_store3_3reg_q"))
+ "(falkor_st+falkor_vsd),(falkor_st+falkor_vsd),(falkor_st+falkor_vsd)")
+
+(define_insn_reservation "falkor_as_0_st_vsd_st_vsd_st_vsd_st_vsd" 0
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "neon_store1_4reg_q,neon_store4_4reg_q"))
+ "(falkor_st+falkor_vsd),(falkor_st+falkor_vsd),(falkor_st+falkor_vsd),(falkor_st+falkor_vsd)")
+
+;; Branch Instructions
+
+(define_insn_reservation "falkor_branch_0_zb" 0
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "branch"))
+ "falkor_zb")
+
+(define_insn_reservation "falkor_call_0_xyzb" 0
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "call"))
+ "falkor_xyzb")
+
+;; Cryptography Extensions
+
+(define_insn_reservation "falkor_cry_1_vxvy" 1
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "crypto_sha1_fast"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_cry_2_vxvy" 2
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "crypto_aesmc"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_cry_2_vxvy_vxvy" 2
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "crypto_sha1_xor,crypto_sha256_fast,crypto_pmull"))
+ "falkor_vxvy+falkor_vxvy")
+
+(define_insn_reservation "falkor_cry_4_vy_vx" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "crypto_sha1_slow"))
+ "falkor_vy+falkor_vx")
+
+(define_insn_reservation "falkor_cry_6_vy_vx" 6
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "crypto_sha256_slow"))
+ "falkor_vy+falkor_vx")
+
+(define_insn_reservation "falkor_cry_3_vxvy_vxvy" 3
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "crypto_aese"))
+ "falkor_vxvy+falkor_vxvy")
+
+;; FP Load Instructions
+
+(define_insn_reservation "falkor_fld_4_ld" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "f_loads,f_loadd"))
+ "falkor_ld")
+
+;; No separate FP store section, these are found in the SIMD store section.
+
+(define_insn_reservation "falkor_fld_0_st_vsd" 0
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "f_stores,f_stored"))
+ "falkor_st+falkor_vsd")
+
+;; FP Data Processing Instructions
+
+(define_insn_reservation "falkor_fpdt_0_vxvy" 0
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "fcmps,fcmpd,fccmps,fccmpd"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_fpdt_5_vtog" 5
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "f_cvtf2i"))
+ "falkor_vtog")
+
+(define_insn_reservation "falkor_fpdt_1_vxvy" 1
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "ffariths,ffarithd,fcsel"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_fpdt_2_vxvy" 2
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "f_minmaxd,f_minmaxs,f_rintd,f_rints"))
+ "falkor_vxvy")
+
+;; Scalar FP ABD is handled same as vector FP ABD.
+
+(define_insn_reservation "falkor_fpdt_3_vxvy" 3
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "faddd,fadds"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_fpdt_4_vxvy" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "f_cvt"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_fpdt_5_vxvy_mul" 5
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "fmuls"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_fpdt_5_vxvy_mla" 5
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "fmacs,ffmas"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_fpdt_6_vxvy_mul" 6
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "fmuld"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_fpdt_6_vxvy_mla" 6
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "fmacd,ffmad"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_fpdt_6_vx_vy" 6
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "fdivs"))
+ "falkor_vx+falkor_vy")
+
+(define_insn_reservation "falkor_fpdt_11_vx_vy" 11
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "fdivd"))
+ "falkor_vx+falkor_vy")
+
+(define_insn_reservation "falkor_fpdt_12_vx_vy" 12
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "fsqrts"))
+ "falkor_vxvy")
+
+(define_insn_reservation "falkor_fpdt_22_vx_vy" 22
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "fsqrtd"))
+ "falkor_vxvy")
+
+;; FP Miscellaneous Instructions
+
+(define_insn_reservation "falkor_fpmsc_3_vtog" 3
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "f_mrc"))
+ "falkor_vtog")
+
+(define_insn_reservation "falkor_fpmsc_3_gtov" 3
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "f_mcr"))
+ "falkor_gtov")
+
+(define_insn_reservation "falkor_fpmsc_1_vxvy" 1
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "fmov,fconsts,fconstd"))
+ "falkor_vxvy")
+
+;; No separate type for float-to-fixed conversions. Same type as
+;; float-to-int conversions. They schedule the same though, so no problem.
+
+(define_insn_reservation "falkor_fpmsc_6_gtov" 6
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "f_cvti2f"))
+ "falkor_gtov")
+
+;; Load Instructions
+
+(define_insn_reservation "falkor_ld_3_ld" 3
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "load1,load2"))
+ "falkor_ld")
+
+;; Miscellaneous Data-Processing Instructions
+
+(define_insn_reservation "falkor_misc_1_xyz" 1
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "bfx,bfm,extend,rotate_imm,shift_imm"))
+ "falkor_xyz")
+
+(define_insn_reservation "falkor_misc_2_x" 2
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "crc"))
+ "falkor_x")
+
+(define_insn_reservation "falkor_misc_2_xyz" 2
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "clz,rbit,rev"))
+ "falkor_xyz")
+
+;; Divide and Multiply Instructions
+
+(define_insn_reservation "falkor_muldiv_4_x_mul" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "mul"))
+ "falkor_x")
+
+(define_insn_reservation "falkor_muldiv_4_x_mla" 4
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "mla,smlal,umlal"))
+ "falkor_x")
+
+(define_insn_reservation "falkor_muldiv_5_x_mul" 5
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "smull,umull"))
+ "falkor_x")
+
+(define_insn_reservation "falkor_md_11_x_z" 11
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "sdiv,udiv"))
+ "falkor_x+falkor_z")
+
+;; Move and Shift Instructions
+
+(define_insn_reservation "falkor_mvs_1_xyz" 1
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "mov_imm,shift_reg"))
+ "falkor_xyz")
+
+(define_insn_reservation "falkor_mvs_1_xyzb" 1
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "adr"))
+ "falkor_xyzb")
+
+;; Other Instructions
+
+;; Block is for instruction scheduling blockage insns in RTL. There are no
+;; hardware instructions emitted for them, so don't use any resources.
+
+(define_insn_reservation "falkor_other_0_nothing" 0
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "no_insn,trap,block"))
+ "nothing")
+
+(define_insn_reservation "falkor_other_2_z" 2
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "mrs"))
+ "falkor_z")
+
+;; Assume multiple instructions use all pipes.
+
+(define_insn_reservation "falkor_extra" 1
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "multiple"))
+ "falkor_x+falkor_y+falkor_z+falkor_b+falkor_vx+falkor_vy+falkor_ld+falkor_st+falkor_sd+falkor_vsd+falkor_gtov+falkor_vtog")
+
+;; Store Instructions
+
+;; No use of store_rel, store3, or store4 in aarch64.
+
+(define_insn_reservation "falkor_st_0_st_sd" 0
+ (and (eq_attr "tune" "falkor")
+ (eq_attr "type" "store1,store2"))
+ "falkor_st+falkor_sd")
+
+;; Muliply bypasses.
+
+;; 1 cycle latency (0 bubble) for an integer mul or mac feeding into a mac.
+
+(define_bypass 1
+ "falkor_ai_4_vxvy_mul,falkor_ai_4_vxvy_mla,falkor_ai_4_vxvy_vxvy_mul,falkor_ai_4_vxvy_vxvy_mla,falkor_muldiv_4_x_mul,falkor_muldiv_4_x_mla,falkor_muldiv_5_x_mul"
+ "falkor_ai_4_vxvy_mla,falkor_ai_4_vxvy_vxvy_mla,falkor_muldiv_4_x_mla")
+
+;; 3 cycle latency (2 bubbles) for an FP mul or mac feeding into a mac.
+
+(define_bypass 3
+ "falkor_afp_5_vxvy_mul,falkor_afp_5_vxvy_mla,falkor_afp_5_vxvy_vxvy_mul,falkor_afp_5_vxvy_vxvy_mla,falkor_afp_6_vxvy_mul,falkor_afp_6_vxvy_mla,falkor_afp_6_vxvy_vxvy_mul,falkor_afp_6_vxvy_vxvy_mla,falkor_fpdt_5_vxvy_mul,falkor_fpdt_5_vxvy_mla,falkor_fpdt_6_vxvy_mul,falkor_fpdt_6_vxvy_mla"
+ "falkor_afp_5_vxvy_mla,falkor_afp_5_vxvy_vxvy_mla,falkor_afp_6_vxvy_mla,falkor_afp_6_vxvy_vxvy_mla,falkor_fpdt_5_vxvy_mla,falkor_fpdt_6_vxvy_mla")
diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md
index 43be7fd3611..cceb57525c7 100644
--- a/gcc/config/aarch64/iterators.md
+++ b/gcc/config/aarch64/iterators.md
@@ -44,6 +44,9 @@
;; Iterator for all scalar floating point modes (HF, SF, DF)
(define_mode_iterator GPF_F16 [(HF "AARCH64_ISA_F16") SF DF])
+;; Iterator for all scalar floating point modes (HF, SF, DF)
+(define_mode_iterator GPF_HF [HF SF DF])
+
;; Iterator for all scalar floating point modes (HF, SF, DF and TF)
(define_mode_iterator GPF_TF_F16 [HF SF DF TF])
@@ -520,6 +523,17 @@
(SI "SI") (HI "HI")
(QI "QI")])
+;; Define element mode for each vector mode (lower case).
+(define_mode_attr Vel [(V8QI "qi") (V16QI "qi")
+ (V4HI "hi") (V8HI "hi")
+ (V2SI "si") (V4SI "si")
+ (DI "di") (V2DI "di")
+ (V4HF "hf") (V8HF "hf")
+ (V2SF "sf") (V4SF "sf")
+ (V2DF "df") (DF "df")
+ (SI "si") (HI "hi")
+ (QI "qi")])
+
;; 64-bit container modes the inner or scalar source mode.
(define_mode_attr VCOND [(HI "V4HI") (SI "V2SI")
(V4HI "V4HI") (V8HI "V4HI")
diff --git a/gcc/config/aarch64/predicates.md b/gcc/config/aarch64/predicates.md
index ad8a43c2b2c..11243c4ce00 100644
--- a/gcc/config/aarch64/predicates.md
+++ b/gcc/config/aarch64/predicates.md
@@ -114,6 +114,10 @@
(ior (match_operand 0 "register_operand")
(match_operand 0 "aarch64_logical_immediate")))
+(define_predicate "aarch64_mov_imm_operand"
+ (and (match_code "const_int")
+ (match_test "aarch64_move_imm (INTVAL (op), mode)")))
+
(define_predicate "aarch64_logical_and_immediate"
(and (match_code "const_int")
(match_test "aarch64_and_bitmask_imm (INTVAL (op), mode)")))
diff --git a/gcc/config/aarch64/rtems.h b/gcc/config/aarch64/rtems.h
index b48e28afda0..07c5679d5c1 100644
--- a/gcc/config/aarch64/rtems.h
+++ b/gcc/config/aarch64/rtems.h
@@ -1,20 +1,25 @@
/* Definitions for RTEMS based AARCH64 system.
Copyright (C) 2016-2017 Free Software Foundation, Inc.
-
+
This file is part of GCC.
-
+
GCC is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published
by the Free Software Foundation; either version 3, or (at your
option) any later version.
-
+
GCC is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3. If not see
+
+ 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/>. */
#define HAS_INIT_SECTION
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index 9f5dae29054..e13c5f9fc57 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -26,6 +26,8 @@ along with GCC; see the file COPYING3. If not see
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "memmodel.h"
#include "gimple.h"
#include "df.h"
@@ -9456,6 +9458,25 @@ And in the noreturn case:
if (current_function_has_exception_handlers ())
alpha_pad_function_end ();
+
+ /* CALL_PAL that implements trap insn, updates program counter to point
+ after the insn. In case trap is the last insn in the function,
+ emit NOP to guarantee that PC remains inside function boundaries.
+ This workaround is needed to get reliable backtraces. */
+
+ rtx_insn *insn = prev_active_insn (get_last_insn ());
+
+ if (insn && NONJUMP_INSN_P (insn))
+ {
+ rtx pat = PATTERN (insn);
+ if (GET_CODE (pat) == PARALLEL)
+ {
+ rtx vec = XVECEXP (pat, 0, 0);
+ if (GET_CODE (vec) == TRAP_IF
+ && XEXP (vec, 0) == const1_rtx)
+ emit_insn_after (gen_unop (), insn);
+ }
+ }
}
static void
diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
index be5f1bd2003..057f8756fba 100644
--- a/gcc/config/arc/arc.c
+++ b/gcc/config/arc/arc.c
@@ -40,6 +40,7 @@ along with GCC; see the file COPYING3. If not see
#include "df.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "optabs.h"
#include "regs.h"
#include "emit-rtl.h"
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 139ab701a95..fa3e2fa6c76 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -32,6 +32,7 @@
#include "df.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "optabs.h"
#include "regs.h"
#include "emit-rtl.h"
@@ -3489,6 +3490,8 @@ arm_option_override (void)
}
else
{
+ warning (0, "option %<-mstructure-size-boundary%> is deprecated");
+
if (arm_structure_size_boundary != 8
&& arm_structure_size_boundary != 32
&& !(ARM_DOUBLEWORD_ALIGN && arm_structure_size_boundary == 64))
@@ -31222,12 +31225,15 @@ namespace selftest {
inconsistencies in the option extensions at present (extensions
that duplicate others but aren't marked as aliases). Furthermore,
for correct canonicalization later options must never be a subset
- of an earlier option. */
+ of an earlier option. Any extension should also only specify other
+ feature bits and never an architecture bit. The architecture is inferred
+ from the declaration of the extension. */
static void
arm_test_cpu_arch_data (void)
{
const arch_option *arch;
const cpu_option *cpu;
+ auto_sbitmap target_isa (isa_num_bits);
auto_sbitmap isa1 (isa_num_bits);
auto_sbitmap isa2 (isa_num_bits);
@@ -31238,6 +31244,8 @@ arm_test_cpu_arch_data (void)
if (arch->common.extensions == NULL)
continue;
+ arm_initialize_isa (target_isa, arch->common.isa_bits);
+
for (ext1 = arch->common.extensions; ext1->name != NULL; ++ext1)
{
if (ext1->alias)
@@ -31250,7 +31258,13 @@ arm_test_cpu_arch_data (void)
continue;
arm_initialize_isa (isa2, ext2->isa_bits);
+ /* If the option is a subset of the parent option, it doesn't
+ add anything and so isn't useful. */
ASSERT_TRUE (!bitmap_subset_p (isa2, isa1));
+
+ /* If the extension specifies any architectural bits then
+ disallow it. Extensions should only specify feature bits. */
+ ASSERT_TRUE (!bitmap_intersect_p (isa2, target_isa));
}
}
}
@@ -31262,6 +31276,8 @@ arm_test_cpu_arch_data (void)
if (cpu->common.extensions == NULL)
continue;
+ arm_initialize_isa (target_isa, arch->common.isa_bits);
+
for (ext1 = cpu->common.extensions; ext1->name != NULL; ++ext1)
{
if (ext1->alias)
@@ -31274,7 +31290,13 @@ arm_test_cpu_arch_data (void)
continue;
arm_initialize_isa (isa2, ext2->isa_bits);
+ /* If the option is a subset of the parent option, it doesn't
+ add anything and so isn't useful. */
ASSERT_TRUE (!bitmap_subset_p (isa2, isa1));
+
+ /* If the extension specifies any architectural bits then
+ disallow it. Extensions should only specify feature bits. */
+ ASSERT_TRUE (!bitmap_intersect_p (isa2, target_isa));
}
}
}
diff --git a/gcc/config/arm/arm.opt b/gcc/config/arm/arm.opt
index b6c707b1afd..6060516dd40 100644
--- a/gcc/config/arm/arm.opt
+++ b/gcc/config/arm/arm.opt
@@ -192,7 +192,7 @@ Target RejectNegative Alias(mfloat-abi=, soft) Undocumented
mstructure-size-boundary=
Target RejectNegative Joined UInteger Var(arm_structure_size_boundary) Init(DEFAULT_STRUCTURE_SIZE_BOUNDARY)
-Specify the minimum bit alignment of structures.
+Specify the minimum bit alignment of structures. (Deprecated).
mthumb
Target Report RejectNegative Negative(marm) Mask(THUMB) Save
diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md
index 48992879a8e..7acbaf1bb40 100644
--- a/gcc/config/arm/iterators.md
+++ b/gcc/config/arm/iterators.md
@@ -444,6 +444,14 @@
(V2SF "SF") (V4SF "SF")
(DI "DI") (V2DI "DI")])
+;; As above but in lower case.
+(define_mode_attr V_elem_l [(V8QI "qi") (V16QI "qi")
+ (V4HI "hi") (V8HI "hi")
+ (V4HF "hf") (V8HF "hf")
+ (V2SI "si") (V4SI "si")
+ (V2SF "sf") (V4SF "sf")
+ (DI "di") (V2DI "di")])
+
;; Element modes for vector extraction, padded up to register size.
(define_mode_attr V_ext [(V8QI "SI") (V16QI "SI")
diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md
index 235c46da1a1..45b3bd18052 100644
--- a/gcc/config/arm/neon.md
+++ b/gcc/config/arm/neon.md
@@ -412,7 +412,7 @@
DONE;
})
-(define_insn "vec_extract<mode>"
+(define_insn "vec_extract<mode><V_elem_l>"
[(set (match_operand:<V_elem> 0 "nonimmediate_operand" "=Um,r")
(vec_select:<V_elem>
(match_operand:VD_LANE 1 "s_register_operand" "w,w")
@@ -434,7 +434,7 @@
[(set_attr "type" "neon_store1_one_lane<q>,neon_to_gp<q>")]
)
-(define_insn "vec_extract<mode>"
+(define_insn "vec_extract<mode><V_elem_l>"
[(set (match_operand:<V_elem> 0 "nonimmediate_operand" "=Um,r")
(vec_select:<V_elem>
(match_operand:VQ2 1 "s_register_operand" "w,w")
@@ -460,7 +460,7 @@
[(set_attr "type" "neon_store1_one_lane<q>,neon_to_gp<q>")]
)
-(define_insn "vec_extractv2di"
+(define_insn "vec_extractv2didi"
[(set (match_operand:DI 0 "nonimmediate_operand" "=Um,r")
(vec_select:DI
(match_operand:V2DI 1 "s_register_operand" "w,w")
@@ -479,7 +479,7 @@
[(set_attr "type" "neon_store1_one_lane_q,neon_to_gp_q")]
)
-(define_expand "vec_init<mode>"
+(define_expand "vec_init<mode><V_elem_l>"
[(match_operand:VDQ 0 "s_register_operand" "")
(match_operand 1 "" "")]
"TARGET_NEON"
@@ -1581,7 +1581,7 @@
neon_pairwise_reduce (vec, operands[1], <MODE>mode,
&gen_neon_vpadd_internal<mode>);
/* The same result is actually computed into every element. */
- emit_insn (gen_vec_extract<mode> (operands[0], vec, const0_rtx));
+ emit_insn (gen_vec_extract<mode><V_elem_l> (operands[0], vec, const0_rtx));
DONE;
})
@@ -1607,7 +1607,7 @@
rtx vec = gen_reg_rtx (V2DImode);
emit_insn (gen_arm_reduc_plus_internal_v2di (vec, operands[1]));
- emit_insn (gen_vec_extractv2di (operands[0], vec, const0_rtx));
+ emit_insn (gen_vec_extractv2didi (operands[0], vec, const0_rtx));
DONE;
})
@@ -1631,7 +1631,7 @@
neon_pairwise_reduce (vec, operands[1], <MODE>mode,
&gen_neon_vpsmin<mode>);
/* The result is computed into every element of the vector. */
- emit_insn (gen_vec_extract<mode> (operands[0], vec, const0_rtx));
+ emit_insn (gen_vec_extract<mode><V_elem_l> (operands[0], vec, const0_rtx));
DONE;
})
@@ -1658,7 +1658,7 @@
neon_pairwise_reduce (vec, operands[1], <MODE>mode,
&gen_neon_vpsmax<mode>);
/* The result is computed into every element of the vector. */
- emit_insn (gen_vec_extract<mode> (operands[0], vec, const0_rtx));
+ emit_insn (gen_vec_extract<mode><V_elem_l> (operands[0], vec, const0_rtx));
DONE;
})
@@ -1685,7 +1685,7 @@
neon_pairwise_reduce (vec, operands[1], <MODE>mode,
&gen_neon_vpumin<mode>);
/* The result is computed into every element of the vector. */
- emit_insn (gen_vec_extract<mode> (operands[0], vec, const0_rtx));
+ emit_insn (gen_vec_extract<mode><V_elem_l> (operands[0], vec, const0_rtx));
DONE;
})
@@ -1711,7 +1711,7 @@
neon_pairwise_reduce (vec, operands[1], <MODE>mode,
&gen_neon_vpumax<mode>);
/* The result is computed into every element of the vector. */
- emit_insn (gen_vec_extract<mode> (operands[0], vec, const0_rtx));
+ emit_insn (gen_vec_extract<mode><V_elem_l> (operands[0], vec, const0_rtx));
DONE;
})
@@ -3272,7 +3272,8 @@
}
if (GET_MODE_UNIT_BITSIZE (<MODE>mode) == 32)
- emit_insn (gen_vec_extract<mode> (operands[0], operands[1], operands[2]));
+ emit_insn (gen_vec_extract<mode><V_elem_l> (operands[0], operands[1],
+ operands[2]));
else
emit_insn (gen_neon_vget_lane<mode>_sext_internal (operands[0],
operands[1],
@@ -3301,7 +3302,8 @@
}
if (GET_MODE_UNIT_BITSIZE (<MODE>mode) == 32)
- emit_insn (gen_vec_extract<mode> (operands[0], operands[1], operands[2]));
+ emit_insn (gen_vec_extract<mode><V_elem_l> (operands[0], operands[1],
+ operands[2]));
else
emit_insn (gen_neon_vget_lane<mode>_zext_internal (operands[0],
operands[1],
diff --git a/gcc/config/arm/parsecpu.awk b/gcc/config/arm/parsecpu.awk
index 9d01e2cf992..070d193b338 100644
--- a/gcc/config/arm/parsecpu.awk
+++ b/gcc/config/arm/parsecpu.awk
@@ -223,10 +223,39 @@ function gen_comm_data () {
if (arch_opt_remove[feats[1],feats[m]] == "true") {
fatal("cannot remove features from architecture specs")
}
- print " " arch_opt_isa[feats[1],feats[m]] ","
+ # The isa_features array that is being initialized here has a length
+ # of max isa_bit_num, which is the last entry in the enum.
+ # Logically this means that the number of features is implicitly
+ # never more than the number of feature bits we have. This is only
+ # true if we don't emit duplicates here. So keep track of which
+ # options we have already emitted so we don't emit them twice.
+ nopts = split (arch_opt_isa[feats[1],feats[m]], opts, ",")
+ for (i = 1; i <= nopts; i++) {
+ if (! (opts[i] in seen)) {
+ print " " opts[i] ","
+ seen[opts[i]]
+ }
+ }
+ }
+ if (cpus[n] in cpu_fpu) {
+ nopts = split (fpu_isa[cpu_fpu[cpus[n]]], opts, ",")
+ for (i = 1; i <= nopts; i++) {
+ if (! (opts[i] in seen)) {
+ print " " opts[i] ","
+ seen[opts[i]]
+ }
+ }
+ }
+ if (cpus[n] in cpu_isa) {
+ nopts = split (cpu_isa[cpus[n]], opts, ",")
+ for (i = 1; i <= nopts; i++) {
+ if (! (opts[i] in seen)) {
+ print " " opts[i] ","
+ seen[opts[i]]
+ }
+ }
}
- if (cpus[n] in cpu_fpu) print " " fpu_isa[cpu_fpu[cpus[n]]] ","
- if (cpus[n] in cpu_isa) print " " cpu_isa[cpus[n]] ","
+ delete seen
print " isa_nobit"
print " }"
print " },"
diff --git a/gcc/config/arm/rtems.h b/gcc/config/arm/rtems.h
index b34bbe8a063..77eb32c1d20 100644
--- a/gcc/config/arm/rtems.h
+++ b/gcc/config/arm/rtems.h
@@ -1,20 +1,25 @@
/* Definitions for RTEMS based ARM systems using EABI.
Copyright (C) 2011-2017 Free Software Foundation, Inc.
-
+
This file is part of GCC.
-
+
GCC is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published
by the Free Software Foundation; either version 3, or (at your
option) any later version.
-
+
GCC is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3. If not see
+
+ 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/>. */
#define HAS_INIT_SECTION
diff --git a/gcc/config/arm/t-vxworks b/gcc/config/arm/t-vxworks
index 093d7fae88b..0a3840ba8fe 100644
--- a/gcc/config/arm/t-vxworks
+++ b/gcc/config/arm/t-vxworks
@@ -16,9 +16,7 @@
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
-MULTILIB_OPTIONS = \
- mrtp fPIC \
- t4/t4be/t4t/t4tbe/t5/t5be/t5t/t5tbe/tstrongarm/txscale/txscalebe
-MULTILIB_MATCHES = fPIC=fpic
-# Don't build -fPIC multilibs for kernel or Thumb code.
-MULTILIB_EXCEPTIONS = fPIC* mrtp/fPIC/*t[45]t*
+MULTILIB_OPTIONS = mrtp fPIC
+
+# -fPIC alone is not supported, only together with -mrtp
+MULTILIB_EXCEPTIONS = fPIC
diff --git a/gcc/config/arm/vxworks.h b/gcc/config/arm/vxworks.h
index f20324f144d..59f6282a0ea 100644
--- a/gcc/config/arm/vxworks.h
+++ b/gcc/config/arm/vxworks.h
@@ -26,7 +26,15 @@ 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/>. */
+/* TARGET_OS_CPP_BUILTINS, down to BPABI if defined. */
+#if defined (TARGET_BPABI_CPP_BUILTINS)
+#define MAYBE_TARGET_BPABI_CPP_BUILTINS TARGET_BPABI_CPP_BUILTINS
+#else
+#define MAYBE_TARGET_BPABI_CPP_BUILTINS()
+#endif
+
+#undef TARGET_OS_CPP_BUILTINS
#define TARGET_OS_CPP_BUILTINS() \
do { \
if (TARGET_BIG_END) \
@@ -36,8 +44,29 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
\
if (arm_arch_xscale) \
builtin_define ("CPU=XSCALE"); \
+ else if (arm_arch7) \
+ { \
+ if (!arm_arch_notm) \
+ builtin_define ("CPU=ARMARCH7M"); \
+ else if (TARGET_THUMB) \
+ builtin_define ("CPU=ARMARCH7_T2"); \
+ else \
+ builtin_define ("CPU=ARMARCH7"); \
+ } \
+ else if (arm_arch6) \
+ { \
+ if (TARGET_THUMB) \
+ builtin_define ("CPU=ARMARCH6_T"); \
+ else \
+ builtin_define ("CPU=ARMARCH6"); \
+ } \
else if (arm_arch5) \
- builtin_define ("CPU=ARMARCH5"); \
+ { \
+ if (TARGET_THUMB) \
+ builtin_define ("CPU=ARMARCH5_T"); \
+ else \
+ builtin_define ("CPU=ARMARCH5"); \
+ } \
else if (arm_arch4) \
{ \
if (TARGET_THUMB) \
@@ -46,6 +75,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
builtin_define ("CPU=ARMARCH4"); \
} \
VXWORKS_OS_CPP_BUILTINS (); \
+ MAYBE_TARGET_BPABI_CPP_BUILTINS (); \
} while (0)
#undef SUBTARGET_OVERRIDE_OPTIONS
@@ -55,27 +85,32 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#undef SUBTARGET_CPP_SPEC
#define SUBTARGET_CPP_SPEC "-D__ELF__" VXWORKS_ADDITIONAL_CPP_SPEC
+/* .text.hot and .text.unlikely sections are badly handled by the
+ VxWorks kernel mode loader for ARM style exceptions. */
+
+#if ARM_UNWIND_INFO
+#define EXTRA_CC1_SPEC "%{!mrtp:-fno-reorder-functions}"
+#else
+#define EXTRA_CC1_SPEC
+#endif
+
#undef CC1_SPEC
-#define CC1_SPEC \
-"%{tstrongarm:-mlittle-endian -mcpu=strongarm ; \
- t4: -mlittle-endian -march=armv4 ; \
- t4be: -mbig-endian -march=armv4 ; \
- t4t: -mthumb -mthumb-interwork -mlittle-endian -march=armv4t ; \
- t4tbe: -mthumb -mthumb-interwork -mbig-endian -march=armv4t ; \
- t5: -mlittle-endian -march=armv5 ; \
- t5be: -mbig-endian -march=armv5 ; \
- t5t: -mthumb -mthumb-interwork -mlittle-endian -march=armv5 ; \
- t5tbe: -mthumb -mthumb-interwork -mbig-endian -march=armv5 ; \
- txscale: -mlittle-endian -mcpu=xscale ; \
- txscalebe: -mbig-endian -mcpu=xscale ; \
- : -march=armv4}"
-
-/* Pass -EB for big-endian targets. */
-#define VXWORKS_ENDIAN_SPEC \
- "%{mbig-endian|t4be|t4tbe|t5be|t5tbe|txscalebe:-EB}"
+#define CC1_SPEC "" EXTRA_CC1_SPEC
+
+/* Translate an explicit -mbig-endian as an explicit -EB to assembler
+ and linker, and pass abi options matching the target expectations
+ or command-line requests. */
+#define VXWORKS_ENDIAN_SPEC "%{mbig-endian:-EB}"
+
+#if defined (TARGET_BPABI_CPP_BUILTINS)
+#define MAYBE_ASM_ABI_SPEC \
+ "%{mabi=apcs-gnu|mabi=atpcs:-meabi=gnu;:-meabi=5}" TARGET_FIX_V4BX_SPEC
+#else
+#define MAYBE_ASM_ABI_SPEC
+#endif
#undef SUBTARGET_EXTRA_ASM_SPEC
-#define SUBTARGET_EXTRA_ASM_SPEC VXWORKS_ENDIAN_SPEC
+#define SUBTARGET_EXTRA_ASM_SPEC MAYBE_ASM_ABI_SPEC " " VXWORKS_ENDIAN_SPEC
#undef LINK_SPEC
#define LINK_SPEC VXWORKS_LINK_SPEC " " VXWORKS_ENDIAN_SPEC
@@ -89,6 +124,14 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#undef ENDFILE_SPEC
#define ENDFILE_SPEC VXWORKS_ENDFILE_SPEC
+/* For exceptions, pre VX7 uses DWARF2 info, VX7 uses ARM unwinding. */
+#undef DWARF2_UNWIND_INFO
+#define DWARF2_UNWIND_INFO (!TARGET_VXWORKS7)
+
+#undef ARM_TARGET2_DWARF_FORMAT
+#define ARM_TARGET2_DWARF_FORMAT \
+ (TARGET_VXWORKS_RTP ? DW_EH_PE_pcrel : DW_EH_PE_absptr)
+
/* There is no default multilib. */
#undef MULTILIB_DEFAULTS
diff --git a/gcc/config/avr/avr-log.c b/gcc/config/avr/avr-log.c
index 1cd7b028c06..aacaed04ef1 100644
--- a/gcc/config/avr/avr-log.c
+++ b/gcc/config/avr/avr-log.c
@@ -146,7 +146,13 @@ avr_log_vadump (FILE *file, const char *caller, va_list ap)
}
case 'T':
- print_node_brief (file, "", va_arg (ap, tree), 3);
+ {
+ tree t = va_arg (ap, tree);
+ if (NULL_TREE == t)
+ fprintf (file, "<NULL-TREE>");
+ else
+ print_node_brief (file, "", t, 3);
+ }
break;
case 'd':
diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
index 1f333ccc1b2..e453bfb6814 100644
--- a/gcc/config/avr/avr.c
+++ b/gcc/config/avr/avr.c
@@ -26,6 +26,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "cgraph.h"
#include "c-family/c-common.h"
#include "cfghooks.h"
diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c
index 9fe90fc37b4..f04fe874777 100644
--- a/gcc/config/bfin/bfin.c
+++ b/gcc/config/bfin/bfin.c
@@ -25,6 +25,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "cfghooks.h"
#include "df.h"
#include "memmodel.h"
diff --git a/gcc/config/bfin/rtems.h b/gcc/config/bfin/rtems.h
index 440e886ffff..ac314f2911e 100644
--- a/gcc/config/bfin/rtems.h
+++ b/gcc/config/bfin/rtems.h
@@ -2,21 +2,26 @@
Copyright (C) 2006-2017 Free Software Foundation, Inc.
Contributed by Ralf Corsépius (ralf.corsepius@rtems.org).
-This file is part of GCC.
+ 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 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.
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
+ 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/>. */
/* Target OS preprocessor built-ins. */
#define TARGET_OS_CPP_BUILTINS() \
diff --git a/gcc/config/c6x/c6x.c b/gcc/config/c6x/c6x.c
index 4529fd44aae..a7083c12898 100644
--- a/gcc/config/c6x/c6x.c
+++ b/gcc/config/c6x/c6x.c
@@ -32,6 +32,7 @@
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "optabs.h"
#include "regs.h"
#include "emit-rtl.h"
diff --git a/gcc/config/cr16/cr16.c b/gcc/config/cr16/cr16.c
index 93edd232af2..ab6ef7adf1d 100644
--- a/gcc/config/cr16/cr16.c
+++ b/gcc/config/cr16/cr16.c
@@ -25,6 +25,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "df.h"
#include "memmodel.h"
#include "tm_p.h"
diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c
index 8c134a6bc8b..b57881ac04e 100644
--- a/gcc/config/cris/cris.c
+++ b/gcc/config/cris/cris.c
@@ -25,6 +25,8 @@ along with GCC; see the file COPYING3. If not see
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "cfghooks.h"
#include "df.h"
#include "memmodel.h"
diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c
index 9a8cf31d400..949db25c650 100644
--- a/gcc/config/darwin.c
+++ b/gcc/config/darwin.c
@@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "insn-config.h"
#include "emit-rtl.h"
#include "cgraph.h"
diff --git a/gcc/config/epiphany/epiphany.c b/gcc/config/epiphany/epiphany.c
index b9ec0f40d12..4e27557d3ce 100644
--- a/gcc/config/epiphany/epiphany.c
+++ b/gcc/config/epiphany/epiphany.c
@@ -29,6 +29,7 @@ along with GCC; see the file COPYING3. If not see
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "optabs.h"
#include "emit-rtl.h"
#include "recog.h"
diff --git a/gcc/config/fr30/fr30.c b/gcc/config/fr30/fr30.c
index 42bec9f733c..d83b2f31daa 100644
--- a/gcc/config/fr30/fr30.c
+++ b/gcc/config/fr30/fr30.c
@@ -27,6 +27,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "df.h"
#include "memmodel.h"
#include "emit-rtl.h"
diff --git a/gcc/config/frv/frv.c b/gcc/config/frv/frv.c
index c571d63f2c6..1cdbaa81c8d 100644
--- a/gcc/config/frv/frv.c
+++ b/gcc/config/frv/frv.c
@@ -28,6 +28,7 @@ along with GCC; see the file COPYING3. If not see
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "optabs.h"
#include "regs.h"
#include "emit-rtl.h"
diff --git a/gcc/config/ft32/ft32.c b/gcc/config/ft32/ft32.c
index db0365e92c1..78c5edc8f09 100644
--- a/gcc/config/ft32/ft32.c
+++ b/gcc/config/ft32/ft32.c
@@ -25,6 +25,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "df.h"
#include "memmodel.h"
#include "tm_p.h"
diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h
index 2787a3d16be..de605b0c466 100644
--- a/gcc/config/gnu-user.h
+++ b/gcc/config/gnu-user.h
@@ -50,19 +50,28 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#if defined HAVE_LD_PIE
#define GNU_USER_TARGET_STARTFILE_SPEC \
- "%{!shared: %{pg|p|profile:gcrt1.o%s;: \
- %{" PIE_SPEC ":Scrt1.o%s} %{" NO_PIE_SPEC ":crt1.o%s}}} \
- crti.o%s %{static:crtbeginT.o%s;: %{shared:crtbeginS.o%s} \
- %{" PIE_SPEC ":crtbeginS.o%s} \
- %{" NO_PIE_SPEC ":crtbegin.o%s}} \
+ "%{shared:; \
+ pg|p|profile:gcrt1.o%s; \
+ static:crt1.o%s; \
+ " PIE_SPEC ":Scrt1.o%s; \
+ :crt1.o%s} \
+ crti.o%s \
+ %{static:crtbeginT.o%s; \
+ shared|" PIE_SPEC ":crtbeginS.o%s; \
+ :crtbegin.o%s} \
%{fvtable-verify=none:%s; \
fvtable-verify=preinit:vtv_start_preinit.o%s; \
fvtable-verify=std:vtv_start.o%s} \
" CRTOFFLOADBEGIN
#else
#define GNU_USER_TARGET_STARTFILE_SPEC \
- "%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \
- crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \
+ "%{shared:; \
+ pg|p|profile:gcrt1.o%s; \
+ :crt1.o%s} \
+ crti.o%s \
+ %{static:crtbeginT.o%s; \
+ shared|pie:crtbeginS.o%s; \
+ :crtbegin.o%s} \
%{fvtable-verify=none:%s; \
fvtable-verify=preinit:vtv_start_preinit.o%s; \
fvtable-verify=std:vtv_start.o%s} \
@@ -82,15 +91,20 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
"%{fvtable-verify=none:%s; \
fvtable-verify=preinit:vtv_end_preinit.o%s; \
fvtable-verify=std:vtv_end.o%s} \
- %{shared:crtendS.o%s;: %{" PIE_SPEC ":crtendS.o%s} \
- %{" NO_PIE_SPEC ":crtend.o%s}} crtn.o%s \
+ %{static:crtend.o%s; \
+ shared|" PIE_SPEC ":crtendS.o%s; \
+ :crtend.o%s} \
+ crtn.o%s \
" CRTOFFLOADEND
#else
#define GNU_USER_TARGET_ENDFILE_SPEC \
"%{fvtable-verify=none:%s; \
fvtable-verify=preinit:vtv_end_preinit.o%s; \
fvtable-verify=std:vtv_end.o%s} \
- %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s \
+ %{static:crtend.o%s; \
+ shared|pie:crtendS.o%s; \
+ :crtend.o%s} \
+ crtn.o%s \
" CRTOFFLOADEND
#endif
#undef ENDFILE_SPEC
diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c
index acdededeccc..0e0bb57768d 100644
--- a/gcc/config/h8300/h8300.c
+++ b/gcc/config/h8300/h8300.c
@@ -30,6 +30,7 @@ along with GCC; see the file COPYING3. If not see
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "optabs.h"
#include "regs.h"
#include "emit-rtl.h"
diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md
index f94e274358b..98c05c9ebab 100644
--- a/gcc/config/i386/constraints.md
+++ b/gcc/config/i386/constraints.md
@@ -138,19 +138,19 @@
(define_register_constraint "Yd"
"TARGET_INTER_UNIT_MOVES_TO_VEC
- ? (TARGET_AVX512BW
+ ? (TARGET_AVX512DQ
? ALL_SSE_REGS
: (TARGET_SSE4_1 ? SSE_REGS : NO_REGS))
: NO_REGS"
- "@internal Any EVEX encodable SSE register (@code{%xmm0-%xmm31}) for AVX512BW target or any SSE register for SSE4_1 target, when inter-unit moves to vector registers are enabled.")
+ "@internal Any EVEX encodable SSE register (@code{%xmm0-%xmm31}) for AVX512DQ target or any SSE register for SSE4_1 target, when inter-unit moves to vector registers are enabled.")
(define_register_constraint "Ye"
"TARGET_INTER_UNIT_MOVES_FROM_VEC
- ? (TARGET_AVX512BW
+ ? (TARGET_AVX512DQ
? ALL_SSE_REGS
: (TARGET_SSE4_1 ? SSE_REGS : NO_REGS))
: NO_REGS"
- "@internal Any EVEX encodable SSE register (@code{%xmm0-%xmm31}) for AVX512BW target or any SSE register for SSE4_1 target, when inter-unit moves from vector registers are enabled.")
+ "@internal Any EVEX encodable SSE register (@code{%xmm0-%xmm31}) for AVX512DQ target or any SSE register for SSE4_1 target, when inter-unit moves from vector registers are enabled.")
(define_register_constraint "Ym"
"TARGET_MMX && TARGET_INTER_UNIT_MOVES_TO_VEC ? MMX_REGS : NO_REGS"
diff --git a/gcc/config/i386/cygming.opt b/gcc/config/i386/cygming.opt
index 2d7c7d2b674..abe59321040 100644
--- a/gcc/config/i386/cygming.opt
+++ b/gcc/config/i386/cygming.opt
@@ -50,6 +50,10 @@ muse-libstdc-wrappers
Target Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)})
Compile code that relies on Cygwin DLL wrappers to support C++ operator new/delete replacement.
+fset-stack-executable
+Common Report Var(flag_setstackexecutable) Init(1) Optimization
+For nested functions on stack executable permission is set.
+
posix
Driver
diff --git a/gcc/config/i386/cygwin.h b/gcc/config/i386/cygwin.h
index a4683b4662e..7e34bb799c3 100644
--- a/gcc/config/i386/cygwin.h
+++ b/gcc/config/i386/cygwin.h
@@ -153,3 +153,7 @@ along with GCC; see the file COPYING3. If not see
#endif
#define LIBGCC_SONAME "cyggcc_s" LIBGCC_EH_EXTN "-1.dll"
+/* Make stack executable to avoid DEP problems with trampolines. */
+#define HAVE_ENABLE_EXECUTE_STACK
+#undef CHECK_EXECUTE_STACK_ENABLED
+#define CHECK_EXECUTE_STACK_ENABLED flag_setstackexecutable
diff --git a/gcc/config/i386/gstabs.h b/gcc/config/i386/gstabs.h
deleted file mode 100644
index e9a621871e3..00000000000
--- a/gcc/config/i386/gstabs.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* We do not want to output SDB debugging information. */
-
-#undef SDB_DEBUGGING_INFO
-
-/* We want to output DBX debugging information. */
-
-#define DBX_DEBUGGING_INFO 1
diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h
index bf8a0492592..2c15ba8505c 100644
--- a/gcc/config/i386/i386-protos.h
+++ b/gcc/config/i386/i386-protos.h
@@ -201,6 +201,8 @@ extern void ix86_expand_truncdf_32 (rtx, rtx);
extern void ix86_expand_vecop_qihi (enum rtx_code, rtx, rtx, rtx);
+extern rtx ix86_split_stack_guard (void);
+
#ifdef TREE_CODE
extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree, int);
#endif /* TREE_CODE */
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index eac76815287..b04321a8d40 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -94,6 +94,7 @@ static rtx legitimize_pe_coff_extern_decl (rtx, bool);
static rtx legitimize_pe_coff_symbol (rtx, bool);
static void ix86_print_operand_address_as (FILE *, rtx, addr_space_t, bool);
static bool ix86_save_reg (unsigned int, bool, bool);
+static bool ix86_function_naked (const_tree);
#ifndef CHECK_STACK_LIMIT
#define CHECK_STACK_LIMIT (-1)
@@ -2491,9 +2492,7 @@ public:
unsigned last_reg = m->call_ms2sysv_extra_regs + MIN_REGS - 1;
gcc_assert (m->call_ms2sysv_extra_regs <= MAX_EXTRA_REGS);
- return m_regs[last_reg].offset
- + (m->call_ms2sysv_pad_out ? 8 : 0)
- + STUB_INDEX_OFFSET;
+ return m_regs[last_reg].offset + STUB_INDEX_OFFSET;
}
/* Returns the offset for the base pointer used by the stub. */
@@ -6284,6 +6283,12 @@ ix86_option_override_internal (bool main_args_p,
opts->x_ix86_isa_flags
|= OPTION_MASK_ISA_LZCNT & ~opts->x_ix86_isa_flags_explicit;
+ /* Disable BMI, BMI2 and TBM instructions for -m16. */
+ if (TARGET_16BIT_P(opts->x_ix86_isa_flags))
+ opts->x_ix86_isa_flags
+ &= ~((OPTION_MASK_ISA_BMI | OPTION_MASK_ISA_BMI2 | OPTION_MASK_ISA_TBM)
+ & ~opts->x_ix86_isa_flags_explicit);
+
/* Validate -mpreferred-stack-boundary= value or default it to
PREFERRED_STACK_BOUNDARY_DEFAULT. */
ix86_preferred_stack_boundary = PREFERRED_STACK_BOUNDARY_DEFAULT;
@@ -6657,6 +6662,69 @@ ix86_option_override_internal (bool main_args_p,
opts->x_ix86_stack_protector_guard
= TARGET_HAS_BIONIC ? SSP_GLOBAL : SSP_TLS;
+#ifdef TARGET_THREAD_SSP_OFFSET
+ ix86_stack_protector_guard_offset = TARGET_THREAD_SSP_OFFSET;
+#endif
+
+ if (global_options_set.x_ix86_stack_protector_guard_offset_str)
+ {
+ char *endp;
+ const char *str = ix86_stack_protector_guard_offset_str;
+
+ errno = 0;
+ int64_t offset;
+
+#if defined(INT64_T_IS_LONG)
+ offset = strtol (str, &endp, 0);
+#else
+ offset = strtoll (str, &endp, 0);
+#endif
+
+ if (!*str || *endp || errno)
+ error ("%qs is not a valid number "
+ "in -mstack-protector-guard-offset=", str);
+
+ if (!IN_RANGE (offset, HOST_WIDE_INT_C (-0x80000000),
+ HOST_WIDE_INT_C (0x7fffffff)))
+ error ("%qs is not a valid offset "
+ "in -mstack-protector-guard-offset=", str);
+
+ ix86_stack_protector_guard_offset = offset;
+ }
+
+ ix86_stack_protector_guard_reg = DEFAULT_TLS_SEG_REG;
+
+ /* The kernel uses a different segment register for performance
+ reasons; a system call would not have to trash the userspace
+ segment register, which would be expensive. */
+ if (ix86_cmodel == CM_KERNEL)
+ ix86_stack_protector_guard_reg = ADDR_SPACE_SEG_GS;
+
+ if (global_options_set.x_ix86_stack_protector_guard_reg_str)
+ {
+ const char *str = ix86_stack_protector_guard_reg_str;
+ addr_space_t seg = ADDR_SPACE_GENERIC;
+
+ /* Discard optional register prefix. */
+ if (str[0] == '%')
+ str++;
+
+ if (strlen (str) == 2 && str[1] == 's')
+ {
+ if (str[0] == 'f')
+ seg = ADDR_SPACE_SEG_FS;
+ else if (str[0] == 'g')
+ seg = ADDR_SPACE_SEG_GS;
+ }
+
+ if (seg == ADDR_SPACE_GENERIC)
+ error ("%qs is not a valid base register "
+ "in -mstack-protector-guard-reg=",
+ ix86_stack_protector_guard_reg_str);
+
+ ix86_stack_protector_guard_reg = seg;
+ }
+
/* Handle -mmemcpy-strategy= and -mmemset-strategy= */
if (opts->x_ix86_tune_memcpy_strategy)
{
@@ -7516,6 +7584,10 @@ ix86_set_func_type (tree fndecl)
if (lookup_attribute ("interrupt",
TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
{
+ if (ix86_function_naked (fndecl))
+ error_at (DECL_SOURCE_LOCATION (fndecl),
+ "interrupt and naked attributes are not compatible");
+
int nargs = 0;
for (tree arg = DECL_ARGUMENTS (fndecl);
arg;
@@ -7923,6 +7995,9 @@ ix86_function_ok_for_sibcall (tree decl, tree exp)
rtx a, b;
bool bind_global = decl && !targetm.binds_local_p (decl);
+ if (ix86_function_naked (current_function_decl))
+ return false;
+
/* Sibling call isn't OK if there are no caller-saved registers
since all registers must be preserved before return. */
if (cfun->machine->no_caller_saved_registers)
@@ -8742,6 +8817,15 @@ ix86_function_ms_hook_prologue (const_tree fn)
return false;
}
+static bool
+ix86_function_naked (const_tree fn)
+{
+ if (fn && lookup_attribute ("naked", DECL_ATTRIBUTES (fn)))
+ return true;
+
+ return false;
+}
+
/* Write the extra assembler code needed to declare a function properly. */
void
@@ -8771,16 +8855,15 @@ ix86_asm_output_function_label (FILE *asm_out_file, const char *fname,
if (TARGET_64BIT)
{
/* leaq [%rsp + 0], %rsp */
- asm_fprintf (asm_out_file, ASM_BYTE
- "0x48, 0x8d, 0xa4, 0x24, 0x00, 0x00, 0x00, 0x00\n");
+ fputs (ASM_BYTE "0x48, 0x8d, 0xa4, 0x24, 0x00, 0x00, 0x00, 0x00\n",
+ asm_out_file);
}
else
{
/* movl.s %edi, %edi
push %ebp
movl.s %esp, %ebp */
- asm_fprintf (asm_out_file, ASM_BYTE
- "0x8b, 0xff, 0x55, 0x8b, 0xec\n");
+ fputs (ASM_BYTE "0x8b, 0xff, 0x55, 0x8b, 0xec\n", asm_out_file);
}
}
}
@@ -10416,25 +10499,22 @@ ix86_function_arg (cumulative_args_t cum_v, machine_mode omode,
{
/* This is the pointer argument. */
gcc_assert (TYPE_MODE (type) == Pmode);
- if (cfun->machine->func_type == TYPE_INTERRUPT)
- /* -WORD(AP) in the current frame in interrupt handler. */
- arg = plus_constant (Pmode, arg_pointer_rtx,
- -UNITS_PER_WORD);
- else
- /* (AP) in the current frame in exception handler. */
- arg = arg_pointer_rtx;
+ /* It is at -WORD(AP) in the current frame in interrupt and
+ exception handlers. */
+ arg = plus_constant (Pmode, arg_pointer_rtx, -UNITS_PER_WORD);
}
else
{
gcc_assert (cfun->machine->func_type == TYPE_EXCEPTION
&& TREE_CODE (type) == INTEGER_TYPE
&& TYPE_MODE (type) == word_mode);
- /* The integer argument is the error code at -WORD(AP) in
- the current frame in exception handler. */
+ /* The error code is the word-mode integer argument at
+ -2 * WORD(AP) in the current frame of the exception
+ handler. */
arg = gen_rtx_MEM (word_mode,
plus_constant (Pmode,
arg_pointer_rtx,
- -UNITS_PER_WORD));
+ -2 * UNITS_PER_WORD));
}
return arg;
}
@@ -12247,6 +12327,9 @@ ix86_can_use_return_insn_p (void)
{
struct ix86_frame frame;
+ if (ix86_function_naked (current_function_decl))
+ return false;
+
/* Don't use `ret' instruction in interrupt handler. */
if (! reload_completed
|| frame_pointer_needed
@@ -12843,13 +12926,12 @@ ix86_compute_frame_layout (void)
{
unsigned count = xlogue_layout::count_stub_managed_regs ();
m->call_ms2sysv_extra_regs = count - xlogue_layout::MIN_REGS;
+ m->call_ms2sysv_pad_in = 0;
}
}
frame->nregs = ix86_nsaved_regs ();
frame->nsseregs = ix86_nsaved_sseregs ();
- m->call_ms2sysv_pad_in = 0;
- m->call_ms2sysv_pad_out = 0;
/* 64-bit MS ABI seem to require stack alignment to be always 16,
except for function prologues, leaf functions and when the defult
@@ -12909,8 +12991,8 @@ ix86_compute_frame_layout (void)
the registers need to be saved before allocating the frame. */
&& flag_stack_check != STATIC_BUILTIN_STACK_CHECK);
- /* Skip return address. */
- offset = UNITS_PER_WORD;
+ /* Skip return address and error code in exception handler. */
+ offset = INCOMING_FRAME_SP_OFFSET;
/* Skip pushed static chain. */
if (ix86_static_chain_on_stack)
@@ -12951,16 +13033,7 @@ ix86_compute_frame_layout (void)
gcc_assert (!frame->nsseregs);
m->call_ms2sysv_pad_in = !!(offset & UNITS_PER_WORD);
-
- /* Select an appropriate layout for incoming stack offset. */
- const struct xlogue_layout &xlogue = xlogue_layout::get_instance ();
-
- if ((offset + xlogue.get_stack_space_used ()) & UNITS_PER_WORD)
- m->call_ms2sysv_pad_out = 1;
-
- offset += xlogue.get_stack_space_used ();
- gcc_assert (!(offset & 0xf));
- frame->outlined_save_offset = offset;
+ offset += xlogue_layout::get_instance ().get_stack_space_used ();
}
/* Align and set SSE register save area. */
@@ -12988,6 +13061,7 @@ ix86_compute_frame_layout (void)
/* Align start of frame for local function. */
if (stack_realign_fp
+ || m->call_ms2sysv
|| offset != frame->sse_reg_save_offset
|| size != 0
|| !crtl->is_leaf
@@ -13096,24 +13170,26 @@ choose_baseaddr_len (unsigned int regno, HOST_WIDE_INT offset)
return len;
}
-/* Determine if the stack pointer is valid for accessing the cfa_offset. */
+/* Determine if the stack pointer is valid for accessing the cfa_offset.
+ The register is saved at CFA - CFA_OFFSET. */
static inline bool
sp_valid_at (HOST_WIDE_INT cfa_offset)
{
const struct machine_frame_state &fs = cfun->machine->fs;
return fs.sp_valid && !(fs.sp_realigned
- && cfa_offset < fs.sp_realigned_offset);
+ && cfa_offset <= fs.sp_realigned_offset);
}
-/* Determine if the frame pointer is valid for accessing the cfa_offset. */
+/* Determine if the frame pointer is valid for accessing the cfa_offset.
+ The register is saved at CFA - CFA_OFFSET. */
static inline bool
fp_valid_at (HOST_WIDE_INT cfa_offset)
{
const struct machine_frame_state &fs = cfun->machine->fs;
return fs.fp_valid && !(fs.sp_valid && fs.sp_realigned
- && cfa_offset >= fs.sp_realigned_offset);
+ && cfa_offset > fs.sp_realigned_offset);
}
/* Choose a base register based upon alignment requested, speed and/or
@@ -13588,8 +13664,7 @@ ix86_minimum_incoming_stack_boundary (bool sibcall)
{
unsigned int incoming_stack_boundary;
- /* Stack of interrupt handler is aligned to 128 bits in 64bit
- mode. */
+ /* Stack of interrupt handler is aligned to 128 bits in 64bit mode. */
if (cfun->machine->func_type != TYPE_NORMAL)
incoming_stack_boundary = TARGET_64BIT ? 128 : MIN_STACK_BOUNDARY;
/* Prefer the one specified at command line. */
@@ -14104,10 +14179,11 @@ output_probe_stack_range (rtx reg, rtx end)
return "";
}
-/* Finalize stack_realign_needed flag, which will guide prologue/epilogue
- to be generated in correct form. */
+/* Finalize stack_realign_needed and frame_pointer_needed flags, which
+ will guide prologue/epilogue to be generated in correct form. */
+
static void
-ix86_finalize_stack_realign_flags (void)
+ix86_finalize_stack_frame_flags (void)
{
/* Check if stack realign is really needed after reload, and
stores result in cfun */
@@ -14130,13 +14206,13 @@ ix86_finalize_stack_realign_flags (void)
}
/* If the only reason for frame_pointer_needed is that we conservatively
- assumed stack realignment might be needed, but in the end nothing that
- needed the stack alignment had been spilled, clear frame_pointer_needed
- and say we don't need stack realignment. */
- if (stack_realign
+ assumed stack realignment might be needed or -fno-omit-frame-pointer
+ is used, but in the end nothing that needed the stack alignment had
+ been spilled nor stack access, clear frame_pointer_needed and say we
+ don't need stack realignment. */
+ if ((stack_realign || !flag_omit_frame_pointer)
&& frame_pointer_needed
&& crtl->is_leaf
- && flag_omit_frame_pointer
&& crtl->sp_is_unchanging
&& !ix86_current_function_calls_tls_descriptor
&& !crtl->accesses_prior_frames
@@ -14324,7 +14400,10 @@ ix86_expand_prologue (void)
bool sse_registers_saved;
rtx static_chain = NULL_RTX;
- ix86_finalize_stack_realign_flags ();
+ if (ix86_function_naked (current_function_decl))
+ return;
+
+ ix86_finalize_stack_frame_flags ();
/* DRAP should not coexist with stack_realign_fp */
gcc_assert (!(crtl->drap_reg && stack_realign_fp));
@@ -15181,7 +15260,14 @@ ix86_expand_epilogue (int style)
bool using_drap;
bool restore_stub_is_tail = false;
- ix86_finalize_stack_realign_flags ();
+ if (ix86_function_naked (current_function_decl))
+ {
+ /* The program should not reach this point. */
+ emit_insn (gen_ud2 ());
+ return;
+ }
+
+ ix86_finalize_stack_frame_flags ();
frame = m->frame;
m->fs.sp_realigned = stack_realign_fp;
@@ -15214,8 +15300,9 @@ ix86_expand_epilogue (int style)
m->fs.red_zone_offset = 0;
if (ix86_using_red_zone () && crtl->args.pops_args < 65536)
{
- /* The red-zone begins below the return address. */
- m->fs.red_zone_offset = RED_ZONE_SIZE + UNITS_PER_WORD;
+ /* The red-zone begins below return address and error code in
+ exception handler. */
+ m->fs.red_zone_offset = RED_ZONE_SIZE + INCOMING_FRAME_SP_OFFSET;
/* When the register save area is in the aligned portion of
the stack, determine the maximum runtime displacement that
@@ -15510,18 +15597,7 @@ ix86_expand_epilogue (int style)
}
if (cfun->machine->func_type != TYPE_NORMAL)
- {
- /* Return with the "IRET" instruction from interrupt handler.
- Pop the 'ERROR_CODE' off the stack before the 'IRET'
- instruction in exception handler. */
- if (cfun->machine->func_type == TYPE_EXCEPTION)
- {
- rtx r = plus_constant (Pmode, stack_pointer_rtx,
- UNITS_PER_WORD);
- emit_insn (gen_rtx_SET (stack_pointer_rtx, r));
- }
- emit_jump_insn (gen_interrupt_return ());
- }
+ emit_jump_insn (gen_interrupt_return ());
else if (crtl->args.pops_args && crtl->args.size)
{
rtx popc = GEN_INT (crtl->args.pops_args);
@@ -15709,6 +15785,30 @@ static GTY(()) rtx split_stack_fn;
static GTY(()) rtx split_stack_fn_large;
+/* Return location of the stack guard value in the TLS block. */
+
+rtx
+ix86_split_stack_guard (void)
+{
+ int offset;
+ addr_space_t as = DEFAULT_TLS_SEG_REG;
+ rtx r;
+
+ gcc_assert (flag_split_stack);
+
+#ifdef TARGET_THREAD_SPLIT_STACK_OFFSET
+ offset = TARGET_THREAD_SPLIT_STACK_OFFSET;
+#else
+ gcc_unreachable ();
+#endif
+
+ r = GEN_INT (offset);
+ r = gen_const_mem (Pmode, r);
+ set_mem_addr_space (r, as);
+
+ return r;
+}
+
/* Handle -fsplit-stack. These are the first instructions in the
function, even before the regular prologue. */
@@ -15726,7 +15826,7 @@ ix86_expand_split_stack_prologue (void)
gcc_assert (flag_split_stack && reload_completed);
- ix86_finalize_stack_realign_flags ();
+ ix86_finalize_stack_frame_flags ();
frame = cfun->machine->frame;
allocate = frame.stack_pointer_offset - INCOMING_FRAME_SP_OFFSET;
@@ -15740,10 +15840,8 @@ ix86_expand_split_stack_prologue (void)
us SPLIT_STACK_AVAILABLE bytes, so if we need less than that we
can compare directly. Otherwise we need to do an addition. */
- limit = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, const0_rtx),
- UNSPEC_STACK_CHECK);
- limit = gen_rtx_CONST (Pmode, limit);
- limit = gen_rtx_MEM (Pmode, limit);
+ limit = ix86_split_stack_guard ();
+
if (allocate < SPLIT_STACK_AVAILABLE)
current = stack_pointer_rtx;
else
@@ -16181,9 +16279,9 @@ ix86_decompose_address (rtx addr, struct ix86_address *out)
/* Allow arg pointer and stack pointer as index if there is not scaling. */
if (base_reg && index_reg && scale == 1
- && (index_reg == arg_pointer_rtx
- || index_reg == frame_pointer_rtx
- || (REG_P (index_reg) && REGNO (index_reg) == STACK_POINTER_REGNUM)))
+ && (REGNO (index_reg) == ARG_POINTER_REGNUM
+ || REGNO (index_reg) == FRAME_POINTER_REGNUM
+ || REGNO (index_reg) == SP_REG))
{
std::swap (base, index);
std::swap (base_reg, index_reg);
@@ -16191,14 +16289,11 @@ ix86_decompose_address (rtx addr, struct ix86_address *out)
/* Special case: %ebp cannot be encoded as a base without a displacement.
Similarly %r13. */
- if (!disp
- && base_reg
- && (base_reg == hard_frame_pointer_rtx
- || base_reg == frame_pointer_rtx
- || base_reg == arg_pointer_rtx
- || (REG_P (base_reg)
- && (REGNO (base_reg) == HARD_FRAME_POINTER_REGNUM
- || REGNO (base_reg) == R13_REG))))
+ if (!disp && base_reg
+ && (REGNO (base_reg) == ARG_POINTER_REGNUM
+ || REGNO (base_reg) == FRAME_POINTER_REGNUM
+ || REGNO (base_reg) == BP_REG
+ || REGNO (base_reg) == R13_REG))
disp = const0_rtx;
/* Special case: on K6, [%esi] makes the instruction vector decoded.
@@ -16207,7 +16302,7 @@ ix86_decompose_address (rtx addr, struct ix86_address *out)
to test cfun for being non-NULL. */
if (TARGET_K6 && cfun && optimize_function_for_speed_p (cfun)
&& base_reg && !index_reg && !disp
- && REG_P (base_reg) && REGNO (base_reg) == SI_REG)
+ && REGNO (base_reg) == SI_REG)
disp = const0_rtx;
/* Special case: encode reg+reg instead of reg*2. */
@@ -16819,10 +16914,6 @@ ix86_legitimate_address_p (machine_mode, rtx addr, bool strict)
case UNSPEC_DTPOFF:
break;
- case UNSPEC_STACK_CHECK:
- gcc_assert (flag_split_stack);
- break;
-
default:
/* Invalid address unspec. */
return false;
@@ -17912,17 +18003,10 @@ output_pic_addr_const (FILE *file, rtx x, int code)
putc (ASSEMBLER_DIALECT == ASM_INTEL ? ')' : ']', file);
break;
- case UNSPEC:
- if (XINT (x, 1) == UNSPEC_STACK_CHECK)
- {
- bool f = i386_asm_output_addr_const_extra (file, x);
- gcc_assert (f);
- break;
- }
-
- gcc_assert (XVECLEN (x, 0) == 1);
- output_pic_addr_const (file, XVECEXP (x, 0, 0), code);
- switch (XINT (x, 1))
+ case UNSPEC:
+ gcc_assert (XVECLEN (x, 0) == 1);
+ output_pic_addr_const (file, XVECEXP (x, 0, 0), code);
+ switch (XINT (x, 1))
{
case UNSPEC_GOT:
fputs ("@GOT", file);
@@ -18615,7 +18699,6 @@ print_reg (rtx x, int code, FILE *file)
+ -- print a branch hint as 'cs' or 'ds' prefix
; -- print a semicolon (after prefixes due to bug in older gas).
~ -- print "i" if TARGET_AVX2, "f" otherwise.
- @ -- print a segment register of thread base pointer load
^ -- print addr32 prefix if TARGET_64BIT and Pmode != word_mode
! -- print MPX prefix for jxx/call/ret instructions if required.
*/
@@ -19159,19 +19242,6 @@ ix86_print_operand (FILE *file, rtx x, int code)
#endif
return;
- case '@':
- if (ASSEMBLER_DIALECT == ASM_ATT)
- putc ('%', file);
-
- /* The kernel uses a different segment register for performance
- reasons; a system call would not have to trash the userspace
- segment register, which would be expensive. */
- if (TARGET_64BIT && ix86_cmodel != CM_KERNEL)
- fputs ("fs", file);
- else
- fputs ("gs", file);
- return;
-
case '~':
putc (TARGET_AVX2 ? 'i' : 'f', file);
return;
@@ -19330,8 +19400,8 @@ ix86_print_operand (FILE *file, rtx x, int code)
static bool
ix86_print_operand_punct_valid_p (unsigned char code)
{
- return (code == '@' || code == '*' || code == '+' || code == '&'
- || code == ';' || code == '~' || code == '^' || code == '!');
+ return (code == '*' || code == '+' || code == '&' || code == ';'
+ || code == '~' || code == '^' || code == '!');
}
/* Print a memory operand whose address is ADDR. */
@@ -19430,7 +19500,7 @@ ix86_print_operand_address_as (FILE *file, rtx addr,
/* Displacement only requires special attention. */
if (CONST_INT_P (disp))
{
- if (ASSEMBLER_DIALECT == ASM_INTEL && parts.seg == ADDR_SPACE_GENERIC)
+ if (ASSEMBLER_DIALECT == ASM_INTEL && ADDR_SPACE_GENERIC_P (as))
fputs ("ds:", file);
fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (disp));
}
@@ -19632,22 +19702,6 @@ i386_asm_output_addr_const_extra (FILE *file, rtx x)
break;
#endif
- case UNSPEC_STACK_CHECK:
- {
- int offset;
-
- gcc_assert (flag_split_stack);
-
-#ifdef TARGET_THREAD_SPLIT_STACK_OFFSET
- offset = TARGET_THREAD_SPLIT_STACK_OFFSET;
-#else
- gcc_unreachable ();
-#endif
-
- fprintf (file, "%s:%d", TARGET_64BIT ? "%fs" : "%gs", offset);
- }
- break;
-
default:
return false;
}
@@ -31662,6 +31716,21 @@ ix86_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
LCT_NORMAL, VOIDmode, 1, XEXP (m_tramp, 0), Pmode);
#endif
}
+
+static bool
+ix86_allocate_stack_slots_for_args (void)
+{
+ /* Naked functions should not allocate stack slots for arguments. */
+ return !ix86_function_naked (current_function_decl);
+}
+
+static bool
+ix86_warn_func_return (tree decl)
+{
+ /* Naked functions are implemented entirely in assembly, including the
+ return sequence, so suppress warnings about this. */
+ return !ix86_function_naked (decl);
+}
/* The following file contains several enumerations and data structures
built from the definitions in i386-builtin-types.def. */
@@ -33393,13 +33462,18 @@ get_builtin_code_for_version (tree decl, tree *predicate_list)
break;
case PROCESSOR_NEHALEM:
if (new_target->x_ix86_isa_flags & OPTION_MASK_ISA_AES)
- arg_str = "westmere";
+ {
+ arg_str = "westmere";
+ priority = P_AES;
+ }
else
- /* We translate "arch=corei7" and "arch=nehalem" to
- "corei7" so that it will be mapped to M_INTEL_COREI7
- as cpu type to cover all M_INTEL_COREI7_XXXs. */
- arg_str = "corei7";
- priority = P_PROC_SSE4_2;
+ {
+ /* We translate "arch=corei7" and "arch=nehalem" to
+ "corei7" so that it will be mapped to M_INTEL_COREI7
+ as cpu type to cover all M_INTEL_COREI7_XXXs. */
+ arg_str = "corei7";
+ priority = P_PROC_SSE4_2;
+ }
break;
case PROCESSOR_SANDYBRIDGE:
if (new_target->x_ix86_isa_flags & OPTION_MASK_ISA_F16C)
@@ -33839,30 +33913,30 @@ ix86_get_function_versions_dispatcher (void *decl)
}
/* Make the resolver function decl to dispatch the versions of
- a multi-versioned function, DEFAULT_DECL. Create an
+ a multi-versioned function, DEFAULT_DECL. IFUNC_ALIAS_DECL is
+ ifunc alias that will point to the created resolver. Create an
empty basic block in the resolver and store the pointer in
EMPTY_BB. Return the decl of the resolver function. */
static tree
make_resolver_func (const tree default_decl,
- const tree dispatch_decl,
+ const tree ifunc_alias_decl,
basic_block *empty_bb)
{
char *resolver_name;
tree decl, type, decl_name, t;
- bool is_uniq = false;
/* IFUNC's have to be globally visible. So, if the default_decl is
not, then the name of the IFUNC should be made unique. */
if (TREE_PUBLIC (default_decl) == 0)
- is_uniq = true;
+ {
+ char *ifunc_name = make_unique_name (default_decl, "ifunc", true);
+ symtab->change_decl_assembler_name (ifunc_alias_decl,
+ get_identifier (ifunc_name));
+ XDELETEVEC (ifunc_name);
+ }
- /* Append the filename to the resolver function if the versions are
- not externally visible. This is because the resolver function has
- to be externally visible for the loader to find it. So, appending
- the filename will prevent conflicts with a resolver function from
- another module which is based on the same version name. */
- resolver_name = make_unique_name (default_decl, "resolver", is_uniq);
+ resolver_name = make_unique_name (default_decl, "resolver", false);
/* The resolver function should return a (void *). */
type = build_function_type_list (ptr_type_node, NULL_TREE);
@@ -33875,13 +33949,12 @@ make_resolver_func (const tree default_decl,
TREE_USED (decl) = 1;
DECL_ARTIFICIAL (decl) = 1;
DECL_IGNORED_P (decl) = 0;
- /* IFUNC resolvers have to be externally visible. */
- TREE_PUBLIC (decl) = 1;
+ TREE_PUBLIC (decl) = 0;
DECL_UNINLINABLE (decl) = 1;
/* Resolver is not external, body is generated. */
DECL_EXTERNAL (decl) = 0;
- DECL_EXTERNAL (dispatch_decl) = 0;
+ DECL_EXTERNAL (ifunc_alias_decl) = 0;
DECL_CONTEXT (decl) = NULL_TREE;
DECL_INITIAL (decl) = make_node (BLOCK);
@@ -33912,14 +33985,14 @@ make_resolver_func (const tree default_decl,
pop_cfun ();
- gcc_assert (dispatch_decl != NULL);
- /* Mark dispatch_decl as "ifunc" with resolver as resolver_name. */
- DECL_ATTRIBUTES (dispatch_decl)
- = make_attribute ("ifunc", resolver_name, DECL_ATTRIBUTES (dispatch_decl));
+ gcc_assert (ifunc_alias_decl != NULL);
+ /* Mark ifunc_alias_decl as "ifunc" with resolver as resolver_name. */
+ DECL_ATTRIBUTES (ifunc_alias_decl)
+ = make_attribute ("ifunc", resolver_name,
+ DECL_ATTRIBUTES (ifunc_alias_decl));
/* Create the alias for dispatch to resolver here. */
- /*cgraph_create_function_alias (dispatch_decl, decl);*/
- cgraph_node::create_same_body_alias (dispatch_decl, decl);
+ cgraph_node::create_same_body_alias (ifunc_alias_decl, decl);
XDELETEVEC (resolver_name);
return decl;
}
@@ -44118,6 +44191,26 @@ ix86_expand_vector_init_general (bool mmx_ok, machine_mode mode,
ix86_expand_vector_init_concat (mode, target, ops, n);
return;
+ case V2TImode:
+ for (i = 0; i < 2; i++)
+ ops[i] = gen_lowpart (V2DImode, XVECEXP (vals, 0, i));
+ op0 = gen_reg_rtx (V4DImode);
+ ix86_expand_vector_init_concat (V4DImode, op0, ops, 2);
+ emit_move_insn (target, gen_lowpart (GET_MODE (target), op0));
+ return;
+
+ case V4TImode:
+ for (i = 0; i < 4; i++)
+ ops[i] = gen_lowpart (V2DImode, XVECEXP (vals, 0, i));
+ ops[4] = gen_reg_rtx (V4DImode);
+ ix86_expand_vector_init_concat (V4DImode, ops[4], ops, 2);
+ ops[5] = gen_reg_rtx (V4DImode);
+ ix86_expand_vector_init_concat (V4DImode, ops[5], ops + 2, 2);
+ op0 = gen_reg_rtx (V8DImode);
+ ix86_expand_vector_init_concat (V8DImode, op0, ops + 4, 2);
+ emit_move_insn (target, gen_lowpart (GET_MODE (target), op0));
+ return;
+
case V32QImode:
half_mode = V16QImode;
goto half;
@@ -44271,6 +44364,34 @@ ix86_expand_vector_init (bool mmx_ok, rtx target, rtx vals)
int i;
rtx x;
+ /* Handle first initialization from vector elts. */
+ if (n_elts != XVECLEN (vals, 0))
+ {
+ rtx subtarget = target;
+ x = XVECEXP (vals, 0, 0);
+ gcc_assert (GET_MODE_INNER (GET_MODE (x)) == inner_mode);
+ if (GET_MODE_NUNITS (GET_MODE (x)) * 2 == n_elts)
+ {
+ rtx ops[2] = { XVECEXP (vals, 0, 0), XVECEXP (vals, 0, 1) };
+ if (inner_mode == QImode || inner_mode == HImode)
+ {
+ mode = mode_for_vector (SImode,
+ n_elts * GET_MODE_SIZE (inner_mode) / 4);
+ inner_mode
+ = mode_for_vector (SImode,
+ n_elts * GET_MODE_SIZE (inner_mode) / 8);
+ ops[0] = gen_lowpart (inner_mode, ops[0]);
+ ops[1] = gen_lowpart (inner_mode, ops[1]);
+ subtarget = gen_reg_rtx (mode);
+ }
+ ix86_expand_vector_init_concat (mode, subtarget, ops, 2);
+ if (subtarget != target)
+ emit_move_insn (target, gen_lowpart (GET_MODE (target), subtarget));
+ return;
+ }
+ gcc_unreachable ();
+ }
+
for (i = 0; i < n_elts; ++i)
{
x = XVECEXP (vals, 0, i);
@@ -44659,6 +44780,8 @@ ix86_expand_vector_extract (bool mmx_ok, rtx target, rtx vec, int elt)
case V2DFmode:
case V2DImode:
+ case V2TImode:
+ case V4TImode:
use_vec_extr = true;
break;
@@ -45730,17 +45853,60 @@ ix86_mangle_type (const_tree type)
}
}
-#ifdef TARGET_THREAD_SSP_OFFSET
-/* If using TLS guards, don't waste time creating and expanding
- __stack_chk_guard decl and MEM as we are going to ignore it. */
+static GTY(()) tree ix86_tls_stack_chk_guard_decl;
+
static tree
ix86_stack_protect_guard (void)
{
if (TARGET_SSP_TLS_GUARD)
- return NULL_TREE;
+ {
+ tree type_node = lang_hooks.types.type_for_mode (ptr_mode, 1);
+ int qual = ENCODE_QUAL_ADDR_SPACE (ix86_stack_protector_guard_reg);
+ tree type = build_qualified_type (type_node, qual);
+ tree t;
+
+ if (global_options_set.x_ix86_stack_protector_guard_symbol_str)
+ {
+ t = ix86_tls_stack_chk_guard_decl;
+
+ if (t == NULL)
+ {
+ rtx x;
+
+ t = build_decl
+ (UNKNOWN_LOCATION, VAR_DECL,
+ get_identifier (ix86_stack_protector_guard_symbol_str),
+ type);
+ TREE_STATIC (t) = 1;
+ TREE_PUBLIC (t) = 1;
+ DECL_EXTERNAL (t) = 1;
+ TREE_USED (t) = 1;
+ TREE_THIS_VOLATILE (t) = 1;
+ DECL_ARTIFICIAL (t) = 1;
+ DECL_IGNORED_P (t) = 1;
+
+ /* Do not share RTL as the declaration is visible outside of
+ current function. */
+ x = DECL_RTL (t);
+ RTX_FLAG (x, used) = 1;
+
+ ix86_tls_stack_chk_guard_decl = t;
+ }
+ }
+ else
+ {
+ tree asptrtype = build_pointer_type (type);
+
+ t = build_int_cst (asptrtype, ix86_stack_protector_guard_offset);
+ t = build2 (MEM_REF, asptrtype, t,
+ build_int_cst (asptrtype, 0));
+ }
+
+ return t;
+ }
+
return default_stack_protect_guard ();
}
-#endif
/* For 32-bit code we can save PIC register setup by using
__stack_chk_fail_local hidden function instead of calling
@@ -46474,6 +46640,8 @@ static const struct attribute_spec ix86_attribute_table[] =
ix86_handle_interrupt_attribute, false },
{ "no_caller_saved_registers", 0, 0, false, true, true,
ix86_handle_no_caller_saved_registers_attribute, false },
+ { "naked", 0, 0, true, false, false,
+ ix86_handle_fndecl_attribute, false },
/* End element. */
{ NULL, 0, 0, false, false, false, NULL, false }
@@ -52683,6 +52851,8 @@ ix86_run_selftests (void)
#define TARGET_SETUP_INCOMING_VARARGS ix86_setup_incoming_varargs
#undef TARGET_MUST_PASS_IN_STACK
#define TARGET_MUST_PASS_IN_STACK ix86_must_pass_in_stack
+#undef TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS
+#define TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS ix86_allocate_stack_slots_for_args
#undef TARGET_FUNCTION_ARG_ADVANCE
#define TARGET_FUNCTION_ARG_ADVANCE ix86_function_arg_advance
#undef TARGET_FUNCTION_ARG
@@ -52710,6 +52880,9 @@ ix86_run_selftests (void)
#undef TARGET_RETURN_POPS_ARGS
#define TARGET_RETURN_POPS_ARGS ix86_return_pops_args
+#undef TARGET_WARN_FUNC_RETURN
+#define TARGET_WARN_FUNC_RETURN ix86_warn_func_return
+
#undef TARGET_LEGITIMATE_COMBINED_INSN
#define TARGET_LEGITIMATE_COMBINED_INSN ix86_legitimate_combined_insn
@@ -52741,10 +52914,8 @@ ix86_run_selftests (void)
#undef TARGET_MANGLE_TYPE
#define TARGET_MANGLE_TYPE ix86_mangle_type
-#ifdef TARGET_THREAD_SSP_OFFSET
#undef TARGET_STACK_PROTECT_GUARD
#define TARGET_STACK_PROTECT_GUARD ix86_stack_protect_guard
-#endif
#if !TARGET_MACHO
#undef TARGET_STACK_PROTECT_FAIL
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index a2ae9b4e242..e8ae3e3b3cc 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -2165,7 +2165,7 @@ extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER];
/* Before the prologue, RA is at 0(%esp). */
#define INCOMING_RETURN_ADDR_RTX \
- gen_rtx_MEM (Pmode, gen_rtx_REG (Pmode, STACK_POINTER_REGNUM))
+ gen_rtx_MEM (Pmode, stack_pointer_rtx)
/* After the prologue, RA is at -4(AP) in the current frame. */
#define RETURN_ADDR_RTX(COUNT, FRAME) \
@@ -2177,8 +2177,11 @@ extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER];
/* PC is dbx register 8; let's use that column for RA. */
#define DWARF_FRAME_RETURN_COLUMN (TARGET_64BIT ? 16 : 8)
-/* Before the prologue, the top of the frame is at 4(%esp). */
-#define INCOMING_FRAME_SP_OFFSET UNITS_PER_WORD
+/* Before the prologue, there are return address and error code for
+ exception handler on the top of the frame. */
+#define INCOMING_FRAME_SP_OFFSET \
+ (cfun->machine->func_type == TYPE_EXCEPTION \
+ ? 2 * UNITS_PER_WORD : UNITS_PER_WORD)
/* Describe how we implement __builtin_eh_return. */
#define EH_RETURN_DATA_REGNO(N) ((N) <= DX_REG ? (N) : INVALID_REGNUM)
@@ -2196,29 +2199,33 @@ extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER];
#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \
asm_preferred_eh_data_format ((CODE), (GLOBAL))
-/* This is how to output an insn to push a register on the stack.
- It need not be very fast code. */
+/* These are a couple of extensions to the formats accepted
+ by asm_fprintf:
+ %z prints out opcode suffix for word-mode instruction
+ %r prints out word-mode name for reg_names[arg] */
+#define ASM_FPRINTF_EXTENSIONS(FILE, ARGS, P) \
+ case 'z': \
+ fputc (TARGET_64BIT ? 'q' : 'l', (FILE)); \
+ break; \
+ \
+ case 'r': \
+ { \
+ unsigned int regno = va_arg ((ARGS), int); \
+ if (LEGACY_INT_REGNO_P (regno)) \
+ fputc (TARGET_64BIT ? 'r' : 'e', (FILE)); \
+ fputs (reg_names[regno], (FILE)); \
+ break; \
+ }
-#define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \
-do { \
- if (TARGET_64BIT) \
- asm_fprintf ((FILE), "\tpush{q}\t%%r%s\n", \
- reg_names[(REGNO)] + (REX_INT_REGNO_P (REGNO) != 0)); \
- else \
- asm_fprintf ((FILE), "\tpush{l}\t%%e%s\n", reg_names[(REGNO)]); \
-} while (0)
+/* This is how to output an insn to push a register on the stack. */
+
+#define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \
+ asm_fprintf ((FILE), "\tpush%z\t%%%r\n", (REGNO))
-/* This is how to output an insn to pop a register from the stack.
- It need not be very fast code. */
+/* This is how to output an insn to pop a register from the stack. */
#define ASM_OUTPUT_REG_POP(FILE, REGNO) \
-do { \
- if (TARGET_64BIT) \
- asm_fprintf ((FILE), "\tpop{q}\t%%r%s\n", \
- reg_names[(REGNO)] + (REX_INT_REGNO_P (REGNO) != 0)); \
- else \
- asm_fprintf ((FILE), "\tpop{l}\t%%e%s\n", reg_names[(REGNO)]); \
-} while (0)
+ asm_fprintf ((FILE), "\tpop%z\t%%%r\n", (REGNO))
/* This is how to output an element of a case-vector that is absolute. */
@@ -2477,8 +2484,7 @@ enum avx_u128_state
<- end of stub-saved/restored regs
[padding1]
]
- <- outlined_save_offset
- <- sse_regs_save_offset
+ <- sse_reg_save_offset
[padding2]
| <- FRAME_POINTER
[va_arg registers] |
@@ -2504,7 +2510,6 @@ struct GTY(()) ix86_frame
HOST_WIDE_INT reg_save_offset;
HOST_WIDE_INT stack_realign_allocate_offset;
HOST_WIDE_INT stack_realign_offset;
- HOST_WIDE_INT outlined_save_offset;
HOST_WIDE_INT sse_reg_save_offset;
/* When save_regs_using_mov is set, emit prologue using
@@ -2640,17 +2645,13 @@ struct GTY(()) machine_function {
BOOL_BITFIELD arg_reg_available : 1;
/* If true, we're out-of-lining reg save/restore for regs clobbered
- by ms_abi functions calling a sysv function. */
+ by 64-bit ms_abi functions calling a sysv_abi function. */
BOOL_BITFIELD call_ms2sysv : 1;
/* If true, the incoming 16-byte aligned stack has an offset (of 8) and
- needs padding. */
+ needs padding prior to out-of-line stub save/restore area. */
BOOL_BITFIELD call_ms2sysv_pad_in : 1;
- /* If true, the size of the stub save area plus inline int reg saves will
- result in an 8 byte offset, so needs padding. */
- BOOL_BITFIELD call_ms2sysv_pad_out : 1;
-
/* This is the number of extra registers saved by stub (valid range is
0-6). Each additional register is only saved/restored by the stubs
if all successive ones are. (Will always be zero when using a hard
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 5eff4e46fff..3af3b7aed4f 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -61,7 +61,6 @@
;; + -- print a branch hint as 'cs' or 'ds' prefix
;; ; -- print a semicolon (after prefixes due to bug in older gas).
;; ~ -- print "i" if TARGET_AVX2, "f" otherwise.
-;; @ -- print a segment register of thread base pointer load
;; ^ -- print addr32 prefix if TARGET_64BIT and Pmode != word_mode
;; ! -- print MPX prefix for jxx/call/ret instructions if required.
@@ -87,7 +86,6 @@
UNSPEC_SET_RIP
UNSPEC_SET_GOT_OFFSET
UNSPEC_MEMORY_BLOCKAGE
- UNSPEC_STACK_CHECK
UNSPEC_PROBE_STACK
;; TLS support
@@ -166,8 +164,6 @@
;; SSP patterns
UNSPEC_SP_SET
UNSPEC_SP_TEST
- UNSPEC_SP_TLS_SET
- UNSPEC_SP_TLS_TEST
;; For ROUND support
UNSPEC_ROUND
@@ -201,6 +197,7 @@
])
(define_c_enum "unspecv" [
+ UNSPECV_UD2
UNSPECV_BLOCKAGE
UNSPECV_STACK_PROBE
UNSPECV_PROBE_STACK_RANGE
@@ -12632,20 +12629,17 @@
[(set (pc) (if_then_else
(ltu (minus (reg SP_REG)
(match_operand 0 "register_operand"))
- (unspec [(const_int 0)] UNSPEC_STACK_CHECK))
+ (match_dup 2))
(label_ref (match_operand 1))
(pc)))]
""
{
- rtx reg, size, limit;
+ rtx reg = gen_reg_rtx (Pmode);
- reg = gen_reg_rtx (Pmode);
- size = force_reg (Pmode, operands[0]);
- emit_insn (gen_sub3_insn (reg, stack_pointer_rtx, size));
- limit = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, const0_rtx),
- UNSPEC_STACK_CHECK);
- limit = gen_rtx_MEM (Pmode, gen_rtx_CONST (Pmode, limit));
- ix86_expand_branch (GEU, reg, limit, operands[1]);
+ emit_insn (gen_sub3_insn (reg, stack_pointer_rtx, operands[0]));
+
+ operands[2] = ix86_split_stack_guard ();
+ ix86_expand_branch (GEU, reg, operands[2], operands[1]);
DONE;
})
@@ -18606,6 +18600,18 @@
}
[(set_attr "length" "2")])
+(define_insn "ud2"
+ [(unspec_volatile [(const_int 0)] UNSPECV_UD2)]
+ ""
+{
+#ifdef HAVE_AS_IX86_UD2
+ return "ud2";
+#else
+ return ASM_SHORT "0x0b0f";
+#endif
+}
+ [(set_attr "length" "2")])
+
(define_expand "prefetch"
[(prefetch (match_operand 0 "address_operand")
(match_operand:SI 1 "const_int_operand")
@@ -18705,16 +18711,9 @@
{
rtx (*insn)(rtx, rtx);
-#ifdef TARGET_THREAD_SSP_OFFSET
- operands[1] = GEN_INT (TARGET_THREAD_SSP_OFFSET);
- insn = (TARGET_LP64
- ? gen_stack_tls_protect_set_di
- : gen_stack_tls_protect_set_si);
-#else
insn = (TARGET_LP64
? gen_stack_protect_set_di
: gen_stack_protect_set_si);
-#endif
emit_insn (insn (operands[0], operands[1]));
DONE;
@@ -18730,16 +18729,6 @@
"mov{<imodesuffix>}\t{%1, %2|%2, %1}\;mov{<imodesuffix>}\t{%2, %0|%0, %2}\;xor{l}\t%k2, %k2"
[(set_attr "type" "multi")])
-(define_insn "stack_tls_protect_set_<mode>"
- [(set (match_operand:PTR 0 "memory_operand" "=m")
- (unspec:PTR [(match_operand:PTR 1 "const_int_operand" "i")]
- UNSPEC_SP_TLS_SET))
- (set (match_scratch:PTR 2 "=&r") (const_int 0))
- (clobber (reg:CC FLAGS_REG))]
- ""
- "mov{<imodesuffix>}\t{%@:%P1, %2|%2, <iptrsize> PTR %@:%P1}\;mov{<imodesuffix>}\t{%2, %0|%0, %2}\;xor{l}\t%k2, %k2"
- [(set_attr "type" "multi")])
-
(define_expand "stack_protect_test"
[(match_operand 0 "memory_operand")
(match_operand 1 "memory_operand")
@@ -18750,16 +18739,9 @@
rtx (*insn)(rtx, rtx, rtx);
-#ifdef TARGET_THREAD_SSP_OFFSET
- operands[1] = GEN_INT (TARGET_THREAD_SSP_OFFSET);
- insn = (TARGET_LP64
- ? gen_stack_tls_protect_test_di
- : gen_stack_tls_protect_test_si);
-#else
insn = (TARGET_LP64
? gen_stack_protect_test_di
: gen_stack_protect_test_si);
-#endif
emit_insn (insn (flags, operands[0], operands[1]));
@@ -18778,16 +18760,6 @@
"mov{<imodesuffix>}\t{%1, %3|%3, %1}\;xor{<imodesuffix>}\t{%2, %3|%3, %2}"
[(set_attr "type" "multi")])
-(define_insn "stack_tls_protect_test_<mode>"
- [(set (match_operand:CCZ 0 "flags_reg_operand")
- (unspec:CCZ [(match_operand:PTR 1 "memory_operand" "m")
- (match_operand:PTR 2 "const_int_operand" "i")]
- UNSPEC_SP_TLS_TEST))
- (clobber (match_scratch:PTR 3 "=r"))]
- ""
- "mov{<imodesuffix>}\t{%1, %3|%3, %1}\;xor{<imodesuffix>}\t{%@:%P2, %3|%3, <iptrsize> PTR %@:%P2}"
- [(set_attr "type" "multi")])
-
(define_insn "sse4_2_crc32<mode>"
[(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI
diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt
index adc75f36602..cd564315f04 100644
--- a/gcc/config/i386/i386.opt
+++ b/gcc/config/i386/i386.opt
@@ -924,6 +924,24 @@ Enum(stack_protector_guard) String(tls) Value(SSP_TLS)
EnumValue
Enum(stack_protector_guard) String(global) Value(SSP_GLOBAL)
+mstack-protector-guard-reg=
+Target RejectNegative Joined Var(ix86_stack_protector_guard_reg_str)
+Use the given base register for addressing the stack-protector guard.
+
+TargetVariable
+addr_space_t ix86_stack_protector_guard_reg = ADDR_SPACE_GENERIC
+
+mstack-protector-guard-offset=
+Target RejectNegative Joined Integer Var(ix86_stack_protector_guard_offset_str)
+Use the given offset for addressing the stack-protector guard.
+
+TargetVariable
+HOST_WIDE_INT ix86_stack_protector_guard_offset = 0
+
+mstack-protector-guard-symbol=
+Target RejectNegative Joined Integer Var(ix86_stack_protector_guard_symbol_str)
+Use the given symbol for addressing the stack-protector guard.
+
mmitigate-rop
Target Var(flag_mitigate_rop) Init(0)
Attempt to avoid generating instruction sequences containing ret bytes.
diff --git a/gcc/config/i386/mingw.opt b/gcc/config/i386/mingw.opt
index 210c14f549e..97a9baa6d7a 100644
--- a/gcc/config/i386/mingw.opt
+++ b/gcc/config/i386/mingw.opt
@@ -28,8 +28,4 @@ Wpedantic-ms-format
C ObjC C++ ObjC++ Var(warn_pedantic_ms_format) Init(1) Warning
Warn about none ISO msvcrt scanf/printf width extensions.
-fset-stack-executable
-Common Report Var(flag_setstackexecutable) Init(1) Optimization
-For nested functions on stack executable permission is set.
-
; Need to retain blank line above.
diff --git a/gcc/config/i386/mmx.md b/gcc/config/i386/mmx.md
index 7a1789f0b47..b3f3633e964 100644
--- a/gcc/config/i386/mmx.md
+++ b/gcc/config/i386/mmx.md
@@ -641,7 +641,7 @@
[(set (match_dup 0) (match_dup 1))]
"operands[1] = adjust_address (operands[1], SFmode, 4);")
-(define_expand "vec_extractv2sf"
+(define_expand "vec_extractv2sfsf"
[(match_operand:SF 0 "register_operand")
(match_operand:V2SF 1 "register_operand")
(match_operand 2 "const_int_operand")]
@@ -652,7 +652,7 @@
DONE;
})
-(define_expand "vec_initv2sf"
+(define_expand "vec_initv2sfsf"
[(match_operand:V2SF 0 "register_operand")
(match_operand 1)]
"TARGET_SSE"
@@ -1344,7 +1344,7 @@
operands[1] = adjust_address (operands[1], SImode, INTVAL (operands[2]) * 4);
})
-(define_expand "vec_extractv2si"
+(define_expand "vec_extractv2sisi"
[(match_operand:SI 0 "register_operand")
(match_operand:V2SI 1 "register_operand")
(match_operand 2 "const_int_operand")]
@@ -1355,7 +1355,7 @@
DONE;
})
-(define_expand "vec_initv2si"
+(define_expand "vec_initv2sisi"
[(match_operand:V2SI 0 "register_operand")
(match_operand 1)]
"TARGET_SSE"
@@ -1375,7 +1375,7 @@
DONE;
})
-(define_expand "vec_extractv4hi"
+(define_expand "vec_extractv4hihi"
[(match_operand:HI 0 "register_operand")
(match_operand:V4HI 1 "register_operand")
(match_operand 2 "const_int_operand")]
@@ -1386,7 +1386,7 @@
DONE;
})
-(define_expand "vec_initv4hi"
+(define_expand "vec_initv4hihi"
[(match_operand:V4HI 0 "register_operand")
(match_operand 1)]
"TARGET_SSE"
@@ -1406,7 +1406,7 @@
DONE;
})
-(define_expand "vec_extractv8qi"
+(define_expand "vec_extractv8qiqi"
[(match_operand:QI 0 "register_operand")
(match_operand:V8QI 1 "register_operand")
(match_operand 2 "const_int_operand")]
@@ -1417,7 +1417,7 @@
DONE;
})
-(define_expand "vec_initv8qi"
+(define_expand "vec_initv8qiqi"
[(match_operand:V8QI 0 "register_operand")
(match_operand 1)]
"TARGET_SSE"
diff --git a/gcc/config/i386/openbsd.h b/gcc/config/i386/openbsd.h
deleted file mode 100644
index 7d37c0de922..00000000000
--- a/gcc/config/i386/openbsd.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Configuration for an OpenBSD i386 target.
- Copyright (C) 1999-2017 Free Software Foundation, Inc.
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GCC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
-
-
-/* This goes away when the math-emulator is fixed */
-#undef TARGET_SUBTARGET_DEFAULT
-#define TARGET_SUBTARGET_DEFAULT \
- (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_NO_FANCY_MATH_387)
-
-#define TARGET_OS_CPP_BUILTINS() \
- do \
- { \
- builtin_define ("__unix__"); \
- builtin_define ("__OpenBSD__"); \
- builtin_assert ("system=unix"); \
- builtin_assert ("system=bsd"); \
- builtin_assert ("system=OpenBSD"); \
- } \
- while (0)
-
-/* Layout of source language data types. */
-
-/* This must agree with <machine/ansi.h> */
-#undef SIZE_TYPE
-#define SIZE_TYPE "unsigned int"
-
-#undef PTRDIFF_TYPE
-#define PTRDIFF_TYPE "int"
-
-#undef WCHAR_TYPE
-#define WCHAR_TYPE "int"
-
-#undef WCHAR_TYPE_SIZE
-#define WCHAR_TYPE_SIZE 32
-
-/* Assembler format: overall framework. */
-
-#undef ASM_APP_ON
-#define ASM_APP_ON "#APP\n"
-
-#undef ASM_APP_OFF
-#define ASM_APP_OFF "#NO_APP\n"
-
-/* Stack & calling: aggregate returns. */
-
-/* Don't default to pcc-struct-return, because gcc is the only compiler, and
- we want to retain compatibility with older gcc versions. */
-#define DEFAULT_PCC_STRUCT_RETURN 0
-
-/* Assembler format: alignment output. */
-
-/* Kludgy test: when gas is upgraded, it will have p2align, and no problems
- with nops. */
-#ifndef HAVE_GAS_MAX_SKIP_P2ALIGN
-/* i386 OpenBSD still uses an older gas that doesn't insert nops by default
- when the .align directive demands to insert extra space in the text
- segment. */
-#undef ASM_OUTPUT_ALIGN
-#define ASM_OUTPUT_ALIGN(FILE,LOG) \
- if ((LOG)!=0) fprintf ((FILE), "\t.align %d,0x90\n", (LOG))
-#endif
-
-/* Stack & calling: profiling. */
-
-/* OpenBSD's profiler recovers all information from the stack pointer.
- The icky part is not here, but in machine/profile.h. */
-#undef FUNCTION_PROFILER
-#define FUNCTION_PROFILER(FILE, LABELNO) \
- fputs (flag_pic ? "\tcall mcount@PLT\n": "\tcall mcount\n", FILE);
-
-/* Assembler format: exception region output. */
-
-/* All configurations that don't use elf must be explicit about not using
- dwarf unwind information. */
-#define DWARF2_UNWIND_INFO 0
-
-#undef ASM_PREFERRED_EH_DATA_FORMAT
-
-#undef ASM_COMMENT_START
-#define ASM_COMMENT_START ";#"
-
-/* OpenBSD gas currently does not support quad, so do not use it. */
-#undef ASM_QUAD
-
-#define TARGET_HAVE_NAMED_SECTIONS false
diff --git a/gcc/config/i386/rtemself.h b/gcc/config/i386/rtemself.h
index e8eade28a5c..a68e8b30f62 100644
--- a/gcc/config/i386/rtemself.h
+++ b/gcc/config/i386/rtemself.h
@@ -2,21 +2,26 @@
Copyright (C) 1996-2017 Free Software Foundation, Inc.
Contributed by Joel Sherrill (joel@OARcorp.com).
-This file is part of GCC.
+ 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 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.
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
+ 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/>. */
/* Specify predefined symbols in preprocessor. */
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index e2db3b17f05..253ff5d5a7d 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -175,7 +175,7 @@
(V32HI "TARGET_AVX512F") (V16HI "TARGET_AVX") V8HI
(V16SI "TARGET_AVX512F") (V8SI "TARGET_AVX") V4SI
(V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX") V2DI
- (V4TI "TARGET_AVX512BW") (V2TI "TARGET_AVX") V1TI
+ (V4TI "TARGET_AVX512F") (V2TI "TARGET_AVX") V1TI
(V16SF "TARGET_AVX512F") (V8SF "TARGET_AVX") V4SF
(V8DF "TARGET_AVX512F") (V4DF "TARGET_AVX") V2DF])
@@ -658,13 +658,21 @@
;; Mapping of vector modes to a vector mode of half size
(define_mode_attr ssehalfvecmode
- [(V64QI "V32QI") (V32HI "V16HI") (V16SI "V8SI") (V8DI "V4DI")
+ [(V64QI "V32QI") (V32HI "V16HI") (V16SI "V8SI") (V8DI "V4DI") (V4TI "V2TI")
(V32QI "V16QI") (V16HI "V8HI") (V8SI "V4SI") (V4DI "V2DI")
(V16QI "V8QI") (V8HI "V4HI") (V4SI "V2SI")
(V16SF "V8SF") (V8DF "V4DF")
(V8SF "V4SF") (V4DF "V2DF")
(V4SF "V2SF")])
+(define_mode_attr ssehalfvecmodelower
+ [(V64QI "v32qi") (V32HI "v16hi") (V16SI "v8si") (V8DI "v4di") (V4TI "v2ti")
+ (V32QI "v16qi") (V16HI "v8hi") (V8SI "v4si") (V4DI "v2di")
+ (V16QI "v8qi") (V8HI "v4hi") (V4SI "v2si")
+ (V16SF "v8sf") (V8DF "v4df")
+ (V8SF "v4sf") (V4DF "v2df")
+ (V4SF "v2sf")])
+
;; Mapping of vector modes ti packed single mode of the same size
(define_mode_attr ssePSmode
[(V16SI "V16SF") (V8DF "V16SF")
@@ -687,7 +695,18 @@
(V16SI "SI") (V8SI "SI") (V4SI "SI")
(V8DI "DI") (V4DI "DI") (V2DI "DI")
(V16SF "SF") (V8SF "SF") (V4SF "SF")
- (V8DF "DF") (V4DF "DF") (V2DF "DF")])
+ (V8DF "DF") (V4DF "DF") (V2DF "DF")
+ (V4TI "TI") (V2TI "TI")])
+
+;; Mapping of vector modes back to the scalar modes
+(define_mode_attr ssescalarmodelower
+ [(V64QI "qi") (V32QI "qi") (V16QI "qi")
+ (V32HI "hi") (V16HI "hi") (V8HI "hi")
+ (V16SI "si") (V8SI "si") (V4SI "si")
+ (V8DI "di") (V4DI "di") (V2DI "di")
+ (V16SF "sf") (V8SF "sf") (V4SF "sf")
+ (V8DF "df") (V4DF "df") (V2DF "df")
+ (V4TI "ti") (V2TI "ti")])
;; Mapping of vector modes to the 128bit modes
(define_mode_attr ssexmmmode
@@ -2355,7 +2374,7 @@
{
rtx tmp = gen_reg_rtx (V8DFmode);
ix86_expand_reduc (gen_addv8df3, tmp, operands[1]);
- emit_insn (gen_vec_extractv8df (operands[0], tmp, const0_rtx));
+ emit_insn (gen_vec_extractv8dfdf (operands[0], tmp, const0_rtx));
DONE;
})
@@ -2370,7 +2389,7 @@
emit_insn (gen_avx_haddv4df3 (tmp, operands[1], operands[1]));
emit_insn (gen_avx_vperm2f128v4df3 (tmp2, tmp, tmp, GEN_INT (1)));
emit_insn (gen_addv4df3 (vec_res, tmp, tmp2));
- emit_insn (gen_vec_extractv4df (operands[0], vec_res, const0_rtx));
+ emit_insn (gen_vec_extractv4dfdf (operands[0], vec_res, const0_rtx));
DONE;
})
@@ -2381,7 +2400,7 @@
{
rtx tmp = gen_reg_rtx (V2DFmode);
emit_insn (gen_sse3_haddv2df3 (tmp, operands[1], operands[1]));
- emit_insn (gen_vec_extractv2df (operands[0], tmp, const0_rtx));
+ emit_insn (gen_vec_extractv2dfdf (operands[0], tmp, const0_rtx));
DONE;
})
@@ -2392,7 +2411,7 @@
{
rtx tmp = gen_reg_rtx (V16SFmode);
ix86_expand_reduc (gen_addv16sf3, tmp, operands[1]);
- emit_insn (gen_vec_extractv16sf (operands[0], tmp, const0_rtx));
+ emit_insn (gen_vec_extractv16sfsf (operands[0], tmp, const0_rtx));
DONE;
})
@@ -2408,7 +2427,7 @@
emit_insn (gen_avx_haddv8sf3 (tmp2, tmp, tmp));
emit_insn (gen_avx_vperm2f128v8sf3 (tmp, tmp2, tmp2, GEN_INT (1)));
emit_insn (gen_addv8sf3 (vec_res, tmp, tmp2));
- emit_insn (gen_vec_extractv8sf (operands[0], vec_res, const0_rtx));
+ emit_insn (gen_vec_extractv8sfsf (operands[0], vec_res, const0_rtx));
DONE;
})
@@ -2426,7 +2445,7 @@
}
else
ix86_expand_reduc (gen_addv4sf3, vec_res, operands[1]);
- emit_insn (gen_vec_extractv4sf (operands[0], vec_res, const0_rtx));
+ emit_insn (gen_vec_extractv4sfsf (operands[0], vec_res, const0_rtx));
DONE;
})
@@ -2448,7 +2467,8 @@
{
rtx tmp = gen_reg_rtx (<MODE>mode);
ix86_expand_reduc (gen_<code><mode>3, tmp, operands[1]);
- emit_insn (gen_vec_extract<mode> (operands[0], tmp, const0_rtx));
+ emit_insn (gen_vec_extract<mode><ssescalarmodelower> (operands[0], tmp,
+ const0_rtx));
DONE;
})
@@ -2460,7 +2480,8 @@
{
rtx tmp = gen_reg_rtx (<MODE>mode);
ix86_expand_reduc (gen_<code><mode>3, tmp, operands[1]);
- emit_insn (gen_vec_extract<mode> (operands[0], tmp, const0_rtx));
+ emit_insn (gen_vec_extract<mode><ssescalarmodelower> (operands[0], tmp,
+ const0_rtx));
DONE;
})
@@ -2472,7 +2493,8 @@
{
rtx tmp = gen_reg_rtx (<MODE>mode);
ix86_expand_reduc (gen_<code><mode>3, tmp, operands[1]);
- emit_insn (gen_vec_extract<mode> (operands[0], tmp, const0_rtx));
+ emit_insn (gen_vec_extract<mode><ssescalarmodelower> (operands[0], tmp,
+ const0_rtx));
DONE;
})
@@ -2484,7 +2506,7 @@
{
rtx tmp = gen_reg_rtx (V8HImode);
ix86_expand_reduc (gen_uminv8hi3, tmp, operands[1]);
- emit_insn (gen_vec_extractv8hi (operands[0], tmp, const0_rtx));
+ emit_insn (gen_vec_extractv8hihi (operands[0], tmp, const0_rtx));
DONE;
})
@@ -6920,15 +6942,6 @@
(set_attr "prefix" "orig,maybe_evex,orig,maybe_evex")
(set_attr "mode" "V4SF,V4SF,V2SF,V2SF")])
-(define_expand "vec_init<mode>"
- [(match_operand:V_128 0 "register_operand")
- (match_operand 1)]
- "TARGET_SSE"
-{
- ix86_expand_vector_init (false, operands[0], operands[1]);
- DONE;
-})
-
;; Avoid combining registers from different units in a single alternative,
;; see comment above inline_secondary_memory_needed function in i386.c
(define_insn "vec_set<mode>_0"
@@ -7886,9 +7899,10 @@
(V16SI "TARGET_AVX512F") (V8SI "TARGET_AVX") V4SI
(V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX") V2DI
(V16SF "TARGET_AVX512F") (V8SF "TARGET_AVX") V4SF
- (V8DF "TARGET_AVX512F") (V4DF "TARGET_AVX") V2DF])
+ (V8DF "TARGET_AVX512F") (V4DF "TARGET_AVX") V2DF
+ (V4TI "TARGET_AVX512F") (V2TI "TARGET_AVX")])
-(define_expand "vec_extract<mode>"
+(define_expand "vec_extract<mode><ssescalarmodelower>"
[(match_operand:<ssescalarmode> 0 "register_operand")
(match_operand:VEC_EXTRACT_MODE 1 "register_operand")
(match_operand 2 "const_int_operand")]
@@ -7899,6 +7913,19 @@
DONE;
})
+(define_expand "vec_extract<mode><ssehalfvecmodelower>"
+ [(match_operand:<ssehalfvecmode> 0 "nonimmediate_operand")
+ (match_operand:V_512 1 "register_operand")
+ (match_operand 2 "const_0_to_1_operand")]
+ "TARGET_AVX512F"
+{
+ if (INTVAL (operands[2]))
+ emit_insn (gen_vec_extract_hi_<mode> (operands[0], operands[1]));
+ else
+ emit_insn (gen_vec_extract_lo_<mode> (operands[0], operands[1]));
+ DONE;
+})
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Parallel double-precision floating point element swizzling
@@ -13734,6 +13761,50 @@
operands[1] = adjust_address (operands[1], <ssescalarmode>mode, offs);
})
+(define_insn "*vec_extractv2ti"
+ [(set (match_operand:TI 0 "nonimmediate_operand" "=xm,vm")
+ (vec_select:TI
+ (match_operand:V2TI 1 "register_operand" "x,v")
+ (parallel
+ [(match_operand:SI 2 "const_0_to_1_operand")])))]
+ "TARGET_AVX"
+ "@
+ vextract%~128\t{%2, %1, %0|%0, %1, %2}
+ vextracti32x4\t{%2, %g1, %0|%0, %g1, %2}"
+ [(set_attr "type" "sselog")
+ (set_attr "prefix_extra" "1")
+ (set_attr "length_immediate" "1")
+ (set_attr "prefix" "vex,evex")
+ (set_attr "mode" "OI")])
+
+(define_insn "*vec_extractv4ti"
+ [(set (match_operand:TI 0 "nonimmediate_operand" "=vm")
+ (vec_select:TI
+ (match_operand:V4TI 1 "register_operand" "v")
+ (parallel
+ [(match_operand:SI 2 "const_0_to_3_operand")])))]
+ "TARGET_AVX512F"
+ "vextracti32x4\t{%2, %1, %0|%0, %1, %2}"
+ [(set_attr "type" "sselog")
+ (set_attr "prefix_extra" "1")
+ (set_attr "length_immediate" "1")
+ (set_attr "prefix" "evex")
+ (set_attr "mode" "XI")])
+
+(define_mode_iterator VEXTRACTI128_MODE
+ [(V4TI "TARGET_AVX512F") V2TI])
+
+(define_split
+ [(set (match_operand:TI 0 "nonimmediate_operand")
+ (vec_select:TI
+ (match_operand:VEXTRACTI128_MODE 1 "register_operand")
+ (parallel [(const_int 0)])))]
+ "TARGET_AVX
+ && reload_completed
+ && (TARGET_AVX512VL || !EXT_REX_SSE_REG_P (operands[1]))"
+ [(set (match_dup 0) (match_dup 1))]
+ "operands[1] = gen_lowpart (TImode, operands[1]);")
+
;; Turn SImode or DImode extraction from arbitrary SSE/AVX/AVX512F
;; vector modes into vec_extract*.
(define_split
@@ -16656,7 +16727,7 @@
for (i = 0; i < <ssescalarnum>; i++)
RTVEC_ELT (vs, i) = op2;
- emit_insn (gen_vec_init<mode> (reg, par));
+ emit_insn (gen_vec_init<mode><ssescalarmodelower> (reg, par));
emit_insn (gen_xop_vrotl<mode>3 (operands[0], operands[1], reg));
DONE;
}
@@ -16688,7 +16759,7 @@
for (i = 0; i < <ssescalarnum>; i++)
RTVEC_ELT (vs, i) = op2;
- emit_insn (gen_vec_init<mode> (reg, par));
+ emit_insn (gen_vec_init<mode><ssescalarmodelower> (reg, par));
emit_insn (gen_neg<mode>2 (neg, reg));
emit_insn (gen_xop_vrotl<mode>3 (operands[0], operands[1], neg));
DONE;
@@ -16982,7 +17053,7 @@
XVECEXP (par, 0, i) = operands[2];
tmp = gen_reg_rtx (V16QImode);
- emit_insn (gen_vec_initv16qi (tmp, par));
+ emit_insn (gen_vec_initv16qiqi (tmp, par));
if (negate)
emit_insn (gen_negv16qi2 (tmp, tmp));
@@ -17018,7 +17089,7 @@
for (i = 0; i < 2; i++)
XVECEXP (par, 0, i) = operands[2];
- emit_insn (gen_vec_initv2di (reg, par));
+ emit_insn (gen_vec_initv2didi (reg, par));
if (negate)
emit_insn (gen_negv2di2 (reg, reg));
@@ -18738,19 +18809,40 @@
<ssehalfvecmode>mode);
})
-(define_expand "vec_init<mode>"
- [(match_operand:V_256 0 "register_operand")
+;; Modes handled by vec_init expanders.
+(define_mode_iterator VEC_INIT_MODE
+ [(V64QI "TARGET_AVX512F") (V32QI "TARGET_AVX") V16QI
+ (V32HI "TARGET_AVX512F") (V16HI "TARGET_AVX") V8HI
+ (V16SI "TARGET_AVX512F") (V8SI "TARGET_AVX") V4SI
+ (V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX") V2DI
+ (V16SF "TARGET_AVX512F") (V8SF "TARGET_AVX") V4SF
+ (V8DF "TARGET_AVX512F") (V4DF "TARGET_AVX") (V2DF "TARGET_SSE2")
+ (V4TI "TARGET_AVX512F") (V2TI "TARGET_AVX")])
+
+;; Likewise, but for initialization from half sized vectors.
+;; Thus, these are all VEC_INIT_MODE modes except V2??.
+(define_mode_iterator VEC_INIT_HALF_MODE
+ [(V64QI "TARGET_AVX512F") (V32QI "TARGET_AVX") V16QI
+ (V32HI "TARGET_AVX512F") (V16HI "TARGET_AVX") V8HI
+ (V16SI "TARGET_AVX512F") (V8SI "TARGET_AVX") V4SI
+ (V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX")
+ (V16SF "TARGET_AVX512F") (V8SF "TARGET_AVX") V4SF
+ (V8DF "TARGET_AVX512F") (V4DF "TARGET_AVX")
+ (V4TI "TARGET_AVX512F")])
+
+(define_expand "vec_init<mode><ssescalarmodelower>"
+ [(match_operand:VEC_INIT_MODE 0 "register_operand")
(match_operand 1)]
- "TARGET_AVX"
+ "TARGET_SSE"
{
ix86_expand_vector_init (false, operands[0], operands[1]);
DONE;
})
-(define_expand "vec_init<mode>"
- [(match_operand:VF48_I1248 0 "register_operand")
+(define_expand "vec_init<mode><ssehalfvecmodelower>"
+ [(match_operand:VEC_INIT_HALF_MODE 0 "register_operand")
(match_operand 1)]
- "TARGET_AVX512F"
+ "TARGET_SSE"
{
ix86_expand_vector_init (false, operands[0], operands[1]);
DONE;
diff --git a/gcc/config/i386/t-openbsd b/gcc/config/i386/t-openbsd
deleted file mode 100644
index 4f8ff657a93..00000000000
--- a/gcc/config/i386/t-openbsd
+++ /dev/null
@@ -1,4 +0,0 @@
-# gdb gets confused if pic code is linked with non pic
-# We cope by building variants of libgcc.
-MULTILIB_OPTIONS = fpic
-MULTILIB_MATCHES=fpic=fPIC
diff --git a/gcc/config/i386/winnt-cxx.c b/gcc/config/i386/winnt-cxx.c
index d6bf0afbab0..a3569fb1b56 100644
--- a/gcc/config/i386/winnt-cxx.c
+++ b/gcc/config/i386/winnt-cxx.c
@@ -114,14 +114,11 @@ i386_pe_adjust_class_at_definition (tree t)
decl_attributes (&ti_decl, na, 0);
}
- /* Check static VAR_DECL's. */
+ /* Check FUNCTION_DECL's and static VAR_DECL's. */
for (member = TYPE_FIELDS (t); member; member = DECL_CHAIN (member))
if (TREE_CODE (member) == VAR_DECL)
maybe_add_dllexport (member);
-
- /* Check FUNCTION_DECL's. */
- for (member = TYPE_METHODS (t); member; member = DECL_CHAIN (member))
- if (TREE_CODE (member) == FUNCTION_DECL)
+ else if (TREE_CODE (member) == FUNCTION_DECL)
{
tree thunk;
maybe_add_dllexport (member);
@@ -130,9 +127,11 @@ i386_pe_adjust_class_at_definition (tree t)
for (thunk = DECL_THUNKS (member); thunk;
thunk = TREE_CHAIN (thunk))
maybe_add_dllexport (thunk);
- }
+ }
+
/* Check vtables */
- for (member = CLASSTYPE_VTABLES (t); member; member = DECL_CHAIN (member))
+ for (member = CLASSTYPE_VTABLES (t);
+ member; member = DECL_CHAIN (member))
if (TREE_CODE (member) == VAR_DECL)
maybe_add_dllexport (member);
}
@@ -147,14 +146,11 @@ i386_pe_adjust_class_at_definition (tree t)
That is just right since out-of class declarations can only be a
definition. */
- /* Check static VAR_DECL's. */
+ /* Check FUNCTION_DECL's and static VAR_DECL's. */
for (member = TYPE_FIELDS (t); member; member = DECL_CHAIN (member))
if (TREE_CODE (member) == VAR_DECL)
maybe_add_dllimport (member);
-
- /* Check FUNCTION_DECL's. */
- for (member = TYPE_METHODS (t); member; member = DECL_CHAIN (member))
- if (TREE_CODE (member) == FUNCTION_DECL)
+ else if (TREE_CODE (member) == FUNCTION_DECL)
{
tree thunk;
maybe_add_dllimport (member);
@@ -163,10 +159,11 @@ i386_pe_adjust_class_at_definition (tree t)
for (thunk = DECL_THUNKS (member); thunk;
thunk = DECL_CHAIN (thunk))
maybe_add_dllimport (thunk);
- }
+ }
/* Check vtables */
- for (member = CLASSTYPE_VTABLES (t); member; member = DECL_CHAIN (member))
+ for (member = CLASSTYPE_VTABLES (t);
+ member; member = DECL_CHAIN (member))
if (TREE_CODE (member) == VAR_DECL)
maybe_add_dllimport (member);
diff --git a/gcc/config/i386/winnt.c b/gcc/config/i386/winnt.c
index 8272c7fddc1..405f74a7597 100644
--- a/gcc/config/i386/winnt.c
+++ b/gcc/config/i386/winnt.c
@@ -30,6 +30,7 @@ along with GCC; see the file COPYING3. If not see
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "emit-rtl.h"
#include "cgraph.h"
#include "lto-streamer.h"
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index c8e4c74bbdb..79c323f67ee 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see
#include "df.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "optabs.h"
#include "regs.h"
#include "emit-rtl.h"
diff --git a/gcc/config/ia64/vect.md b/gcc/config/ia64/vect.md
index a565df53bfa..8e76864a77f 100644
--- a/gcc/config/ia64/vect.md
+++ b/gcc/config/ia64/vect.md
@@ -1015,7 +1015,7 @@
}
[(set_attr "itanium_class" "mmshf")])
-(define_expand "vec_initv2si"
+(define_expand "vec_initv2sisi"
[(match_operand:V2SI 0 "gr_register_operand" "")
(match_operand 1 "" "")]
""
@@ -1299,7 +1299,7 @@
"fselect %0 = %F2, %F3, %1"
[(set_attr "itanium_class" "fmisc")])
-(define_expand "vec_initv2sf"
+(define_expand "vec_initv2sfsf"
[(match_operand:V2SF 0 "fr_register_operand" "")
(match_operand 1 "" "")]
""
@@ -1483,7 +1483,7 @@
operands[1] = gen_rtx_REG (SFmode, REGNO (operands[1]));
})
-(define_expand "vec_extractv2sf"
+(define_expand "vec_extractv2sfsf"
[(set (match_operand:SF 0 "register_operand" "")
(unspec:SF [(match_operand:V2SF 1 "register_operand" "")
(match_operand:DI 2 "const_int_operand" "")]
diff --git a/gcc/config/iq2000/iq2000.c b/gcc/config/iq2000/iq2000.c
index 99abd76c5a6..5a92164ef05 100644
--- a/gcc/config/iq2000/iq2000.c
+++ b/gcc/config/iq2000/iq2000.c
@@ -24,6 +24,8 @@ along with GCC; see the file COPYING3. If not see
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "df.h"
#include "memmodel.h"
#include "tm_p.h"
diff --git a/gcc/config/lm32/lm32.c b/gcc/config/lm32/lm32.c
index 2231412e566..214cc0ac5fd 100644
--- a/gcc/config/lm32/lm32.c
+++ b/gcc/config/lm32/lm32.c
@@ -26,6 +26,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "df.h"
#include "memmodel.h"
#include "tm_p.h"
diff --git a/gcc/config/lm32/rtems.h b/gcc/config/lm32/rtems.h
index 67075ab47da..24d21e8b898 100644
--- a/gcc/config/lm32/rtems.h
+++ b/gcc/config/lm32/rtems.h
@@ -1,21 +1,26 @@
/* Definitions for rtems targeting a lm32 using ELF.
Copyright (C) 2009-2017 Free Software Foundation, Inc.
-This file is part of GCC.
+ 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 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.
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
+ 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/>. */
/* Target OS builtins. */
#undef TARGET_OS_CPP_BUILTINS
diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c
index b23f5aaf21a..95e97abf533 100644
--- a/gcc/config/m32c/m32c.c
+++ b/gcc/config/m32c/m32c.c
@@ -25,6 +25,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "df.h"
#include "memmodel.h"
#include "tm_p.h"
diff --git a/gcc/config/m32c/rtems.h b/gcc/config/m32c/rtems.h
index 733e04ba386..d70493ddc81 100644
--- a/gcc/config/m32c/rtems.h
+++ b/gcc/config/m32c/rtems.h
@@ -2,21 +2,26 @@
Copyright (C) 2008-2017 Free Software Foundation, Inc.
Contributed by Joel Sherrill (joel@OARcorp.com).
-This file is part of GCC.
+ 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 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.
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
+ 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/>. */
/* Target OS builtins. */
#undef TARGET_OS_CPP_BUILTINS
diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c
index 4efb4b9c287..d7893d7550a 100644
--- a/gcc/config/m32r/m32r.c
+++ b/gcc/config/m32r/m32r.c
@@ -28,6 +28,7 @@
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "insn-config.h"
#include "emit-rtl.h"
#include "recog.h"
diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c
index c14ce86d810..89726655122 100644
--- a/gcc/config/m68k/m68k.c
+++ b/gcc/config/m68k/m68k.c
@@ -23,6 +23,8 @@ along with GCC; see the file COPYING3. If not see
#include "backend.h"
#include "cfghooks.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "rtl.h"
#include "df.h"
#include "alias.h"
diff --git a/gcc/config/m68k/rtemself.h b/gcc/config/m68k/rtemself.h
index ee9d7fdf777..f4a1eabda61 100644
--- a/gcc/config/m68k/rtemself.h
+++ b/gcc/config/m68k/rtemself.h
@@ -3,21 +3,26 @@
Copyright (C) 2007-2017 Free Software Foundation, Inc.
Contributed by Charles-Antoine Gauthier (charles.gauthier@nrc.ca).
-This file is part of GCC.
+ 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 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.
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
+ 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/>. */
/* Target OS builtins. */
diff --git a/gcc/config/mcore/mcore.c b/gcc/config/mcore/mcore.c
index c4b7c4cf94f..e67376fb6aa 100644
--- a/gcc/config/mcore/mcore.c
+++ b/gcc/config/mcore/mcore.c
@@ -28,6 +28,7 @@
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "emit-rtl.h"
#include "diagnostic-core.h"
#include "stor-layout.h"
diff --git a/gcc/config/microblaze/microblaze.c b/gcc/config/microblaze/microblaze.c
index 15ceac0b346..2cdd24056a5 100644
--- a/gcc/config/microblaze/microblaze.c
+++ b/gcc/config/microblaze/microblaze.c
@@ -26,6 +26,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "df.h"
#include "memmodel.h"
#include "tm_p.h"
diff --git a/gcc/config/microblaze/rtems.h b/gcc/config/microblaze/rtems.h
index 980d8e72e1e..0ae8bbd8704 100644
--- a/gcc/config/microblaze/rtems.h
+++ b/gcc/config/microblaze/rtems.h
@@ -1,21 +1,26 @@
/* Definitions for rtems targeting a microblaze using ELF.
Copyright (C) 2012-2017 Free Software Foundation, Inc.
-This file is part of GCC.
+ 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 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.
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
+ 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/>. */
/* Specify predefined symbols in preprocessor. */
diff --git a/gcc/config/mips/loongson.md b/gcc/config/mips/loongson.md
index 85842551b0d..b48dfa0dc71 100644
--- a/gcc/config/mips/loongson.md
+++ b/gcc/config/mips/loongson.md
@@ -119,7 +119,7 @@
;; Initialization of a vector.
-(define_expand "vec_init<mode>"
+(define_expand "vec_init<mode><unitmode>"
[(set (match_operand:VWHB 0 "register_operand")
(match_operand 1 ""))]
"TARGET_HARD_FLOAT && TARGET_LOONGSON_VECTORS"
diff --git a/gcc/config/mips/mips-msa.md b/gcc/config/mips/mips-msa.md
index c80be471026..87d889d7296 100644
--- a/gcc/config/mips/mips-msa.md
+++ b/gcc/config/mips/mips-msa.md
@@ -231,7 +231,7 @@
(V4SI "uimm5")
(V2DI "uimm6")])
-(define_expand "vec_init<mode>"
+(define_expand "vec_init<mode><unitmode>"
[(match_operand:MSA 0 "register_operand")
(match_operand:MSA 1 "")]
"ISA_HAS_MSA"
@@ -311,7 +311,7 @@
DONE;
})
-(define_expand "vec_extract<mode>"
+(define_expand "vec_extract<mode><unitmode>"
[(match_operand:<UNITMODE> 0 "register_operand")
(match_operand:IMSA 1 "register_operand")
(match_operand 2 "const_<indeximm>_operand")]
@@ -329,7 +329,7 @@
DONE;
})
-(define_expand "vec_extract<mode>"
+(define_expand "vec_extract<mode><unitmode>"
[(match_operand:<UNITMODE> 0 "register_operand")
(match_operand:FMSA 1 "register_operand")
(match_operand 2 "const_<indeximm>_operand")]
diff --git a/gcc/config/mips/mips-ps-3d.md b/gcc/config/mips/mips-ps-3d.md
index 64733984170..81820b13b11 100644
--- a/gcc/config/mips/mips-ps-3d.md
+++ b/gcc/config/mips/mips-ps-3d.md
@@ -254,7 +254,7 @@
})
; vec_init
-(define_expand "vec_initv2sf"
+(define_expand "vec_initv2sfsf"
[(match_operand:V2SF 0 "register_operand")
(match_operand:V2SF 1 "")]
"TARGET_HARD_FLOAT && TARGET_PAIRED_SINGLE_FLOAT"
@@ -282,7 +282,7 @@
;; emulated. There is no other way to get a vector mode bitfield extract
;; currently.
-(define_insn "vec_extractv2sf"
+(define_insn "vec_extractv2sfsf"
[(set (match_operand:SF 0 "register_operand" "=f")
(vec_select:SF (match_operand:V2SF 1 "register_operand" "f")
(parallel
@@ -379,7 +379,7 @@
rtx temp = gen_reg_rtx (V2SFmode);
emit_insn (gen_mips_addr_ps (temp, operands[1], operands[1]));
rtx lane = BYTES_BIG_ENDIAN ? const1_rtx : const0_rtx;
- emit_insn (gen_vec_extractv2sf (operands[0], temp, lane));
+ emit_insn (gen_vec_extractv2sfsf (operands[0], temp, lane));
DONE;
})
@@ -757,7 +757,7 @@
rtx temp = gen_reg_rtx (V2SFmode);
mips_expand_vec_reduc (temp, operands[1], gen_sminv2sf3);
rtx lane = BYTES_BIG_ENDIAN ? const1_rtx : const0_rtx;
- emit_insn (gen_vec_extractv2sf (operands[0], temp, lane));
+ emit_insn (gen_vec_extractv2sfsf (operands[0], temp, lane));
DONE;
})
@@ -769,6 +769,6 @@
rtx temp = gen_reg_rtx (V2SFmode);
mips_expand_vec_reduc (temp, operands[1], gen_smaxv2sf3);
rtx lane = BYTES_BIG_ENDIAN ? const1_rtx : const0_rtx;
- emit_insn (gen_vec_extractv2sf (operands[0], temp, lane));
+ emit_insn (gen_vec_extractv2sfsf (operands[0], temp, lane));
DONE;
})
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 6bfd86a07af..d2737a6ee80 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -34,6 +34,7 @@ along with GCC; see the file COPYING3. If not see
#include "df.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "optabs.h"
#include "regs.h"
#include "emit-rtl.h"
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index 971af6f8e09..f45c3eb98ce 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -917,6 +917,11 @@
(V16QI "QI") (V8HI "HI") (V4SI "SI") (V2DI "DI")
(V2DF "DF")])
+;; As above, but in lower case.
+(define_mode_attr unitmode [(SF "sf") (DF "df") (V2SF "sf") (V4SF "sf")
+ (V16QI "qi") (V8QI "qi") (V8HI "hi") (V4HI "hi")
+ (V4SI "si") (V2SI "si") (V2DI "di") (V2DF "df")])
+
;; This attribute gives the integer mode that has the same size as a
;; fixed-point mode.
(define_mode_attr IMODE [(QQ "QI") (HQ "HI") (SQ "SI") (DQ "DI")
diff --git a/gcc/config/mips/rtems.h b/gcc/config/mips/rtems.h
index 2ce03de20e1..8699117b7bb 100644
--- a/gcc/config/mips/rtems.h
+++ b/gcc/config/mips/rtems.h
@@ -2,21 +2,26 @@
Copyright (C) 1996-2017 Free Software Foundation, Inc.
Contributed by Joel Sherrill (joel@OARcorp.com).
-This file is part of GCC.
+ 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 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.
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
+ 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/>. */
/* Specify predefined symbols in preprocessor. */
diff --git a/gcc/config/mmix/mmix.c b/gcc/config/mmix/mmix.c
index 9849c19e076..6ca2fd9441c 100644
--- a/gcc/config/mmix/mmix.c
+++ b/gcc/config/mmix/mmix.c
@@ -25,6 +25,8 @@ along with GCC; see the file COPYING3. If not see
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "df.h"
#include "memmodel.h"
#include "tm_p.h"
diff --git a/gcc/config/mn10300/mn10300.c b/gcc/config/mn10300/mn10300.c
index 301207fa66a..f46caac7e94 100644
--- a/gcc/config/mn10300/mn10300.c
+++ b/gcc/config/mn10300/mn10300.c
@@ -25,6 +25,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "cfghooks.h"
#include "cfgloop.h"
#include "df.h"
diff --git a/gcc/config/moxie/moxie.c b/gcc/config/moxie/moxie.c
index 70d6d7e2eaf..19cd83f5193 100644
--- a/gcc/config/moxie/moxie.c
+++ b/gcc/config/moxie/moxie.c
@@ -25,6 +25,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "df.h"
#include "regs.h"
#include "memmodel.h"
diff --git a/gcc/config/moxie/rtems.h b/gcc/config/moxie/rtems.h
index d23061bb6c2..8c97238002a 100644
--- a/gcc/config/moxie/rtems.h
+++ b/gcc/config/moxie/rtems.h
@@ -2,21 +2,26 @@
Copyright (C) 2010-2017 Free Software Foundation, Inc.
Contributed by Anthony Green (green@moxielogic.com)
-This file is part of GCC.
+ 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 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.
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
+ 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/>. */
/* Target OS preprocessor built-ins. */
#define TARGET_OS_CPP_BUILTINS() \
diff --git a/gcc/config/msp430/msp430.c b/gcc/config/msp430/msp430.c
index 6acab1e70cb..1ab79a722ed 100644
--- a/gcc/config/msp430/msp430.c
+++ b/gcc/config/msp430/msp430.c
@@ -25,6 +25,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "gimple-expr.h"
#include "df.h"
#include "memmodel.h"
diff --git a/gcc/config/nds32/nds32-isr.c b/gcc/config/nds32/nds32-isr.c
index 29e94d004c6..7d7b9e27ca6 100644
--- a/gcc/config/nds32/nds32-isr.c
+++ b/gcc/config/nds32/nds32-isr.c
@@ -27,6 +27,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "diagnostic-core.h"
#include "output.h"
diff --git a/gcc/config/nds32/nds32.c b/gcc/config/nds32/nds32.c
index 705d223e496..14310de8672 100644
--- a/gcc/config/nds32/nds32.c
+++ b/gcc/config/nds32/nds32.c
@@ -27,6 +27,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "df.h"
#include "memmodel.h"
#include "tm_p.h"
diff --git a/gcc/config/nios2/nios2.c b/gcc/config/nios2/nios2.c
index 2fc9a080402..884b1dc367e 100644
--- a/gcc/config/nios2/nios2.c
+++ b/gcc/config/nios2/nios2.c
@@ -27,6 +27,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "df.h"
#include "memmodel.h"
#include "tm_p.h"
diff --git a/gcc/config/nios2/rtems.h b/gcc/config/nios2/rtems.h
index 4e772175721..344a1e91b07 100644
--- a/gcc/config/nios2/rtems.h
+++ b/gcc/config/nios2/rtems.h
@@ -3,21 +3,26 @@
Contributed by Chris Johns (chrisj@rtems.org).
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GCC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
+ This file 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/>. */
/* Specify predefined symbols in preprocessor. */
#define TARGET_OS_CPP_BUILTINS() \
diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c
index d0aa054c713..8babac75bc3 100644
--- a/gcc/config/nvptx/nvptx.c
+++ b/gcc/config/nvptx/nvptx.c
@@ -62,6 +62,7 @@
#include "internal-fn.h"
#include "gimple-iterator.h"
#include "stringpool.h"
+#include "attribs.h"
#include "tree-vrp.h"
#include "tree-ssa-operands.h"
#include "tree-ssanames.h"
@@ -180,6 +181,10 @@ nvptx_option_override (void)
if (!global_options_set.x_flag_no_common)
flag_no_common = 1;
+ /* The patch area requires nops, which we don't have. */
+ if (function_entry_patch_area_size > 0)
+ sorry ("not generating patch area, nops not supported");
+
/* Assumes that it will see only hard registers. */
flag_var_tracking = 0;
@@ -5061,7 +5066,9 @@ nvptx_lockless_update (location_t loc, gimple_stmt_iterator *gsi,
*gsi = gsi_for_stmt (gsi_stmt (*gsi));
post_edge->flags ^= EDGE_TRUE_VALUE | EDGE_FALLTHRU;
+ post_edge->probability = profile_probability::even ();
edge loop_edge = make_edge (loop_bb, loop_bb, EDGE_FALSE_VALUE);
+ loop_edge->probability = profile_probability::even ();
set_immediate_dominator (CDI_DOMINATORS, loop_bb, pre_bb);
set_immediate_dominator (CDI_DOMINATORS, post_bb, loop_bb);
@@ -5134,7 +5141,9 @@ nvptx_lockfull_update (location_t loc, gimple_stmt_iterator *gsi,
/* Create the lock loop ... */
locked_edge->flags ^= EDGE_TRUE_VALUE | EDGE_FALLTHRU;
- make_edge (lock_bb, lock_bb, EDGE_FALSE_VALUE);
+ locked_edge->probability = profile_probability::even ();
+ edge loop_edge = make_edge (lock_bb, lock_bb, EDGE_FALSE_VALUE);
+ loop_edge->probability = profile_probability::even ();
set_immediate_dominator (CDI_DOMINATORS, lock_bb, entry_bb);
set_immediate_dominator (CDI_DOMINATORS, update_bb, lock_bb);
@@ -5273,6 +5282,7 @@ nvptx_goacc_reduction_init (gcall *call)
/* Fixup flags from call_bb to init_bb. */
init_edge->flags ^= EDGE_FALLTHRU | EDGE_TRUE_VALUE;
+ init_edge->probability = profile_probability::even ();
/* Set the initialization stmts. */
gimple_seq init_seq = NULL;
@@ -5288,6 +5298,7 @@ nvptx_goacc_reduction_init (gcall *call)
/* Create false edge from call_bb to dst_bb. */
edge nop_edge = make_edge (call_bb, dst_bb, EDGE_FALSE_VALUE);
+ nop_edge->probability = profile_probability::even ();
/* Create phi node in dst block. */
gphi *phi = create_phi_node (lhs, dst_bb);
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index 2a78018650c..52f76cfd5f1 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -29,6 +29,7 @@ along with GCC; see the file COPYING3. If not see
#include "df.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "optabs.h"
#include "regs.h"
#include "emit-rtl.h"
diff --git a/gcc/config/pdp11/pdp11.c b/gcc/config/pdp11/pdp11.c
index c2ce6e8abe5..fbbb34390f4 100644
--- a/gcc/config/pdp11/pdp11.c
+++ b/gcc/config/pdp11/pdp11.c
@@ -25,6 +25,8 @@ along with GCC; see the file COPYING3. If not see
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "df.h"
#include "memmodel.h"
#include "tm_p.h"
diff --git a/gcc/config/powerpcspe/altivec.md b/gcc/config/powerpcspe/altivec.md
index 649f1810d16..e98309a8ad4 100644
--- a/gcc/config/powerpcspe/altivec.md
+++ b/gcc/config/powerpcspe/altivec.md
@@ -301,7 +301,7 @@
for (i = 0; i < num_elements; i++)
RTVEC_ELT (v, i) = constm1_rtx;
- emit_insn (gen_vec_initv4si (dest, gen_rtx_PARALLEL (mode, v)));
+ emit_insn (gen_vec_initv4sisi (dest, gen_rtx_PARALLEL (mode, v)));
emit_insn (gen_rtx_SET (dest, gen_rtx_ASHIFT (mode, dest, dest)));
DONE;
})
@@ -2222,7 +2222,7 @@
RTVEC_ELT (v, 2) = GEN_INT (mask_val);
RTVEC_ELT (v, 3) = GEN_INT (mask_val);
- emit_insn (gen_vec_initv4si (mask, gen_rtx_PARALLEL (V4SImode, v)));
+ emit_insn (gen_vec_initv4sisi (mask, gen_rtx_PARALLEL (V4SImode, v)));
emit_insn (gen_vector_select_v4sf (operands[0], operands[1], operands[2],
gen_lowpart (V4SFmode, mask)));
DONE;
@@ -3014,7 +3014,7 @@
RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, be ? 16 : 0);
RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, be ? 7 : 16);
- emit_insn (gen_vec_initv16qi (mask, gen_rtx_PARALLEL (V16QImode, v)));
+ emit_insn (gen_vec_initv16qiqi (mask, gen_rtx_PARALLEL (V16QImode, v)));
emit_insn (gen_vperm_v16qiv8hi (operands[0], operands[1], vzero, mask));
DONE;
}")
@@ -3050,7 +3050,7 @@
RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, be ? 6 : 17);
RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, be ? 7 : 16);
- emit_insn (gen_vec_initv16qi (mask, gen_rtx_PARALLEL (V16QImode, v)));
+ emit_insn (gen_vec_initv16qiqi (mask, gen_rtx_PARALLEL (V16QImode, v)));
emit_insn (gen_vperm_v8hiv4si (operands[0], operands[1], vzero, mask));
DONE;
}")
@@ -3086,7 +3086,7 @@
RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, be ? 16 : 8);
RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, be ? 15 : 16);
- emit_insn (gen_vec_initv16qi (mask, gen_rtx_PARALLEL (V16QImode, v)));
+ emit_insn (gen_vec_initv16qiqi (mask, gen_rtx_PARALLEL (V16QImode, v)));
emit_insn (gen_vperm_v16qiv8hi (operands[0], operands[1], vzero, mask));
DONE;
}")
@@ -3122,7 +3122,7 @@
RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, be ? 14 : 17);
RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, be ? 15 : 16);
- emit_insn (gen_vec_initv16qi (mask, gen_rtx_PARALLEL (V16QImode, v)));
+ emit_insn (gen_vec_initv16qiqi (mask, gen_rtx_PARALLEL (V16QImode, v)));
emit_insn (gen_vperm_v8hiv4si (operands[0], operands[1], vzero, mask));
DONE;
}")
@@ -3363,7 +3363,7 @@
= gen_rtx_CONST_INT (QImode, BYTES_BIG_ENDIAN ? 2 * i + 17 : 15 - 2 * i);
}
- emit_insn (gen_vec_initv16qi (mask, gen_rtx_PARALLEL (V16QImode, v)));
+ emit_insn (gen_vec_initv16qiqi (mask, gen_rtx_PARALLEL (V16QImode, v)));
emit_insn (gen_altivec_vmulesb (even, operands[1], operands[2]));
emit_insn (gen_altivec_vmulosb (odd, operands[1], operands[2]));
emit_insn (gen_altivec_vperm_v8hiv16qi (operands[0], even, odd, mask));
diff --git a/gcc/config/powerpcspe/paired.md b/gcc/config/powerpcspe/paired.md
index 09123eec887..e12f07fc9b8 100644
--- a/gcc/config/powerpcspe/paired.md
+++ b/gcc/config/powerpcspe/paired.md
@@ -377,7 +377,7 @@
"ps_muls1 %0, %1, %2"
[(set_attr "type" "fp")])
-(define_expand "vec_initv2sf"
+(define_expand "vec_initv2sfsf"
[(match_operand:V2SF 0 "gpc_reg_operand" "=f")
(match_operand 1 "" "")]
"TARGET_PAIRED_FLOAT"
diff --git a/gcc/config/powerpcspe/powerpcspe.c b/gcc/config/powerpcspe/powerpcspe.c
index b94afd5ca2e..f2840894fc1 100644
--- a/gcc/config/powerpcspe/powerpcspe.c
+++ b/gcc/config/powerpcspe/powerpcspe.c
@@ -31,6 +31,7 @@
#include "df.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "expmed.h"
#include "optabs.h"
#include "regs.h"
diff --git a/gcc/config/powerpcspe/rtems.h b/gcc/config/powerpcspe/rtems.h
index 54a36de6eb4..1ab4e313fdb 100644
--- a/gcc/config/powerpcspe/rtems.h
+++ b/gcc/config/powerpcspe/rtems.h
@@ -14,8 +14,13 @@
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3. If not see
+ 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/>. */
/* Specify predefined symbols in preprocessor. */
diff --git a/gcc/config/powerpcspe/vector.md b/gcc/config/powerpcspe/vector.md
index e6489a861cd..6c43186f8aa 100644
--- a/gcc/config/powerpcspe/vector.md
+++ b/gcc/config/powerpcspe/vector.md
@@ -74,6 +74,16 @@
(V1TI "TI")
(TI "TI")])
+;; As above, but in lower case
+(define_mode_attr VEC_base_l [(V16QI "qi")
+ (V8HI "hi")
+ (V4SI "si")
+ (V2DI "di")
+ (V4SF "sf")
+ (V2DF "df")
+ (V1TI "ti")
+ (TI "ti")])
+
;; Same size integer type for floating point data
(define_mode_attr VEC_int [(V4SF "v4si")
(V2DF "v2di")])
@@ -1017,7 +1027,7 @@
;; Vector initialization, set, extract
-(define_expand "vec_init<mode>"
+(define_expand "vec_init<mode><VEC_base_l>"
[(match_operand:VEC_E 0 "vlogical_operand" "")
(match_operand:VEC_E 1 "" "")]
"VECTOR_MEM_ALTIVEC_OR_VSX_P (<MODE>mode)"
@@ -1036,7 +1046,7 @@
DONE;
})
-(define_expand "vec_extract<mode>"
+(define_expand "vec_extract<mode><VEC_base_l>"
[(match_operand:<VEC_base> 0 "register_operand" "")
(match_operand:VEC_E 1 "vlogical_operand" "")
(match_operand 2 "const_int_operand" "")]
diff --git a/gcc/config/riscv/riscv.c b/gcc/config/riscv/riscv.c
index 57b2edbcb43..cbf2f79bc4d 100644
--- a/gcc/config/riscv/riscv.c
+++ b/gcc/config/riscv/riscv.c
@@ -31,6 +31,8 @@ along with GCC; see the file COPYING3. If not see
#include "output.h"
#include "alias.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "varasm.h"
#include "stor-layout.h"
#include "calls.h"
diff --git a/gcc/config/riscv/rtems.h b/gcc/config/riscv/rtems.h
new file mode 100644
index 00000000000..221e2f69815
--- /dev/null
+++ b/gcc/config/riscv/rtems.h
@@ -0,0 +1,31 @@
+/* Definitions for RISC-V RTEMS systems with ELF format.
+ Copyright (C) 2017 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/>. */
+
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS() \
+ do { \
+ builtin_define ("__rtems__"); \
+ builtin_define ("__USE_INIT_FINI__"); \
+ builtin_assert ("system=rtems"); \
+ } while (0)
diff --git a/gcc/config/rl78/rl78.c b/gcc/config/rl78/rl78.c
index 460775cb995..f93116230d5 100644
--- a/gcc/config/rl78/rl78.c
+++ b/gcc/config/rl78/rl78.c
@@ -29,6 +29,7 @@
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "optabs.h"
#include "emit-rtl.h"
#include "recog.h"
diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index 71cdca523df..c8e508cf0a0 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -355,6 +355,7 @@
#define vec_vsx_ld __builtin_vec_vsx_ld
#define vec_vsx_st __builtin_vec_vsx_st
#define vec_xl __builtin_vec_vsx_ld
+#define vec_xl_be __builtin_vec_xl_be
#define vec_xst __builtin_vec_vsx_st
/* Note, xxsldi and xxpermdi were added as __builtin_vsx_<xxx> functions
@@ -449,6 +450,9 @@
#define vec_insert_exp __builtin_vec_insert_exp
#define vec_test_data_class __builtin_vec_test_data_class
+#define vec_extract_fp_from_shorth __builtin_vec_vextract_fp_from_shorth
+#define vec_extract_fp_from_shortl __builtin_vec_vextract_fp_from_shortl
+
#define scalar_extract_exp __builtin_vec_scalar_extract_exp
#define scalar_extract_sig __builtin_vec_scalar_extract_sig
#define scalar_insert_exp __builtin_vec_scalar_insert_exp
diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md
index 91c56512308..4077afdadb6 100644
--- a/gcc/config/rs6000/altivec.md
+++ b/gcc/config/rs6000/altivec.md
@@ -36,10 +36,14 @@
UNSPEC_VMULESB
UNSPEC_VMULEUH
UNSPEC_VMULESH
+ UNSPEC_VMULEUW
+ UNSPEC_VMULESW
UNSPEC_VMULOUB
UNSPEC_VMULOSB
UNSPEC_VMULOUH
UNSPEC_VMULOSH
+ UNSPEC_VMULOUW
+ UNSPEC_VMULOSW
UNSPEC_VPKPX
UNSPEC_VPACK_SIGN_SIGN_SAT
UNSPEC_VPACK_SIGN_UNS_SAT
@@ -307,7 +311,7 @@
for (i = 0; i < num_elements; i++)
RTVEC_ELT (v, i) = constm1_rtx;
- emit_insn (gen_vec_initv4si (dest, gen_rtx_PARALLEL (mode, v)));
+ emit_insn (gen_vec_initv4sisi (dest, gen_rtx_PARALLEL (mode, v)));
emit_insn (gen_rtx_SET (dest, gen_rtx_ASHIFT (mode, dest, dest)));
DONE;
})
@@ -1538,6 +1542,41 @@
"vmulosh %0,%1,%2"
[(set_attr "type" "veccomplex")])
+(define_insn "altivec_vmuleuw"
+ [(set (match_operand:V2DI 0 "register_operand" "=v")
+ (unspec:V2DI [(match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V4SI 2 "register_operand" "v")]
+ UNSPEC_VMULEUW))]
+ "TARGET_P8_VECTOR"
+ "vmuleuw %0,%1,%2"
+ [(set_attr "type" "veccomplex")])
+
+(define_insn "altivec_vmulouw"
+ [(set (match_operand:V2DI 0 "register_operand" "=v")
+ (unspec:V2DI [(match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V4SI 2 "register_operand" "v")]
+ UNSPEC_VMULOUW))]
+ "TARGET_P8_VECTOR"
+ "vmulouw %0,%1,%2"
+ [(set_attr "type" "veccomplex")])
+
+(define_insn "altivec_vmulesw"
+ [(set (match_operand:V2DI 0 "register_operand" "=v")
+ (unspec:V2DI [(match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V4SI 2 "register_operand" "v")]
+ UNSPEC_VMULESW))]
+ "TARGET_P8_VECTOR"
+ "vmulesw %0,%1,%2"
+ [(set_attr "type" "veccomplex")])
+
+(define_insn "altivec_vmulosw"
+ [(set (match_operand:V2DI 0 "register_operand" "=v")
+ (unspec:V2DI [(match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V4SI 2 "register_operand" "v")]
+ UNSPEC_VMULOSW))]
+ "TARGET_P8_VECTOR"
+ "vmulosw %0,%1,%2"
+ [(set_attr "type" "veccomplex")])
;; Vector pack/unpack
(define_insn "altivec_vpkpx"
@@ -2228,7 +2267,7 @@
RTVEC_ELT (v, 2) = GEN_INT (mask_val);
RTVEC_ELT (v, 3) = GEN_INT (mask_val);
- emit_insn (gen_vec_initv4si (mask, gen_rtx_PARALLEL (V4SImode, v)));
+ emit_insn (gen_vec_initv4sisi (mask, gen_rtx_PARALLEL (V4SImode, v)));
emit_insn (gen_vector_select_v4sf (operands[0], operands[1], operands[2],
gen_lowpart (V4SFmode, mask)));
DONE;
@@ -3370,7 +3409,7 @@
RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, be ? 16 : 0);
RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, be ? 7 : 16);
- emit_insn (gen_vec_initv16qi (mask, gen_rtx_PARALLEL (V16QImode, v)));
+ emit_insn (gen_vec_initv16qiqi (mask, gen_rtx_PARALLEL (V16QImode, v)));
emit_insn (gen_vperm_v16qiv8hi (operands[0], operands[1], vzero, mask));
DONE;
}")
@@ -3406,7 +3445,7 @@
RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, be ? 6 : 17);
RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, be ? 7 : 16);
- emit_insn (gen_vec_initv16qi (mask, gen_rtx_PARALLEL (V16QImode, v)));
+ emit_insn (gen_vec_initv16qiqi (mask, gen_rtx_PARALLEL (V16QImode, v)));
emit_insn (gen_vperm_v8hiv4si (operands[0], operands[1], vzero, mask));
DONE;
}")
@@ -3442,7 +3481,7 @@
RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, be ? 16 : 8);
RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, be ? 15 : 16);
- emit_insn (gen_vec_initv16qi (mask, gen_rtx_PARALLEL (V16QImode, v)));
+ emit_insn (gen_vec_initv16qiqi (mask, gen_rtx_PARALLEL (V16QImode, v)));
emit_insn (gen_vperm_v16qiv8hi (operands[0], operands[1], vzero, mask));
DONE;
}")
@@ -3478,7 +3517,7 @@
RTVEC_ELT (v, 14) = gen_rtx_CONST_INT (QImode, be ? 14 : 17);
RTVEC_ELT (v, 15) = gen_rtx_CONST_INT (QImode, be ? 15 : 16);
- emit_insn (gen_vec_initv16qi (mask, gen_rtx_PARALLEL (V16QImode, v)));
+ emit_insn (gen_vec_initv16qiqi (mask, gen_rtx_PARALLEL (V16QImode, v)));
emit_insn (gen_vperm_v8hiv4si (operands[0], operands[1], vzero, mask));
DONE;
}")
@@ -3719,7 +3758,7 @@
= gen_rtx_CONST_INT (QImode, BYTES_BIG_ENDIAN ? 2 * i + 17 : 15 - 2 * i);
}
- emit_insn (gen_vec_initv16qi (mask, gen_rtx_PARALLEL (V16QImode, v)));
+ emit_insn (gen_vec_initv16qiqi (mask, gen_rtx_PARALLEL (V16QImode, v)));
emit_insn (gen_altivec_vmulesb (even, operands[1], operands[2]));
emit_insn (gen_altivec_vmulosb (odd, operands[1], operands[2]));
emit_insn (gen_altivec_vperm_v8hiv16qi (operands[0], even, odd, mask));
@@ -3765,7 +3804,7 @@
RTVEC_ELT (v, i + j * size)
= GEN_INT (i + (num_elements - 1 - j) * size);
- emit_insn (gen_vec_initv16qi (mask, gen_rtx_PARALLEL (V16QImode, v)));
+ emit_insn (gen_vec_initv16qiqi (mask, gen_rtx_PARALLEL (V16QImode, v)));
emit_insn (gen_altivec_vperm_<mode> (operands[0], operands[1],
operands[1], mask));
DONE;
diff --git a/gcc/config/rs6000/paired.md b/gcc/config/rs6000/paired.md
index c9f95867c0f..b0aa329d7b8 100644
--- a/gcc/config/rs6000/paired.md
+++ b/gcc/config/rs6000/paired.md
@@ -377,7 +377,7 @@
"ps_muls1 %0, %1, %2"
[(set_attr "type" "fp")])
-(define_expand "vec_initv2sf"
+(define_expand "vec_initv2sfsf"
[(match_operand:V2SF 0 "gpc_reg_operand" "=f")
(match_operand 1 "" "")]
"TARGET_PAIRED_FLOAT"
diff --git a/gcc/config/rs6000/ppc-auxv.h b/gcc/config/rs6000/ppc-auxv.h
index c7e2e0bfbf2..dcee28a8152 100644
--- a/gcc/config/rs6000/ppc-auxv.h
+++ b/gcc/config/rs6000/ppc-auxv.h
@@ -89,6 +89,8 @@
#define PPC_FEATURE2_HTM_NOSC 0x01000000
#define PPC_FEATURE2_ARCH_3_00 0x00800000
#define PPC_FEATURE2_HAS_IEEE128 0x00400000
+#define PPC_FEATURE2_DARN 0x00200000
+#define PPC_FEATURE2_SCV 0x00100000
/* Thread Control Block (TCB) offsets of the AT_PLATFORM, AT_HWCAP and
diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md
index aa1c01b93dd..466f9131aa0 100644
--- a/gcc/config/rs6000/predicates.md
+++ b/gcc/config/rs6000/predicates.md
@@ -783,10 +783,8 @@
(and (and (match_code "mem")
(match_test "MEM_VOLATILE_P (op)"))
(if_then_else (match_test "reload_completed")
- (match_operand 0 "memory_operand")
- (if_then_else (match_test "reload_in_progress")
- (match_test "strict_memory_address_p (mode, XEXP (op, 0))")
- (match_test "memory_address_p (mode, XEXP (op, 0))")))))
+ (match_operand 0 "memory_operand")
+ (match_test "memory_address_p (mode, XEXP (op, 0))"))))
;; Return 1 if the operand is an offsettable memory operand.
(define_predicate "offsettable_mem_operand"
@@ -1142,7 +1140,7 @@
if (! volatile_ok && MEM_VOLATILE_P (op))
return 0;
- if (reload_in_progress || lra_in_progress || reload_completed)
+ if (lra_in_progress || reload_completed)
return indexed_or_indirect_address (addr, vmode);
else
return memory_address_addr_space_p (vmode, addr, MEM_ADDR_SPACE (op));
diff --git a/gcc/config/rs6000/rs6000-builtin.def b/gcc/config/rs6000/rs6000-builtin.def
index bf2c90b49fb..850164a0987 100644
--- a/gcc/config/rs6000/rs6000-builtin.def
+++ b/gcc/config/rs6000/rs6000-builtin.def
@@ -1031,10 +1031,14 @@ BU_ALTIVEC_2 (VMULEUB, "vmuleub", CONST, vec_widen_umult_even_v16qi)
BU_ALTIVEC_2 (VMULESB, "vmulesb", CONST, vec_widen_smult_even_v16qi)
BU_ALTIVEC_2 (VMULEUH, "vmuleuh", CONST, vec_widen_umult_even_v8hi)
BU_ALTIVEC_2 (VMULESH, "vmulesh", CONST, vec_widen_smult_even_v8hi)
+BU_ALTIVEC_2 (VMULEUW, "vmuleuw", CONST, altivec_vmuleuw)
+BU_ALTIVEC_2 (VMULESW, "vmulesw", CONST, altivec_vmulesw)
BU_ALTIVEC_2 (VMULOUB, "vmuloub", CONST, vec_widen_umult_odd_v16qi)
BU_ALTIVEC_2 (VMULOSB, "vmulosb", CONST, vec_widen_smult_odd_v16qi)
BU_ALTIVEC_2 (VMULOUH, "vmulouh", CONST, vec_widen_umult_odd_v8hi)
BU_ALTIVEC_2 (VMULOSH, "vmulosh", CONST, vec_widen_smult_odd_v8hi)
+BU_ALTIVEC_2 (VMULOUW, "vmulouw", CONST, altivec_vmulouw)
+BU_ALTIVEC_2 (VMULOSW, "vmulosw", CONST, altivec_vmulosw)
BU_ALTIVEC_2 (VNOR, "vnor", CONST, norv4si3)
BU_ALTIVEC_2 (VOR, "vor", CONST, iorv4si3)
BU_ALTIVEC_2 (VPKUHUM, "vpkuhum", CONST, altivec_vpkuhum)
@@ -1353,12 +1357,16 @@ BU_ALTIVEC_OVERLOAD_2 (VMRGLH, "vmrglh")
BU_ALTIVEC_OVERLOAD_2 (VMRGLW, "vmrglw")
BU_ALTIVEC_OVERLOAD_2 (VMULESB, "vmulesb")
BU_ALTIVEC_OVERLOAD_2 (VMULESH, "vmulesh")
+BU_ALTIVEC_OVERLOAD_2 (VMULESW, "vmulesw")
BU_ALTIVEC_OVERLOAD_2 (VMULEUB, "vmuleub")
BU_ALTIVEC_OVERLOAD_2 (VMULEUH, "vmuleuh")
+BU_ALTIVEC_OVERLOAD_2 (VMULEUW, "vmuleuw")
BU_ALTIVEC_OVERLOAD_2 (VMULOSB, "vmulosb")
BU_ALTIVEC_OVERLOAD_2 (VMULOSH, "vmulosh")
+BU_ALTIVEC_OVERLOAD_2 (VMULOSW, "vmulosw")
BU_ALTIVEC_OVERLOAD_2 (VMULOUB, "vmuloub")
BU_ALTIVEC_OVERLOAD_2 (VMULOUH, "vmulouh")
+BU_ALTIVEC_OVERLOAD_2 (VMULOUW, "vmulouw")
BU_ALTIVEC_OVERLOAD_2 (VPKSHSS, "vpkshss")
BU_ALTIVEC_OVERLOAD_2 (VPKSHUS, "vpkshus")
BU_ALTIVEC_OVERLOAD_2 (VPKSWSS, "vpkswss")
@@ -1727,6 +1735,14 @@ BU_VSX_X (LXVW4X_V4SF, "lxvw4x_v4sf", MEM)
BU_VSX_X (LXVW4X_V4SI, "lxvw4x_v4si", MEM)
BU_VSX_X (LXVW4X_V8HI, "lxvw4x_v8hi", MEM)
BU_VSX_X (LXVW4X_V16QI, "lxvw4x_v16qi", MEM)
+
+BU_VSX_X (XL_BE_V16QI, "xl_be_v16qi", MEM)
+BU_VSX_X (XL_BE_V8HI, "xl_be_v8hi", MEM)
+BU_VSX_X (XL_BE_V4SI, "xl_be_v4si", MEM)
+BU_VSX_X (XL_BE_V2DI, "xl_be_v2di", MEM)
+BU_VSX_X (XL_BE_V4SF, "xl_be_v4sf", MEM)
+BU_VSX_X (XL_BE_V2DF, "xl_be_v2df", MEM)
+
BU_VSX_X (STXSDX, "stxsdx", MEM)
BU_VSX_X (STXVD2X_V1TI, "stxvd2x_v1ti", MEM)
BU_VSX_X (STXVD2X_V2DF, "stxvd2x_v2df", MEM)
@@ -1827,6 +1843,7 @@ BU_VSX_OVERLOAD_1 (VUNSIGNEDO, "vunsignedo")
BU_VSX_OVERLOAD_X (LD, "ld")
BU_VSX_OVERLOAD_X (ST, "st")
BU_VSX_OVERLOAD_X (XL, "xl")
+BU_VSX_OVERLOAD_X (XL_BE, "xl_be")
BU_VSX_OVERLOAD_X (XST, "xst")
/* 2 argument CMPB instructions added in ISA 2.05. */
@@ -2058,6 +2075,9 @@ BU_P9V_OVERLOAD_1 (VSTDCNSP, "scalar_test_neg_sp")
BU_P9V_OVERLOAD_1 (REVB, "revb")
+BU_P9V_OVERLOAD_1 (VEXTRACT_FP_FROM_SHORTH, "vextract_fp_from_shorth")
+BU_P9V_OVERLOAD_1 (VEXTRACT_FP_FROM_SHORTL, "vextract_fp_from_shortl")
+
/* ISA 3.0 vector scalar overloaded 2 argument functions. */
BU_P9V_OVERLOAD_2 (VSIEDP, "scalar_insert_exp")
@@ -2076,6 +2096,8 @@ BU_P9V_VSX_1 (VEEDP, "extract_exp_dp", CONST, xvxexpdp)
BU_P9V_VSX_1 (VEESP, "extract_exp_sp", CONST, xvxexpsp)
BU_P9V_VSX_1 (VESDP, "extract_sig_dp", CONST, xvxsigdp)
BU_P9V_VSX_1 (VESSP, "extract_sig_sp", CONST, xvxsigsp)
+BU_P9V_VSX_1 (VEXTRACT_FP_FROM_SHORTH, "vextract_fp_from_shorth", CONST, vextract_fp_from_shorth)
+BU_P9V_VSX_1 (VEXTRACT_FP_FROM_SHORTL, "vextract_fp_from_shortl", CONST, vextract_fp_from_shortl)
/* 2 argument vsx vector functions added in ISA 3.0 (power9). */
BU_P9V_VSX_2 (VIEDP, "insert_exp_dp", CONST, xviexpdp)
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index 2a361260759..11febbb4d46 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -575,40 +575,6 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags,
2. If TARGET_ALTIVEC is turned off. */
if ((flags & OPTION_MASK_CRYPTO) != 0)
rs6000_define_or_undefine_macro (define_p, "__CRYPTO__");
- /* Note that the OPTION_MASK_UPPER_REGS_DF flag is automatically
- turned on in the following conditions:
- 1. If TARGET_UPPER_REGS is explicitly turned on and
- TARGET_VSX is turned on and OPTION_MASK_UPPER_REGS_DF is not
- explicitly turned off. Hereafter, the
- OPTION_MASK_UPPER_REGS_DF flag is considered to have been
- explicitly set.
- Note that the OPTION_MASK_UPPER_REGS_DF flag is automatically
- turned off in the following conditions:
- 1. If TARGET_UPPER_REGS is explicitly turned off and TARGET_VSX
- is turned on and OPTION_MASK_UPPER_REGS_DF is not explicitly
- turned on. Hereafter, the OPTION_MASK_UPPER_REGS_DF flag is
- considered to have been explicitly cleared.
- 2. If TARGET_UPPER_REGS_DF is turned on but TARGET_VSX is turned
- off. */
- if ((flags & OPTION_MASK_UPPER_REGS_DF) != 0)
- rs6000_define_or_undefine_macro (define_p, "__UPPER_REGS_DF__");
- /* Note that the OPTION_MASK_UPPER_REGS_SF flag is automatically
- turned on in the following conditions:
- 1. If TARGET_UPPER_REGS is explicitly turned on and
- TARGET_P8_VECTOR is on and OPTION_MASK_UPPER_REGS_SF is not
- turned off explicitly. Hereafter, the
- OPTION_MASK_UPPER_REGS_SF flag is considered to have been
- explicitly set.
- Note that the OPTION_MASK_UPPER_REGS_SF flag is automatically
- turned off in the following conditions:
- 1. If TARGET_UPPER_REGS is explicitly turned off and
- TARGET_P8_VECTOR is on and OPTION_MASK_UPPER_REGS_SF is not
- turned off explicitly. Hereafter, the
- OPTION_MASK_UPPER_REGS_SF flag is considered to have been
- explicitly cleared.
- 2. If TARGET_P8_VECTOR is off. */
- if ((flags & OPTION_MASK_UPPER_REGS_SF) != 0)
- rs6000_define_or_undefine_macro (define_p, "__UPPER_REGS_SF__");
/* options from the builtin masks. */
/* Note that RS6000_BTM_PAIRED is enabled only if
@@ -2232,9 +2198,9 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI, 0 },
{ ALTIVEC_BUILTIN_VEC_MULE, ALTIVEC_BUILTIN_VMULESH,
RS6000_BTI_V4SI, RS6000_BTI_V8HI, RS6000_BTI_V8HI, 0 },
- { ALTIVEC_BUILTIN_VEC_MULE, ALTIVEC_BUILTIN_VMULESH,
+ { ALTIVEC_BUILTIN_VEC_MULE, ALTIVEC_BUILTIN_VMULESW,
RS6000_BTI_V2DI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
- { ALTIVEC_BUILTIN_VEC_MULE, ALTIVEC_BUILTIN_VMULEUH,
+ { ALTIVEC_BUILTIN_VEC_MULE, ALTIVEC_BUILTIN_VMULEUW,
RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V4SI,
RS6000_BTI_unsigned_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_VMULEUB, ALTIVEC_BUILTIN_VMULEUB,
@@ -2251,9 +2217,9 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_V8HI, RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0 },
{ ALTIVEC_BUILTIN_VEC_MULO, ALTIVEC_BUILTIN_VMULOUH,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V8HI, 0 },
- { ALTIVEC_BUILTIN_VEC_MULO, ALTIVEC_BUILTIN_VMULOSH,
+ { ALTIVEC_BUILTIN_VEC_MULO, ALTIVEC_BUILTIN_VMULOSW,
RS6000_BTI_V2DI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
- { ALTIVEC_BUILTIN_VEC_MULO, ALTIVEC_BUILTIN_VMULOUH,
+ { ALTIVEC_BUILTIN_VEC_MULO, ALTIVEC_BUILTIN_VMULOUW,
RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V4SI,
RS6000_BTI_unsigned_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_MULO, ALTIVEC_BUILTIN_VMULOSH,
@@ -3111,6 +3077,26 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
~RS6000_BTI_unsigned_V16QI, 0 },
{ VSX_BUILTIN_VEC_XL, VSX_BUILTIN_LD_ELEMREV_V16QI,
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI, 0 },
+ { VSX_BUILTIN_VEC_XL_BE, VSX_BUILTIN_XL_BE_V16QI,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI, 0 },
+ { VSX_BUILTIN_VEC_XL_BE, VSX_BUILTIN_XL_BE_V16QI,
+ RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI, 0 },
+ { VSX_BUILTIN_VEC_XL_BE, VSX_BUILTIN_XL_BE_V8HI,
+ RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_INTHI, 0 },
+ { VSX_BUILTIN_VEC_XL_BE, VSX_BUILTIN_XL_BE_V8HI,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTHI, 0 },
+ { VSX_BUILTIN_VEC_XL_BE, VSX_BUILTIN_XL_BE_V4SI,
+ RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_INTSI, 0 },
+ { VSX_BUILTIN_VEC_XL_BE, VSX_BUILTIN_XL_BE_V4SI,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTSI, 0 },
+ { VSX_BUILTIN_VEC_XL_BE, VSX_BUILTIN_XL_BE_V2DI,
+ RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_long_long, 0 },
+ { VSX_BUILTIN_VEC_XL_BE, VSX_BUILTIN_XL_BE_V2DI,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_long_long, 0 },
+ { VSX_BUILTIN_VEC_XL_BE, VSX_BUILTIN_XL_BE_V4SF,
+ RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_float, 0 },
+ { VSX_BUILTIN_VEC_XL_BE, VSX_BUILTIN_XL_BE_V2DF,
+ RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_double, 0 },
{ ALTIVEC_BUILTIN_VEC_XOR, ALTIVEC_BUILTIN_VXOR,
RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
{ ALTIVEC_BUILTIN_VEC_XOR, ALTIVEC_BUILTIN_VXOR,
@@ -5184,6 +5170,11 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
{ P9V_BUILTIN_VEC_VEXTRACT4B, P9V_BUILTIN_VEXTRACT4B,
RS6000_BTI_INTDI, RS6000_BTI_unsigned_V16QI, RS6000_BTI_UINTSI, 0 },
+ { P9V_BUILTIN_VEC_VEXTRACT_FP_FROM_SHORTH, P9V_BUILTIN_VEXTRACT_FP_FROM_SHORTH,
+ RS6000_BTI_V4SF, RS6000_BTI_unsigned_V8HI, 0, 0 },
+ { P9V_BUILTIN_VEC_VEXTRACT_FP_FROM_SHORTL, P9V_BUILTIN_VEXTRACT_FP_FROM_SHORTL,
+ RS6000_BTI_V4SF, RS6000_BTI_unsigned_V8HI, 0, 0 },
+
{ P9V_BUILTIN_VEC_VEXTULX, P9V_BUILTIN_VEXTUBLX,
RS6000_BTI_INTQI, RS6000_BTI_UINTSI,
RS6000_BTI_V16QI, 0 },
@@ -5881,6 +5872,12 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
tree arg1 = (*arglist)[1];
tree arg1_type = TREE_TYPE (arg1);
+ /* Both arguments must be vectors and the types must be compatible. */
+ if (TREE_CODE (arg0_type) != VECTOR_TYPE)
+ goto bad;
+ if (!lang_hooks.types_compatible_p (arg0_type, arg1_type))
+ goto bad;
+
/* Power9 instructions provide the most efficient implementation of
ALTIVEC_BUILTIN_VEC_CMPNE if the mode is not DImode or TImode
or SFmode or DFmode. */
@@ -5890,12 +5887,6 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
|| (TYPE_MODE (TREE_TYPE (arg0_type)) == SFmode)
|| (TYPE_MODE (TREE_TYPE (arg0_type)) == DFmode))
{
- /* Both arguments must be vectors and the types must be compatible. */
- if (TREE_CODE (arg0_type) != VECTOR_TYPE)
- goto bad;
- if (!lang_hooks.types_compatible_p (arg0_type, arg1_type))
- goto bad;
-
switch (TYPE_MODE (TREE_TYPE (arg0_type)))
{
/* vec_cmpneq (va, vb) == vec_nor (vec_cmpeq (va, vb),
@@ -5960,8 +5951,8 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
__int128) and the types must be compatible. */
if (TREE_CODE (arg0_type) != VECTOR_TYPE)
goto bad;
- if (!lang_hooks.types_compatible_p (arg0_type, arg1_type) ||
- !lang_hooks.types_compatible_p (arg1_type, arg2_type))
+ if (!lang_hooks.types_compatible_p (arg0_type, arg1_type)
+ || !lang_hooks.types_compatible_p (arg1_type, arg2_type))
goto bad;
switch (TYPE_MODE (TREE_TYPE (arg0_type)))
@@ -6043,8 +6034,8 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
__int128) and the types must be compatible. */
if (TREE_CODE (arg0_type) != VECTOR_TYPE)
goto bad;
- if (!lang_hooks.types_compatible_p (arg0_type, arg1_type) ||
- !lang_hooks.types_compatible_p (arg1_type, arg2_type))
+ if (!lang_hooks.types_compatible_p (arg0_type, arg1_type)
+ || !lang_hooks.types_compatible_p (arg1_type, arg2_type))
goto bad;
switch (TYPE_MODE (TREE_TYPE (arg0_type)))
@@ -6493,6 +6484,9 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
/* Strip qualifiers like "const" from the pointer arg. */
tree arg1_type = TREE_TYPE (arg1);
+ if (!POINTER_TYPE_P (arg1_type) && TREE_CODE (arg1_type) != ARRAY_TYPE)
+ goto bad;
+
tree inner_type = TREE_TYPE (arg1_type);
if (TYPE_QUALS (TREE_TYPE (arg1_type)) != 0)
{
@@ -6581,11 +6575,6 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
arg2 = build1 (ADDR_EXPR, arg2_type, arg2_elt0);
}
- tree addr = fold_build2_loc (loc, POINTER_PLUS_EXPR, arg2_type,
- arg2, arg1);
- tree aligned = fold_build2_loc (loc, BIT_AND_EXPR, arg2_type, addr,
- build_int_cst (arg2_type, -16));
-
/* Find the built-in to make sure a compatible one exists; if not
we fall back to default handling to get the error message. */
for (desc = altivec_overloaded_builtins;
@@ -6598,6 +6587,12 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
&& rs6000_builtin_type_compatible (TREE_TYPE (arg2),
desc->op3))
{
+ tree addr = fold_build2_loc (loc, POINTER_PLUS_EXPR, arg2_type,
+ arg2, arg1);
+ tree aligned
+ = fold_build2_loc (loc, BIT_AND_EXPR, arg2_type,
+ addr, build_int_cst (arg2_type, -16));
+
tree arg0_type = TREE_TYPE (arg0);
if (TYPE_MODE (arg0_type) == V2DImode)
/* Type-based aliasing analysis thinks vector long
@@ -6723,8 +6718,8 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
overloaded_code = P6_BUILTIN_CMPB_32;
}
- while (desc->code && desc->code == fcode &&
- desc->overloaded_code != overloaded_code)
+ while (desc->code && desc->code == fcode
+ && desc->overloaded_code != overloaded_code)
desc++;
if (desc->code && (desc->code == fcode)
@@ -6770,8 +6765,8 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
else
overloaded_code = P9V_BUILTIN_VSIEDP;
}
- while (desc->code && desc->code == fcode &&
- desc->overloaded_code != overloaded_code)
+ while (desc->code && desc->code == fcode
+ && desc->overloaded_code != overloaded_code)
desc++;
if (desc->code && (desc->code == fcode)
&& rs6000_builtin_type_compatible (types[0], desc->op1)
@@ -6807,15 +6802,15 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
if (unsupported_builtin)
{
const char *name = rs6000_overloaded_builtin_name (fcode);
- error ("Builtin function %s not supported in this compiler configuration",
+ error ("builtin function %s not supported in this compiler configuration",
name);
return error_mark_node;
}
}
bad:
- {
- const char *name = rs6000_overloaded_builtin_name (fcode);
- error ("invalid parameter combination for AltiVec intrinsic %s", name);
- return error_mark_node;
- }
+ {
+ const char *name = rs6000_overloaded_builtin_name (fcode);
+ error ("invalid parameter combination for AltiVec intrinsic %s", name);
+ return error_mark_node;
+ }
}
diff --git a/gcc/config/rs6000/rs6000-cpus.def b/gcc/config/rs6000/rs6000-cpus.def
index cd5c70688d8..190f9123fa0 100644
--- a/gcc/config/rs6000/rs6000-cpus.def
+++ b/gcc/config/rs6000/rs6000-cpus.def
@@ -44,9 +44,7 @@
#define ISA_2_6_MASKS_SERVER (ISA_2_5_MASKS_SERVER \
| OPTION_MASK_POPCNTD \
| OPTION_MASK_ALTIVEC \
- | OPTION_MASK_VSX \
- | OPTION_MASK_UPPER_REGS_DI \
- | OPTION_MASK_UPPER_REGS_DF)
+ | OPTION_MASK_VSX)
/* For now, don't provide an embedded version of ISA 2.07. */
#define ISA_2_7_MASKS_SERVER (ISA_2_6_MASKS_SERVER \
@@ -57,9 +55,7 @@
| OPTION_MASK_EFFICIENT_UNALIGNED_VSX \
| OPTION_MASK_HTM \
| OPTION_MASK_QUAD_MEMORY \
- | OPTION_MASK_QUAD_MEMORY_ATOMIC \
- | OPTION_MASK_UPPER_REGS_SF \
- | OPTION_MASK_VSX_SMALL_INTEGER)
+ | OPTION_MASK_QUAD_MEMORY_ATOMIC)
/* Add ISEL back into ISA 3.0, since it is supposed to be a win. Do not add
FLOAT128_HW here until we are ready to make -mfloat128 on by default. */
@@ -78,11 +74,7 @@
#define ISA_3_0_MASKS_IEEE (OPTION_MASK_VSX \
| OPTION_MASK_P8_VECTOR \
| OPTION_MASK_P9_VECTOR \
- | OPTION_MASK_DIRECT_MOVE \
- | OPTION_MASK_UPPER_REGS_DI \
- | OPTION_MASK_UPPER_REGS_DF \
- | OPTION_MASK_UPPER_REGS_SF \
- | OPTION_MASK_VSX_SMALL_INTEGER)
+ | OPTION_MASK_DIRECT_MOVE)
/* Flags that need to be turned off if -mno-power9-vector. */
#define OTHER_P9_VECTOR_MASKS (OPTION_MASK_FLOAT128_HW \
@@ -94,8 +86,7 @@
#define OTHER_P8_VECTOR_MASKS (OTHER_P9_VECTOR_MASKS \
| OPTION_MASK_P9_VECTOR \
| OPTION_MASK_DIRECT_MOVE \
- | OPTION_MASK_CRYPTO \
- | OPTION_MASK_UPPER_REGS_SF) \
+ | OPTION_MASK_CRYPTO)
/* Flags that need to be turned off if -mno-vsx. */
#define OTHER_VSX_VECTOR_MASKS (OTHER_P8_VECTOR_MASKS \
@@ -103,9 +94,6 @@
| OPTION_MASK_FLOAT128_KEYWORD \
| OPTION_MASK_FLOAT128_TYPE \
| OPTION_MASK_P8_VECTOR \
- | OPTION_MASK_UPPER_REGS_DI \
- | OPTION_MASK_UPPER_REGS_DF \
- | OPTION_MASK_VSX_SMALL_INTEGER \
| OPTION_MASK_VSX_TIMODE)
#define POWERPC_7400_MASK (OPTION_MASK_PPC_GFXOPT | OPTION_MASK_ALTIVEC)
@@ -135,7 +123,6 @@
| OPTION_MASK_FPRND \
| OPTION_MASK_HTM \
| OPTION_MASK_ISEL \
- | OPTION_MASK_LRA \
| OPTION_MASK_MFCRF \
| OPTION_MASK_MFPGPR \
| OPTION_MASK_MODULO \
@@ -160,11 +147,7 @@
| OPTION_MASK_SOFT_FLOAT \
| OPTION_MASK_STRICT_ALIGN_OPTIONAL \
| OPTION_MASK_TOC_FUSION \
- | OPTION_MASK_UPPER_REGS_DI \
- | OPTION_MASK_UPPER_REGS_DF \
- | OPTION_MASK_UPPER_REGS_SF \
| OPTION_MASK_VSX \
- | OPTION_MASK_VSX_SMALL_INTEGER \
| OPTION_MASK_VSX_TIMODE)
#endif
@@ -251,11 +234,7 @@ RS6000_CPU ("power6", PROCESSOR_POWER6, MASK_POWERPC64 | MASK_PPC_GPOPT
RS6000_CPU ("power6x", PROCESSOR_POWER6, MASK_POWERPC64 | MASK_PPC_GPOPT
| MASK_PPC_GFXOPT | MASK_MFCRF | MASK_POPCNTB | MASK_FPRND
| MASK_CMPB | MASK_DFP | MASK_MFPGPR | MASK_RECIP_PRECISION)
-RS6000_CPU ("power7", PROCESSOR_POWER7, /* Don't add MASK_ISEL by default */
- POWERPC_7400_MASK | MASK_POWERPC64 | MASK_PPC_GPOPT | MASK_MFCRF
- | MASK_POPCNTB | MASK_FPRND | MASK_CMPB | MASK_DFP | MASK_POPCNTD
- | MASK_VSX | MASK_RECIP_PRECISION | OPTION_MASK_UPPER_REGS_DF
- | OPTION_MASK_UPPER_REGS_DI)
+RS6000_CPU ("power7", PROCESSOR_POWER7, MASK_POWERPC64 | ISA_2_6_MASKS_SERVER)
RS6000_CPU ("power8", PROCESSOR_POWER8, MASK_POWERPC64 | ISA_2_7_MASKS_SERVER)
RS6000_CPU ("power9", PROCESSOR_POWER9, MASK_POWERPC64 | ISA_3_0_MASKS_SERVER)
RS6000_CPU ("powerpc", PROCESSOR_POWERPC, 0)
diff --git a/gcc/config/rs6000/rs6000-protos.h b/gcc/config/rs6000/rs6000-protos.h
index aeec9b2f1c2..144bdb26fa4 100644
--- a/gcc/config/rs6000/rs6000-protos.h
+++ b/gcc/config/rs6000/rs6000-protos.h
@@ -151,10 +151,10 @@ extern rtx rs6000_longcall_ref (rtx);
extern void rs6000_fatal_bad_address (rtx);
extern rtx create_TOC_reference (rtx, rtx);
extern void rs6000_split_multireg_move (rtx, rtx);
+extern void rs6000_emit_le_vsx_permute (rtx, rtx, machine_mode);
extern void rs6000_emit_le_vsx_move (rtx, rtx, machine_mode);
extern bool valid_sf_si_move (rtx, rtx, machine_mode);
extern void rs6000_emit_move (rtx, rtx, machine_mode);
-extern rtx rs6000_secondary_memory_needed_rtx (machine_mode);
extern machine_mode rs6000_secondary_memory_needed_mode (machine_mode);
extern rtx (*rs6000_legitimize_reload_address_ptr) (rtx, machine_mode,
int, int, int, int *);
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 988926b8d59..74158cdd075 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -143,10 +143,6 @@ typedef struct GTY(()) machine_function
/* Offset from virtual_stack_vars_rtx to the start of the ABI_V4
varargs save area. */
HOST_WIDE_INT varargs_save_offset;
- /* Temporary stack slot to use for SDmode copies. This slot is
- 64-bits wide and is allocated early enough so that the offset
- does not overflow the 16-bit load/store offset field. */
- rtx sdmode_stack_slot;
/* Alternative internal arg pointer for -fsplit-stack. */
rtx split_stack_arg_pointer;
bool split_stack_argp_used;
@@ -379,7 +375,9 @@ static const struct
{ "tar", PPC_FEATURE2_HAS_TAR, 1 },
{ "vcrypto", PPC_FEATURE2_HAS_VEC_CRYPTO, 1 },
{ "arch_3_00", PPC_FEATURE2_ARCH_3_00, 1 },
- { "ieee128", PPC_FEATURE2_HAS_IEEE128, 1 }
+ { "ieee128", PPC_FEATURE2_HAS_IEEE128, 1 },
+ { "darn", PPC_FEATURE2_DARN, 1 },
+ { "scv", PPC_FEATURE2_SCV, 1 }
};
/* On PowerPC, we have a limited number of target clones that we care about
@@ -437,7 +435,7 @@ enum rs6000_reg_type {
ALTIVEC_REG_TYPE,
FPR_REG_TYPE,
SPR_REG_TYPE,
- CR_REG_TYPE,
+ CR_REG_TYPE
};
/* Map register class to register type. */
@@ -1872,12 +1870,6 @@ static const struct attribute_spec rs6000_attribute_table[] =
#undef TARGET_BUILTIN_RECIPROCAL
#define TARGET_BUILTIN_RECIPROCAL rs6000_builtin_reciprocal
-#undef TARGET_EXPAND_TO_RTL_HOOK
-#define TARGET_EXPAND_TO_RTL_HOOK rs6000_alloc_sdmode_stack_slot
-
-#undef TARGET_INSTANTIATE_DECLS
-#define TARGET_INSTANTIATE_DECLS rs6000_instantiate_decls
-
#undef TARGET_SECONDARY_RELOAD
#define TARGET_SECONDARY_RELOAD rs6000_secondary_reload
@@ -1887,9 +1879,6 @@ static const struct attribute_spec rs6000_attribute_table[] =
#undef TARGET_MODE_DEPENDENT_ADDRESS_P
#define TARGET_MODE_DEPENDENT_ADDRESS_P rs6000_mode_dependent_address_p
-#undef TARGET_LRA_P
-#define TARGET_LRA_P rs6000_lra_p
-
#undef TARGET_COMPUTE_PRESSURE_CLASSES
#define TARGET_COMPUTE_PRESSURE_CLASSES rs6000_compute_pressure_classes
@@ -2104,14 +2093,11 @@ rs6000_hard_regno_mode_ok (int regno, machine_mode mode)
if(GET_MODE_SIZE (mode) == UNITS_PER_FP_WORD)
return 1;
- if (TARGET_VSX_SMALL_INTEGER)
- {
- if (mode == SImode)
- return 1;
+ if (TARGET_P8_VECTOR && (mode == SImode))
+ return 1;
- if (TARGET_P9_VECTOR && (mode == HImode || mode == QImode))
- return 1;
- }
+ if (TARGET_P9_VECTOR && (mode == QImode || mode == HImode))
+ return 1;
}
if (PAIRED_SIMD_REGNO_P (regno) && TARGET_PAIRED_FLOAT
@@ -2793,8 +2779,6 @@ rs6000_debug_reg_global (void)
if (TARGET_LINK_STACK)
fprintf (stderr, DEBUG_FMT_S, "link_stack", "true");
- fprintf (stderr, DEBUG_FMT_S, "lra", TARGET_LRA ? "true" : "false");
-
if (TARGET_P8_FUSION)
{
char options[80];
@@ -2907,9 +2891,7 @@ rs6000_setup_reg_addr_masks (void)
&& !VECTOR_MODE_P (m2)
&& !FLOAT128_VECTOR_P (m2)
&& !complex_p
- && !small_int_vsx_p
- && (m2 != DFmode || !TARGET_UPPER_REGS_DF)
- && (m2 != SFmode || !TARGET_UPPER_REGS_SF))
+ && !small_int_vsx_p)
{
addr_mask |= RELOAD_REG_PRE_INCDEC;
@@ -3218,22 +3200,12 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
rs6000_constraints[RS6000_CONSTRAINT_wa] = VSX_REGS;
rs6000_constraints[RS6000_CONSTRAINT_wd] = VSX_REGS; /* V2DFmode */
rs6000_constraints[RS6000_CONSTRAINT_wf] = VSX_REGS; /* V4SFmode */
+ rs6000_constraints[RS6000_CONSTRAINT_ws] = VSX_REGS; /* DFmode */
+ rs6000_constraints[RS6000_CONSTRAINT_wv] = ALTIVEC_REGS; /* DFmode */
+ rs6000_constraints[RS6000_CONSTRAINT_wi] = VSX_REGS; /* DImode */
if (TARGET_VSX_TIMODE)
rs6000_constraints[RS6000_CONSTRAINT_wt] = VSX_REGS; /* TImode */
-
- if (TARGET_UPPER_REGS_DF) /* DFmode */
- {
- rs6000_constraints[RS6000_CONSTRAINT_ws] = VSX_REGS;
- rs6000_constraints[RS6000_CONSTRAINT_wv] = ALTIVEC_REGS;
- }
- else
- rs6000_constraints[RS6000_CONSTRAINT_ws] = FLOAT_REGS;
-
- if (TARGET_UPPER_REGS_DI) /* DImode */
- rs6000_constraints[RS6000_CONSTRAINT_wi] = VSX_REGS;
- else
- rs6000_constraints[RS6000_CONSTRAINT_wi] = FLOAT_REGS;
}
/* Add conditional constraints based on various options, to allow us to
@@ -3263,7 +3235,7 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
rs6000_constraints[RS6000_CONSTRAINT_wA] = BASE_REGS;
}
- if (TARGET_P8_VECTOR && TARGET_UPPER_REGS_SF) /* SFmode */
+ if (TARGET_P8_VECTOR) /* SFmode */
{
rs6000_constraints[RS6000_CONSTRAINT_wu] = ALTIVEC_REGS;
rs6000_constraints[RS6000_CONSTRAINT_wy] = VSX_REGS;
@@ -3303,7 +3275,7 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
rs6000_constraints[RS6000_CONSTRAINT_we] = VSX_REGS;
/* Support small integers in VSX registers. */
- if (TARGET_VSX_SMALL_INTEGER)
+ if (TARGET_P8_VECTOR)
{
rs6000_constraints[RS6000_CONSTRAINT_wH] = ALTIVEC_REGS;
rs6000_constraints[RS6000_CONSTRAINT_wI] = FLOAT_REGS;
@@ -3458,18 +3430,14 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
}
}
- if (TARGET_UPPER_REGS_DF)
- reg_addr[DFmode].scalar_in_vmx_p = true;
-
- if (TARGET_UPPER_REGS_DI)
- reg_addr[DImode].scalar_in_vmx_p = true;
+ reg_addr[DFmode].scalar_in_vmx_p = true;
+ reg_addr[DImode].scalar_in_vmx_p = true;
- if (TARGET_UPPER_REGS_SF)
- reg_addr[SFmode].scalar_in_vmx_p = true;
-
- if (TARGET_VSX_SMALL_INTEGER)
+ if (TARGET_P8_VECTOR)
{
+ reg_addr[SFmode].scalar_in_vmx_p = true;
reg_addr[SImode].scalar_in_vmx_p = true;
+
if (TARGET_P9_VECTOR)
{
reg_addr[HImode].scalar_in_vmx_p = true;
@@ -4214,6 +4182,10 @@ rs6000_option_override_internal (bool global_init_p)
rs6000_altivec_element_order = 0;
}
+ if (!rs6000_fold_gimple)
+ fprintf (stderr,
+ "gimple folding of rs6000 builtins has been disabled.\n");
+
/* Add some warnings for VSX. */
if (TARGET_VSX)
{
@@ -4277,20 +4249,12 @@ rs6000_option_override_internal (bool global_init_p)
{
if (cpu_index == PROCESSOR_POWER9)
{
- /* legacy behavior: allow -mcpu-power9 with certain
+ /* legacy behavior: allow -mcpu=power9 with certain
capabilities explicitly disabled. */
rs6000_isa_flags |= (ISA_3_0_MASKS_SERVER & ~ignore_masks);
- /* However, reject this automatic fix if certain
- capabilities required for TARGET_P9_MINMAX support
- have been explicitly disabled. */
- if (((OPTION_MASK_VSX | OPTION_MASK_UPPER_REGS_SF
- | OPTION_MASK_UPPER_REGS_DF) & rs6000_isa_flags)
- != (OPTION_MASK_VSX | OPTION_MASK_UPPER_REGS_SF
- | OPTION_MASK_UPPER_REGS_DF))
- error ("-mpower9-minmax incompatible with explicitly disabled options");
- }
+ }
else
- error ("Power9 target option is incompatible with -mcpu=<xxx> for "
+ error ("power9 target option is incompatible with -mcpu=<xxx> for "
"<xxx> less than power9");
}
else if ((ISA_3_0_MASKS_SERVER & rs6000_isa_flags_explicit)
@@ -4374,73 +4338,6 @@ rs6000_option_override_internal (bool global_init_p)
rs6000_isa_flags &= ~OPTION_MASK_DFP;
}
- /* Allow an explicit -mupper-regs to set -mupper-regs-df, -mupper-regs-di,
- and -mupper-regs-sf, depending on the cpu, unless the user explicitly also
- set the individual option. */
- if (TARGET_UPPER_REGS > 0)
- {
- if (TARGET_VSX
- && !(rs6000_isa_flags_explicit & OPTION_MASK_UPPER_REGS_DF))
- {
- rs6000_isa_flags |= OPTION_MASK_UPPER_REGS_DF;
- rs6000_isa_flags_explicit |= OPTION_MASK_UPPER_REGS_DF;
- }
- if (TARGET_VSX
- && !(rs6000_isa_flags_explicit & OPTION_MASK_UPPER_REGS_DI))
- {
- rs6000_isa_flags |= OPTION_MASK_UPPER_REGS_DI;
- rs6000_isa_flags_explicit |= OPTION_MASK_UPPER_REGS_DI;
- }
- if (TARGET_P8_VECTOR
- && !(rs6000_isa_flags_explicit & OPTION_MASK_UPPER_REGS_SF))
- {
- rs6000_isa_flags |= OPTION_MASK_UPPER_REGS_SF;
- rs6000_isa_flags_explicit |= OPTION_MASK_UPPER_REGS_SF;
- }
- }
- else if (TARGET_UPPER_REGS == 0)
- {
- if (TARGET_VSX
- && !(rs6000_isa_flags_explicit & OPTION_MASK_UPPER_REGS_DF))
- {
- rs6000_isa_flags &= ~OPTION_MASK_UPPER_REGS_DF;
- rs6000_isa_flags_explicit |= OPTION_MASK_UPPER_REGS_DF;
- }
- if (TARGET_VSX
- && !(rs6000_isa_flags_explicit & OPTION_MASK_UPPER_REGS_DI))
- {
- rs6000_isa_flags &= ~OPTION_MASK_UPPER_REGS_DI;
- rs6000_isa_flags_explicit |= OPTION_MASK_UPPER_REGS_DI;
- }
- if (TARGET_P8_VECTOR
- && !(rs6000_isa_flags_explicit & OPTION_MASK_UPPER_REGS_SF))
- {
- rs6000_isa_flags &= ~OPTION_MASK_UPPER_REGS_SF;
- rs6000_isa_flags_explicit |= OPTION_MASK_UPPER_REGS_SF;
- }
- }
-
- if (TARGET_UPPER_REGS_DF && !TARGET_VSX)
- {
- if (rs6000_isa_flags_explicit & OPTION_MASK_UPPER_REGS_DF)
- error ("-mupper-regs-df requires -mvsx");
- rs6000_isa_flags &= ~OPTION_MASK_UPPER_REGS_DF;
- }
-
- if (TARGET_UPPER_REGS_DI && !TARGET_VSX)
- {
- if (rs6000_isa_flags_explicit & OPTION_MASK_UPPER_REGS_DI)
- error ("-mupper-regs-di requires -mvsx");
- rs6000_isa_flags &= ~OPTION_MASK_UPPER_REGS_DI;
- }
-
- if (TARGET_UPPER_REGS_SF && !TARGET_P8_VECTOR)
- {
- if (rs6000_isa_flags_explicit & OPTION_MASK_UPPER_REGS_SF)
- error ("-mupper-regs-sf requires -mpower8-vector");
- rs6000_isa_flags &= ~OPTION_MASK_UPPER_REGS_SF;
- }
-
/* The quad memory instructions only works in 64-bit mode. In 32-bit mode,
silently turn off quad memory mode. */
if ((TARGET_QUAD_MEMORY || TARGET_QUAD_MEMORY_ATOMIC) && !TARGET_POWERPC64)
@@ -4649,53 +4546,10 @@ rs6000_option_override_internal (bool global_init_p)
}
}
- if (TARGET_P9_DFORM_SCALAR && !TARGET_UPPER_REGS_DF)
- {
- /* We prefer to not mention undocumented options in
- error messages. However, if users have managed to select
- power9-dform without selecting upper-regs-df, they
- already know about undocumented flags. */
- if (rs6000_isa_flags_explicit & OPTION_MASK_UPPER_REGS_DF)
- error ("-mpower9-dform requires -mupper-regs-df");
- rs6000_isa_flags &= ~OPTION_MASK_P9_DFORM_SCALAR;
- }
-
- if (TARGET_P9_DFORM_SCALAR && !TARGET_UPPER_REGS_SF)
- {
- if (rs6000_isa_flags_explicit & OPTION_MASK_UPPER_REGS_SF)
- error ("-mpower9-dform requires -mupper-regs-sf");
- rs6000_isa_flags &= ~OPTION_MASK_P9_DFORM_SCALAR;
- }
-
- /* Enable LRA by default. */
- if ((rs6000_isa_flags_explicit & OPTION_MASK_LRA) == 0)
- rs6000_isa_flags |= OPTION_MASK_LRA;
-
- /* 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
- -mno-lra was used, and warn if the user explicitly asked for the option.
-
- Enable -mpower9-dform-vector by default if LRA and other power9 options.
- Enable -mvsx-timode by default if LRA and VSX. */
- if (!TARGET_LRA)
- {
- if (TARGET_VSX_TIMODE)
- {
- if ((rs6000_isa_flags_explicit & OPTION_MASK_VSX_TIMODE) != 0)
- warning (0, "-mvsx-timode might need -mlra");
-
- else
- rs6000_isa_flags &= ~OPTION_MASK_VSX_TIMODE;
- }
- }
-
- else
- {
- if (TARGET_VSX && !TARGET_VSX_TIMODE
- && (rs6000_isa_flags_explicit & OPTION_MASK_VSX_TIMODE) == 0)
- rs6000_isa_flags |= OPTION_MASK_VSX_TIMODE;
- }
+ /* Enable -mvsx-timode by default if VSX. */
+ if (TARGET_VSX && !TARGET_VSX_TIMODE
+ && (rs6000_isa_flags_explicit & OPTION_MASK_VSX_TIMODE) == 0)
+ rs6000_isa_flags |= OPTION_MASK_VSX_TIMODE;
/* Set -mallow-movmisalign to explicitly on if we have full ISA 2.07
support. If we only have ISA 2.06 support, and the user did not specify
@@ -4737,20 +4591,6 @@ rs6000_option_override_internal (bool global_init_p)
}
}
- /* Check whether we should allow small integers into VSX registers. We
- require direct move to prevent the register allocator from having to move
- variables through memory to do moves. SImode can be used on ISA 2.07,
- while HImode and QImode require ISA 3.0. */
- if (TARGET_VSX_SMALL_INTEGER
- && (!TARGET_DIRECT_MOVE || !TARGET_P8_VECTOR || !TARGET_UPPER_REGS_DI))
- {
- if (rs6000_isa_flags_explicit & OPTION_MASK_VSX_SMALL_INTEGER)
- error ("-mvsx-small-integer requires -mpower8-vector, "
- "-mupper-regs-di, and -mdirect-move");
-
- rs6000_isa_flags &= ~OPTION_MASK_VSX_SMALL_INTEGER;
- }
-
/* Set long double size before the IEEE 128-bit tests. */
if (!global_options_set.x_rs6000_long_double_type_size)
{
@@ -5757,7 +5597,7 @@ rs6000_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost,
if (TARGET_P9_VECTOR)
return TYPE_VECTOR_SUBPARTS (vectype) - 1 + 2;
else
- return TYPE_VECTOR_SUBPARTS (vectype) - 1 + 11;
+ return TYPE_VECTOR_SUBPARTS (vectype) - 1 + 5;
}
else
/* V2DFmode doesn't need a direct move. */
@@ -7443,8 +7283,7 @@ rs6000_expand_vector_set (rtx target, rtx val, int elt)
else if (mode == V2DImode)
insn = gen_vsx_set_v2di (target, target, val, elt_rtx);
- else if (TARGET_P9_VECTOR && TARGET_VSX_SMALL_INTEGER
- && TARGET_UPPER_REGS_DI && TARGET_POWERPC64)
+ else if (TARGET_P9_VECTOR && TARGET_POWERPC64)
{
if (mode == V4SImode)
insn = gen_vsx_set_v4si_p9 (target, target, val, elt_rtx);
@@ -8785,14 +8624,6 @@ legitimate_indexed_address_p (rtx x, int strict)
op0 = XEXP (x, 0);
op1 = XEXP (x, 1);
- /* Recognize the rtl generated by reload which we know will later be
- replaced with proper base and index regs. */
- if (!strict
- && reload_in_progress
- && (REG_P (op0) || GET_CODE (op0) == PLUS)
- && REG_P (op1))
- return true;
-
return (REG_P (op0) && REG_P (op1)
&& ((INT_REG_OK_FOR_BASE_P (op0, strict)
&& INT_REG_OK_FOR_INDEX_P (op1, strict))
@@ -10036,9 +9867,7 @@ rs6000_debug_legitimate_address_p (machine_mode mode, rtx x,
ret ? "true" : "false",
GET_MODE_NAME (mode),
reg_ok_strict,
- (reload_completed
- ? "after"
- : (reload_in_progress ? "progress" : "before")),
+ (reload_completed ? "after" : "before"),
GET_RTX_NAME (GET_CODE (x)));
debug_rtx (x);
@@ -10440,9 +10269,6 @@ rs6000_emit_set_long_const (rtx dest, HOST_WIDE_INT c)
static void
rs6000_eliminate_indexed_memrefs (rtx operands[2])
{
- if (reload_in_progress)
- return;
-
if (GET_CODE (operands[0]) == MEM
&& GET_CODE (XEXP (operands[0], 0)) != REG
&& ! legitimate_constant_pool_address_p (XEXP (operands[0], 0),
@@ -10501,19 +10327,30 @@ rs6000_const_vec (machine_mode mode)
return v;
}
-/* Generate a permute rtx that represents an lxvd2x, stxvd2x, or xxpermdi
- for a VSX load or store operation. */
-rtx
-rs6000_gen_le_vsx_permute (rtx source, machine_mode mode)
+/* Emit an lxvd2x, stxvd2x, or xxpermdi instruction for a VSX load or
+ store operation. */
+void
+rs6000_emit_le_vsx_permute (rtx dest, rtx source, machine_mode mode)
{
- /* Use ROTATE instead of VEC_SELECT on IEEE 128-bit floating point, and
- 128-bit integers if they are allowed in VSX registers. */
- if (FLOAT128_VECTOR_P (mode) || mode == TImode || mode == V1TImode)
- return gen_rtx_ROTATE (mode, source, GEN_INT (64));
+ /* Scalar permutations are easier to express in integer modes rather than
+ floating-point modes, so cast them here. We use V1TImode instead
+ of TImode to ensure that the values don't go through GPRs. */
+ if (FLOAT128_VECTOR_P (mode))
+ {
+ dest = gen_lowpart (V1TImode, dest);
+ source = gen_lowpart (V1TImode, source);
+ mode = V1TImode;
+ }
+
+ /* Use ROTATE instead of VEC_SELECT if the mode contains only a single
+ scalar. */
+ if (mode == TImode || mode == V1TImode)
+ emit_insn (gen_rtx_SET (dest, gen_rtx_ROTATE (mode, source,
+ GEN_INT (64))));
else
{
rtx par = gen_rtx_PARALLEL (VOIDmode, rs6000_const_vec (mode));
- return gen_rtx_VEC_SELECT (mode, source, par);
+ emit_insn (gen_rtx_SET (dest, gen_rtx_VEC_SELECT (mode, source, par)));
}
}
@@ -10523,8 +10360,6 @@ rs6000_gen_le_vsx_permute (rtx source, machine_mode mode)
void
rs6000_emit_le_vsx_load (rtx dest, rtx source, machine_mode mode)
{
- rtx tmp, permute_mem, permute_reg;
-
/* Use V2DImode to do swaps of types with 128-bit scalare parts (TImode,
V1TImode). */
if (mode == TImode || mode == V1TImode)
@@ -10534,11 +10369,9 @@ rs6000_emit_le_vsx_load (rtx dest, rtx source, machine_mode mode)
source = adjust_address (source, V2DImode, 0);
}
- tmp = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (dest) : dest;
- permute_mem = rs6000_gen_le_vsx_permute (source, mode);
- permute_reg = rs6000_gen_le_vsx_permute (tmp, mode);
- emit_insn (gen_rtx_SET (tmp, permute_mem));
- emit_insn (gen_rtx_SET (dest, permute_reg));
+ rtx tmp = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (dest) : dest;
+ rs6000_emit_le_vsx_permute (tmp, source, mode);
+ rs6000_emit_le_vsx_permute (dest, tmp, mode);
}
/* Emit a little-endian store to vector memory location DEST from VSX
@@ -10547,12 +10380,10 @@ rs6000_emit_le_vsx_load (rtx dest, rtx source, machine_mode mode)
void
rs6000_emit_le_vsx_store (rtx dest, rtx source, machine_mode mode)
{
- rtx tmp, permute_src, permute_tmp;
-
- /* This should never be called during or after reload, because it does
+ /* This should never be called during or after LRA, because it does
not re-permute the source register. It is intended only for use
during expand. */
- gcc_assert (!reload_in_progress && !lra_in_progress && !reload_completed);
+ gcc_assert (!lra_in_progress && !reload_completed);
/* Use V2DImode to do swaps of types with 128-bit scalar parts (TImode,
V1TImode). */
@@ -10563,11 +10394,9 @@ rs6000_emit_le_vsx_store (rtx dest, rtx source, machine_mode mode)
source = gen_lowpart (V2DImode, source);
}
- tmp = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (source) : source;
- permute_src = rs6000_gen_le_vsx_permute (source, mode);
- permute_tmp = rs6000_gen_le_vsx_permute (tmp, mode);
- emit_insn (gen_rtx_SET (tmp, permute_src));
- emit_insn (gen_rtx_SET (dest, permute_tmp));
+ rtx tmp = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (source) : source;
+ rs6000_emit_le_vsx_permute (tmp, source, mode);
+ rs6000_emit_le_vsx_permute (dest, tmp, mode);
}
/* Emit a sequence representing a little-endian VSX load or store,
@@ -10646,8 +10475,7 @@ valid_sf_si_move (rtx dest, rtx src, machine_mode mode)
static bool
rs6000_emit_move_si_sf_subreg (rtx dest, rtx source, machine_mode mode)
{
- if (TARGET_DIRECT_MOVE_64BIT && !reload_in_progress && !reload_completed
- && !lra_in_progress
+ if (TARGET_DIRECT_MOVE_64BIT && !lra_in_progress && !reload_completed
&& (!SUBREG_P (dest) || !sf_subreg_operand (dest, mode))
&& SUBREG_P (source) && sf_subreg_operand (source, mode))
{
@@ -10681,10 +10509,10 @@ rs6000_emit_move (rtx dest, rtx source, machine_mode mode)
if (TARGET_DEBUG_ADDR)
{
fprintf (stderr,
- "\nrs6000_emit_move: mode = %s, reload_in_progress = %d, "
+ "\nrs6000_emit_move: mode = %s, lra_in_progress = %d, "
"reload_completed = %d, can_create_pseudos = %d.\ndest:\n",
GET_MODE_NAME (mode),
- reload_in_progress,
+ lra_in_progress,
reload_completed,
can_create_pseudo_p ());
debug_rtx (dest);
@@ -10758,12 +10586,6 @@ rs6000_emit_move (rtx dest, rtx source, machine_mode mode)
operands[1] = tmp;
}
- /* Handle the case where reload calls us with an invalid address. */
- if (reload_in_progress && mode == Pmode
- && (! general_operand (operands[1], mode)
- || ! nonimmediate_operand (operands[0], mode)))
- goto emit_set;
-
/* 128-bit constant floating-point values on Darwin should really be loaded
as two parts. However, this premature splitting is a problem when DFmode
values can go into Altivec registers. */
@@ -10781,11 +10603,6 @@ rs6000_emit_move (rtx dest, rtx source, machine_mode mode)
return;
}
- if (reload_in_progress && cfun->machine->sdmode_stack_slot != NULL_RTX)
- cfun->machine->sdmode_stack_slot =
- eliminate_regs (cfun->machine->sdmode_stack_slot, VOIDmode, NULL_RTX);
-
-
/* Transform (p0:DD, (SUBREG:DD p1:SD)) to ((SUBREG:SD p0:DD),
p1:SD) if p1 is not of floating point class and p0 is spilled as
we can have no analogous movsd_store for this. */
@@ -10895,57 +10712,6 @@ rs6000_emit_move (rtx dest, rtx source, machine_mode mode)
return;
}
- if (reload_in_progress
- && mode == SDmode
- && cfun->machine->sdmode_stack_slot != NULL_RTX
- && MEM_P (operands[0])
- && rtx_equal_p (operands[0], cfun->machine->sdmode_stack_slot)
- && REG_P (operands[1]))
- {
- if (FP_REGNO_P (REGNO (operands[1])))
- {
- rtx mem = adjust_address_nv (operands[0], DDmode, 0);
- mem = eliminate_regs (mem, VOIDmode, NULL_RTX);
- emit_insn (gen_movsd_store (mem, operands[1]));
- }
- else if (INT_REGNO_P (REGNO (operands[1])))
- {
- rtx mem = operands[0];
- if (BYTES_BIG_ENDIAN)
- mem = adjust_address_nv (mem, mode, 4);
- mem = eliminate_regs (mem, VOIDmode, NULL_RTX);
- emit_insn (gen_movsd_hardfloat (mem, operands[1]));
- }
- else
- gcc_unreachable();
- return;
- }
- if (reload_in_progress
- && mode == SDmode
- && REG_P (operands[0])
- && MEM_P (operands[1])
- && cfun->machine->sdmode_stack_slot != NULL_RTX
- && rtx_equal_p (operands[1], cfun->machine->sdmode_stack_slot))
- {
- if (FP_REGNO_P (REGNO (operands[0])))
- {
- rtx mem = adjust_address_nv (operands[1], DDmode, 0);
- mem = eliminate_regs (mem, VOIDmode, NULL_RTX);
- emit_insn (gen_movsd_load (operands[0], mem));
- }
- else if (INT_REGNO_P (REGNO (operands[0])))
- {
- rtx mem = operands[1];
- if (BYTES_BIG_ENDIAN)
- mem = adjust_address_nv (mem, mode, 4);
- mem = eliminate_regs (mem, VOIDmode, NULL_RTX);
- emit_insn (gen_movsd_hardfloat (operands[0], mem));
- }
- else
- gcc_unreachable();
- return;
- }
-
/* FIXME: In the long term, this switch statement should go away
and be replaced by a sequence of tests based on things like
mode == Pmode. */
@@ -11104,10 +10870,9 @@ rs6000_emit_move (rtx dest, rtx source, machine_mode mode)
/* If we are to limit the number of things we put in the TOC and
this is a symbol plus a constant we can add in one insn,
- just put the symbol in the TOC and add the constant. Don't do
- this if reload is in progress. */
+ just put the symbol in the TOC and add the constant. */
if (GET_CODE (operands[1]) == CONST
- && TARGET_NO_SUM_IN_TOC && ! reload_in_progress
+ && TARGET_NO_SUM_IN_TOC
&& GET_CODE (XEXP (operands[1], 0)) == PLUS
&& add_operand (XEXP (XEXP (operands[1], 0), 1), mode)
&& (GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == LABEL_REF
@@ -11153,10 +10918,9 @@ rs6000_emit_move (rtx dest, rtx source, machine_mode mode)
/* Above, we may have called force_const_mem which may have returned
an invalid address. If we can, fix this up; otherwise, reload will
have to deal with it. */
- if (GET_CODE (operands[1]) == MEM && ! reload_in_progress)
+ if (GET_CODE (operands[1]) == MEM)
operands[1] = validize_mem (operands[1]);
- emit_set:
emit_insn (gen_rtx_SET (operands[0], operands[1]));
}
@@ -14692,6 +14456,58 @@ altivec_expand_lv_builtin (enum insn_code icode, tree exp, rtx target, bool blk)
}
static rtx
+altivec_expand_xl_be_builtin (enum insn_code icode, tree exp, rtx target, bool blk)
+{
+ rtx pat, addr;
+ tree arg0 = CALL_EXPR_ARG (exp, 0);
+ tree arg1 = CALL_EXPR_ARG (exp, 1);
+ machine_mode tmode = insn_data[icode].operand[0].mode;
+ machine_mode mode0 = Pmode;
+ machine_mode mode1 = Pmode;
+ rtx op0 = expand_normal (arg0);
+ rtx op1 = expand_normal (arg1);
+
+ if (icode == CODE_FOR_nothing)
+ /* Builtin not supported on this processor. */
+ return 0;
+
+ /* If we got invalid arguments bail out before generating bad rtl. */
+ if (arg0 == error_mark_node || arg1 == error_mark_node)
+ return const0_rtx;
+
+ if (target == 0
+ || GET_MODE (target) != tmode
+ || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
+ target = gen_reg_rtx (tmode);
+
+ op1 = copy_to_mode_reg (mode1, op1);
+
+ if (op0 == const0_rtx)
+ addr = gen_rtx_MEM (blk ? BLKmode : tmode, op1);
+ else
+ {
+ op0 = copy_to_mode_reg (mode0, op0);
+ addr = gen_rtx_MEM (blk ? BLKmode : tmode,
+ gen_rtx_PLUS (Pmode, op1, op0));
+ }
+
+ pat = GEN_FCN (icode) (target, addr);
+ if (!pat)
+ return 0;
+
+ emit_insn (pat);
+ /* Reverse element order of elements if in LE mode */
+ if (!VECTOR_ELT_ORDER_BIG)
+ {
+ rtx sel = swap_selector_for_mode (tmode);
+ rtx vperm = gen_rtx_UNSPEC (tmode, gen_rtvec (3, target, target, sel),
+ UNSPEC_VPERM);
+ emit_insn (gen_rtx_SET (target, vperm));
+ }
+ return target;
+}
+
+static rtx
paired_expand_stv_builtin (enum insn_code icode, tree exp)
{
tree arg0 = CALL_EXPR_ARG (exp, 0);
@@ -16083,6 +15899,50 @@ altivec_expand_builtin (tree exp, rtx target, bool *expandedp)
/* Fall through. */
}
+ /* XL_BE We initialized them to always load in big endian order. */
+ switch (fcode)
+ {
+ case VSX_BUILTIN_XL_BE_V2DI:
+ {
+ enum insn_code code = CODE_FOR_vsx_load_v2di;
+ return altivec_expand_xl_be_builtin (code, exp, target, false);
+ }
+ break;
+ case VSX_BUILTIN_XL_BE_V4SI:
+ {
+ enum insn_code code = CODE_FOR_vsx_load_v4si;
+ return altivec_expand_xl_be_builtin (code, exp, target, false);
+ }
+ break;
+ case VSX_BUILTIN_XL_BE_V8HI:
+ {
+ enum insn_code code = CODE_FOR_vsx_load_v8hi;
+ return altivec_expand_xl_be_builtin (code, exp, target, false);
+ }
+ break;
+ case VSX_BUILTIN_XL_BE_V16QI:
+ {
+ enum insn_code code = CODE_FOR_vsx_load_v16qi;
+ return altivec_expand_xl_be_builtin (code, exp, target, false);
+ }
+ break;
+ case VSX_BUILTIN_XL_BE_V2DF:
+ {
+ enum insn_code code = CODE_FOR_vsx_load_v2df;
+ return altivec_expand_xl_be_builtin (code, exp, target, false);
+ }
+ break;
+ case VSX_BUILTIN_XL_BE_V4SF:
+ {
+ enum insn_code code = CODE_FOR_vsx_load_v4sf;
+ return altivec_expand_xl_be_builtin (code, exp, target, false);
+ }
+ break;
+ default:
+ break;
+ /* Fall through. */
+ }
+
*expandedp = false;
return NULL_RTX;
}
@@ -16198,51 +16058,51 @@ paired_expand_predicate_builtin (enum insn_code icode, tree exp, rtx target)
static void
rs6000_invalid_builtin (enum rs6000_builtins fncode)
{
- size_t uns_fncode = (size_t)fncode;
+ size_t uns_fncode = (size_t) fncode;
const char *name = rs6000_builtin_info[uns_fncode].name;
HOST_WIDE_INT fnmask = rs6000_builtin_info[uns_fncode].mask;
gcc_assert (name != NULL);
if ((fnmask & RS6000_BTM_CELL) != 0)
- error ("Builtin function %s is only valid for the cell processor", name);
+ error ("builtin function %s is only valid for the cell processor", name);
else if ((fnmask & RS6000_BTM_VSX) != 0)
- error ("Builtin function %s requires the -mvsx option", name);
+ error ("builtin function %s requires the -mvsx option", name);
else if ((fnmask & RS6000_BTM_HTM) != 0)
- error ("Builtin function %s requires the -mhtm option", name);
+ error ("builtin function %s requires the -mhtm option", name);
else if ((fnmask & RS6000_BTM_ALTIVEC) != 0)
- error ("Builtin function %s requires the -maltivec option", name);
+ error ("builtin function %s requires the -maltivec option", name);
else if ((fnmask & RS6000_BTM_PAIRED) != 0)
- error ("Builtin function %s requires the -mpaired option", name);
+ error ("builtin function %s requires the -mpaired option", name);
else if ((fnmask & (RS6000_BTM_DFP | RS6000_BTM_P8_VECTOR))
== (RS6000_BTM_DFP | RS6000_BTM_P8_VECTOR))
- error ("Builtin function %s requires the -mhard-dfp and"
+ error ("builtin function %s requires the -mhard-dfp and"
" -mpower8-vector options", name);
else if ((fnmask & RS6000_BTM_DFP) != 0)
- error ("Builtin function %s requires the -mhard-dfp option", name);
+ error ("builtin function %s requires the -mhard-dfp option", name);
else if ((fnmask & RS6000_BTM_P8_VECTOR) != 0)
- error ("Builtin function %s requires the -mpower8-vector option", name);
+ error ("builtin function %s requires the -mpower8-vector option", name);
else if ((fnmask & (RS6000_BTM_P9_VECTOR | RS6000_BTM_64BIT))
== (RS6000_BTM_P9_VECTOR | RS6000_BTM_64BIT))
- error ("Builtin function %s requires the -mcpu=power9 and"
+ error ("builtin function %s requires the -mcpu=power9 and"
" -m64 options", name);
else if ((fnmask & RS6000_BTM_P9_VECTOR) != 0)
- error ("Builtin function %s requires the -mcpu=power9 option", name);
+ error ("builtin function %s requires the -mcpu=power9 option", name);
else if ((fnmask & (RS6000_BTM_P9_MISC | RS6000_BTM_64BIT))
== (RS6000_BTM_P9_MISC | RS6000_BTM_64BIT))
- error ("Builtin function %s requires the -mcpu=power9 and"
+ error ("builtin function %s requires the -mcpu=power9 and"
" -m64 options", name);
else if ((fnmask & RS6000_BTM_P9_MISC) == RS6000_BTM_P9_MISC)
- error ("Builtin function %s requires the -mcpu=power9 option", name);
+ error ("builtin function %s requires the -mcpu=power9 option", name);
else if ((fnmask & (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128))
== (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128))
- error ("Builtin function %s requires the -mhard-float and"
+ error ("builtin function %s requires the -mhard-float and"
" -mlong-double-128 options", name);
else if ((fnmask & RS6000_BTM_HARD_FLOAT) != 0)
- error ("Builtin function %s requires the -mhard-float option", name);
+ error ("builtin function %s requires the -mhard-float option", name);
else if ((fnmask & RS6000_BTM_FLOAT128) != 0)
- error ("Builtin function %s requires the -mfloat128 option", name);
+ error ("builtin function %s requires the -mfloat128 option", name);
else
- error ("Builtin function %s is not supported with the current options",
+ error ("builtin function %s is not supported with the current options",
name);
}
@@ -16303,6 +16163,20 @@ rs6000_gimple_fold_builtin (gimple_stmt_iterator *gsi)
= (enum rs6000_builtins) DECL_FUNCTION_CODE (fndecl);
tree arg0, arg1, lhs;
+ size_t uns_fncode = (size_t) fn_code;
+ enum insn_code icode = rs6000_builtin_info[uns_fncode].icode;
+ const char *fn_name1 = rs6000_builtin_info[uns_fncode].name;
+ const char *fn_name2 = (icode != CODE_FOR_nothing)
+ ? get_insn_name ((int) icode)
+ : "nothing";
+
+ if (TARGET_DEBUG_BUILTIN)
+ fprintf (stderr, "rs6000_gimple_fold_builtin %d %s %s\n",
+ fn_code, fn_name1, fn_name2);
+
+ if (!rs6000_fold_gimple)
+ return false;
+
/* Generic solution to prevent gimple folding of code without a LHS. */
if (!gimple_call_lhs (stmt))
return false;
@@ -16662,6 +16536,9 @@ rs6000_gimple_fold_builtin (gimple_stmt_iterator *gsi)
return true;
}
default:
+ if (TARGET_DEBUG_BUILTIN)
+ fprintf (stderr, "gimple builtin intrinsic not matched:%d %s %s\n",
+ fn_code, fn_name1, fn_name2);
break;
}
@@ -16694,9 +16571,9 @@ rs6000_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
{
enum insn_code icode = rs6000_builtin_info[uns_fcode].icode;
const char *name1 = rs6000_builtin_info[uns_fcode].name;
- const char *name2 = ((icode != CODE_FOR_nothing)
- ? get_insn_name ((int)icode)
- : "nothing");
+ const char *name2 = (icode != CODE_FOR_nothing)
+ ? get_insn_name ((int) icode)
+ : "nothing";
const char *name3;
switch (rs6000_builtin_info[uns_fcode].attr & RS6000_BTC_TYPE_MASK)
@@ -16715,7 +16592,7 @@ rs6000_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
fprintf (stderr,
"rs6000_expand_builtin, %s (%d), insn = %s (%d), type=%s%s\n",
(name1) ? name1 : "---", fcode,
- (name2) ? name2 : "---", (int)icode,
+ (name2) ? name2 : "---", (int) icode,
name3,
func_valid_p ? "" : ", not valid");
}
@@ -17543,6 +17420,19 @@ altivec_init_builtins (void)
def_builtin ("__builtin_vsx_st_elemrev_v4si", void_ftype_v4si_long_pvoid,
VSX_BUILTIN_ST_ELEMREV_V4SI);
+ def_builtin ("__builtin_vsx_le_be_v8hi", v8hi_ftype_long_pcvoid,
+ VSX_BUILTIN_XL_BE_V8HI);
+ def_builtin ("__builtin_vsx_le_be_v4si", v4si_ftype_long_pcvoid,
+ VSX_BUILTIN_XL_BE_V4SI);
+ def_builtin ("__builtin_vsx_le_be_v2di", v2di_ftype_long_pcvoid,
+ VSX_BUILTIN_XL_BE_V2DI);
+ def_builtin ("__builtin_vsx_le_be_v4sf", v4sf_ftype_long_pcvoid,
+ VSX_BUILTIN_XL_BE_V4SF);
+ def_builtin ("__builtin_vsx_le_be_v2df", v2df_ftype_long_pcvoid,
+ VSX_BUILTIN_XL_BE_V2DF);
+ def_builtin ("__builtin_vsx_le_be_v16qi", v16qi_ftype_long_pcvoid,
+ VSX_BUILTIN_XL_BE_V16QI);
+
if (TARGET_P9_VECTOR)
{
def_builtin ("__builtin_vsx_ld_elemrev_v8hi", v8hi_ftype_long_pcvoid,
@@ -17572,6 +17462,8 @@ altivec_init_builtins (void)
VSX_BUILTIN_VEC_ST);
def_builtin ("__builtin_vec_xl", opaque_ftype_long_pcvoid,
VSX_BUILTIN_VEC_XL);
+ def_builtin ("__builtin_vec_xl_be", opaque_ftype_long_pcvoid,
+ VSX_BUILTIN_VEC_XL_BE);
def_builtin ("__builtin_vec_xst", void_ftype_opaque_long_pvoid,
VSX_BUILTIN_VEC_XST);
@@ -18065,8 +17957,10 @@ builtin_function_type (machine_mode mode_ret, machine_mode mode_arg0,
/* unsigned 2 argument functions. */
case ALTIVEC_BUILTIN_VMULEUB:
case ALTIVEC_BUILTIN_VMULEUH:
+ case ALTIVEC_BUILTIN_VMULEUW:
case ALTIVEC_BUILTIN_VMULOUB:
case ALTIVEC_BUILTIN_VMULOUH:
+ case ALTIVEC_BUILTIN_VMULOUW:
case CRYPTO_BUILTIN_VCIPHER:
case CRYPTO_BUILTIN_VCIPHERLAST:
case CRYPTO_BUILTIN_VNCIPHER:
@@ -19347,42 +19241,6 @@ mems_ok_for_quad_peep (rtx mem1, rtx mem2)
return 1;
}
-
-rtx
-rs6000_secondary_memory_needed_rtx (machine_mode mode)
-{
- static bool eliminated = false;
- rtx ret;
-
- if (mode != SDmode || TARGET_NO_SDMODE_STACK)
- ret = assign_stack_local (mode, GET_MODE_SIZE (mode), 0);
- else
- {
- rtx mem = cfun->machine->sdmode_stack_slot;
- gcc_assert (mem != NULL_RTX);
-
- if (!eliminated)
- {
- mem = eliminate_regs (mem, VOIDmode, NULL_RTX);
- cfun->machine->sdmode_stack_slot = mem;
- eliminated = true;
- }
- ret = mem;
- }
-
- if (TARGET_DEBUG_ADDR)
- {
- fprintf (stderr, "\nrs6000_secondary_memory_needed_rtx, mode %s, rtx:\n",
- GET_MODE_NAME (mode));
- if (!ret)
- fprintf (stderr, "\tNULL_RTX\n");
- else
- debug_rtx (ret);
- }
-
- return ret;
-}
-
/* Return the mode to be used for memory when a secondary memory
location is needed. For SDmode values we need to use DDmode, in
all other cases we can use the same mode. */
@@ -19394,36 +19252,6 @@ rs6000_secondary_memory_needed_mode (machine_mode mode)
return mode;
}
-static tree
-rs6000_check_sdmode (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
-{
- /* Don't walk into types. */
- if (*tp == NULL_TREE || *tp == error_mark_node || TYPE_P (*tp))
- {
- *walk_subtrees = 0;
- return NULL_TREE;
- }
-
- switch (TREE_CODE (*tp))
- {
- case VAR_DECL:
- case PARM_DECL:
- case FIELD_DECL:
- case RESULT_DECL:
- case SSA_NAME:
- case REAL_CST:
- case MEM_REF:
- case VIEW_CONVERT_EXPR:
- if (TYPE_MODE (TREE_TYPE (*tp)) == SDmode)
- return *tp;
- break;
- default:
- break;
- }
-
- return NULL_TREE;
-}
-
/* Classify a register type. Because the FMRGOW/FMRGEW instructions only work
on traditional floating point registers, and the VMRGOW/VMRGEW instructions
only work on the traditional altivec registers, note if an altivec register
@@ -19444,7 +19272,7 @@ register_to_reg_type (rtx reg, bool *is_altivec)
regno = REGNO (reg);
if (regno >= FIRST_PSEUDO_REGISTER)
{
- if (!lra_in_progress && !reload_in_progress && !reload_completed)
+ if (!lra_in_progress && !reload_completed)
return PSEUDO_REG_TYPE;
regno = true_regnum (reg);
@@ -19817,7 +19645,7 @@ rs6000_secondary_reload_simple_move (enum rs6000_reg_type to_type,
}
/* ISA 2.07: MTVSRWZ or MFVSRWZ. */
- if (TARGET_VSX_SMALL_INTEGER)
+ if (TARGET_P8_VECTOR)
{
if (mode == SImode)
return true;
@@ -20521,64 +20349,6 @@ rs6000_secondary_reload_gpr (rtx reg, rtx mem, rtx scratch, bool store_p)
return;
}
-/* Allocate a 64-bit stack slot to be used for copying SDmode values through if
- this function has any SDmode references. If we are on a power7 or later, we
- don't need the 64-bit stack slot since the LFIWZX and STIFWX instructions
- can load/store the value. */
-
-static void
-rs6000_alloc_sdmode_stack_slot (void)
-{
- tree t;
- basic_block bb;
- gimple_stmt_iterator gsi;
-
- gcc_assert (cfun->machine->sdmode_stack_slot == NULL_RTX);
- /* We use a different approach for dealing with the secondary
- memory in LRA. */
- if (ira_use_lra_p)
- return;
-
- if (TARGET_NO_SDMODE_STACK)
- return;
-
- FOR_EACH_BB_FN (bb, cfun)
- for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
- {
- tree ret = walk_gimple_op (gsi_stmt (gsi), rs6000_check_sdmode, NULL);
- if (ret)
- {
- rtx stack = assign_stack_local (DDmode, GET_MODE_SIZE (DDmode), 0);
- cfun->machine->sdmode_stack_slot = adjust_address_nv (stack,
- SDmode, 0);
- return;
- }
- }
-
- /* Check for any SDmode parameters of the function. */
- for (t = DECL_ARGUMENTS (cfun->decl); t; t = DECL_CHAIN (t))
- {
- if (TREE_TYPE (t) == error_mark_node)
- continue;
-
- if (TYPE_MODE (TREE_TYPE (t)) == SDmode
- || TYPE_MODE (DECL_ARG_TYPE (t)) == SDmode)
- {
- rtx stack = assign_stack_local (DDmode, GET_MODE_SIZE (DDmode), 0);
- cfun->machine->sdmode_stack_slot = adjust_address_nv (stack,
- SDmode, 0);
- return;
- }
- }
-}
-
-static void
-rs6000_instantiate_decls (void)
-{
- if (cfun->machine->sdmode_stack_slot != NULL_RTX)
- instantiate_decl_rtl (cfun->machine->sdmode_stack_slot);
-}
-
/* Given an rtx X being reloaded into a reg required to be
in class CLASS, return the class of reg to actually use.
In general this is just CLASS; but on some machines
@@ -20651,7 +20421,6 @@ rs6000_preferred_reload_class (rtx x, enum reg_class rclass)
/* ISA 3.0 can load -128..127 using the XXSPLTIB instruction and
a sign extend in the Altivec registers. */
if (IN_RANGE (value, -128, 127) && TARGET_P9_VECTOR
- && TARGET_VSX_SMALL_INTEGER
&& (rclass == ALTIVEC_REGS || rclass == VSX_REGS))
return ALTIVEC_REGS;
}
@@ -23607,10 +23376,9 @@ static rtx
rs6000_pre_atomic_barrier (rtx mem, enum memmodel model)
{
rtx addr = XEXP (mem, 0);
- int strict_p = (reload_in_progress || reload_completed);
- if (!legitimate_indirect_address_p (addr, strict_p)
- && !legitimate_indexed_address_p (addr, strict_p))
+ if (!legitimate_indirect_address_p (addr, reload_completed)
+ && !legitimate_indexed_address_p (addr, reload_completed))
{
addr = force_reg (Pmode, addr);
mem = replace_equiv_address_nv (mem, addr);
@@ -24684,6 +24452,21 @@ rs6000_savres_strategy (rs6000_stack_t *info,
else if (!lr_save_p && info->first_gp_reg_save > 29)
strategy |= SAVE_INLINE_GPRS | REST_INLINE_GPRS;
+ /* We can only use save multiple if we need to save all the registers from
+ first_gp_reg_save. Otherwise, the CFI gets messed up (we save some
+ register we do not restore). */
+ if (strategy & SAVE_MULTIPLE)
+ {
+ int i;
+
+ for (i = info->first_gp_reg_save; i < 32; i++)
+ if (fixed_reg_p (i) || !save_reg_p (i))
+ {
+ strategy &= ~SAVE_MULTIPLE;
+ break;
+ }
+ }
+
/* We can only use load multiple or the out-of-line routines to
restore gprs if we've saved all the registers from
first_gp_reg_save. Otherwise, we risk loading garbage.
@@ -32525,7 +32308,7 @@ rs6000_trampoline_init (rtx m_tramp, tree fndecl, rtx cxt)
rtx fnmem, fn_reg, toc_reg;
if (!TARGET_POINTERS_TO_NESTED_FUNCTIONS)
- error ("You cannot take the address of a nested function if you use "
+ error ("you cannot take the address of a nested function if you use "
"the -mno-pointers-to-nested-functions option.");
fnmem = gen_const_mem (Pmode, force_reg (Pmode, fnaddr));
@@ -33337,7 +33120,7 @@ rs6000_machopic_legitimize_pic_address (rtx orig, machine_mode mode,
{
rtx base, offset;
- if (reg == NULL && ! reload_in_progress && ! reload_completed)
+ if (reg == NULL && !reload_completed)
reg = gen_reg_rtx (Pmode);
if (GET_CODE (orig) == CONST)
@@ -33363,7 +33146,7 @@ rs6000_machopic_legitimize_pic_address (rtx orig, machine_mode mode,
{
if (SMALL_INT (offset))
return plus_constant (Pmode, base, INTVAL (offset));
- else if (! reload_in_progress && ! reload_completed)
+ else if (!reload_completed)
offset = force_reg (Pmode, offset);
else
{
@@ -35999,14 +35782,6 @@ rs6000_libcall_value (machine_mode mode)
return gen_rtx_REG (mode, regno);
}
-
-/* Return true if we use LRA instead of reload pass. */
-static bool
-rs6000_lra_p (void)
-{
- return TARGET_LRA;
-}
-
/* Compute register pressure classes. We implement the target hook to avoid
IRA picking something like NON_SPECIAL_REGS as a pressure class, which can
lead to incorrect estimates of number of available registers and therefor
@@ -36358,11 +36133,7 @@ static struct rs6000_opt_mask const rs6000_opt_masks[] =
{ "string", OPTION_MASK_STRING, false, true },
{ "toc-fusion", OPTION_MASK_TOC_FUSION, false, true },
{ "update", OPTION_MASK_NO_UPDATE, true , true },
- { "upper-regs-di", OPTION_MASK_UPPER_REGS_DI, false, true },
- { "upper-regs-df", OPTION_MASK_UPPER_REGS_DF, false, true },
- { "upper-regs-sf", OPTION_MASK_UPPER_REGS_SF, false, true },
{ "vsx", OPTION_MASK_VSX, false, true },
- { "vsx-small-integer", OPTION_MASK_VSX_SMALL_INTEGER, false, true },
{ "vsx-timode", OPTION_MASK_VSX_TIMODE, false, true },
#ifdef OPTION_MASK_64BIT
#if TARGET_AIX_OS
@@ -37624,7 +37395,7 @@ rs6000_allocate_stack_temp (machine_mode mode,
{
rtx stack = assign_stack_temp (mode, GET_MODE_SIZE (mode));
rtx addr = XEXP (stack, 0);
- int strict_p = (reload_in_progress || reload_completed);
+ int strict_p = reload_completed;
if (!legitimate_indirect_address_p (addr, strict_p))
{
@@ -37646,13 +37417,12 @@ rs6000_allocate_stack_temp (machine_mode mode,
rtx
rs6000_address_for_fpconvert (rtx x)
{
- int strict_p = (reload_in_progress || reload_completed);
rtx addr;
gcc_assert (MEM_P (x));
addr = XEXP (x, 0);
- if (! legitimate_indirect_address_p (addr, strict_p)
- && ! legitimate_indexed_address_p (addr, strict_p))
+ if (! legitimate_indirect_address_p (addr, reload_completed)
+ && ! legitimate_indexed_address_p (addr, reload_completed))
{
if (GET_CODE (addr) == PRE_INC || GET_CODE (addr) == PRE_DEC)
{
@@ -37690,10 +37460,9 @@ rs6000_address_for_altivec (rtx x)
if (!altivec_indexed_or_indirect_operand (x, GET_MODE (x)))
{
rtx addr = XEXP (x, 0);
- int strict_p = (reload_in_progress || reload_completed);
- if (!legitimate_indexed_address_p (addr, strict_p)
- && !legitimate_indirect_address_p (addr, strict_p))
+ if (!legitimate_indexed_address_p (addr, reload_completed)
+ && !legitimate_indirect_address_p (addr, reload_completed))
addr = copy_to_mode_reg (Pmode, addr);
addr = gen_rtx_AND (Pmode, addr, GEN_INT (-16));
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 9b73be1e176..82a0bda48c6 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -600,8 +600,7 @@ extern int rs6000_vector_align[];
#define TARGET_DIRECT_MOVE_128 (TARGET_P9_VECTOR && TARGET_DIRECT_MOVE \
&& TARGET_POWERPC64)
#define TARGET_VEXTRACTUB (TARGET_P9_VECTOR && TARGET_DIRECT_MOVE \
- && TARGET_UPPER_REGS_DI && TARGET_POWERPC64)
-
+ && TARGET_POWERPC64)
/* Whether we should avoid (SUBREG:SI (REG:SF) and (SUBREG:SF (REG:SI). */
#define TARGET_NO_SF_SUBREG TARGET_DIRECT_MOVE_64BIT
@@ -761,7 +760,6 @@ extern int rs6000_vector_align[];
#define TARGET_DIRECT_MOVE_64BIT (TARGET_DIRECT_MOVE \
&& TARGET_P8_VECTOR \
&& TARGET_POWERPC64 \
- && TARGET_UPPER_REGS_DI \
&& (rs6000_altivec_element_order != 2))
/* Whether the various reciprocal divide/square root estimate instructions
@@ -1585,13 +1583,6 @@ extern enum reg_class rs6000_constraints[RS6000_CONSTRAINT_MAX];
#define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) \
rs6000_secondary_memory_needed_ptr (CLASS1, CLASS2, MODE)
-/* For cpus that cannot load/store SDmode values from the 64-bit
- FP registers without using a full 64-bit load/store, we need
- to allocate a full 64-bit stack slot for them. */
-
-#define SECONDARY_MEMORY_NEEDED_RTX(MODE) \
- rs6000_secondary_memory_needed_rtx (MODE)
-
/* Specify the mode to be used for memory when a secondary memory
location is needed. For cpus that cannot load/store SDmode values
from the 64-bit FP registers without using a full 64-bit
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 2fd9ef0f168..6985b9f82da 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -691,7 +691,7 @@
;; D-form load to FPR register & move to Altivec register
;; Move Altivec register to FPR register and store
(define_mode_iterator ALTIVEC_DFORM [DF
- SF
+ (SF "TARGET_P8_VECTOR")
(DI "TARGET_POWERPC64")])
@@ -1004,8 +1004,7 @@
(define_split
[(set (match_operand:DI 0 "altivec_register_operand")
(sign_extend:DI (match_operand:SI 1 "altivec_register_operand")))]
- "TARGET_VSX_SMALL_INTEGER && TARGET_P8_VECTOR && !TARGET_P9_VECTOR
- && reload_completed"
+ "TARGET_P8_VECTOR && !TARGET_P9_VECTOR && reload_completed"
[(const_int 0)]
{
rtx dest = operands[0];
@@ -5161,7 +5160,7 @@
operands[1] = rs6000_address_for_fpconvert (operands[1]);
if (GET_CODE (operands[2]) == SCRATCH)
operands[2] = gen_reg_rtx (DImode);
- if (TARGET_VSX_SMALL_INTEGER)
+ if (TARGET_P8_VECTOR)
emit_insn (gen_extendsidi2 (operands[2], operands[1]));
else
emit_insn (gen_lfiwax (operands[2], operands[1]));
@@ -5238,7 +5237,7 @@
operands[1] = rs6000_address_for_fpconvert (operands[1]);
if (GET_CODE (operands[2]) == SCRATCH)
operands[2] = gen_reg_rtx (DImode);
- if (TARGET_VSX_SMALL_INTEGER)
+ if (TARGET_P8_VECTOR)
emit_insn (gen_zero_extendsidi2 (operands[2], operands[1]));
else
emit_insn (gen_lfiwzx (operands[2], operands[1]));
@@ -5423,8 +5422,7 @@
(clobber (match_scratch:DI 2))
(clobber (match_scratch:DI 3))
(clobber (match_scratch:<QHI:MODE> 4))])]
- "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE && TARGET_POWERPC64
- && TARGET_VSX_SMALL_INTEGER"
+ "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE && TARGET_POWERPC64"
{
if (MEM_P (operands[1]))
operands[1] = rs6000_address_for_fpconvert (operands[1]);
@@ -5437,8 +5435,7 @@
(clobber (match_scratch:DI 2 "=wK,wi,wK"))
(clobber (match_scratch:DI 3 "=X,r,X"))
(clobber (match_scratch:<QHI:MODE> 4 "=X,X,wK"))]
- "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE && TARGET_POWERPC64
- && TARGET_UPPER_REGS_DI && TARGET_VSX_SMALL_INTEGER"
+ "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE && TARGET_POWERPC64"
"#"
"&& reload_completed"
[(const_int 0)]
@@ -5477,8 +5474,7 @@
(match_operand:QHI 1 "input_operand" "")))
(clobber (match_scratch:DI 2 ""))
(clobber (match_scratch:DI 3 ""))])]
- "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE && TARGET_POWERPC64
- && TARGET_VSX_SMALL_INTEGER"
+ "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE && TARGET_POWERPC64"
{
if (MEM_P (operands[1]))
operands[1] = rs6000_address_for_fpconvert (operands[1]);
@@ -5490,8 +5486,7 @@
(match_operand:QHI 1 "reg_or_indexed_operand" "wK,r,Z")))
(clobber (match_scratch:DI 2 "=wK,wi,wJwK"))
(clobber (match_scratch:DI 3 "=X,r,X"))]
- "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE && TARGET_POWERPC64
- && TARGET_VSX_SMALL_INTEGER"
+ "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE && TARGET_POWERPC64"
"#"
"&& reload_completed"
[(const_int 0)]
@@ -5524,7 +5519,7 @@
"TARGET_HARD_FLOAT && <TARGET_FLOAT>"
"
{
- if (!TARGET_VSX_SMALL_INTEGER)
+ if (!TARGET_P8_VECTOR)
{
rtx src = force_reg (<MODE>mode, operands[1]);
@@ -5551,7 +5546,7 @@
"TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT
&& (<MODE>mode != SFmode || TARGET_SINGLE_FLOAT)
&& TARGET_STFIWX && can_create_pseudo_p ()
- && !TARGET_VSX_SMALL_INTEGER"
+ && !TARGET_P8_VECTOR"
"#"
""
[(pc)]
@@ -5592,7 +5587,7 @@
(fix:SI (match_operand:SFDF 1 "gpc_reg_operand" "d,<rreg>")))
(clobber (match_operand:DI 2 "gpc_reg_operand" "=1,d"))
(clobber (match_operand:DI 3 "offsettable_mem_operand" "=o,o"))]
- "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT && !TARGET_VSX_SMALL_INTEGER"
+ "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT && !TARGET_P8_VECTOR"
"#"
""
[(pc)]
@@ -5629,8 +5624,7 @@
[(parallel [(set (match_operand:<QHI:MODE> 0 "nonimmediate_operand")
(fix:QHI (match_operand:SFDF 1 "gpc_reg_operand")))
(clobber (match_scratch:DI 2))])]
- "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE_64BIT
- && TARGET_VSX_SMALL_INTEGER"
+ "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE_64BIT"
{
if (MEM_P (operands[0]))
operands[0] = rs6000_address_for_fpconvert (operands[0]);
@@ -5641,8 +5635,7 @@
(fix:QHI
(match_operand:SFDF 1 "gpc_reg_operand" "<SFDF:Fv>,<SFDF:Fv>")))
(clobber (match_scratch:DI 2 "=X,wi"))]
- "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE_64BIT
- && TARGET_VSX_SMALL_INTEGER"
+ "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE_64BIT"
"#"
"&& reload_completed"
[(const_int 0)]
@@ -5672,7 +5665,7 @@
"TARGET_HARD_FLOAT && <TARGET_FLOAT> && TARGET_FCTIWUZ && TARGET_STFIWX"
"
{
- if (!TARGET_VSX_SMALL_INTEGER)
+ if (!TARGET_P8_VECTOR)
{
emit_insn (gen_fixuns_trunc<mode>si2_stfiwx (operands[0], operands[1]));
DONE;
@@ -5685,7 +5678,7 @@
(clobber (match_scratch:DI 2 "=d"))]
"TARGET_HARD_FLOAT && <TARGET_FLOAT> && TARGET_FCTIWUZ
&& TARGET_STFIWX && can_create_pseudo_p ()
- && !TARGET_VSX_SMALL_INTEGER"
+ && !TARGET_P8_VECTOR"
"#"
""
[(pc)]
@@ -5734,8 +5727,7 @@
[(parallel [(set (match_operand:<QHI:MODE> 0 "nonimmediate_operand")
(unsigned_fix:QHI (match_operand:SFDF 1 "gpc_reg_operand")))
(clobber (match_scratch:DI 2))])]
- "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE_64BIT
- && TARGET_VSX_SMALL_INTEGER"
+ "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE_64BIT"
{
if (MEM_P (operands[0]))
operands[0] = rs6000_address_for_fpconvert (operands[0]);
@@ -5746,8 +5738,7 @@
(unsigned_fix:QHI
(match_operand:SFDF 1 "gpc_reg_operand" "<SFDF:Fv>,<SFDF:Fv>")))
(clobber (match_scratch:DI 2 "=X,wi"))]
- "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE_64BIT
- && TARGET_VSX_SMALL_INTEGER"
+ "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE_64BIT"
"#"
"&& reload_completed"
[(const_int 0)]
@@ -5777,7 +5768,7 @@
(define_insn "*fctiw<u>z_<mode>_smallint"
[(set (match_operand:SI 0 "vsx_register_operand" "=d,wi")
(any_fix:SI (match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")))]
- "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT && TARGET_VSX_SMALL_INTEGER"
+ "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT && TARGET_P8_VECTOR"
"@
fctiw<u>z %0,%1
xscvdp<su>xws %x0,%x1"
@@ -5789,7 +5780,7 @@
[(set (match_operand:SI 0 "memory_operand" "=Z")
(any_fix:SI (match_operand:SFDF 1 "gpc_reg_operand" "wa")))
(clobber (match_scratch:SI 2 "=wa"))]
- "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT && TARGET_VSX_SMALL_INTEGER"
+ "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT && TARGET_P8_VECTOR"
"#"
"&& reload_completed"
[(set (match_dup 2)
@@ -6681,7 +6672,7 @@
UNSPEC_MOVSI_GOT))]
"DEFAULT_ABI == ABI_V4
&& flag_pic == 1
- && (reload_in_progress || reload_completed)"
+ && reload_completed"
[(set (match_dup 0) (match_dup 2))
(set (match_dup 0) (unspec:SI [(match_dup 1)(match_dup 0)]
UNSPEC_MOVSI_GOT))]
@@ -6959,7 +6950,7 @@
(define_split
[(set (match_operand:DI 0 "altivec_register_operand")
(match_operand:DI 1 "xxspltib_constant_split"))]
- "TARGET_VSX_SMALL_INTEGER && TARGET_P9_VECTOR && reload_completed"
+ "TARGET_P9_VECTOR && reload_completed"
[(const_int 0)]
{
rtx op0 = operands[0];
@@ -8234,7 +8225,7 @@
(and:P (plus:P (match_operand:P 1 "gpc_reg_operand" "r")
(match_operand:P 2 "reg_or_cint_operand" "rI"))
(const_int -16)))]
- "TARGET_ALTIVEC && (reload_in_progress || reload_completed)"
+ "TARGET_ALTIVEC && reload_completed"
"#"
"&& reload_completed"
[(set (match_dup 0)
@@ -8664,7 +8655,7 @@
(define_split
[(set (match_operand:DI 0 "altivec_register_operand" "")
(match_operand:DI 1 "s5bit_cint_operand" ""))]
- "TARGET_UPPER_REGS_DI && TARGET_VSX && reload_completed"
+ "TARGET_VSX && reload_completed"
[(const_int 0)]
{
rtx op0 = operands[0];
@@ -8686,7 +8677,7 @@
(define_split
[(set (match_operand:INT_ISA3 0 "altivec_register_operand" "")
(match_operand:INT_ISA3 1 "xxspltib_constant_split" ""))]
- "TARGET_UPPER_REGS_DI && TARGET_P9_VECTOR && reload_completed"
+ "TARGET_P9_VECTOR && reload_completed"
[(const_int 0)]
{
rtx op0 = operands[0];
@@ -9766,7 +9757,7 @@
(match_operand:DF 1 "any_operand" ""))
(set (match_operand:DF 2 "gpc_reg_operand" "")
(match_dup 0))]
- "!TARGET_UPPER_REGS_DF
+ "!TARGET_VSX
&& peep2_reg_dead_p (2, operands[0])"
[(set (match_dup 2) (match_dup 1))])
@@ -9775,7 +9766,7 @@
(match_operand:SF 1 "any_operand" ""))
(set (match_operand:SF 2 "gpc_reg_operand" "")
(match_dup 0))]
- "!TARGET_UPPER_REGS_SF
+ "!TARGET_P8_VECTOR
&& peep2_reg_dead_p (2, operands[0])"
[(set (match_dup 2) (match_dup 1))])
@@ -13974,8 +13965,7 @@
(match_operand:ALTIVEC_DFORM 2 "simple_offsettable_mem_operand"))
(set (match_operand:ALTIVEC_DFORM 3 "altivec_register_operand")
(match_dup 1))]
- "TARGET_VSX && TARGET_UPPER_REGS_<MODE> && !TARGET_P9_DFORM_SCALAR
- && peep2_reg_dead_p (2, operands[1])"
+ "TARGET_VSX && !TARGET_P9_DFORM_SCALAR && peep2_reg_dead_p (2, operands[1])"
[(set (match_dup 0)
(match_dup 4))
(set (match_dup 3)
@@ -14011,8 +14001,7 @@
(match_operand:ALTIVEC_DFORM 2 "altivec_register_operand"))
(set (match_operand:ALTIVEC_DFORM 3 "simple_offsettable_mem_operand")
(match_dup 1))]
- "TARGET_VSX && TARGET_UPPER_REGS_<MODE> && !TARGET_P9_DFORM_SCALAR
- && peep2_reg_dead_p (2, operands[1])"
+ "TARGET_VSX && !TARGET_P9_DFORM_SCALAR && peep2_reg_dead_p (2, operands[1])"
[(set (match_dup 0)
(match_dup 4))
(set (match_dup 5)
diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt
index 28d899391fb..1ee84cb4dc5 100644
--- a/gcc/config/rs6000/rs6000.opt
+++ b/gcc/config/rs6000/rs6000.opt
@@ -148,6 +148,10 @@ maltivec=be
Target Report RejectNegative Var(rs6000_altivec_element_order, 2)
Generate AltiVec instructions using big-endian element order.
+mfold-gimple
+Target Report Var(rs6000_fold_gimple) Init(1)
+Enable early gimple folding of builtins.
+
mhard-dfp
Target Report Mask(DFP) Var(rs6000_isa_flags)
Use decimal floating point instructions.
@@ -200,9 +204,6 @@ mvsx-scalar-double
Target Undocumented Report Var(TARGET_VSX_SCALAR_DOUBLE) Init(1)
; If -mvsx, use VSX arithmetic instructions for DFmode (on by default)
-mvsx-scalar-memory
-Target Undocumented Report Alias(mupper-regs-df)
-
mvsx-align-128
Target Undocumented Report Var(TARGET_VSX_ALIGN_128) Save
; If -mvsx, set alignment to 128 bits instead of 32/64
@@ -433,9 +434,9 @@ mlong-double-
Target RejectNegative Joined UInteger Var(rs6000_long_double_type_size) Save
-mlong-double-<n> Specify size of long double (64 or 128 bits).
+; This option existed in the past, but now is always on.
mlra
-Target Report Mask(LRA) Var(rs6000_isa_flags)
-Enable Local Register Allocation.
+Target RejectNegative Undocumented Ignore
msched-costly-dep=
Target RejectNegative Joined Var(rs6000_sched_costly_dep_str)
@@ -549,22 +550,6 @@ mcompat-align-parm
Target Report Var(rs6000_compat_align_parm) Init(0) Save
Generate aggregate parameter passing code with at most 64-bit alignment.
-mupper-regs-df
-Target Report Mask(UPPER_REGS_DF) Var(rs6000_isa_flags)
-Allow double variables in upper registers with -mcpu=power7 or -mvsx.
-
-mupper-regs-sf
-Target Report Mask(UPPER_REGS_SF) Var(rs6000_isa_flags)
-Allow float variables in upper registers with -mcpu=power8 or -mpower8-vector.
-
-mupper-regs
-Target Report Var(TARGET_UPPER_REGS) Init(-1) Save
-Allow float/double variables in upper registers if cpu allows it.
-
-mupper-regs-di
-Target Report Mask(UPPER_REGS_DI) Var(rs6000_isa_flags)
-Allow 64-bit integer variables in upper registers with -mcpu=power7 or -mvsx.
-
moptimize-swaps
Target Undocumented Var(rs6000_optimize_swaps) Init(1) Save
Analyze and remove doubleword swaps from VSX computations.
@@ -625,10 +610,6 @@ mfloat128-convert
Target Undocumented Mask(FLOAT128_CVT) Var(rs6000_isa_flags)
Enable default conversions between __float128 & long double.
-mvsx-small-integer
-Target Report Mask(VSX_SMALL_INTEGER) Var(rs6000_isa_flags)
-Enable small integers to be in VSX registers.
-
mstack-protector-guard=
Target RejectNegative Joined Enum(stack_protector_guard) Var(rs6000_stack_protector_guard) Init(SSP_TLS)
Use given stack-protector guard.
diff --git a/gcc/config/rs6000/rtems.h b/gcc/config/rs6000/rtems.h
index 54a36de6eb4..8a62fdcbaf3 100644
--- a/gcc/config/rs6000/rtems.h
+++ b/gcc/config/rs6000/rtems.h
@@ -14,33 +14,172 @@
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3. If not see
+ 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/>. */
-/* Specify predefined symbols in preprocessor. */
+/* Copy and paste from linux64.h and freebsd64.h */
+#ifdef IN_LIBGCC2
+#undef TARGET_64BIT
+#ifdef __powerpc64__
+#define TARGET_64BIT 1
+#else
+#define TARGET_64BIT 0
+#endif
+#endif
+
+/* Copy and paste from linux64.h and freebsd64.h */
+#undef TARGET_AIX
+#define TARGET_AIX TARGET_64BIT
#undef TARGET_OS_CPP_BUILTINS
-#define TARGET_OS_CPP_BUILTINS() \
- do \
- { \
- builtin_define_std ("PPC"); \
- builtin_define ("__rtems__"); \
- builtin_define ("__USE_INIT_FINI__"); \
- builtin_assert ("system=rtems"); \
- builtin_assert ("cpu=powerpc"); \
- builtin_assert ("machine=powerpc"); \
- TARGET_OS_SYSV_CPP_BUILTINS (); \
- } \
+#define TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define ("__rtems__"); \
+ builtin_define ("__USE_INIT_FINI__"); \
+ builtin_assert ("system=rtems"); \
+ if (TARGET_64BIT) \
+ { \
+ builtin_define ("__PPC__"); \
+ builtin_define ("__PPC64__"); \
+ builtin_define ("__powerpc64__"); \
+ builtin_assert ("cpu=powerpc64"); \
+ builtin_assert ("machine=powerpc64"); \
+ } \
+ else \
+ { \
+ builtin_define_std ("PPC"); \
+ builtin_define_std ("powerpc"); \
+ builtin_assert ("cpu=powerpc"); \
+ builtin_assert ("machine=powerpc"); \
+ TARGET_OS_SYSV_CPP_BUILTINS (); \
+ } \
+ } \
+ while (0)
+
+/* Copy and paste from linux64.h and freebsd64.h */
+#define INVALID_64BIT "-m%s not supported in this configuration"
+
+/* A lot of copy and paste from linux64.h and freebsd64.h */
+#undef SUBSUBTARGET_OVERRIDE_OPTIONS
+#define SUBSUBTARGET_OVERRIDE_OPTIONS \
+ do \
+ { \
+ if (rs6000_isa_flags & OPTION_MASK_64BIT) \
+ { \
+ rs6000_elf_abi = 2; \
+ rs6000_current_abi = ABI_ELFv2; \
+ if (rs6000_isa_flags & OPTION_MASK_RELOCATABLE) \
+ { \
+ rs6000_isa_flags &= ~OPTION_MASK_RELOCATABLE; \
+ error (INVALID_64BIT, "relocatable"); \
+ } \
+ if (rs6000_isa_flags & OPTION_MASK_EABI) \
+ { \
+ rs6000_isa_flags &= ~OPTION_MASK_EABI; \
+ error (INVALID_64BIT, "eabi"); \
+ } \
+ if (TARGET_PROTOTYPE) \
+ { \
+ target_prototype = 0; \
+ error (INVALID_64BIT, "prototype"); \
+ } \
+ if ((rs6000_isa_flags & OPTION_MASK_POWERPC64) == 0) \
+ { \
+ rs6000_isa_flags |= OPTION_MASK_POWERPC64; \
+ error ("-m64 requires a PowerPC64 cpu"); \
+ } \
+ } \
+ } \
while (0)
#undef TARGET_LIBGCC_SDATA_SECTION
#define TARGET_LIBGCC_SDATA_SECTION ".sdata"
-#undef CPP_OS_DEFAULT_SPEC
-#define CPP_OS_DEFAULT_SPEC "%(cpp_os_rtems)"
+/* Copy and paste from linux64.h and freebsd64.h */
+#undef SIZE_TYPE
+#define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int")
+
+/* Copy and paste from linux64.h and freebsd64.h */
+#undef PTRDIFF_TYPE
+#define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int")
+
+/* Copy and paste from freebsd64.h */
+#undef WCHAR_TYPE
+
+/* Copy and paste from freebsd64.h */
+#undef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE 32
+
+/* Copy and paste from linux64.h and freebsd64.h */
+#ifdef __powerpc64__
+#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
+ asm (SECTION_OP "\n" \
+" bl " #FUNC "\n" \
+" nop\n" \
+" .previous");
+#endif
+
+/* This could be also POWERPC_FREEBSD. It is related to the save/restore
+ defines below. */
+#define POWERPC_LINUX
+
+/* Copy and paste from linux64.h and freebsd64.h */
+#undef SAVE_FP_PREFIX
+#define SAVE_FP_PREFIX (TARGET_64BIT ? "._savef" : "_savefpr_")
+#undef SAVE_FP_SUFFIX
+#define SAVE_FP_SUFFIX ""
+#undef RESTORE_FP_PREFIX
+#define RESTORE_FP_PREFIX (TARGET_64BIT ? "._restf" : "_restfpr_")
+#undef RESTORE_FP_SUFFIX
+#define RESTORE_FP_SUFFIX ""
-#define CPP_OS_RTEMS_SPEC "\
+/* Copy and paste from linux64.h and freebsd64.h */
+#undef ASM_DECLARE_FUNCTION_SIZE
+#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \
+ do \
+ { \
+ if (!flag_inhibit_size_directive) \
+ { \
+ fputs ("\t.size\t", (FILE)); \
+ if (TARGET_64BIT && DOT_SYMBOLS) \
+ putc ('.', (FILE)); \
+ assemble_name ((FILE), (FNAME)); \
+ fputs (",.-", (FILE)); \
+ rs6000_output_function_entry (FILE, FNAME); \
+ putc ('\n', (FILE)); \
+ } \
+ } \
+ while (0)
+
+/* Copy and paste from linux64.h and freebsd64.h */
+#undef ASM_OUTPUT_SPECIAL_POOL_ENTRY_P
+#define ASM_OUTPUT_SPECIAL_POOL_ENTRY_P(X, MODE) \
+ (TARGET_TOC \
+ && (GET_CODE (X) == SYMBOL_REF \
+ || (GET_CODE (X) == CONST && GET_CODE (XEXP (X, 0)) == PLUS \
+ && GET_CODE (XEXP (XEXP (X, 0), 0)) == SYMBOL_REF) \
+ || GET_CODE (X) == LABEL_REF \
+ || (GET_CODE (X) == CONST_INT \
+ && GET_MODE_BITSIZE (MODE) <= GET_MODE_BITSIZE (Pmode)) \
+ || (GET_CODE (X) == CONST_DOUBLE \
+ && ((TARGET_64BIT \
+ && (TARGET_MINIMAL_TOC \
+ || (SCALAR_FLOAT_MODE_P (GET_MODE (X)) \
+ && ! TARGET_NO_FP_IN_TOC))) \
+ || (!TARGET_64BIT \
+ && !TARGET_NO_FP_IN_TOC \
+ && SCALAR_FLOAT_MODE_P (GET_MODE (X)) \
+ && BITS_PER_WORD == HOST_BITS_PER_INT)))))
+
+#undef CPP_OS_DEFAULT_SPEC
+#define CPP_OS_DEFAULT_SPEC "\
%{!mcpu*: %{!Dppc*: %{!Dmpc*: -Dmpc750} } }\
%{mcpu=403: %{!Dppc*: %{!Dmpc*: -Dppc403} } } \
%{mcpu=505: %{!Dppc*: %{!Dmpc*: -Dmpc505} } } \
@@ -55,6 +194,37 @@
%{mcpu=8540: %{!Dppc*: %{!Dmpc*: -Dppc8540} } } \
%{mcpu=e6500: -D__PPC_CPU_E6500__}"
+#undef ASM_DEFAULT_SPEC
+#define ASM_DEFAULT_SPEC "-mppc%{m64:64}"
+
+#undef ASM_SPEC
+#define ASM_SPEC "%{!m64:%(asm_spec32)}%{m64:%(asm_spec64)} %(asm_spec_common)"
+
+#define ASM_SPEC32 "-a32 \
+%{mrelocatable} %{mrelocatable-lib} %{" FPIE_OR_FPIC_SPEC ":-K PIC} \
+%{memb|msdata=eabi: -memb}"
+
+#define ASM_SPEC64 "-a64"
+
+#define ASM_SPEC_COMMON "%(asm_cpu) \
+%{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}}" \
+ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
+
+#undef LINK_OS_DEFAULT_SPEC
+#define LINK_OS_DEFAULT_SPEC \
+"%{!m64:%(link_os_spec32)}%{m64:%(link_os_spec64)}"
+
+#define LINK_OS_SPEC32 ENDIAN_SELECT(" -m elf32ppc", \
+ " -m elf32lppc", \
+ " -m elf32ppc")
+#define LINK_OS_SPEC64 ENDIAN_SELECT(" -m elf64ppc", \
+ " -m elf64lppc", \
+ " -m elf64ppc")
+
#undef SUBSUBTARGET_EXTRA_SPECS
#define SUBSUBTARGET_EXTRA_SPECS \
- { "cpp_os_rtems", CPP_OS_RTEMS_SPEC }
+ { "asm_spec_common", ASM_SPEC_COMMON }, \
+ { "asm_spec32", ASM_SPEC32 }, \
+ { "asm_spec64", ASM_SPEC64 }, \
+ { "link_os_spec32", LINK_OS_SPEC32 }, \
+ { "link_os_spec64", LINK_OS_SPEC64 },
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index de386291a51..cbee89140dd 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -757,24 +757,34 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
#define CRTOFFLOADEND ""
#endif
-#ifdef HAVE_LD_PIE
-#define STARTFILE_LINUX_SPEC "\
-%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \
-%{mnewlib:ecrti.o%s;:crti.o%s} \
-%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \
-" CRTOFFLOADBEGIN
-#else
-#define STARTFILE_LINUX_SPEC "\
-%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \
-%{mnewlib:ecrti.o%s;:crti.o%s} \
-%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \
-" CRTOFFLOADBEGIN
-#endif
-
-#define ENDFILE_LINUX_SPEC "\
-%{shared|pie:crtendS.o%s;:crtend.o%s} \
-%{mnewlib:ecrtn.o%s;:crtn.o%s} \
-" CRTOFFLOADEND
+/* STARTFILE_LINUX_SPEC should be the same as GNU_USER_TARGET_STARTFILE_SPEC
+ but with the mnewlib ecrti.o%s selection substituted for crti.o%s. */
+#define STARTFILE_LINUX_SPEC \
+ "%{shared:; \
+ pg|p|profile:gcrt1.o%s; \
+ static:crt1.o%s; \
+ " PIE_SPEC ":Scrt1.o%s; \
+ :crt1.o%s} \
+ %{mnewlib:ecrti.o%s;:crti.o%s} \
+ %{static:crtbeginT.o%s; \
+ shared|" PIE_SPEC ":crtbeginS.o%s; \
+ :crtbegin.o%s} \
+ %{fvtable-verify=none:%s; \
+ fvtable-verify=preinit:vtv_start_preinit.o%s; \
+ fvtable-verify=std:vtv_start.o%s} \
+ " CRTOFFLOADBEGIN
+
+/* ENDFILE_LINUX_SPEC should be the same as GNU_USER_TARGET_ENDFILE_SPEC
+ but with the mnewlib ecrtn.o%s selection substituted for crtn.o%s. */
+#define ENDFILE_LINUX_SPEC \
+ "%{fvtable-verify=none:%s; \
+ fvtable-verify=preinit:vtv_end_preinit.o%s; \
+ fvtable-verify=std:vtv_end.o%s} \
+ %{static:crtend.o%s; \
+ shared|" PIE_SPEC ":crtendS.o%s; \
+ :crtend.o%s} \
+ %{mnewlib:ecrtn.o%s;:crtn.o%s} \
+ " CRTOFFLOADEND
#define LINK_START_LINUX_SPEC ""
diff --git a/gcc/config/rs6000/t-rtems b/gcc/config/rs6000/t-rtems
index 8290f5c5bdd..0e39c6320c8 100644
--- a/gcc/config/rs6000/t-rtems
+++ b/gcc/config/rs6000/t-rtems
@@ -27,8 +27,8 @@ MULTILIB_REQUIRED =
MULTILIB_OPTIONS += mcpu=403/mcpu=505/mcpu=603e/mcpu=604/mcpu=860/mcpu=7400/mcpu=8540/mcpu=e6500
MULTILIB_DIRNAMES += m403 m505 m603e m604 m860 m7400 m8540 me6500
-MULTILIB_OPTIONS += m32
-MULTILIB_DIRNAMES += m32
+MULTILIB_OPTIONS += m32/m64
+MULTILIB_DIRNAMES += m32 m64
MULTILIB_OPTIONS += msoft-float
MULTILIB_DIRNAMES += nof
@@ -72,3 +72,5 @@ MULTILIB_REQUIRED += mcpu=8540/msoft-float
MULTILIB_REQUIRED += mcpu=860
MULTILIB_REQUIRED += mcpu=e6500/m32
MULTILIB_REQUIRED += mcpu=e6500/m32/msoft-float/mno-altivec
+MULTILIB_REQUIRED += mcpu=e6500/m64
+MULTILIB_REQUIRED += mcpu=e6500/m64/msoft-float/mno-altivec
diff --git a/gcc/config/rs6000/vector.md b/gcc/config/rs6000/vector.md
index a3d53e7f439..d6f2fd13fcb 100644
--- a/gcc/config/rs6000/vector.md
+++ b/gcc/config/rs6000/vector.md
@@ -74,6 +74,16 @@
(V1TI "TI")
(TI "TI")])
+;; As above, but in lower case
+(define_mode_attr VEC_base_l [(V16QI "qi")
+ (V8HI "hi")
+ (V4SI "si")
+ (V2DI "di")
+ (V4SF "sf")
+ (V2DF "df")
+ (V1TI "ti")
+ (TI "ti")])
+
;; Same size integer type for floating point data
(define_mode_attr VEC_int [(V4SF "v4si")
(V2DF "v2di")])
@@ -1016,7 +1026,7 @@
;; Vector initialization, set, extract
-(define_expand "vec_init<mode>"
+(define_expand "vec_init<mode><VEC_base_l>"
[(match_operand:VEC_E 0 "vlogical_operand" "")
(match_operand:VEC_E 1 "" "")]
"VECTOR_MEM_ALTIVEC_OR_VSX_P (<MODE>mode)"
@@ -1035,7 +1045,7 @@
DONE;
})
-(define_expand "vec_extract<mode>"
+(define_expand "vec_extract<mode><VEC_base_l>"
[(match_operand:<VEC_base> 0 "register_operand" "")
(match_operand:VEC_E 1 "vlogical_operand" "")
(match_operand 2 "const_int_operand" "")]
diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md
index ff65caa35dc..510294d97eb 100644
--- a/gcc/config/rs6000/vsx.md
+++ b/gcc/config/rs6000/vsx.md
@@ -37,6 +37,9 @@
(TI "TARGET_VSX_TIMODE")
V1TI])
+;; Iterator for 128-bit integer types that go in a single vector register.
+(define_mode_iterator VSX_TI [(TI "TARGET_VSX_TIMODE") V1TI])
+
;; Iterator for the 2 32-bit vector types
(define_mode_iterator VSX_W [V4SF V4SI])
@@ -326,6 +329,7 @@
UNSPEC_VSX_CVDPSXWS
UNSPEC_VSX_CVDPUXWS
UNSPEC_VSX_CVSPDP
+ UNSPEC_VSX_CVHPSP
UNSPEC_VSX_CVSPDPN
UNSPEC_VSX_CVDPSPN
UNSPEC_VSX_CVSXWDP
@@ -348,6 +352,8 @@
UNSPEC_VSX_ROUND_I
UNSPEC_VSX_ROUND_IC
UNSPEC_VSX_SLDWI
+ UNSPEC_VSX_XXPERM
+
UNSPEC_VSX_XXSPLTW
UNSPEC_VSX_XXSPLTD
UNSPEC_VSX_DIVSD
@@ -368,6 +374,8 @@
UNSPEC_VSX_SIEXPQP
UNSPEC_VSX_SCMPEXPDP
UNSPEC_VSX_STSTDC
+ UNSPEC_VSX_VEXTRACT_FP_FROM_SHORTH
+ UNSPEC_VSX_VEXTRACT_FP_FROM_SHORTL
UNSPEC_VSX_VXEXP
UNSPEC_VSX_VXSIG
UNSPEC_VSX_VIEXP
@@ -751,9 +759,9 @@
;; special V1TI container class, which it is not appropriate to use vec_select
;; for the type.
(define_insn "*vsx_le_permute_<mode>"
- [(set (match_operand:VSX_LE_128 0 "nonimmediate_operand" "=<VSa>,<VSa>,Z")
- (rotate:VSX_LE_128
- (match_operand:VSX_LE_128 1 "input_operand" "<VSa>,Z,<VSa>")
+ [(set (match_operand:VSX_TI 0 "nonimmediate_operand" "=<VSa>,<VSa>,Z")
+ (rotate:VSX_TI
+ (match_operand:VSX_TI 1 "input_operand" "<VSa>,Z,<VSa>")
(const_int 64)))]
"!BYTES_BIG_ENDIAN && TARGET_VSX && !TARGET_P9_VECTOR"
"@
@@ -764,10 +772,10 @@
(set_attr "type" "vecperm,vecload,vecstore")])
(define_insn_and_split "*vsx_le_undo_permute_<mode>"
- [(set (match_operand:VSX_LE_128 0 "vsx_register_operand" "=<VSa>,<VSa>")
- (rotate:VSX_LE_128
- (rotate:VSX_LE_128
- (match_operand:VSX_LE_128 1 "vsx_register_operand" "0,<VSa>")
+ [(set (match_operand:VSX_TI 0 "vsx_register_operand" "=<VSa>,<VSa>")
+ (rotate:VSX_TI
+ (rotate:VSX_TI
+ (match_operand:VSX_TI 1 "vsx_register_operand" "0,<VSa>")
(const_int 64))
(const_int 64)))]
"!BYTES_BIG_ENDIAN && TARGET_VSX"
@@ -792,16 +800,15 @@
"!BYTES_BIG_ENDIAN && TARGET_VSX && !TARGET_P9_VECTOR"
"#"
"!BYTES_BIG_ENDIAN && TARGET_VSX && !TARGET_P9_VECTOR"
- [(set (match_dup 2)
- (rotate:VSX_LE_128 (match_dup 1)
- (const_int 64)))
- (set (match_dup 0)
- (rotate:VSX_LE_128 (match_dup 2)
- (const_int 64)))]
+ [(const_int 0)]
"
{
- operands[2] = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (operands[0])
- : operands[0];
+ rtx tmp = (can_create_pseudo_p ()
+ ? gen_reg_rtx_and_attrs (operands[0])
+ : operands[0]);
+ rs6000_emit_le_vsx_permute (tmp, operands[1], <MODE>mode);
+ rs6000_emit_le_vsx_permute (operands[0], tmp, <MODE>mode);
+ DONE;
}
"
[(set_attr "type" "vecload")
@@ -819,15 +826,14 @@
[(set (match_operand:VSX_LE_128 0 "memory_operand" "")
(match_operand:VSX_LE_128 1 "vsx_register_operand" ""))]
"!BYTES_BIG_ENDIAN && TARGET_VSX && !reload_completed && !TARGET_P9_VECTOR"
- [(set (match_dup 2)
- (rotate:VSX_LE_128 (match_dup 1)
- (const_int 64)))
- (set (match_dup 0)
- (rotate:VSX_LE_128 (match_dup 2)
- (const_int 64)))]
+ [(const_int 0)]
{
- operands[2] = can_create_pseudo_p () ? gen_reg_rtx_and_attrs (operands[0])
- : operands[0];
+ rtx tmp = (can_create_pseudo_p ()
+ ? gen_reg_rtx_and_attrs (operands[0])
+ : operands[0]);
+ rs6000_emit_le_vsx_permute (tmp, operands[1], <MODE>mode);
+ rs6000_emit_le_vsx_permute (operands[0], tmp, <MODE>mode);
+ DONE;
})
;; Peephole to catch memory to memory transfers for TImode if TImode landed in
@@ -851,16 +857,13 @@
[(set (match_operand:VSX_LE_128 0 "memory_operand" "")
(match_operand:VSX_LE_128 1 "vsx_register_operand" ""))]
"!BYTES_BIG_ENDIAN && TARGET_VSX && reload_completed && !TARGET_P9_VECTOR"
- [(set (match_dup 1)
- (rotate:VSX_LE_128 (match_dup 1)
- (const_int 64)))
- (set (match_dup 0)
- (rotate:VSX_LE_128 (match_dup 1)
- (const_int 64)))
- (set (match_dup 1)
- (rotate:VSX_LE_128 (match_dup 1)
- (const_int 64)))]
- "")
+ [(const_int 0)]
+{
+ rs6000_emit_le_vsx_permute (operands[1], operands[1], <MODE>mode);
+ rs6000_emit_le_vsx_permute (operands[0], operands[1], <MODE>mode);
+ rs6000_emit_le_vsx_permute (operands[1], operands[1], <MODE>mode);
+ DONE;
+})
;; Vector constants that can be generated with XXSPLTIB that was added in ISA
;; 3.0. Both (const_vector [..]) and (vec_duplicate ...) forms are recognized.
@@ -1198,7 +1201,7 @@
UNSPEC_VSX_MULSD))]
"VECTOR_MEM_VSX_P (V2DImode)"
"#"
- "VECTOR_MEM_VSX_P (V2DImode) && !reload_completed && !reload_in_progress"
+ "VECTOR_MEM_VSX_P (V2DImode) && !reload_completed"
[(const_int 0)]
"
{
@@ -1236,7 +1239,7 @@
UNSPEC_VSX_DIVSD))]
"VECTOR_MEM_VSX_P (V2DImode)"
"#"
- "VECTOR_MEM_VSX_P (V2DImode) && !reload_completed && !reload_in_progress"
+ "VECTOR_MEM_VSX_P (V2DImode) && !reload_completed"
[(const_int 0)]
"
{
@@ -1264,7 +1267,7 @@
UNSPEC_VSX_DIVUD))]
"VECTOR_MEM_VSX_P (V2DImode)"
"#"
- "VECTOR_MEM_VSX_P (V2DImode) && !reload_completed && !reload_in_progress"
+ "VECTOR_MEM_VSX_P (V2DImode) && !reload_completed"
[(const_int 0)]
"
{
@@ -1746,6 +1749,15 @@
"xscvspdp %x0,%x1"
[(set_attr "type" "fp")])
+;; Generate xvcvhpsp instruction
+(define_insn "vsx_xvcvhpsp"
+ [(set (match_operand:V4SF 0 "vsx_register_operand" "=wa")
+ (unspec:V4SF [(match_operand: V16QI 1 "vsx_register_operand" "wa")]
+ UNSPEC_VSX_CVHPSP))]
+ "TARGET_P9_VECTOR"
+ "xvcvhpsp %x0,%x1"
+ [(set_attr "type" "vecfloat")])
+
;; xscvdpsp used for splat'ing a scalar to V4SF, knowing that the internal SF
;; format of scalars is actually DF.
(define_insn "vsx_xscvdpsp_scalar"
@@ -2352,10 +2364,10 @@
;; Build a V2DF/V2DI vector from two scalars
(define_insn "vsx_concat_<mode>"
- [(set (match_operand:VSX_D 0 "gpc_reg_operand" "=<VSa>,we")
+ [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa,we")
(vec_concat:VSX_D
- (match_operand:<VS_scalar> 1 "gpc_reg_operand" "<VS_64reg>,b")
- (match_operand:<VS_scalar> 2 "gpc_reg_operand" "<VS_64reg>,b")))]
+ (match_operand:<VS_scalar> 1 "gpc_reg_operand" "wa,b")
+ (match_operand:<VS_scalar> 2 "gpc_reg_operand" "wa,b")))]
"VECTOR_MEM_VSX_P (<MODE>mode)"
{
if (which_alternative == 0)
@@ -2373,6 +2385,80 @@
}
[(set_attr "type" "vecperm")])
+;; Combiner patterns to allow creating XXPERMDI's to access either double
+;; word element in a vector register.
+(define_insn "*vsx_concat_<mode>_1"
+ [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
+ (vec_concat:VSX_D
+ (vec_select:<VS_scalar>
+ (match_operand:VSX_D 1 "gpc_reg_operand" "wa")
+ (parallel [(match_operand:QI 2 "const_0_to_1_operand" "n")]))
+ (match_operand:<VS_scalar> 3 "gpc_reg_operand" "wa")))]
+ "VECTOR_MEM_VSX_P (<MODE>mode)"
+{
+ HOST_WIDE_INT dword = INTVAL (operands[2]);
+ if (BYTES_BIG_ENDIAN)
+ {
+ operands[4] = GEN_INT (2*dword);
+ return "xxpermdi %x0,%x1,%x3,%4";
+ }
+ else
+ {
+ operands[4] = GEN_INT (!dword);
+ return "xxpermdi %x0,%x3,%x1,%4";
+ }
+}
+ [(set_attr "type" "vecperm")])
+
+(define_insn "*vsx_concat_<mode>_2"
+ [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
+ (vec_concat:VSX_D
+ (match_operand:<VS_scalar> 1 "gpc_reg_operand" "wa")
+ (vec_select:<VS_scalar>
+ (match_operand:VSX_D 2 "gpc_reg_operand" "wa")
+ (parallel [(match_operand:QI 3 "const_0_to_1_operand" "n")]))))]
+ "VECTOR_MEM_VSX_P (<MODE>mode)"
+{
+ HOST_WIDE_INT dword = INTVAL (operands[3]);
+ if (BYTES_BIG_ENDIAN)
+ {
+ operands[4] = GEN_INT (dword);
+ return "xxpermdi %x0,%x1,%x2,%4";
+ }
+ else
+ {
+ operands[4] = GEN_INT (2 * !dword);
+ return "xxpermdi %x0,%x2,%x1,%4";
+ }
+}
+ [(set_attr "type" "vecperm")])
+
+(define_insn "*vsx_concat_<mode>_3"
+ [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
+ (vec_concat:VSX_D
+ (vec_select:<VS_scalar>
+ (match_operand:VSX_D 1 "gpc_reg_operand" "wa")
+ (parallel [(match_operand:QI 2 "const_0_to_1_operand" "n")]))
+ (vec_select:<VS_scalar>
+ (match_operand:VSX_D 3 "gpc_reg_operand" "wa")
+ (parallel [(match_operand:QI 4 "const_0_to_1_operand" "n")]))))]
+ "VECTOR_MEM_VSX_P (<MODE>mode)"
+{
+ HOST_WIDE_INT dword1 = INTVAL (operands[2]);
+ HOST_WIDE_INT dword2 = INTVAL (operands[4]);
+ if (BYTES_BIG_ENDIAN)
+ {
+ operands[5] = GEN_INT ((2 * dword1) + dword2);
+ return "xxpermdi %x0,%x1,%x3,%5";
+ }
+ else
+ {
+ operands[5] = GEN_INT ((2 * !dword2) + !dword1);
+ return "xxpermdi %x0,%x3,%x1,%5";
+ }
+}
+ [(set_attr "type" "vecperm")])
+
;; Special purpose concat using xxpermdi to glue two single precision values
;; together, relying on the fact that internally scalar floats are represented
;; as doubles. This is used to initialize a V4SF vector with 4 floats
@@ -2573,25 +2659,35 @@
DONE;
})
-;; Set the element of a V2DI/VD2F mode
-(define_insn "vsx_set_<mode>"
- [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wd,?<VSa>")
- (unspec:VSX_D
- [(match_operand:VSX_D 1 "vsx_register_operand" "wd,<VSa>")
- (match_operand:<VS_scalar> 2 "vsx_register_operand" "<VS_64reg>,<VSa>")
- (match_operand:QI 3 "u5bit_cint_operand" "i,i")]
- UNSPEC_VSX_SET))]
+;; Rewrite V2DF/V2DI set in terms of VEC_CONCAT
+(define_expand "vsx_set_<mode>"
+ [(use (match_operand:VSX_D 0 "vsx_register_operand"))
+ (use (match_operand:VSX_D 1 "vsx_register_operand"))
+ (use (match_operand:<VS_scalar> 2 "gpc_reg_operand"))
+ (use (match_operand:QI 3 "const_0_to_1_operand"))]
"VECTOR_MEM_VSX_P (<MODE>mode)"
{
- int idx_first = BYTES_BIG_ENDIAN ? 0 : 1;
- if (INTVAL (operands[3]) == idx_first)
- return \"xxpermdi %x0,%x2,%x1,1\";
- else if (INTVAL (operands[3]) == 1 - idx_first)
- return \"xxpermdi %x0,%x1,%x2,0\";
+ rtx dest = operands[0];
+ rtx vec_reg = operands[1];
+ rtx value = operands[2];
+ rtx ele = operands[3];
+ rtx tmp = gen_reg_rtx (<VS_scalar>mode);
+
+ if (ele == const0_rtx)
+ {
+ emit_insn (gen_vsx_extract_<mode> (tmp, vec_reg, const1_rtx));
+ emit_insn (gen_vsx_concat_<mode> (dest, value, tmp));
+ DONE;
+ }
+ else if (ele == const1_rtx)
+ {
+ emit_insn (gen_vsx_extract_<mode> (tmp, vec_reg, const0_rtx));
+ emit_insn (gen_vsx_concat_<mode> (dest, tmp, value));
+ DONE;
+ }
else
gcc_unreachable ();
-}
- [(set_attr "type" "vecperm")])
+})
;; Extract a DF/DI element from V2DF/V2DI
;; Optimize cases were we can do a simple or direct move.
@@ -2924,7 +3020,7 @@
"VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_DIRECT_MOVE_64BIT"
{
/* If we have ISA 3.0, we can do a xxextractuw/vextractu{b,h}. */
- if (TARGET_VSX_SMALL_INTEGER && TARGET_P9_VECTOR)
+ if (TARGET_P9_VECTOR)
{
emit_insn (gen_vsx_extract_<mode>_p9 (operands[0], operands[1],
operands[2]));
@@ -2938,8 +3034,7 @@
(match_operand:VSX_EXTRACT_I 1 "gpc_reg_operand" "wK,<VSX_EX>")
(parallel [(match_operand:QI 2 "<VSX_EXTRACT_PREDICATE>" "n,n")])))
(clobber (match_scratch:SI 3 "=r,X"))]
- "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_VEXTRACTUB
- && TARGET_VSX_SMALL_INTEGER"
+ "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_VEXTRACTUB"
{
if (which_alternative == 0)
return "#";
@@ -2969,8 +3064,7 @@
(match_operand:VSX_EXTRACT_I 1 "altivec_register_operand")
(parallel [(match_operand:QI 2 "const_int_operand")])))
(clobber (match_operand:SI 3 "int_reg_operand"))]
- "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_VEXTRACTUB
- && TARGET_VSX_SMALL_INTEGER && reload_completed"
+ "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_VEXTRACTUB && reload_completed"
[(const_int 0)]
{
rtx op0_si = gen_rtx_REG (SImode, REGNO (operands[0]));
@@ -2995,8 +3089,7 @@
(match_operand:VSX_EXTRACT_I 1 "gpc_reg_operand" "wK,<VSX_EX>")
(parallel [(match_operand:QI 2 "const_int_operand" "n,n")]))))
(clobber (match_scratch:SI 3 "=r,X"))]
- "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_VEXTRACTUB
- && TARGET_VSX_SMALL_INTEGER"
+ "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_VEXTRACTUB"
"#"
"&& reload_completed"
[(parallel [(set (match_dup 4)
@@ -3016,8 +3109,7 @@
(parallel [(match_operand:QI 2 "const_int_operand" "n,n")])))
(clobber (match_scratch:<VS_scalar> 3 "=<VSX_EX>,&r"))
(clobber (match_scratch:SI 4 "=X,&r"))]
- "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_VEXTRACTUB
- && TARGET_VSX_SMALL_INTEGER"
+ "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_VEXTRACTUB"
"#"
"&& reload_completed"
[(parallel [(set (match_dup 3)
@@ -3034,8 +3126,7 @@
(match_operand:V4SI 1 "gpc_reg_operand" "wJv,wJv,wJv")
(parallel [(match_operand:QI 2 "const_0_to_3_operand" "n,n,n")])))
(clobber (match_scratch:V4SI 3 "=wJv,wJv,wJv"))]
- "VECTOR_MEM_VSX_P (V4SImode) && TARGET_DIRECT_MOVE_64BIT
- && (!TARGET_P9_VECTOR || !TARGET_VSX_SMALL_INTEGER)"
+ "VECTOR_MEM_VSX_P (V4SImode) && TARGET_DIRECT_MOVE_64BIT && !TARGET_P9_VECTOR"
"#"
"&& reload_completed"
[(const_int 0)]
@@ -3053,15 +3144,7 @@
instruction. */
value = INTVAL (element);
if (value != 1)
- {
- if (TARGET_P9_VECTOR && TARGET_VSX_SMALL_INTEGER)
- {
- rtx si_tmp = gen_rtx_REG (SImode, REGNO (vec_tmp));
- emit_insn (gen_vsx_extract_v4si_p9 (si_tmp,src, element));
- }
- else
- emit_insn (gen_altivec_vspltw_direct (vec_tmp, src, element));
- }
+ emit_insn (gen_altivec_vspltw_direct (vec_tmp, src, element));
else
vec_tmp = src;
@@ -3070,13 +3153,13 @@
if (can_create_pseudo_p ())
dest = rs6000_address_for_fpconvert (dest);
- if (TARGET_VSX_SMALL_INTEGER)
+ if (TARGET_P8_VECTOR)
emit_move_insn (dest, gen_rtx_REG (SImode, REGNO (vec_tmp)));
else
emit_insn (gen_stfiwx (dest, gen_rtx_REG (DImode, REGNO (vec_tmp))));
}
- else if (TARGET_VSX_SMALL_INTEGER)
+ else if (TARGET_P8_VECTOR)
emit_move_insn (dest, gen_rtx_REG (SImode, REGNO (vec_tmp)));
else
emit_move_insn (gen_rtx_REG (DImode, REGNO (dest)),
@@ -3094,7 +3177,7 @@
(parallel [(match_operand:QI 2 "<VSX_EXTRACT_PREDICATE>" "n")])))
(clobber (match_scratch:VSX_EXTRACT_I2 3 "=v"))]
"VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_DIRECT_MOVE_64BIT
- && (!TARGET_P9_VECTOR || !TARGET_VSX_SMALL_INTEGER)"
+ && !TARGET_P9_VECTOR"
"#"
"&& reload_completed"
[(const_int 0)]
@@ -3305,7 +3388,7 @@
(parallel [(match_operand:QI 2 "const_int_operand" "n")]))))
(clobber (match_scratch:<VSX_EXTRACT_I:VS_scalar> 3 "=v"))]
"VECTOR_MEM_VSX_P (<VSX_EXTRACT_I:MODE>mode) && TARGET_DIRECT_MOVE_64BIT
- && TARGET_P9_VECTOR && TARGET_VSX_SMALL_INTEGER"
+ && TARGET_P9_VECTOR"
"#"
"&& reload_completed"
[(parallel [(set (match_dup 3)
@@ -3329,7 +3412,7 @@
(parallel [(match_operand:QI 2 "const_int_operand" "n")]))))
(clobber (match_scratch:<VSX_EXTRACT_I:VS_scalar> 3 "=v"))]
"VECTOR_MEM_VSX_P (<VSX_EXTRACT_I:MODE>mode) && TARGET_DIRECT_MOVE_64BIT
- && TARGET_P9_VECTOR && TARGET_VSX_SMALL_INTEGER"
+ && TARGET_P9_VECTOR"
"#"
"&& reload_completed"
[(parallel [(set (match_dup 3)
@@ -3351,8 +3434,7 @@
(match_operand:<VS_scalar> 2 "gpc_reg_operand" "<VSX_EX>")
(match_operand:QI 3 "<VSX_EXTRACT_PREDICATE>" "n")]
UNSPEC_VSX_SET))]
- "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_P9_VECTOR && TARGET_VSX_SMALL_INTEGER
- && TARGET_UPPER_REGS_DI && TARGET_POWERPC64"
+ "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_P9_VECTOR && TARGET_POWERPC64"
{
int ele = INTVAL (operands[3]);
int nunits = GET_MODE_NUNITS (<MODE>mode);
@@ -3376,8 +3458,7 @@
(match_operand:QI 3 "const_0_to_3_operand" "n")]
UNSPEC_VSX_SET))
(clobber (match_scratch:SI 4 "=&wJwK"))]
- "VECTOR_MEM_VSX_P (V4SFmode) && TARGET_P9_VECTOR && TARGET_VSX_SMALL_INTEGER
- && TARGET_UPPER_REGS_DI && TARGET_POWERPC64"
+ "VECTOR_MEM_VSX_P (V4SFmode) && TARGET_P9_VECTOR && TARGET_POWERPC64"
"#"
"&& reload_completed"
[(set (match_dup 5)
@@ -3412,8 +3493,7 @@
(match_operand:QI 3 "const_0_to_3_operand" "n")]
UNSPEC_VSX_SET))
(clobber (match_scratch:SI 4 "=&wJwK"))]
- "VECTOR_MEM_VSX_P (V4SFmode) && TARGET_P9_VECTOR && TARGET_VSX_SMALL_INTEGER
- && TARGET_UPPER_REGS_DI && TARGET_POWERPC64"
+ "VECTOR_MEM_VSX_P (V4SFmode) && TARGET_P9_VECTOR && TARGET_POWERPC64"
"#"
"&& reload_completed"
[(set (match_dup 4)
@@ -3443,8 +3523,7 @@
[(match_operand:QI 3 "const_0_to_3_operand" "n")]))
(match_operand:QI 4 "const_0_to_3_operand" "n")]
UNSPEC_VSX_SET))]
- "VECTOR_MEM_VSX_P (V4SFmode) && TARGET_P9_VECTOR && TARGET_VSX_SMALL_INTEGER
- && TARGET_UPPER_REGS_DI && TARGET_POWERPC64
+ "VECTOR_MEM_VSX_P (V4SFmode) && TARGET_P9_VECTOR && TARGET_POWERPC64
&& (INTVAL (operands[3]) == (VECTOR_ELT_ORDER_BIG ? 1 : 2))"
{
int ele = INTVAL (operands[4]);
@@ -3472,8 +3551,7 @@
UNSPEC_VSX_SET))
(clobber (match_scratch:SI 5 "=&wJwK"))]
"VECTOR_MEM_VSX_P (V4SFmode) && VECTOR_MEM_VSX_P (V4SImode)
- && TARGET_P9_VECTOR && TARGET_VSX_SMALL_INTEGER
- && TARGET_UPPER_REGS_DI && TARGET_POWERPC64
+ && TARGET_P9_VECTOR && TARGET_POWERPC64
&& (INTVAL (operands[3]) != (VECTOR_ELT_ORDER_BIG ? 1 : 2))"
"#"
"&& 1"
@@ -4506,7 +4584,65 @@
"xxinsertw %x0,%x1,%3"
[(set_attr "type" "vecperm")])
-
+;; Generate vector extract four float 32 values from left four elements
+;; of eight element vector of float 16 values.
+(define_expand "vextract_fp_from_shorth"
+ [(set (match_operand:V4SF 0 "register_operand" "=wa")
+ (unspec:V4SF [(match_operand:V8HI 1 "register_operand" "wa")]
+ UNSPEC_VSX_VEXTRACT_FP_FROM_SHORTH))]
+ "TARGET_P9_VECTOR"
+{
+ int vals[16] = {15, 14, 0, 0, 13, 12, 0, 0, 11, 10, 0, 0, 9, 8, 0, 0};
+ int i;
+
+ rtx rvals[16];
+ rtx mask = gen_reg_rtx (V16QImode);
+ rtx tmp = gen_reg_rtx (V16QImode);
+ rtvec v;
+
+ for (i = 0; i < 16; i++)
+ rvals[i] = GEN_INT (vals[i]);
+
+ /* xvcvhpsp - vector convert F16 to vector F32 requires the four F16
+ inputs in half words 1,3,5,7 (IBM numbering). Use xxperm to move
+ src half words 0,1,2,3 for the conversion instruction. */
+ v = gen_rtvec_v (16, rvals);
+ emit_insn (gen_vec_initv16qiqi (mask, gen_rtx_PARALLEL (V16QImode, v)));
+ emit_insn (gen_altivec_vperm_v8hiv16qi (tmp, operands[1],
+ operands[1], mask));
+ emit_insn (gen_vsx_xvcvhpsp (operands[0], tmp));
+ DONE;
+})
+
+;; Generate vector extract four float 32 values from right four elements
+;; of eight element vector of float 16 values.
+(define_expand "vextract_fp_from_shortl"
+ [(set (match_operand:V4SF 0 "register_operand" "=wa")
+ (unspec:V4SF [(match_operand:V8HI 1 "register_operand" "wa")]
+ UNSPEC_VSX_VEXTRACT_FP_FROM_SHORTL))]
+ "TARGET_P9_VECTOR"
+{
+ int vals[16] = {7, 6, 0, 0, 5, 4, 0, 0, 3, 2, 0, 0, 1, 0, 0, 0};
+ int i;
+ rtx rvals[16];
+ rtx mask = gen_reg_rtx (V16QImode);
+ rtx tmp = gen_reg_rtx (V16QImode);
+ rtvec v;
+
+ for (i = 0; i < 16; i++)
+ rvals[i] = GEN_INT (vals[i]);
+
+ /* xvcvhpsp - vector convert F16 to vector F32 requires the four F16
+ inputs in half words 1,3,5,7 (IBM numbering). Use xxperm to move
+ src half words 4,5,6,7 for the conversion instruction. */
+ v = gen_rtvec_v (16, rvals);
+ emit_insn (gen_vec_initv16qiqi (mask, gen_rtx_PARALLEL (V16QImode, v)));
+ emit_insn (gen_altivec_vperm_v8hiv16qi (tmp, operands[1],
+ operands[1], mask));
+ emit_insn (gen_vsx_xvcvhpsp (operands[0], tmp));
+ DONE;
+})
+
;; Support for ISA 3.0 vector byte reverse
;; Swap all bytes with in a vector
diff --git a/gcc/config/rtems.h b/gcc/config/rtems.h
index 306459ab1d1..439199d4cbb 100644
--- a/gcc/config/rtems.h
+++ b/gcc/config/rtems.h
@@ -1,26 +1,26 @@
/* Configuration common to all targets running RTEMS.
Copyright (C) 2000-2017 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 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/>. */
/* The system headers under RTEMS are C++-aware. */
#undef NO_IMPLICIT_EXTERN_C
diff --git a/gcc/config/rx/rx.c b/gcc/config/rx/rx.c
index 9d512b8959b..daae27b404a 100644
--- a/gcc/config/rx/rx.c
+++ b/gcc/config/rx/rx.c
@@ -29,6 +29,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "cfghooks.h"
#include "df.h"
#include "memmodel.h"
diff --git a/gcc/config/s390/driver-native.c b/gcc/config/s390/driver-native.c
index 4bcddb4bab6..acb983613c2 100644
--- a/gcc/config/s390/driver-native.c
+++ b/gcc/config/s390/driver-native.c
@@ -112,10 +112,14 @@ s390_host_detect_local_cpu (int argc, const char **argv)
cpu = "zEC12";
break;
case 0x2964:
+ case 0x2965:
cpu = "z13";
break;
+ case 0x3906:
+ cpu = "z14";
+ break;
default:
- cpu = "arch12";
+ cpu = "z14";
break;
}
}
diff --git a/gcc/config/s390/s390-builtins.def b/gcc/config/s390/s390-builtins.def
index 9046cb08f94..ddcf370cb23 100644
--- a/gcc/config/s390/s390-builtins.def
+++ b/gcc/config/s390/s390-builtins.def
@@ -450,12 +450,12 @@ OB_DEF_VAR (s390_vec_extract_u64, s390_vlgvg, 0,
OB_DEF_VAR (s390_vec_extract_b64, s390_vlgvg, 0, O2_ELEM, BT_OV_ULONGLONG_BV2DI_INT)
OB_DEF_VAR (s390_vec_extract_dbl, s390_vlgvg_dbl, 0, O2_ELEM, BT_OV_DBL_V2DF_INT) /* vlgvg */
-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_vlgvf_flt, vec_extractv4sf, 0, B_INT | B_VXE, O2_ELEM, BT_FN_FLT_V4SF_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_INT | B_VX, O2_ELEM, BT_FN_DBL_V2DF_INT)
+B_DEF (s390_vlgvb, vec_extractv16qiqi, 0, B_VX, O2_ELEM, BT_FN_UCHAR_UV16QI_INT)
+B_DEF (s390_vlgvh, vec_extractv8hihi, 0, B_VX, O2_ELEM, BT_FN_USHORT_UV8HI_INT)
+B_DEF (s390_vlgvf, vec_extractv4sisi, 0, B_VX, O2_ELEM, BT_FN_UINT_UV4SI_INT)
+B_DEF (s390_vlgvf_flt, vec_extractv4sfsf, 0, B_INT | B_VXE, O2_ELEM, BT_FN_FLT_V4SF_INT)
+B_DEF (s390_vlgvg, vec_extractv2didi, 0, B_VX, O2_ELEM, BT_FN_ULONGLONG_UV2DI_INT)
+B_DEF (s390_vlgvg_dbl, vec_extractv2dfdf, 0, B_INT | B_VX, 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, 0, BT_OV_V16QI_SCHARCONSTPTR)
diff --git a/gcc/config/s390/s390-c.c b/gcc/config/s390/s390-c.c
index 35c35458791..07224ad7f39 100644
--- a/gcc/config/s390/s390-c.c
+++ b/gcc/config/s390/s390-c.c
@@ -886,7 +886,7 @@ s390_resolve_overloaded_builtin (location_t loc,
if (!TARGET_VXE && (ob_flags & B_VXE))
{
- error_at (loc, "%qF requires -march=arch12 or higher", ob_fndecl);
+ error_at (loc, "%qF requires z14 or higher", ob_fndecl);
return error_mark_node;
}
@@ -963,7 +963,7 @@ s390_resolve_overloaded_builtin (location_t loc,
if (!TARGET_VXE
&& bflags_overloaded_builtin_var[last_match_index] & B_VXE)
{
- error_at (loc, "%qs matching variant requires -march=arch12 or higher",
+ error_at (loc, "%qs matching variant requires z14 or higher",
IDENTIFIER_POINTER (DECL_NAME (ob_fndecl)));
return error_mark_node;
}
diff --git a/gcc/config/s390/s390-opts.h b/gcc/config/s390/s390-opts.h
index 65ac4f8ebbd..6d506e2c9e3 100644
--- a/gcc/config/s390/s390-opts.h
+++ b/gcc/config/s390/s390-opts.h
@@ -38,7 +38,7 @@ enum processor_type
PROCESSOR_2817_Z196,
PROCESSOR_2827_ZEC12,
PROCESSOR_2964_Z13,
- PROCESSOR_ARCH12,
+ PROCESSOR_3906_Z14,
PROCESSOR_NATIVE,
PROCESSOR_max
};
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index bbae89be29d..deced953d75 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -35,6 +35,7 @@ along with GCC; see the file COPYING3. If not see
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "expmed.h"
#include "optabs.h"
#include "regs.h"
@@ -318,24 +319,27 @@ struct processor_costs zEC12_cost =
static struct
{
+ /* The preferred name to be used in user visible output. */
const char *const name;
+ /* CPU name as it should be passed to Binutils via .machine */
+ const char *const binutils_name;
const enum processor_type processor;
const struct processor_costs *cost;
}
const processor_table[] =
{
- { "g5", PROCESSOR_9672_G5, &z900_cost },
- { "g6", PROCESSOR_9672_G6, &z900_cost },
- { "z900", PROCESSOR_2064_Z900, &z900_cost },
- { "z990", PROCESSOR_2084_Z990, &z990_cost },
- { "z9-109", PROCESSOR_2094_Z9_109, &z9_109_cost },
- { "z9-ec", PROCESSOR_2094_Z9_EC, &z9_109_cost },
- { "z10", PROCESSOR_2097_Z10, &z10_cost },
- { "z196", PROCESSOR_2817_Z196, &z196_cost },
- { "zEC12", PROCESSOR_2827_ZEC12, &zEC12_cost },
- { "z13", PROCESSOR_2964_Z13, &zEC12_cost },
- { "arch12", PROCESSOR_ARCH12, &zEC12_cost },
- { "native", PROCESSOR_NATIVE, NULL }
+ { "g5", "g5", PROCESSOR_9672_G5, &z900_cost },
+ { "g6", "g6", PROCESSOR_9672_G6, &z900_cost },
+ { "z900", "z900", PROCESSOR_2064_Z900, &z900_cost },
+ { "z990", "z990", PROCESSOR_2084_Z990, &z990_cost },
+ { "z9-109", "z9-109", PROCESSOR_2094_Z9_109, &z9_109_cost },
+ { "z9-ec", "z9-ec", PROCESSOR_2094_Z9_EC, &z9_109_cost },
+ { "z10", "z10", PROCESSOR_2097_Z10, &z10_cost },
+ { "z196", "z196", PROCESSOR_2817_Z196, &z196_cost },
+ { "zEC12", "zEC12", PROCESSOR_2827_ZEC12, &zEC12_cost },
+ { "z13", "z13", PROCESSOR_2964_Z13, &zEC12_cost },
+ { "z14", "arch12", PROCESSOR_3906_Z14, &zEC12_cost },
+ { "native", "", PROCESSOR_NATIVE, NULL }
};
extern int reload_completed;
@@ -847,7 +851,7 @@ s390_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
if ((bflags & B_VXE) && !TARGET_VXE)
{
- error ("Builtin %qF requires arch12 or higher.", fndecl);
+ error ("Builtin %qF requires z14 or higher.", fndecl);
return const0_rtx;
}
}
@@ -5792,7 +5796,7 @@ s390_expand_vec_strlen (rtx target, rtx string, rtx alignment)
add_int_reg_note (s390_emit_ccraw_jump (8, NE, loop_start_label),
REG_BR_PROB,
profile_probability::very_likely ().to_reg_br_prob_note ());
- emit_insn (gen_vec_extractv16qi (len, result_reg, GEN_INT (7)));
+ emit_insn (gen_vec_extractv16qiqi (len, result_reg, GEN_INT (7)));
/* If the string pointer wasn't aligned we have loaded less then 16
bytes and the remaining bytes got filled with zeros (by vll).
@@ -5850,7 +5854,7 @@ s390_expand_vec_movstr (rtx result, rtx dst, rtx src)
emit_insn (gen_vlbb (vsrc, src, GEN_INT (6)));
emit_insn (gen_lcbb (loadlen, src_addr, GEN_INT (6)));
emit_insn (gen_vfenezv16qi (vpos, vsrc, vsrc));
- emit_insn (gen_vec_extractv16qi (gpos_qi, vpos, GEN_INT (7)));
+ emit_insn (gen_vec_extractv16qiqi (gpos_qi, vpos, GEN_INT (7)));
emit_move_insn (gpos, gen_rtx_SUBREG (SImode, gpos_qi, 0));
/* gpos is the byte index if a zero was found and 16 otherwise.
So if it is lower than the loaded bytes we have a hit. */
@@ -5928,7 +5932,7 @@ s390_expand_vec_movstr (rtx result, rtx dst, rtx src)
force_expand_binop (Pmode, add_optab, dst_addr_reg, offset, dst_addr_reg,
1, OPTAB_DIRECT);
- emit_insn (gen_vec_extractv16qi (gpos_qi, vpos, GEN_INT (7)));
+ emit_insn (gen_vec_extractv16qiqi (gpos_qi, vpos, GEN_INT (7)));
emit_move_insn (gpos, gen_rtx_SUBREG (SImode, gpos_qi, 0));
emit_insn (gen_vstlv16qi (vsrc, gpos, gen_rtx_MEM (BLKmode, dst_addr_reg)));
@@ -7359,7 +7363,8 @@ s390_asm_output_machine_for_arch (FILE *asm_out_file)
{
fprintf (asm_out_file, "\t.machinemode %s\n",
(TARGET_ZARCH) ? "zarch" : "esa");
- fprintf (asm_out_file, "\t.machine \"%s", processor_table[s390_arch].name);
+ fprintf (asm_out_file, "\t.machine \"%s",
+ processor_table[s390_arch].binutils_name);
if (S390_USE_ARCHITECTURE_MODIFIERS)
{
int cpu_flags;
@@ -8093,7 +8098,7 @@ s390_issue_rate (void)
instruction gets issued per cycle. */
case PROCESSOR_2827_ZEC12:
case PROCESSOR_2964_Z13:
- case PROCESSOR_ARCH12:
+ case PROCESSOR_3906_Z14:
default:
return 1;
}
@@ -14309,7 +14314,7 @@ s390_get_sched_attrmask (rtx_insn *insn)
mask |= S390_SCHED_ATTR_MASK_GROUPALONE;
break;
case PROCESSOR_2964_Z13:
- case PROCESSOR_ARCH12:
+ case PROCESSOR_3906_Z14:
if (get_attr_z13_cracked (insn))
mask |= S390_SCHED_ATTR_MASK_CRACKED;
if (get_attr_z13_expanded (insn))
@@ -14333,7 +14338,7 @@ s390_get_unit_mask (rtx_insn *insn, int *units)
switch (s390_tune)
{
case PROCESSOR_2964_Z13:
- case PROCESSOR_ARCH12:
+ case PROCESSOR_3906_Z14:
*units = 3;
if (get_attr_z13_unit_lsu (insn))
mask |= 1 << 0;
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index 0eef9b179ee..d1ac0b8395d 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -10266,7 +10266,7 @@
; cdsg, csg
(define_insn "*atomic_compare_and_swap<mode>_1"
[(set (match_operand:TDI 0 "register_operand" "=r")
- (match_operand:TDI 1 "s_operand" "+S"))
+ (match_operand:TDI 1 "memory_operand" "+S"))
(set (match_dup 1)
(unspec_volatile:TDI
[(match_dup 1)
@@ -10284,7 +10284,7 @@
; cds, cdsy
(define_insn "*atomic_compare_and_swapdi_2"
[(set (match_operand:DI 0 "register_operand" "=r,r")
- (match_operand:DI 1 "s_operand" "+Q,S"))
+ (match_operand:DI 1 "memory_operand" "+Q,S"))
(set (match_dup 1)
(unspec_volatile:DI
[(match_dup 1)
@@ -10305,7 +10305,7 @@
; cs, csy
(define_insn "*atomic_compare_and_swapsi_3"
[(set (match_operand:SI 0 "register_operand" "=r,r")
- (match_operand:SI 1 "s_operand" "+Q,S"))
+ (match_operand:SI 1 "memory_operand" "+Q,S"))
(set (match_dup 1)
(unspec_volatile:SI
[(match_dup 1)
diff --git a/gcc/config/s390/s390.opt b/gcc/config/s390/s390.opt
index f277ac55eff..4dab1b655a3 100644
--- a/gcc/config/s390/s390.opt
+++ b/gcc/config/s390/s390.opt
@@ -113,7 +113,10 @@ EnumValue
Enum(processor_type) String(arch11) Value(PROCESSOR_2964_Z13)
EnumValue
-Enum(processor_type) String(arch12) Value(PROCESSOR_ARCH12)
+Enum(processor_type) String(z14) Value(PROCESSOR_3906_Z14)
+
+EnumValue
+Enum(processor_type) String(arch12) Value(PROCESSOR_3906_Z14)
EnumValue
Enum(processor_type) String(native) Value(PROCESSOR_NATIVE) DriverOnly
diff --git a/gcc/config/s390/vector.md b/gcc/config/s390/vector.md
index 2952893834a..3cf79896720 100644
--- a/gcc/config/s390/vector.md
+++ b/gcc/config/s390/vector.md
@@ -90,6 +90,17 @@
(V1DF "DF") (V2DF "DF")
(V1TF "TF") (TF "TF")])
+; Like above, but in lower case.
+(define_mode_attr non_vec_l[(V1QI "qi") (V2QI "qi") (V4QI "qi") (V8QI "qi")
+ (V16QI "qi")
+ (V1HI "hi") (V2HI "hi") (V4HI "hi") (V8HI "hi")
+ (V1SI "si") (V2SI "si") (V4SI "si")
+ (V1DI "di") (V2DI "di")
+ (V1TI "ti") (TI "ti")
+ (V1SF "sf") (V2SF "sf") (V4SF "sf")
+ (V1DF "df") (V2DF "df")
+ (V1TF "tf") (TF "tf")])
+
; The instruction suffix for integer instructions and instructions
; which do not care about whether it is floating point or integer.
(define_mode_attr bhfgq[(V1QI "b") (V2QI "b") (V4QI "b") (V8QI "b") (V16QI "b")
@@ -453,7 +464,7 @@
; FIXME: Support also vector mode operands for 0
; FIXME: This should be (vec_select ..) or something but it does only allow constant selectors :(
; This is used via RTL standard name as well as for expanding the builtin
-(define_expand "vec_extract<mode>"
+(define_expand "vec_extract<mode><non_vec_l>"
[(set (match_operand:<non_vec> 0 "nonimmediate_operand" "")
(unspec:<non_vec> [(match_operand:V 1 "register_operand" "")
(match_operand:SI 2 "nonmemory_operand" "")]
@@ -485,7 +496,7 @@
"vlgv<bhfgq>\t%0,%v1,%Y3(%2)"
[(set_attr "op_type" "VRS")])
-(define_expand "vec_init<mode>"
+(define_expand "vec_init<mode><non_vec_l>"
[(match_operand:V_128 0 "register_operand" "")
(match_operand:V_128 1 "nonmemory_operand" "")]
"TARGET_VX"
diff --git a/gcc/config/sh/rtems.h b/gcc/config/sh/rtems.h
index 20a4d5ce27d..e05c4cec2b4 100644
--- a/gcc/config/sh/rtems.h
+++ b/gcc/config/sh/rtems.h
@@ -2,21 +2,26 @@
Copyright (C) 1997-2017 Free Software Foundation, Inc.
Contributed by Joel Sherrill (joel@OARcorp.com).
-This file is part of GCC.
+ 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 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.
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
+ 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/>. */
/* Specify predefined symbols in preprocessor. */
diff --git a/gcc/config/sh/rtemself.h b/gcc/config/sh/rtemself.h
index c9b6b001cf7..c454c0e3e19 100644
--- a/gcc/config/sh/rtemself.h
+++ b/gcc/config/sh/rtemself.h
@@ -2,21 +2,26 @@
Copyright (C) 1997-2017 Free Software Foundation, Inc.
Contributed by Joel Sherrill (joel@OARcorp.com).
-This file is part of GCC.
+ 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 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.
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
+ 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/>. */
/* Specify predefined symbols in preprocessor. */
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 6f01dcb700c..c31776ffef8 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -35,6 +35,7 @@ along with GCC; see the file COPYING3. If not see
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "optabs.h"
#include "emit-rtl.h"
#include "recog.h"
diff --git a/gcc/config/sol2.c b/gcc/config/sol2.c
index cdabf24e24b..b8ef3409942 100644
--- a/gcc/config/sol2.c
+++ b/gcc/config/sol2.c
@@ -27,6 +27,7 @@ along with GCC; see the file COPYING3. If not see
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "diagnostic-core.h"
#include "varasm.h"
#include "output.h"
diff --git a/gcc/config/sol2.h b/gcc/config/sol2.h
index b8398d082a9..bf5203b8c16 100644
--- a/gcc/config/sol2.h
+++ b/gcc/config/sol2.h
@@ -174,9 +174,9 @@ along with GCC; see the file COPYING3. If not see
%{!ansi:values-Xa.o%s}"
#if defined(HAVE_LD_PIE) && defined(HAVE_SOLARIS_CRTS)
-#define STARTFILE_CRTBEGIN_SPEC "%{shared:crtbeginS.o%s} \
- %{" PIE_SPEC ":crtbeginS.o%s} \
- %{" NO_PIE_SPEC ":crtbegin.o%s}"
+#define STARTFILE_CRTBEGIN_SPEC "%{static:crtbegin.o%s; \
+ shared|" PIE_SPEC ":crtbeginS.o%s; \
+ :crtbegin.o%s}"
#else
#define STARTFILE_CRTBEGIN_SPEC "crtbegin.o%s"
#endif
@@ -224,9 +224,9 @@ along with GCC; see the file COPYING3. If not see
#endif
#if defined(HAVE_LD_PIE) && defined(HAVE_SOLARIS_CRTS)
-#define ENDFILE_CRTEND_SPEC "%{shared:crtendS.o%s;: \
- %{" PIE_SPEC ":crtendS.o%s} \
- %{" NO_PIE_SPEC ":crtend.o%s}}"
+#define ENDFILE_CRTEND_SPEC "%{static:crtend.o%s; \
+ shared|" PIE_SPEC ":crtendS.o%s; \
+ :crtend.o%s}"
#else
#define ENDFILE_CRTEND_SPEC "crtend.o%s"
#endif
diff --git a/gcc/config/sparc/rtemself.h b/gcc/config/sparc/rtemself.h
index 10eaa08fe4e..0fb56ee2c67 100644
--- a/gcc/config/sparc/rtemself.h
+++ b/gcc/config/sparc/rtemself.h
@@ -2,21 +2,26 @@
Copyright (C) 1996-2017 Free Software Foundation, Inc.
Contributed by Joel Sherrill (joel@OARcorp.com).
-This file is part of GCC.
+ 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 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.
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
+ 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/>. */
/* Target OS builtins. */
#undef TARGET_OS_CPP_BUILTINS
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index f4f318a81a1..d494ecf2410 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see
#include "df.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "expmed.h"
#include "optabs.h"
#include "regs.h"
@@ -1304,6 +1305,8 @@ dump_target_flag_bits (const int flags)
fprintf (stderr, "FLAT ");
if (flags & MASK_FMAF)
fprintf (stderr, "FMAF ");
+ if (flags & MASK_FSMULD)
+ fprintf (stderr, "FSMULD ");
if (flags & MASK_FPU)
fprintf (stderr, "FPU ");
if (flags & MASK_HARD_QUAD)
@@ -1403,24 +1406,24 @@ sparc_option_override (void)
const int disable;
const int enable;
} const cpu_table[] = {
- { "v7", MASK_ISA, 0 },
- { "cypress", MASK_ISA, 0 },
+ { "v7", MASK_ISA|MASK_FSMULD, 0 },
+ { "cypress", MASK_ISA|MASK_FSMULD, 0 },
{ "v8", MASK_ISA, MASK_V8 },
/* TI TMS390Z55 supersparc */
{ "supersparc", MASK_ISA, MASK_V8 },
- { "hypersparc", MASK_ISA, MASK_V8|MASK_FPU },
- { "leon", MASK_ISA, MASK_V8|MASK_LEON|MASK_FPU },
- { "leon3", MASK_ISA, MASK_V8|MASK_LEON3|MASK_FPU },
- { "leon3v7", MASK_ISA, MASK_LEON3|MASK_FPU },
- { "sparclite", MASK_ISA, MASK_SPARCLITE },
+ { "hypersparc", MASK_ISA, MASK_V8 },
+ { "leon", MASK_ISA|MASK_FSMULD, MASK_V8|MASK_LEON },
+ { "leon3", MASK_ISA, MASK_V8|MASK_LEON3 },
+ { "leon3v7", MASK_ISA|MASK_FSMULD, MASK_LEON3 },
+ { "sparclite", MASK_ISA|MASK_FSMULD, MASK_SPARCLITE },
/* The Fujitsu MB86930 is the original sparclite chip, with no FPU. */
{ "f930", MASK_ISA|MASK_FPU, MASK_SPARCLITE },
/* The Fujitsu MB86934 is the recent sparclite chip, with an FPU. */
- { "f934", MASK_ISA, MASK_SPARCLITE|MASK_FPU },
+ { "f934", MASK_ISA|MASK_FSMULD, MASK_SPARCLITE },
{ "sparclite86x", MASK_ISA|MASK_FPU, MASK_SPARCLITE },
- { "sparclet", MASK_ISA, MASK_SPARCLET },
+ { "sparclet", MASK_ISA|MASK_FSMULD, MASK_SPARCLET },
/* TEMIC sparclet */
- { "tsc701", MASK_ISA, MASK_SPARCLET },
+ { "tsc701", MASK_ISA|MASK_FSMULD, MASK_SPARCLET },
{ "v9", MASK_ISA, MASK_V9 },
/* UltraSPARC I, II, IIi */
{ "ultrasparc", MASK_ISA,
@@ -1447,8 +1450,7 @@ sparc_option_override (void)
MASK_V9|MASK_POPC|MASK_VIS4|MASK_FMAF|MASK_CBCOND|MASK_SUBXC },
/* UltraSPARC M8 */
{ "m8", MASK_ISA,
- MASK_V9|MASK_POPC|MASK_VIS4|MASK_FMAF|MASK_CBCOND|MASK_SUBXC
- |MASK_VIS4B }
+ MASK_V9|MASK_POPC|MASK_VIS4|MASK_FMAF|MASK_CBCOND|MASK_SUBXC|MASK_VIS4B }
};
const struct cpu_table *cpu;
unsigned int i;
@@ -1487,6 +1489,11 @@ sparc_option_override (void)
}
}
+ /* Enable the FsMULd instruction by default if not explicitly specified by
+ the user. It may be later disabled by the CPU (explicitly or not). */
+ if (TARGET_FPU && !(target_flags_explicit & MASK_FSMULD))
+ target_flags |= MASK_FSMULD;
+
if (TARGET_DEBUG_OPTIONS)
{
dump_target_flags("Initial target_flags", target_flags);
@@ -1532,7 +1539,7 @@ sparc_option_override (void)
sparc_cmodel = cmodel->value;
}
else
- error ("-mcmodel= is not supported on 32 bit systems");
+ error ("-mcmodel= is not supported on 32-bit systems");
}
/* Check that -fcall-saved-REG wasn't specified for out registers. */
@@ -1543,7 +1550,7 @@ sparc_option_override (void)
call_used_regs [i] = 1;
}
- /* Set the default CPU. */
+ /* Set the default CPU if no -mcpu option was specified. */
if (!global_options_set.x_sparc_cpu_and_features)
{
for (def = &cpu_default[0]; def->cpu != -1; ++def)
@@ -1553,6 +1560,7 @@ sparc_option_override (void)
sparc_cpu_and_features = def->processor;
}
+ /* Set the default CPU if no -mtune option was specified. */
if (!global_options_set.x_sparc_cpu)
sparc_cpu = sparc_cpu_and_features;
@@ -1561,8 +1569,6 @@ sparc_option_override (void)
if (TARGET_DEBUG_OPTIONS)
{
fprintf (stderr, "sparc_cpu_and_features: %s\n", cpu->name);
- fprintf (stderr, "sparc_cpu: %s\n",
- cpu_table[(int) sparc_cpu].name);
dump_target_flags ("cpu->disable", cpu->disable);
dump_target_flags ("cpu->enable", cpu->enable);
}
@@ -1603,11 +1609,11 @@ sparc_option_override (void)
if (TARGET_VIS4B)
target_flags |= MASK_VIS4 | MASK_VIS3 | MASK_VIS2 | MASK_VIS;
- /* Don't allow -mvis, -mvis2, -mvis3, -mvis4, -mvis4b and -mfmaf if
+ /* Don't allow -mvis, -mvis2, -mvis3, -mvis4, -mvis4b, -mfmaf and -mfsmuld if
FPU is disabled. */
- if (! TARGET_FPU)
+ if (!TARGET_FPU)
target_flags &= ~(MASK_VIS | MASK_VIS2 | MASK_VIS3 | MASK_VIS4
- | MASK_VIS4B | MASK_FMAF);
+ | MASK_VIS4B | MASK_FMAF | MASK_FSMULD);
/* -mvis assumes UltraSPARC+, so we are sure v9 instructions
are available; -m64 also implies v9. */
@@ -1618,18 +1624,18 @@ sparc_option_override (void)
}
/* -mvis also implies -mv8plus on 32-bit. */
- if (TARGET_VIS && ! TARGET_ARCH64)
+ if (TARGET_VIS && !TARGET_ARCH64)
target_flags |= MASK_V8PLUS;
- /* Use the deprecated v8 insns for sparc64 in 32 bit mode. */
+ /* Use the deprecated v8 insns for sparc64 in 32-bit mode. */
if (TARGET_V9 && TARGET_ARCH32)
target_flags |= MASK_DEPRECATED_V8_INSNS;
- /* V8PLUS requires V9, makes no sense in 64 bit mode. */
- if (! TARGET_V9 || TARGET_ARCH64)
+ /* V8PLUS requires V9 and makes no sense in 64-bit mode. */
+ if (!TARGET_V9 || TARGET_ARCH64)
target_flags &= ~MASK_V8PLUS;
- /* Don't use stack biasing in 32 bit mode. */
+ /* Don't use stack biasing in 32-bit mode. */
if (TARGET_ARCH32)
target_flags &= ~MASK_STACK_BIAS;
@@ -1641,6 +1647,10 @@ sparc_option_override (void)
if (sparc_fix_ut699 || sparc_fix_ut700 || sparc_fix_gr712rc)
sparc_fix_b2bst = 1;
+ /* Disable FsMULd for the UT699 since it doesn't work correctly. */
+ if (sparc_fix_ut699)
+ target_flags &= ~MASK_FSMULD;
+
/* Supply a default value for align_functions. */
if (align_functions == 0)
{
@@ -4963,7 +4973,7 @@ enum sparc_mode_class {
??? Note that, despite the settings, non-double-aligned parameter
registers can hold double-word quantities in 32-bit mode. */
-/* This points to either the 32 bit or the 64 bit version. */
+/* This points to either the 32-bit or the 64-bit version. */
const int *hard_regno_mode_classes;
static const int hard_32bit_mode_classes[] = {
@@ -7297,7 +7307,7 @@ sparc_function_arg_advance (cumulative_args_t cum_v, machine_mode mode,
}
/* Handle the FUNCTION_ARG_PADDING macro.
- For the 64 bit ABI structs are always stored left shifted in their
+ For the 64-bit ABI structs are always stored left shifted in their
argument slot. */
enum direction
@@ -8416,7 +8426,7 @@ output_v9branch (rtx op, rtx dest, int reg, int label, int reversed,
if (reversed ^ far)
code = reverse_condition (code);
- /* Only 64 bit versions of these instructions exist. */
+ /* Only 64-bit versions of these instructions exist. */
gcc_assert (mode == DImode);
/* Start by writing the branch condition. */
@@ -8845,7 +8855,7 @@ mems_ok_for_ldd_peep (rtx mem1, rtx mem2, rtx dependent_reg_rtx)
return 0;
/* The first offset must be evenly divisible by 8 to ensure the
- address is 64 bit aligned. */
+ address is 64-bit aligned. */
if (offset1 % 8 != 0)
return 0;
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index d7c617e06c3..15a62179af5 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -438,7 +438,8 @@ extern enum cmodel sparc_cmodel;
/* Mask of all CPU feature flags. */
#define MASK_FEATURES \
(MASK_FPU + MASK_HARD_QUAD + MASK_VIS + MASK_VIS2 + MASK_VIS3 \
- + MASK_VIS4 + MASK_CBCOND + MASK_FMAF + MASK_POPC + MASK_SUBXC)
+ + MASK_VIS4 + MASK_CBCOND + MASK_FMAF + MASK_FSMULD \
+ + MASK_POPC + MASK_SUBXC)
/* TARGET_HARD_MUL: Use 32-bit hardware multiply instructions but not %y. */
#define TARGET_HARD_MUL \
diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md
index b154003c54a..925b49e0394 100644
--- a/gcc/config/sparc/sparc.md
+++ b/gcc/config/sparc/sparc.md
@@ -6121,7 +6121,7 @@ visl")
[(set (match_operand:DF 0 "register_operand" "=e")
(mult:DF (float_extend:DF (match_operand:SF 1 "register_operand" "f"))
(float_extend:DF (match_operand:SF 2 "register_operand" "f"))))]
- "(TARGET_V8 || TARGET_V9) && TARGET_FPU && !sparc_fix_ut699"
+ "TARGET_FSMULD"
"fsmuld\t%1, %2, %0"
[(set_attr "type" "fpmul")
(set_attr "fptype" "double")])
@@ -8621,6 +8621,8 @@ visl")
(define_mode_attr vfptype [(V1SI "single") (V2HI "single") (V4QI "single")
(V1DI "double") (V2SI "double") (V4HI "double")
(V8QI "double")])
+(define_mode_attr veltmode [(V1SI "si") (V2HI "hi") (V4QI "qi") (V1DI "di")
+ (V2SI "si") (V4HI "hi") (V8QI "qi")])
(define_expand "mov<VMALL:mode>"
[(set (match_operand:VMALL 0 "nonimmediate_operand" "")
@@ -8762,7 +8764,7 @@ visl")
DONE;
})
-(define_expand "vec_init<VMALL:mode>"
+(define_expand "vec_init<VMALL:mode><VMALL:veltmode>"
[(match_operand:VMALL 0 "register_operand" "")
(match_operand:VMALL 1 "" "")]
"TARGET_VIS"
diff --git a/gcc/config/sparc/sparc.opt b/gcc/config/sparc/sparc.opt
index ae63d2018e3..22267f50e90 100644
--- a/gcc/config/sparc/sparc.opt
+++ b/gcc/config/sparc/sparc.opt
@@ -93,6 +93,10 @@ mfmaf
Target Report Mask(FMAF)
Use UltraSPARC Fused Multiply-Add extensions.
+mfsmuld
+Target Report Mask(FSMULD)
+Use Floating-point Multiply Single to Double (FsMULd) instruction.
+
mpopc
Target Report Mask(POPC)
Use UltraSPARC Population-Count instruction.
diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c
index efee614b103..b6d03d7afd4 100644
--- a/gcc/config/spu/spu.c
+++ b/gcc/config/spu/spu.c
@@ -28,6 +28,7 @@
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "expmed.h"
#include "optabs.h"
#include "regs.h"
@@ -1773,7 +1774,7 @@ spu_expand_prologue (void)
size_v4si = scratch_v4si;
}
emit_insn (gen_cgt_v4si (scratch_v4si, sp_v4si, size_v4si));
- emit_insn (gen_vec_extractv4si
+ emit_insn (gen_vec_extractv4sisi
(scratch_reg_0, scratch_v4si, GEN_INT (1)));
emit_insn (gen_spu_heq (scratch_reg_0, GEN_INT (0)));
}
@@ -5368,7 +5369,7 @@ spu_allocate_stack (rtx op0, rtx op1)
{
rtx avail = gen_reg_rtx(SImode);
rtx result = gen_reg_rtx(SImode);
- emit_insn (gen_vec_extractv4si (avail, sp, GEN_INT (1)));
+ emit_insn (gen_vec_extractv4sisi (avail, sp, GEN_INT (1)));
emit_insn (gen_cgt_si(result, avail, GEN_INT (-1)));
emit_insn (gen_spu_heq (result, GEN_INT(0) ));
}
@@ -5684,22 +5685,22 @@ spu_builtin_extract (rtx ops[])
switch (mode)
{
case V16QImode:
- emit_insn (gen_vec_extractv16qi (ops[0], ops[1], ops[2]));
+ emit_insn (gen_vec_extractv16qiqi (ops[0], ops[1], ops[2]));
break;
case V8HImode:
- emit_insn (gen_vec_extractv8hi (ops[0], ops[1], ops[2]));
+ emit_insn (gen_vec_extractv8hihi (ops[0], ops[1], ops[2]));
break;
case V4SFmode:
- emit_insn (gen_vec_extractv4sf (ops[0], ops[1], ops[2]));
+ emit_insn (gen_vec_extractv4sfsf (ops[0], ops[1], ops[2]));
break;
case V4SImode:
- emit_insn (gen_vec_extractv4si (ops[0], ops[1], ops[2]));
+ emit_insn (gen_vec_extractv4sisi (ops[0], ops[1], ops[2]));
break;
case V2DImode:
- emit_insn (gen_vec_extractv2di (ops[0], ops[1], ops[2]));
+ emit_insn (gen_vec_extractv2didi (ops[0], ops[1], ops[2]));
break;
case V2DFmode:
- emit_insn (gen_vec_extractv2df (ops[0], ops[1], ops[2]));
+ emit_insn (gen_vec_extractv2dfdf (ops[0], ops[1], ops[2]));
break;
default:
abort ();
diff --git a/gcc/config/spu/spu.md b/gcc/config/spu/spu.md
index 947b044844c..fd6d253378b 100644
--- a/gcc/config/spu/spu.md
+++ b/gcc/config/spu/spu.md
@@ -256,6 +256,13 @@
(V2DI "DI")
(V4SF "SF")
(V2DF "DF")])
+;; Like above, but in lower case
+(define_mode_attr inner_l [(V16QI "qi")
+ (V8HI "hi")
+ (V4SI "si")
+ (V2DI "di")
+ (V4SF "sf")
+ (V2DF "df")])
(define_mode_attr vmult [(V16QI "1")
(V8HI "2")
(V4SI "4")
@@ -4318,7 +4325,7 @@ selb\t%0,%4,%0,%3"
;; vector patterns
;; Vector initialization
-(define_expand "vec_init<mode>"
+(define_expand "vec_init<mode><inner_l>"
[(match_operand:V 0 "register_operand" "")
(match_operand 1 "" "")]
""
@@ -4347,7 +4354,7 @@ selb\t%0,%4,%0,%3"
operands[6] = GEN_INT (size);
})
-(define_expand "vec_extract<mode>"
+(define_expand "vec_extract<mode><inner_l>"
[(set (match_operand:<inner> 0 "spu_reg_operand" "=r")
(vec_select:<inner> (match_operand:V 1 "spu_reg_operand" "r")
(parallel [(match_operand 2 "const_int_operand" "i")])))]
diff --git a/gcc/config/stormy16/stormy16.c b/gcc/config/stormy16/stormy16.c
index aee7742de89..1a362524e8d 100644
--- a/gcc/config/stormy16/stormy16.c
+++ b/gcc/config/stormy16/stormy16.c
@@ -25,6 +25,8 @@
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "gimple.h"
#include "df.h"
#include "memmodel.h"
diff --git a/gcc/config/tilegx/tilegx.c b/gcc/config/tilegx/tilegx.c
index dafb49daf1f..81559acfce0 100644
--- a/gcc/config/tilegx/tilegx.c
+++ b/gcc/config/tilegx/tilegx.c
@@ -30,6 +30,7 @@
#include "df.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "expmed.h"
#include "optabs.h"
#include "regs.h"
diff --git a/gcc/config/tilepro/tilepro.c b/gcc/config/tilepro/tilepro.c
index 80475b959ee..f03f0670ce9 100644
--- a/gcc/config/tilepro/tilepro.c
+++ b/gcc/config/tilepro/tilepro.c
@@ -30,6 +30,7 @@
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "expmed.h"
#include "optabs.h"
#include "regs.h"
diff --git a/gcc/config/v850/rtems.h b/gcc/config/v850/rtems.h
index b779a0d974c..231503ba26f 100644
--- a/gcc/config/v850/rtems.h
+++ b/gcc/config/v850/rtems.h
@@ -3,15 +3,15 @@
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.
+ 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
diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c
index eeb24aa972c..dd73c96435f 100644
--- a/gcc/config/v850/v850.c
+++ b/gcc/config/v850/v850.c
@@ -29,6 +29,7 @@
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "insn-config.h"
#include "regs.h"
#include "emit-rtl.h"
diff --git a/gcc/config/vax/vax.c b/gcc/config/vax/vax.c
index 864eaeb8531..fad4849bc5a 100644
--- a/gcc/config/vax/vax.c
+++ b/gcc/config/vax/vax.c
@@ -24,6 +24,8 @@ along with GCC; see the file COPYING3. If not see
#include "target.h"
#include "rtl.h"
#include "tree.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "df.h"
#include "memmodel.h"
#include "tm_p.h"
diff --git a/gcc/config/visium/visium.c b/gcc/config/visium/visium.c
index e5d843e8d4c..2c5b6734ae0 100644
--- a/gcc/config/visium/visium.c
+++ b/gcc/config/visium/visium.c
@@ -30,6 +30,7 @@
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "expmed.h"
#include "optabs.h"
#include "regs.h"
diff --git a/gcc/config/vxworksae.h b/gcc/config/vxworksae.h
index 7e65907252a..3b0b6529b8a 100644
--- a/gcc/config/vxworksae.h
+++ b/gcc/config/vxworksae.h
@@ -68,6 +68,10 @@ along with GCC; see the file COPYING3. If not see
while (0)
/* Do VxWorks-specific parts of TARGET_OPTION_OVERRIDE. */
+
+/* None of the VxWorks AE/653/MILS ports to date has native TLS support. */
+#define VXWORKS_HAVE_TLS 0
+
#undef VXWORKS_OVERRIDE_OPTIONS
#define VXWORKS_OVERRIDE_OPTIONS vxworks_override_options ()
extern void vxworks_override_options (void);
diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c
index cf9a3a79388..7c36e68b251 100644
--- a/gcc/config/xtensa/xtensa.c
+++ b/gcc/config/xtensa/xtensa.c
@@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
+#include "attribs.h"
#include "optabs.h"
#include "regs.h"
#include "emit-rtl.h"
diff --git a/gcc/configure b/gcc/configure
index 98aa62c00be..9cee6700a08 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -11489,15 +11489,15 @@ fi
# --------------------------------------------------------
# Collect build-machine-specific information.
-. ${srcdir}/config.build
+. ${srcdir}/config.build || exit 1
# Collect host-machine-specific information.
-. ${srcdir}/config.host
+. ${srcdir}/config.host || exit 1
target_gtfiles=
# Collect target-machine-specific information.
-. ${srcdir}/config.gcc
+. ${srcdir}/config.gcc || exit 1
extra_objs="${host_extra_objs} ${extra_objs}"
extra_gcc_objs="${host_extra_gcc_objs} ${extra_gcc_objs}"
diff --git a/gcc/configure.ac b/gcc/configure.ac
index aa980a1c426..0c0e3597cda 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -1442,15 +1442,15 @@ fi
# --------------------------------------------------------
# Collect build-machine-specific information.
-. ${srcdir}/config.build
+. ${srcdir}/config.build || exit 1
# Collect host-machine-specific information.
-. ${srcdir}/config.host
+. ${srcdir}/config.host || exit 1
target_gtfiles=
# Collect target-machine-specific information.
-. ${srcdir}/config.gcc
+. ${srcdir}/config.gcc || exit 1
extra_objs="${host_extra_objs} ${extra_objs}"
extra_gcc_objs="${host_extra_gcc_objs} ${extra_gcc_objs}"
diff --git a/gcc/convert.c b/gcc/convert.c
index 429f988cbde..b1a53afb811 100644
--- a/gcc/convert.c
+++ b/gcc/convert.c
@@ -33,6 +33,8 @@ along with GCC; see the file COPYING3. If not see
#include "langhooks.h"
#include "builtins.h"
#include "ubsan.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
#define maybe_fold_build1_loc(FOLD_P, LOC, CODE, TYPE, EXPR) \
@@ -938,7 +940,8 @@ convert_to_integer_1 (tree type, tree expr, bool dofold)
return build1 (CONVERT_EXPR, type, expr);
case REAL_TYPE:
- if (sanitize_flags_p (SANITIZE_FLOAT_CAST))
+ if (sanitize_flags_p (SANITIZE_FLOAT_CAST)
+ && current_function_decl != NULL_TREE)
{
expr = save_expr (expr);
tree check = ubsan_instrument_float_cast (loc, type, expr);
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 597c6b3f6c8..a8a3fccdcd1 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,316 @@
+2017-08-11 Martin Liska <mliska@suse.cz>
+
+ * decl2.c (get_tls_init_fn): Replace ASM_OUTPUT_DEF with
+ TARGET_SUPPORTS_ALIASES.
+ (handle_tls_init): Likewise.
+ (note_mangling_alias): Likewise. Remove ATTRIBUTE_UNUSED for
+ both arguments.
+ * optimize.c (can_alias_cdtor): Likewise.
+
+2017-08-11 Jason Merrill <jason@redhat.com>
+
+ PR c++/81671 - nullptr_t template parameter
+ * pt.c (convert_nontype_argument): Fix nullptr_t check.
+
+2017-08-10 Jason Merrill <jason@redhat.com>
+
+ PR c++/81359 - Unparsed NSDMI error from SFINAE context.
+ * method.c (synthesized_method_walk): Don't diagnose lack of
+ operator delete.
+
+ PR c++/80452 - Core 1579, implicit move semantics on return/throw
+ * cp-tree.h (LOOKUP_PREFER_RVALUE): Now means that we've already
+ tentatively changed the lvalue to an rvalue.
+ * call.c (reference_binding): Remove LOOKUP_PREFER_RVALUE handling.
+ (build_over_call): If LOOKUP_PREFER_RVALUE, check that the first
+ parameter is an rvalue reference.
+ * except.c (build_throw): Do maybe-rvalue overload resolution twice.
+ * typeck.c (check_return_expr): Likewise.
+
+2017-08-10 David Malcolm <dmalcolm@redhat.com>
+
+ * parser.c (cp_parser_error): Update for new param to
+ c_parse_error.
+ (class token_pair): New class.
+ (struct matching_paren_traits): New struct.
+ (matching_parens): New typedef.
+ (struct matching_brace_traits): New struct.
+ (matching_braces): New typedef.
+ (cp_parser_statement_expr): Convert explicit parsing of
+ CPP_OPEN_PAREN and CPP_CLOSE_PAREN to use of
+ class matching_parens, so that the pertinent open parenthesis is
+ highlighted when there are problems locating the close
+ parenthesis.
+ (cp_parser_primary_expression): Likewise.
+ (cp_parser_compound_literal_p): Remove consumption of opening
+ paren.
+ (cp_parser_postfix_expression): Convert explicit parsing of
+ CPP_OPEN_PAREN and CPP_CLOSE_PAREN to use matching parens, as
+ above. Use it to consume the opening paren previously consumed by
+ cp_parser_compound_literal_p.
+ (cp_parser_parenthesized_expression_list): Likewise.
+ (cp_parser_unary_expression): Likewise.
+ (cp_parser_new_expression): Likewise.
+ (cp_parser_cast_expression): Likewise.
+ (cp_parser_builtin_offsetof): Likewise.
+ (cp_parser_trait_expr): Likewise.
+ (cp_parser_lambda_declarator_opt): Likewise.
+ (cp_parser_lambda_body): Likewise, for matching_braces.
+ (cp_parser_compound_statement): Likewise.
+ (cp_parser_selection_statement): Likewise, for matching_parens.
+ (cp_parser_iteration_statement): Likewise.
+ (cp_parser_already_scoped_statement): Likewise, for
+ matching_braces.
+ (cp_parser_linkage_specification): Likewise.
+ (cp_parser_static_assert): Likewise, for matching_parens.
+ (cp_parser_decltype): Likewise.
+ (cp_parser_operator): Likewise.
+ (cp_parser_enum_specifier): Likewise.
+ (cp_parser_namespace_definition): Likewise.
+ (cp_parser_direct_declarator): Likewise.
+ (cp_parser_braced_list): Likewise.
+ (cp_parser_class_specifier_1): Likewise, for matching_braces.
+ (cp_parser_constant_initializer): Likewise.
+ (cp_parser_noexcept_specification_opt): Likewise, for
+ matching_parens.
+ (cp_parser_exception_specification_opt): Likewise.
+ (cp_parser_handler): Likewise.
+ (cp_parser_asm_specification_opt): Likewise.
+ (cp_parser_asm_operand_list): Likewise.
+ (cp_parser_gnu_attributes_opt): Likewise.
+ (cp_parser_std_attribute_spec): Likewise.
+ (cp_parser_requirement_parameter_list): Likewise.
+ (cp_parser_requirement_body): Likewise, for matching_braces.
+ (cp_parser_compound_requirement): Likewise.
+ (cp_parser_template_introduction): Likewise.
+ (cp_parser_sizeof_pack): Likewise, for matching_parens.
+ (cp_parser_sizeof_operand): Likewise; use it to consume the
+ opening paren previously consumed by cp_parser_compound_literal_p.
+ (get_matching_symbol): New function.
+ (cp_parser_required_error): Add param "matching_location". Remove
+ calls to cp_parser_error, instead setting a non-NULL gmsgid, and
+ handling it if set by calling c_parse_error, potentially with a
+ secondary location if matching_location was set.
+ (cp_parser_require): Add param "matching_location", with a default
+ value of UNKNOWN_LOCATION.
+ (cp_parser_require_keyword): Update for new param of
+ cp_parser_required_error.
+ (cp_parser_objc_encode_expression): Update to class matching_parens
+ as above.
+ (cp_parser_objc_defs_expression): Likewise.
+ (cp_parser_objc_protocol_expression): Likewise.
+ (cp_parser_objc_selector_expression): Likewise.
+ (cp_parser_objc_typename): Likewise.
+ (cp_parser_objc_superclass_or_category): Likewise.
+ (cp_parser_objc_try_catch_finally_statement): Likewise.
+ (cp_parser_objc_synchronized_statement): Likewise.
+ (cp_parser_objc_at_property_declaration): Likewise.
+ (cp_parser_oacc_single_int_clause): Likewise.
+ (cp_parser_oacc_shape_clause): Likewise.
+ (cp_parser_omp_clause_collapse): Likewise.
+ (cp_parser_omp_clause_default): Likewise.
+ (cp_parser_omp_clause_final): Likewise.
+ (cp_parser_omp_clause_if): Likewise.
+ (cp_parser_omp_clause_num_threads): Likewise.
+ (cp_parser_omp_clause_num_tasks): Likewise.
+ (cp_parser_omp_clause_grainsize): Likewise.
+ (cp_parser_omp_clause_priority): Likewise.
+ (cp_parser_omp_clause_hint): Likewise.
+ (cp_parser_omp_clause_defaultmap): Likewise.
+ (cp_parser_omp_clause_ordered): Likewise.
+ (cp_parser_omp_clause_schedule): Likewise.
+ (cp_parser_omp_clause_num_teams): Likewise.
+ (cp_parser_omp_clause_thread_limit): Likewise.
+ (cp_parser_omp_clause_aligned): Likewise.
+ (cp_parser_omp_clause_linear): Likewise.
+ (cp_parser_omp_clause_safelen): Likewise.
+ (cp_parser_omp_clause_simdlen): Likewise.
+ (cp_parser_omp_clause_depend): Likewise.
+ (cp_parser_omp_clause_device): Likewise.
+ (cp_parser_omp_clause_dist_schedule): Likewise.
+ (cp_parser_oacc_clause_async): Likewise.
+ (cp_parser_omp_critical): Likewise.
+ (cp_parser_omp_for_loop): Likewise.
+ (cp_parser_omp_sections_scope): Likewise.
+ (cp_parser_omp_declare_reduction_exprs): Likewise.
+ Update for new param to cp_parser_required_error.
+ (cp_parser_oacc_routine): Likewise.
+ (cp_parser_transaction_expression): Likewise.
+ (cp_parser_cilk_simd_vectorlength): Likewise.
+
+2017-08-09 Jason Merrill <jason@redhat.com>
+
+ PR c++/81525 - wrong constant value with generic lambda
+ * pt.c (tsubst_decl) [VAR_DECL]: Avoid clobbering auto.
+ (tsubst_copy) [VAR_DECL]: Handle auto.
+
+ PR c++/81359 - Unparsed NSDMI error from SFINAE context.
+ * init.c (get_nsdmi): Add complain parm.
+ * typeck2.c (digest_nsdmi_init): Add complain parm.
+ (process_init_constructor_record): Pass complain to get_nsdmi.
+ * pt.c (maybe_instantiate_noexcept): Add complain parm, return bool.
+ * method.c (get_defaulted_eh_spec): Add complain parm. Pass it into
+ synthesized_method_walk.
+ (synthesized_method_walk): Adjust.
+ (walk_field_subobs): Pass complain to get_nsdmi.
+ (defaulted_late_check): Skip other checks if deleted.
+ * decl2.c (mark_used): Pass complain to maybe_instantiate_noexcept.
+ * call.c (build_aggr_conv): Pass complain to get_nsdmi.
+ * parser.c (defarg_location): New.
+ * error.c (location_of): Use it.
+
+2017-08-09 Marek Polacek <polacek@redhat.com>
+
+ * parser.c (cp_parser_perform_range_for_lookup): Use false instead of 0.
+ * typeck.c (build_binary_op): Change the type of a parameter to bool.
+ (cp_truthvalue_conversion): Use true instead of 1.
+
+2017-08-08 Marek Polacek <polacek@redhat.com>
+
+ PR c++/81607
+ * cp-gimplify.c (cp_fold): If folding exposed a branch of
+ a COND_EXPR, convert it to the original type of the COND_EXPR, if
+ they differ.
+
+2017-08-08 Martin Liska <mliska@suse.cz>
+
+ * call.c: Include header files.
+ * cp-gimplify.c: Likewise.
+ * cp-ubsan.c: Likewise.
+ * cvt.c: Likewise.
+ * init.c: Likewise.
+ * search.c: Likewise.
+ * semantics.c: Likewise.
+ * typeck.c: Likewise.
+
+2017-08-07 Martin Liska <mliska@suse.cz>
+
+ * parser.c (cp_parser_gnu_attribute_list): Canonicalize name of an
+ attribute.
+ (cp_parser_std_attribute): Likewise.
+ * tree.c: Add new include.
+
+2017-08-04 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/79790
+ * pt.c (do_class_deduction): Handle the case of no viable implicit
+ deduction guides; simplify the code generating implicit deduction
+ guides.
+
+2017-08-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/71440
+ * typeck.c (build_x_unary_op): Avoid pretty-printing constructor /
+ destructor as expressions.
+
+2017-08-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/81640
+ * call.c (build_user_type_conversion_1): Only call
+ lookup_fnfields_slot if totype is CLASS_TYPE_P.
+
+2017-07-31 Jason Merrill <jason@redhat.com>
+
+ * decl.c (declare_global_var): Set DECL_CONTEXT.
+
+2017-07-31 Jan Hubicka <hubicka@ucw.cz>
+ Martin Liska <mliska@suse.cz>
+
+ * pt.c (tsubst_copy): Copy PREDICT_EXPR.
+ * semantics.c (finish_goto_stmt): Build gimple predict
+ stament.
+ * constexpr.c (potential_constant_expression_1): Handle
+ PREDICT_EXPR.
+
+2017-07-31 Martin Liska <mliska@suse.cz>
+
+ PR sanitize/81530
+ * cp-gimplify.c (cp_genericize): Guard condition with flag_sanitize_p
+ also with current_function_decl non-null equality.
+ * cp-ubsan.c (cp_ubsan_instrument_vptr_p): Likewise.
+ * decl.c (compute_array_index_type): Likewise.
+ * init.c (finish_length_check): Likewise.
+ * typeck.c (cp_build_binary_op): Likewise.
+
+2017-07-29 Jakub Jelinek <jakub@redhat.com>
+
+ * cp-objcp-common.c (cp_decl_dwarf_attribute): Handle
+ DW_AT_export_symbols.
+ * name-lookup.c (emit_debug_info_using_namespace): Add IMPLICIT
+ argument, pass it through to the debug hook.
+ (finish_namespace_using_directive): Adjust
+ emit_debug_info_using_namespace caller.
+ (push_namespace): Likewise. Call it after setting
+ DECL_NAMESPACE_INLINE_P.
+ (cp_emit_debug_info_for_using): Pass false as new argument to
+ the imported_module_or_decl debug hook.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * lex.c (copy_decl): Adjust.
+ (copy_type): Likewise.
+
+2017-07-26 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/71570
+ * lambda.c (add_capture): Early return if we cannot capture by
+ reference.
+
+2017-07-26 Jason Merrill <jason@redhat.com>
+
+ P0702R1 - List deduction of vector.
+ * pt.c (do_class_deduction): Special-case deduction from a single
+ element of related type.
+
+2017-07-26 Leonid Koppel <lkoppel@uwaterloo.ca>
+
+ PR c++/67054 - Inherited ctor with non-default-constructible members
+ * method.c (walk_field_subobs) Consider member initializers (NSDMIs)
+ when deducing an inheriting constructor.
+
+2017-07-21 Nathan Sidwell <nathan@acm.org>
+
+ * search.c (lookup_conversion_operator): Return overloads.
+ (lookup_fnfields_idx_nolazy): Absorb into ...
+ (lookup_fnfields_slot_nolaxy): ... here.
+ (lookup_fnfields_1): Absorb into ...
+ (lookup_fnfields_slot): ... here.
+
+ Remove special CDtor METHOD_VEC slots.
+ * cp-tree.h (CLASSTYPE_CONSTRUCTOR_SLOT,
+ CLASSTYPE_DESTRUCTOR_SLOT): Delete.
+ (CLASSTYPE_CONSTRUCTORS): Use lookup_fnfields_slot_nolazy.
+ (CLASSTYPE_DESTRUCTOR): Likewise.
+ * class (add_method): Don't use special cdtor slots.
+ * search.c (lookup_fnfields_idx_nolazy): Likewise.
+ (look_for_overrides_here): Use lookup_fnfields_slot.
+ * semantics (classtype_has_nothrow_assign_or_copy_p): Likewise.
+
+ * call.c (add_candidates): Move decls to initialization. Don't
+ use !!.
+
+2017-07-20 Nathan Sidwell <nathan@acm.org>
+
+ Remove TYPE_METHODS.
+ * class.c (maybe_warn_about_overly_private_class,
+ finish_struct_methods, one_inheriting_sig, count_fields,
+ add_fields_to_record_type, check_field_decls, check_methods,
+ clone_function_decl, set_method_tm_attributes,
+ finalize_literal_type_property, check_bases_and_members,
+ create_vtable_ptr, determine_key_method,
+ unreverse_member_declarations, finish_struct,
+ add_vcall_offset_vtbl_entries_1): Member fns are on TYPE_FIELDS.
+ * decl.c (fixup_anonymous_aggr): Likewise.
+ * decl2.c (reset_type_linkage_2): Likewise.
+ * method.c (after_nsdmi_defaulted_late_checks,
+ lazily_declare_fn): Likewise.
+ * optimize.c (maybe_thunk_body, maybe_clone_body): Likewise.
+ * pt.c (instantiate_class_template_1, tsubst_expr,
+ do_type_instantiation, instantiate_pending_templates): Likewise.
+ * search.c (lookup_field_1): Likewise.
+ * semantics.c (finish_member_declaration,
+ finish_omp_declare_simd_methods): Likewise.
+
2017-07-19 Nathan Sidwell <nathan@acm.org>
* class.c (add_implicitly_declared_members): Use
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index fac6b6c16ac..37902991f3f 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -39,6 +39,8 @@ along with GCC; see the file COPYING3. If not see
#include "langhooks.h"
#include "c-family/c-objc.h"
#include "internal-fn.h"
+#include "stringpool.h"
+#include "attribs.h"
/* The various kinds of conversion. */
@@ -99,7 +101,7 @@ struct conversion {
/* If KIND is ck_ref_bind, true when either an lvalue reference is
being bound to an lvalue expression or an rvalue reference is
being bound to an rvalue expression. If KIND is ck_rvalue,
- true when we should treat an lvalue as an rvalue (12.8p33). If
+ true when we are treating an lvalue as an rvalue (12.8p33). If
KIND is ck_base, always false. */
BOOL_BITFIELD rvaluedness_matches_p: 1;
BOOL_BITFIELD check_narrowing: 1;
@@ -914,7 +916,7 @@ build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
if (i < CONSTRUCTOR_NELTS (ctor))
val = CONSTRUCTOR_ELT (ctor, i)->value;
else if (DECL_INITIAL (field))
- val = get_nsdmi (field, /*ctor*/false);
+ val = get_nsdmi (field, /*ctor*/false, complain);
else if (TREE_CODE (ftype) == REFERENCE_TYPE)
/* Value-initialization of reference is ill-formed. */
return NULL;
@@ -1159,6 +1161,7 @@ standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
}
conv = build_conv (ck_rvalue, from, conv);
if (flags & LOOKUP_PREFER_RVALUE)
+ /* Tell convert_like_real to set LOOKUP_PREFER_RVALUE. */
conv->rvaluedness_matches_p = true;
}
@@ -1627,11 +1630,7 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
conv = build_identity_conv (tfrom, expr);
conv = direct_reference_binding (rto, conv);
- if (flags & LOOKUP_PREFER_RVALUE)
- /* The top-level caller requested that we pretend that the lvalue
- be treated as an rvalue. */
- conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
- else if (TREE_CODE (rfrom) == REFERENCE_TYPE)
+ if (TREE_CODE (rfrom) == REFERENCE_TYPE)
/* Handle rvalue reference to function properly. */
conv->rvaluedness_matches_p
= (TYPE_REF_IS_RVALUE (rto) == TYPE_REF_IS_RVALUE (rfrom));
@@ -1657,8 +1656,7 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
/* Don't allow binding of lvalues (other than function lvalues) to
rvalue references. */
if (is_lvalue && TYPE_REF_IS_RVALUE (rto)
- && TREE_CODE (to) != FUNCTION_TYPE
- && !(flags & LOOKUP_PREFER_RVALUE))
+ && TREE_CODE (to) != FUNCTION_TYPE)
conv->bad_p = true;
/* Nor the reverse. */
@@ -3735,7 +3733,7 @@ build_user_type_conversion_1 (tree totype, tree expr, int flags,
gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
|| !DERIVED_FROM_P (totype, fromtype));
- if (MAYBE_CLASS_TYPE_P (totype))
+ if (CLASS_TYPE_P (totype))
/* Use lookup_fnfields_slot instead of lookup_fnfields to avoid
creating a garbage BASELINK; constructors can't be inherited. */
ctors = lookup_fnfields_slot (totype, complete_ctor_identifier);
@@ -5423,8 +5421,8 @@ add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args,
{
tree ctype;
const vec<tree, va_gc> *non_static_args;
- bool check_list_ctor;
- bool check_converting;
+ bool check_list_ctor = false;
+ bool check_converting = false;
unification_kind_t strict;
if (!fns)
@@ -5435,7 +5433,7 @@ add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args,
if (DECL_CONV_FN_P (fn))
{
check_list_ctor = false;
- check_converting = !!(flags & LOOKUP_ONLYCONVERTING);
+ check_converting = (flags & LOOKUP_ONLYCONVERTING) != 0;
if (flags & LOOKUP_NO_CONVERSION)
/* We're doing return_type(x). */
strict = DEDUCE_CONV;
@@ -5452,18 +5450,13 @@ add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args,
{
if (DECL_CONSTRUCTOR_P (fn))
{
- check_list_ctor = !!(flags & LOOKUP_LIST_ONLY);
+ check_list_ctor = (flags & LOOKUP_LIST_ONLY) != 0;
/* For list-initialization we consider explicit constructors
and complain if one is chosen. */
check_converting
= ((flags & (LOOKUP_ONLYCONVERTING|LOOKUP_LIST_INIT_CTOR))
== LOOKUP_ONLYCONVERTING);
}
- else
- {
- check_list_ctor = false;
- check_converting = false;
- }
strict = DEDUCE_CALL;
ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
}
@@ -5476,9 +5469,6 @@ add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args,
for (lkp_iterator iter (fns); iter; ++iter)
{
- tree fn_first_arg;
- const vec<tree, va_gc> *fn_args;
-
fn = *iter;
if (check_converting && DECL_NONCONVERTING_P (fn))
@@ -5486,10 +5476,13 @@ add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args,
if (check_list_ctor && !is_list_ctor (fn))
continue;
- /* Figure out which set of arguments to use. */
+ tree fn_first_arg = NULL_TREE;
+ const vec<tree, va_gc> *fn_args = args;
+
if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
{
- /* If this function is a non-static member and we didn't get an
+ /* Figure out where the object arg comes from. If this
+ function is a non-static member and we didn't get an
implicit object argument, move it out of args. */
if (first_arg == NULL_TREE)
{
@@ -5506,12 +5499,6 @@ add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args,
fn_first_arg = first_arg;
fn_args = non_static_args;
}
- else
- {
- /* Otherwise, just use the list of arguments provided. */
- fn_first_arg = NULL_TREE;
- fn_args = args;
- }
if (TREE_CODE (fn) == TEMPLATE_DECL)
add_template_candidate (candidates,
@@ -6926,6 +6913,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
else
flags |= LOOKUP_ONLYCONVERTING;
if (convs->rvaluedness_matches_p)
+ /* standard_conversion got LOOKUP_PREFER_RVALUE. */
flags |= LOOKUP_PREFER_RVALUE;
if (TREE_CODE (expr) == TARGET_EXPR
&& TARGET_EXPR_LIST_INIT_P (expr))
@@ -7725,6 +7713,19 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
++arg_index;
parm = TREE_CHAIN (parm);
}
+
+ if (flags & LOOKUP_PREFER_RVALUE)
+ {
+ /* The implicit move specified in 15.8.3/3 fails "...if the type of
+ the first parameter of the selected constructor is not an rvalue
+ reference to the object’s type (possibly cv-qualified)...." */
+ gcc_assert (!(complain & tf_error));
+ tree ptype = convs[0]->type;
+ if (TREE_CODE (ptype) != REFERENCE_TYPE
+ || !TYPE_REF_IS_RVALUE (ptype)
+ || CONVERSION_RANK (convs[0]) > cr_exact)
+ return error_mark_node;
+ }
}
/* Bypass access control for 'this' parameter. */
else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 4b9b93a77a7..94738bd8f78 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -1039,50 +1039,39 @@ add_method (tree type, tree method, bool via_using)
we're going to end up with an assignment operator at some
point as well. */
vec_alloc (method_vec, 8);
- /* Create slots for constructors and destructors. */
- method_vec->quick_push (NULL_TREE);
- method_vec->quick_push (NULL_TREE);
CLASSTYPE_METHOD_VEC (type) = method_vec;
}
/* Maintain TYPE_HAS_USER_CONSTRUCTOR, etc. */
grok_special_member_properties (method);
- /* Constructors and destructors go in special slots. */
- if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (method))
- slot = CLASSTYPE_CONSTRUCTOR_SLOT;
- else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
- slot = CLASSTYPE_DESTRUCTOR_SLOT;
- else
- {
- tree m;
+ tree m;
- insert_p = true;
- /* See if we already have an entry with this name. */
- for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
- vec_safe_iterate (method_vec, slot, &m);
- ++slot)
+ insert_p = true;
+ /* See if we already have an entry with this name. */
+ for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
+ vec_safe_iterate (method_vec, slot, &m);
+ ++slot)
+ {
+ m = OVL_FIRST (m);
+ if (template_conv_p)
{
- m = OVL_FIRST (m);
- if (template_conv_p)
- {
- if (TREE_CODE (m) == TEMPLATE_DECL
- && DECL_TEMPLATE_CONV_FN_P (m))
- insert_p = false;
- break;
- }
- if (conv_p && !DECL_CONV_FN_P (m))
- break;
- if (DECL_NAME (m) == DECL_NAME (method))
- {
- insert_p = false;
- break;
- }
- if (complete_p
- && !DECL_CONV_FN_P (m)
- && DECL_NAME (m) > DECL_NAME (method))
- break;
+ if (TREE_CODE (m) == TEMPLATE_DECL
+ && DECL_TEMPLATE_CONV_FN_P (m))
+ insert_p = false;
+ break;
}
+ if (conv_p && !DECL_CONV_FN_P (m))
+ break;
+ if (DECL_NAME (m) == DECL_NAME (method))
+ {
+ insert_p = false;
+ break;
+ }
+ if (complete_p
+ && !DECL_CONV_FN_P (m)
+ && DECL_NAME (m) > DECL_NAME (method))
+ break;
}
current_fns = insert_p ? NULL_TREE : (*method_vec)[slot];
@@ -1256,7 +1245,7 @@ add_method (tree type, tree method, bool via_using)
if (conv_p)
TYPE_HAS_CONVERSION (type) = 1;
- else if (slot >= CLASSTYPE_FIRST_CONVERSION_SLOT && !complete_p)
+ else if (!complete_p && !IDENTIFIER_CDTOR_P (DECL_NAME (method)))
push_class_level_binding (DECL_NAME (method), current_fns);
if (insert_p)
@@ -2149,7 +2138,6 @@ maybe_warn_about_overly_private_class (tree t)
{
int has_member_fn = 0;
int has_nonprivate_method = 0;
- tree fn;
if (!warn_ctor_dtor_privacy
/* If the class has friends, those entities might create and
@@ -2179,26 +2167,26 @@ maybe_warn_about_overly_private_class (tree t)
functions are private. (Since there are no friends or
non-private statics, we can't ever call any of the private member
functions.) */
- for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
- /* We're not interested in compiler-generated methods; they don't
- provide any way to call private members. */
- if (!DECL_ARTIFICIAL (fn))
+ for (tree fn = TYPE_FIELDS (t); fn; fn = DECL_CHAIN (fn))
+ if (!DECL_DECLARES_FUNCTION_P (fn))
+ /* Not a function. */;
+ else if (DECL_ARTIFICIAL (fn))
+ /* We're not interested in compiler-generated methods; they don't
+ provide any way to call private members. */;
+ else if (!TREE_PRIVATE (fn))
{
- if (!TREE_PRIVATE (fn))
- {
- if (DECL_STATIC_FUNCTION_P (fn))
- /* A non-private static member function is just like a
- friend; it can create and invoke private member
- functions, and be accessed without a class
- instance. */
- return;
+ if (DECL_STATIC_FUNCTION_P (fn))
+ /* A non-private static member function is just like a
+ friend; it can create and invoke private member
+ functions, and be accessed without a class
+ instance. */
+ return;
- has_nonprivate_method = 1;
- /* Keep searching for a static member function. */
- }
- else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
- has_member_fn = 1;
+ has_nonprivate_method = 1;
+ /* Keep searching for a static member function. */
}
+ else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
+ has_member_fn = 1;
if (!has_nonprivate_method && has_member_fn)
{
@@ -2228,14 +2216,14 @@ maybe_warn_about_overly_private_class (tree t)
/* Even if some of the member functions are non-private, the class
won't be useful for much if all the constructors or destructors
are private: such an object can never be created or destroyed. */
- fn = CLASSTYPE_DESTRUCTOR (t);
- if (fn && TREE_PRIVATE (fn))
- {
- warning (OPT_Wctor_dtor_privacy,
- "%q#T only defines a private destructor and has no friends",
- t);
- return;
- }
+ if (tree dtor = CLASSTYPE_DESTRUCTOR (t))
+ if (TREE_PRIVATE (dtor))
+ {
+ warning (OPT_Wctor_dtor_privacy,
+ "%q#T only defines a private destructor and has no friends",
+ t);
+ return;
+ }
/* Warn about classes that have private constructors and no friends. */
if (TYPE_HAS_USER_CONSTRUCTOR (t)
@@ -2373,7 +2361,6 @@ resort_type_method_vec (void* obj,
static void
finish_struct_methods (tree t)
{
- tree fn_fields;
vec<tree, va_gc> *method_vec;
int slot, len;
@@ -2384,9 +2371,9 @@ finish_struct_methods (tree t)
len = method_vec->length ();
/* Clear DECL_IN_AGGR_P for all functions. */
- for (fn_fields = TYPE_METHODS (t); fn_fields;
- fn_fields = DECL_CHAIN (fn_fields))
- DECL_IN_AGGR_P (fn_fields) = 0;
+ for (tree fn = TYPE_FIELDS (t); fn; fn = DECL_CHAIN (fn))
+ if (DECL_DECLARES_FUNCTION_P (fn))
+ DECL_IN_AGGR_P (fn) = false;
/* Issue warnings about private constructors and such. If there are
no methods, then some public defaults are generated. */
@@ -2394,6 +2381,7 @@ finish_struct_methods (tree t)
/* The type conversion ops have to live at the front of the vec, so we
can't sort them. */
+ tree fn_fields;
for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
method_vec->iterate (slot, &fn_fields);
++slot)
@@ -3305,6 +3293,8 @@ declare_virt_assop_and_dtor (tree t)
static void
one_inheriting_sig (tree t, tree ctor, tree *parms, int nparms)
{
+ gcc_assert (TYPE_MAIN_VARIANT (t) == t);
+
/* We don't declare an inheriting ctor that would be a default,
copy or move ctor for derived or base. */
if (nparms == 0)
@@ -3322,11 +3312,11 @@ one_inheriting_sig (tree t, tree ctor, tree *parms, int nparms)
parmlist = tree_cons (NULL_TREE, parms[i], parmlist);
tree fn = implicitly_declare_fn (sfk_inheriting_constructor,
t, false, ctor, parmlist);
- gcc_assert (TYPE_MAIN_VARIANT (t) == t);
+
if (add_method (t, fn, false))
{
- DECL_CHAIN (fn) = TYPE_METHODS (t);
- TYPE_METHODS (t) = fn;
+ DECL_CHAIN (fn) = TYPE_FIELDS (t);
+ TYPE_FIELDS (t) = fn;
}
}
@@ -3465,7 +3455,9 @@ count_fields (tree fields)
int n_fields = 0;
for (x = fields; x; x = DECL_CHAIN (x))
{
- if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
+ if (DECL_DECLARES_FUNCTION_P (x))
+ /* Functions are dealt with separately. */;
+ else if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
else
n_fields += 1;
@@ -3483,7 +3475,9 @@ add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, in
tree x;
for (x = fields; x; x = DECL_CHAIN (x))
{
- if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
+ if (DECL_DECLARES_FUNCTION_P (x))
+ /* Functions are handled separately. */;
+ else if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
else
field_vec->elts[idx++] = x;
@@ -3740,6 +3734,10 @@ check_field_decls (tree t, tree *access_decls,
|| TREE_CODE (x) == TEMPLATE_DECL)
continue;
+ if (TREE_CODE (x) == FUNCTION_DECL)
+ /* FIXME: We should fold in the checking from check_methods. */
+ continue;
+
/* If we've gotten this far, it's a data member, possibly static,
or an enumerator. */
if (TREE_CODE (x) != CONST_DECL)
@@ -4664,39 +4662,42 @@ build_base_fields (record_layout_info rli,
}
}
-/* Go through the TYPE_METHODS of T issuing any appropriate
+/* Go through the TYPE_FIELDS of T issuing any appropriate
diagnostics, figuring out which methods override which other
methods, and so forth. */
static void
check_methods (tree t)
{
- tree x;
+ for (tree x = TYPE_FIELDS (t); x; x = DECL_CHAIN (x))
+ if (DECL_DECLARES_FUNCTION_P (x))
+ {
+ check_for_override (x, t);
+
+ if (DECL_PURE_VIRTUAL_P (x)
+ && (TREE_CODE (x) != FUNCTION_DECL || ! DECL_VINDEX (x)))
+ error ("initializer specified for non-virtual method %q+D", x);
+ /* The name of the field is the original field name
+ Save this in auxiliary field for later overloading. */
+ if (TREE_CODE (x) == FUNCTION_DECL && DECL_VINDEX (x))
+ {
+ TYPE_POLYMORPHIC_P (t) = 1;
+ if (DECL_PURE_VIRTUAL_P (x))
+ vec_safe_push (CLASSTYPE_PURE_VIRTUALS (t), x);
+ }
- for (x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
- {
- check_for_override (x, t);
- if (DECL_PURE_VIRTUAL_P (x) && (TREE_CODE (x) != FUNCTION_DECL || ! DECL_VINDEX (x)))
- error ("initializer specified for non-virtual method %q+D", x);
- /* The name of the field is the original field name
- Save this in auxiliary field for later overloading. */
- if (TREE_CODE (x) == FUNCTION_DECL && DECL_VINDEX (x))
- {
- TYPE_POLYMORPHIC_P (t) = 1;
- if (DECL_PURE_VIRTUAL_P (x))
- vec_safe_push (CLASSTYPE_PURE_VIRTUALS (t), x);
- }
- /* All user-provided destructors are non-trivial.
- Constructors and assignment ops are handled in
- grok_special_member_properties. */
- if (DECL_DESTRUCTOR_P (x) && user_provided_p (x))
- TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 1;
- if (!DECL_VIRTUAL_P (x)
- && lookup_attribute ("transaction_safe_dynamic", DECL_ATTRIBUTES (x)))
- error_at (DECL_SOURCE_LOCATION (x),
- "%<transaction_safe_dynamic%> may only be specified for "
- "a virtual function");
- }
+ /* All user-provided destructors are non-trivial.
+ Constructors and assignment ops are handled in
+ grok_special_member_properties. */
+ if (DECL_DESTRUCTOR_P (x) && user_provided_p (x))
+ TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 1;
+ if (!DECL_VIRTUAL_P (x)
+ && lookup_attribute ("transaction_safe_dynamic",
+ DECL_ATTRIBUTES (x)))
+ error_at (DECL_SOURCE_LOCATION (x),
+ "%<transaction_safe_dynamic%> may only be specified for "
+ "a virtual function");
+ }
}
/* FN is a constructor or destructor. Clone the declaration to create
@@ -4902,7 +4903,7 @@ clone_function_decl (tree fn, bool update_methods)
/* For each destructor, we need three variants: an in-charge
version, a not-in-charge version, and an in-charge deleting
version. We clone the deleting version first because that
- means it will go second on the TYPE_METHODS list -- and that
+ means it will go second on the TYPE_FIELDS list -- and that
corresponds to the correct layout order in the virtual
function table.
@@ -5174,11 +5175,10 @@ set_method_tm_attributes (tree t)
/* Any method that does not yet have a tm attribute inherits
the one from the class. */
- for (fndecl = TYPE_METHODS (t); fndecl; fndecl = TREE_CHAIN (fndecl))
- {
- if (!find_tm_attribute (TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
- apply_tm_attr (fndecl, class_tm_attr);
- }
+ for (fndecl = TYPE_FIELDS (t); fndecl; fndecl = DECL_CHAIN (fndecl))
+ if (DECL_DECLARES_FUNCTION_P (fndecl)
+ && !find_tm_attribute (TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
+ apply_tm_attr (fndecl, class_tm_attr);
}
/* Returns true if FN is a default constructor. */
@@ -5660,9 +5660,9 @@ finalize_literal_type_property (tree t)
/* C++14 DR 1684 removed this restriction. */
if (cxx_dialect < cxx14
&& !CLASSTYPE_LITERAL_P (t) && !LAMBDA_TYPE_P (t))
- for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
- if (DECL_DECLARED_CONSTEXPR_P (fn)
- && TREE_CODE (fn) != TEMPLATE_DECL
+ for (fn = TYPE_FIELDS (t); fn; fn = DECL_CHAIN (fn))
+ if (TREE_CODE (fn) == FUNCTION_DECL
+ && DECL_DECLARED_CONSTEXPR_P (fn)
&& DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
&& !DECL_CONSTRUCTOR_P (fn))
{
@@ -5924,8 +5924,10 @@ check_bases_and_members (tree t)
/* Check defaulted declarations here so we have cant_have_const_ctor
and don't need to worry about clones. */
- for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
- if (!DECL_ARTIFICIAL (fn) && DECL_DEFAULTED_IN_CLASS_P (fn))
+ for (fn = TYPE_FIELDS (t); fn; fn = DECL_CHAIN (fn))
+ if (DECL_DECLARES_FUNCTION_P (fn)
+ && !DECL_ARTIFICIAL (fn)
+ && DECL_DEFAULTED_IN_CLASS_P (fn))
{
int copy = copy_fn_p (fn);
if (copy > 0)
@@ -5984,7 +5986,7 @@ create_vtable_ptr (tree t, tree* virtuals_p)
tree fn;
/* Collect the virtual functions declared in T. */
- for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
+ for (fn = TYPE_FIELDS (t); fn; fn = DECL_CHAIN (fn))
if (TREE_CODE (fn) == FUNCTION_DECL
&& DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
&& TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
@@ -6643,8 +6645,7 @@ determine_key_method (tree type)
inline at the point of class definition. On some targets the
key function may not be inline; those targets should not call
this function until the end of the translation unit. */
- for (method = TYPE_METHODS (type); method != NULL_TREE;
- method = DECL_CHAIN (method))
+ for (method = TYPE_FIELDS (type); method; method = DECL_CHAIN (method))
if (TREE_CODE (method) == FUNCTION_DECL
&& DECL_VINDEX (method) != NULL_TREE
&& ! DECL_DECLARED_INLINE_P (method)
@@ -7336,11 +7337,11 @@ unreverse_member_declarations (tree t)
/* The following lists are all in reverse order. Put them in
declaration order now. */
- TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
- /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
- reverse order, so we can't just use nreverse. */
+ /* For the TYPE_FIELDS, only the non TYPE_DECLs are in reverse
+ order, so we can't just use nreverse. Due to stat_hack
+ chicanery in finish_member_declarations. */
prev = NULL_TREE;
for (x = TYPE_FIELDS (t);
x && TREE_CODE (x) != TYPE_DECL;
@@ -7350,6 +7351,7 @@ unreverse_member_declarations (tree t)
DECL_CHAIN (x) = prev;
prev = x;
}
+
if (prev)
{
DECL_CHAIN (TYPE_FIELDS (t)) = x;
@@ -7390,8 +7392,8 @@ finish_struct (tree t, tree attributes)
CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
(see CLASSTYPE_INLINE_FRIENDS) so we need to clear it. */
CLASSTYPE_PURE_VIRTUALS (t) = NULL;
- for (x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
- if (DECL_PURE_VIRTUAL_P (x))
+ for (x = TYPE_FIELDS (t); x; x = DECL_CHAIN (x))
+ if (TREE_CODE (x) == FUNCTION_DECL && DECL_PURE_VIRTUAL_P (x))
vec_safe_push (CLASSTYPE_PURE_VIRTUALS (t), x);
complete_vars (t);
/* We need to add the target functions to the CLASSTYPE_METHOD_VEC if
@@ -7416,7 +7418,6 @@ finish_struct (tree t, tree attributes)
TYPE_SIZE (x) = TYPE_SIZE (t);
TYPE_SIZE_UNIT (x) = TYPE_SIZE_UNIT (t);
TYPE_FIELDS (x) = TYPE_FIELDS (t);
- TYPE_METHODS (x) = TYPE_METHODS (t);
}
}
else
@@ -8092,8 +8093,9 @@ resolve_address_of_overloaded_function (tree target_type,
continue;
/* In C++17 we need the noexcept-qualifier to compare types. */
- if (flag_noexcept_type)
- maybe_instantiate_noexcept (fn);
+ if (flag_noexcept_type
+ && !maybe_instantiate_noexcept (fn, complain))
+ continue;
/* See if there's a match. */
tree fntype = static_fn_type (fn);
@@ -8175,7 +8177,7 @@ resolve_address_of_overloaded_function (tree target_type,
/* In C++17 we need the noexcept-qualifier to compare types. */
if (flag_noexcept_type)
- maybe_instantiate_noexcept (instantiation);
+ maybe_instantiate_noexcept (instantiation, complain);
/* See if there's a match. */
tree fntype = static_fn_type (instantiation);
@@ -9922,7 +9924,7 @@ add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
/* The ABI requires that the methods be processed in declaration
order. */
- for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
+ for (orig_fn = TYPE_FIELDS (BINFO_TYPE (binfo));
orig_fn;
orig_fn = DECL_CHAIN (orig_fn))
if (TREE_CODE (orig_fn) == FUNCTION_DECL && DECL_VINDEX (orig_fn))
diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c
index 32180a74c3f..29ba2c3dac2 100644
--- a/gcc/cp/constexpr.c
+++ b/gcc/cp/constexpr.c
@@ -5782,6 +5782,7 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict,
case CLEANUP_STMT:
case EMPTY_CLASS_EXPR:
+ case PREDICT_EXPR:
return false;
case GOTO_EXPR:
diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c
index f010f6c63be..4a52aa50e77 100644
--- a/gcc/cp/cp-gimplify.c
+++ b/gcc/cp/cp-gimplify.c
@@ -33,6 +33,8 @@ along with GCC; see the file COPYING3. If not see
#include "c-family/c-ubsan.h"
#include "cilk.h"
#include "cp-cilkplus.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
/* Forward declarations. */
@@ -1668,7 +1670,8 @@ cp_genericize (tree fndecl)
walk_tree's hash functionality. */
cp_genericize_tree (&DECL_SAVED_TREE (fndecl), true);
- if (sanitize_flags_p (SANITIZE_RETURN))
+ if (sanitize_flags_p (SANITIZE_RETURN)
+ && current_function_decl != NULL_TREE)
cp_ubsan_maybe_instrument_return (fndecl);
/* Do everything else. */
@@ -2313,9 +2316,9 @@ cp_fold (tree x)
/* A COND_EXPR might have incompatible types in branches if one or both
arms are bitfields. If folding exposed such a branch, fix it up. */
- if (TREE_CODE (x) != code)
- if (tree type = is_bitfield_expr_with_lowered_type (x))
- x = fold_convert (type, x);
+ if (TREE_CODE (x) != code
+ && !useless_type_conversion_p (TREE_TYPE (org_x), TREE_TYPE (x)))
+ x = fold_convert (TREE_TYPE (org_x), x);
break;
diff --git a/gcc/cp/cp-objcp-common.c b/gcc/cp/cp-objcp-common.c
index 5a7da5b4957..4475b6cb911 100644
--- a/gcc/cp/cp-objcp-common.c
+++ b/gcc/cp/cp-objcp-common.c
@@ -212,6 +212,13 @@ cp_decl_dwarf_attribute (const_tree decl, int attr)
}
break;
+ case DW_AT_export_symbols:
+ if (TREE_CODE (decl) == NAMESPACE_DECL
+ && (DECL_NAMESPACE_INLINE_P (decl)
+ || (DECL_NAME (decl) == NULL_TREE && dwarf_version >= 5)))
+ return 1;
+ break;
+
default:
break;
}
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index a76906d1baf..6c4153d558b 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -2148,29 +2148,21 @@ struct GTY(()) lang_type {
and the RECORD_TYPE for the class template otherwise. */
#define CLASSTYPE_DECL_LIST(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->decl_list)
-/* The slot in the CLASSTYPE_METHOD_VEC where constructors go. */
-#define CLASSTYPE_CONSTRUCTOR_SLOT 0
-
-/* The slot in the CLASSTYPE_METHOD_VEC where destructors go. */
-#define CLASSTYPE_DESTRUCTOR_SLOT 1
-
/* The first slot in the CLASSTYPE_METHOD_VEC where conversion
operators can appear. */
-#define CLASSTYPE_FIRST_CONVERSION_SLOT 2
+#define CLASSTYPE_FIRST_CONVERSION_SLOT 0
/* A FUNCTION_DECL or OVERLOAD for the constructors for NODE. These
are the constructors that take an in-charge parameter. */
#define CLASSTYPE_CONSTRUCTORS(NODE) \
- ((*CLASSTYPE_METHOD_VEC (NODE))[CLASSTYPE_CONSTRUCTOR_SLOT])
+ (lookup_fnfields_slot_nolazy (NODE, ctor_identifier))
/* A FUNCTION_DECL for the destructor for NODE. This is the
destructors that take an in-charge parameter. If
CLASSTYPE_LAZY_DESTRUCTOR is true, then this entry will be NULL
until the destructor is created with lazily_declare_fn. */
#define CLASSTYPE_DESTRUCTOR(NODE) \
- (CLASSTYPE_METHOD_VEC (NODE) \
- ? (*CLASSTYPE_METHOD_VEC (NODE))[CLASSTYPE_DESTRUCTOR_SLOT] \
- : NULL_TREE)
+ (lookup_fnfields_slot_nolazy (NODE, dtor_identifier))
/* A dictionary of the nested user-defined-types (class-types, or enums)
found within this class. This table includes nested member class
@@ -5304,7 +5296,7 @@ enum overload_flags { NO_SPECIAL = 0, DTOR_FLAG, TYPENAME_FLAG };
(Normally, these entities are registered in the symbol table, but
not found by lookup.) */
#define LOOKUP_HIDDEN (LOOKUP_PREFER_NAMESPACES << 1)
-/* Prefer that the lvalue be treated as an rvalue. */
+/* We're trying to treat an lvalue as an rvalue. */
#define LOOKUP_PREFER_RVALUE (LOOKUP_HIDDEN << 1)
/* We're inside an init-list, so narrowing conversions are ill-formed. */
#define LOOKUP_NO_NARROWING (LOOKUP_PREFER_RVALUE << 1)
@@ -6305,7 +6297,7 @@ extern tree get_type_value (tree);
extern tree build_zero_init (tree, tree, bool);
extern tree build_value_init (tree, tsubst_flags_t);
extern tree build_value_init_noctor (tree, tsubst_flags_t);
-extern tree get_nsdmi (tree, bool);
+extern tree get_nsdmi (tree, bool, tsubst_flags_t);
extern tree build_offset_ref (tree, tree, bool,
tsubst_flags_t);
extern tree throw_bad_array_new_length (void);
@@ -6363,7 +6355,7 @@ extern bool trivial_fn_p (tree);
extern tree forward_parm (tree);
extern bool is_trivially_xible (enum tree_code, tree, tree);
extern bool is_xible (enum tree_code, tree, tree);
-extern tree get_defaulted_eh_spec (tree);
+extern tree get_defaulted_eh_spec (tree, tsubst_flags_t = tf_warning_or_error);
extern void after_nsdmi_defaulted_late_checks (tree);
extern bool maybe_explain_implicit_delete (tree);
extern void explain_implicit_non_constexpr (tree);
@@ -6393,6 +6385,7 @@ extern tree cp_convert_range_for (tree, tree, tree, tree, unsigned int, bool);
extern bool parsing_nsdmi (void);
extern bool parsing_default_capturing_generic_lambda_in_template (void);
extern void inject_this_parameter (tree, cp_cv_quals);
+extern location_t defarg_location (tree);
/* in pt.c */
extern bool check_template_shadow (tree);
@@ -6456,7 +6449,7 @@ extern int more_specialized_fn (tree, tree, int);
extern void do_decl_instantiation (tree, tree);
extern void do_type_instantiation (tree, tree, tsubst_flags_t);
extern bool always_instantiate_p (tree);
-extern void maybe_instantiate_noexcept (tree);
+extern bool maybe_instantiate_noexcept (tree, tsubst_flags_t = tf_warning_or_error);
extern tree instantiate_decl (tree, bool, bool);
extern int comp_template_parms (const_tree, const_tree);
extern bool builtin_pack_fn_p (tree);
@@ -7174,7 +7167,7 @@ extern tree split_nonconstant_init (tree, tree);
extern bool check_narrowing (tree, tree, tsubst_flags_t);
extern tree digest_init (tree, tree, tsubst_flags_t);
extern tree digest_init_flags (tree, tree, int, tsubst_flags_t);
-extern tree digest_nsdmi_init (tree, tree);
+extern tree digest_nsdmi_init (tree, tree, tsubst_flags_t);
extern tree build_scoped_ref (tree, tree, tree *);
extern tree build_x_arrow (location_t, tree,
tsubst_flags_t);
diff --git a/gcc/cp/cp-ubsan.c b/gcc/cp/cp-ubsan.c
index f00f870bd3e..cd2b60ad488 100644
--- a/gcc/cp/cp-ubsan.c
+++ b/gcc/cp/cp-ubsan.c
@@ -23,6 +23,8 @@ along with GCC; see the file COPYING3. If not see
#include "coretypes.h"
#include "cp-tree.h"
#include "ubsan.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
/* Test if we should instrument vptr access. */
@@ -36,6 +38,9 @@ cp_ubsan_instrument_vptr_p (tree type)
if (!sanitize_flags_p (SANITIZE_VPTR))
return false;
+ if (current_function_decl == NULL_TREE)
+ return false;
+
if (type)
{
type = TYPE_MAIN_VARIANT (type);
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c
index 631ff49673f..fd758d3c2dc 100644
--- a/gcc/cp/cvt.c
+++ b/gcc/cp/cvt.c
@@ -33,6 +33,8 @@ along with GCC; see the file COPYING3. If not see
#include "flags.h"
#include "intl.h"
#include "convert.h"
+#include "stringpool.h"
+#include "attribs.h"
static tree convert_to_pointer_force (tree, tree, tsubst_flags_t);
static tree build_type_conversion (tree, tree);
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 5b8e6a22b01..aab2019f9cd 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -4549,8 +4549,6 @@ push_throw_library_fn (tree name, tree type)
void
fixup_anonymous_aggr (tree t)
{
- tree *q;
-
/* Wipe out memory of synthesized methods. */
TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
@@ -4559,29 +4557,12 @@ fixup_anonymous_aggr (tree t)
TYPE_HAS_COPY_ASSIGN (t) = 0;
TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
- /* Splice the implicitly generated functions out of the TYPE_METHODS
- list. */
- q = &TYPE_METHODS (t);
- while (*q)
- {
- if (DECL_ARTIFICIAL (*q))
- *q = TREE_CHAIN (*q);
- else
- q = &DECL_CHAIN (*q);
- }
-
- /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
- if (TYPE_METHODS (t))
- {
- tree decl = TYPE_MAIN_DECL (t);
-
- if (TREE_CODE (t) != UNION_TYPE)
- error_at (DECL_SOURCE_LOCATION (decl),
- "an anonymous struct cannot have function members");
- else
- error_at (DECL_SOURCE_LOCATION (decl),
- "an anonymous union cannot have function members");
- }
+ /* Splice the implicitly generated functions out of TYPE_FIELDS. */
+ for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
+ if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
+ *prev_p = DECL_CHAIN (probe);
+ else
+ prev_p = &DECL_CHAIN (probe);
/* Anonymous aggregates cannot have fields with ctors, dtors or complex
assignment operators (because they cannot have these methods themselves).
@@ -7602,6 +7583,7 @@ declare_global_var (tree name, tree type)
TREE_PUBLIC (decl) = 1;
DECL_EXTERNAL (decl) = 1;
DECL_ARTIFICIAL (decl) = 1;
+ DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
/* If the user has explicitly declared this variable (perhaps
because the code we are compiling is part of a low-level runtime
library), then it is possible that our declaration will be merged
@@ -9501,7 +9483,8 @@ compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
stabilize_vla_size (itype);
- if (sanitize_flags_p (SANITIZE_VLA))
+ if (sanitize_flags_p (SANITIZE_VLA)
+ && current_function_decl != NULL_TREE)
{
/* We have to add 1 -- in the ubsan routine we generate
LE_EXPR rather than LT_EXPR. */
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 4fa4ad9740f..37393a1a253 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -2592,6 +2592,7 @@ reset_decl_linkage (tree decl)
determine_visibility (decl);
tentative_decl_linkage (decl);
}
+
static void
reset_type_linkage_2 (tree type)
{
@@ -2615,18 +2616,14 @@ reset_type_linkage_2 (tree type)
for (tree m = TYPE_FIELDS (type); m; m = DECL_CHAIN (m))
{
tree mem = STRIP_TEMPLATE (m);
- if (VAR_P (mem))
+ if (TREE_CODE (mem) == VAR_DECL || TREE_CODE (mem) == FUNCTION_DECL)
reset_decl_linkage (mem);
}
- for (tree m = TYPE_METHODS (type); m; m = DECL_CHAIN (m))
- {
- tree mem = STRIP_TEMPLATE (m);
- reset_decl_linkage (mem);
- }
binding_table_foreach (CLASSTYPE_NESTED_UTDS (type),
bt_reset_linkage_2, NULL);
}
}
+
static void
bt_reset_linkage_2 (binding_entry b, void */*data*/)
{
@@ -3159,11 +3156,9 @@ get_tls_init_fn (tree var)
if (!flag_extern_tls_init && DECL_EXTERNAL (var))
return NULL_TREE;
-#ifdef ASM_OUTPUT_DEF
/* If the variable is internal, or if we can't generate aliases,
call the local init function directly. */
- if (!TREE_PUBLIC (var))
-#endif
+ if (!TREE_PUBLIC (var) || !TARGET_SUPPORTS_ALIASES)
return get_local_tls_init_fn ();
tree sname = mangle_tls_init_fn (var);
@@ -4244,9 +4239,8 @@ handle_tls_init (void)
tree init = TREE_PURPOSE (vars);
one_static_initialization_or_destruction (var, init, true);
-#ifdef ASM_OUTPUT_DEF
/* Output init aliases even with -fno-extern-tls-init. */
- if (TREE_PUBLIC (var))
+ if (TARGET_SUPPORTS_ALIASES && TREE_PUBLIC (var))
{
tree single_init_fn = get_tls_init_fn (var);
if (single_init_fn == NULL_TREE)
@@ -4256,7 +4250,6 @@ handle_tls_init (void)
(single_init_fn, fn);
gcc_assert (alias != NULL);
}
-#endif
}
finish_then_clause (if_stmt);
@@ -4301,17 +4294,18 @@ generate_mangling_alias (tree decl, tree id2)
implementation. */
void
-note_mangling_alias (tree decl ATTRIBUTE_UNUSED, tree id2 ATTRIBUTE_UNUSED)
+note_mangling_alias (tree decl, tree id2)
{
-#ifdef ASM_OUTPUT_DEF
- if (!defer_mangling_aliases)
- generate_mangling_alias (decl, id2);
- else
+ if (TARGET_SUPPORTS_ALIASES)
{
- vec_safe_push (mangling_aliases, decl);
- vec_safe_push (mangling_aliases, id2);
+ if (!defer_mangling_aliases)
+ generate_mangling_alias (decl, id2);
+ else
+ {
+ vec_safe_push (mangling_aliases, decl);
+ vec_safe_push (mangling_aliases, id2);
+ }
}
-#endif
}
/* Emit all mangling aliases that were deferred up to this point. */
@@ -4991,25 +4985,20 @@ mark_used (tree decl, tsubst_flags_t complain)
if (TREE_CODE (decl) == CONST_DECL)
used_types_insert (DECL_CONTEXT (decl));
- if (TREE_CODE (decl) == FUNCTION_DECL)
- maybe_instantiate_noexcept (decl);
+ if (TREE_CODE (decl) == FUNCTION_DECL
+ && !maybe_instantiate_noexcept (decl, complain))
+ return false;
if (TREE_CODE (decl) == FUNCTION_DECL
&& DECL_DELETED_FN (decl))
{
- if (DECL_ARTIFICIAL (decl))
- {
- if (DECL_OVERLOADED_OPERATOR_P (decl) == TYPE_EXPR
- && LAMBDA_TYPE_P (DECL_CONTEXT (decl)))
- {
- /* We mark a lambda conversion op as deleted if we can't
- generate it properly; see maybe_add_lambda_conv_op. */
- sorry ("converting lambda which uses %<...%> to "
- "function pointer");
- return false;
- }
- }
- if (complain & tf_error)
+ if (DECL_ARTIFICIAL (decl)
+ && DECL_OVERLOADED_OPERATOR_P (decl) == TYPE_EXPR
+ && LAMBDA_TYPE_P (DECL_CONTEXT (decl)))
+ /* We mark a lambda conversion op as deleted if we can't
+ generate it properly; see maybe_add_lambda_conv_op. */
+ sorry ("converting lambda which uses %<...%> to function pointer");
+ else if (complain & tf_error)
{
error ("use of deleted function %qD", decl);
if (!maybe_explain_implicit_delete (decl))
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index 2497c7f6d23..31ca8fe1eb2 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -3046,6 +3046,8 @@ location_of (tree t)
if (DECL_P (t))
return DECL_SOURCE_LOCATION (t);
+ if (TREE_CODE (t) == DEFAULT_ARG)
+ return defarg_location (t);
return EXPR_LOC_OR_LOC (t, input_location);
}
diff --git a/gcc/cp/except.c b/gcc/cp/except.c
index 208e52a405b..b25b91b97be 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -665,6 +665,7 @@ build_throw (tree exp)
{
int flags = LOOKUP_NORMAL | LOOKUP_ONLYCONVERTING;
vec<tree, va_gc> *exp_vec;
+ bool converted = false;
/* Under C++0x [12.8/16 class.copy], a thrown lvalue is sometimes
treated as an rvalue for the purposes of overload resolution
@@ -675,14 +676,31 @@ build_throw (tree exp)
&& ! TREE_STATIC (exp)
/* The variable must not have the `volatile' qualifier. */
&& !(cp_type_quals (TREE_TYPE (exp)) & TYPE_QUAL_VOLATILE))
- flags = flags | LOOKUP_PREFER_RVALUE;
+ {
+ tree moved = move (exp);
+ exp_vec = make_tree_vector_single (moved);
+ moved = (build_special_member_call
+ (object, complete_ctor_identifier, &exp_vec,
+ TREE_TYPE (object), flags|LOOKUP_PREFER_RVALUE,
+ tf_none));
+ release_tree_vector (exp_vec);
+ if (moved != error_mark_node)
+ {
+ exp = moved;
+ converted = true;
+ }
+ }
/* Call the copy constructor. */
- exp_vec = make_tree_vector_single (exp);
- exp = (build_special_member_call
- (object, complete_ctor_identifier, &exp_vec,
- TREE_TYPE (object), flags, tf_warning_or_error));
- release_tree_vector (exp_vec);
+ if (!converted)
+ {
+ exp_vec = make_tree_vector_single (exp);
+ exp = (build_special_member_call
+ (object, complete_ctor_identifier, &exp_vec,
+ TREE_TYPE (object), flags, tf_warning_or_error));
+ release_tree_vector (exp_vec);
+ }
+
if (exp == error_mark_node)
{
error (" in thrown expression");
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index 14335388a50..83e685c0011 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -30,6 +30,8 @@ along with GCC; see the file COPYING3. If not see
#include "gimplify.h"
#include "c-family/c-ubsan.h"
#include "intl.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
static bool begin_init_stmts (tree *, tree *);
@@ -534,7 +536,7 @@ perform_target_ctor (tree init)
/* Return the non-static data initializer for FIELD_DECL MEMBER. */
tree
-get_nsdmi (tree member, bool in_ctor)
+get_nsdmi (tree member, bool in_ctor, tsubst_flags_t complain)
{
tree init;
tree save_ccp = current_class_ptr;
@@ -552,50 +554,54 @@ get_nsdmi (tree member, bool in_ctor)
{
init = DECL_INITIAL (DECL_TI_TEMPLATE (member));
if (TREE_CODE (init) == DEFAULT_ARG)
- goto unparsed;
-
+ /* Unparsed. */;
/* Check recursive instantiation. */
- if (DECL_INSTANTIATING_NSDMI_P (member))
+ else if (DECL_INSTANTIATING_NSDMI_P (member))
{
- error ("recursive instantiation of non-static data member "
- "initializer for %qD", member);
+ if (complain & tf_error)
+ error ("recursive instantiation of default member "
+ "initializer for %qD", member);
init = error_mark_node;
}
else
{
DECL_INSTANTIATING_NSDMI_P (member) = 1;
-
+
/* Do deferred instantiation of the NSDMI. */
init = (tsubst_copy_and_build
(init, DECL_TI_ARGS (member),
- tf_warning_or_error, member, /*function_p=*/false,
+ complain, member, /*function_p=*/false,
/*integral_constant_expression_p=*/false));
- init = digest_nsdmi_init (member, init);
+ init = digest_nsdmi_init (member, init, complain);
DECL_INSTANTIATING_NSDMI_P (member) = 0;
}
}
else
+ init = DECL_INITIAL (member);
+
+ if (init && TREE_CODE (init) == DEFAULT_ARG)
{
- init = DECL_INITIAL (member);
- if (init && TREE_CODE (init) == DEFAULT_ARG)
+ if (complain & tf_error)
{
- unparsed:
- error ("constructor required before non-static data member "
- "for %qD has been parsed", member);
+ error ("default member initializer for %qD required before the end "
+ "of its enclosing class", member);
+ inform (location_of (init), "defined here");
DECL_INITIAL (member) = error_mark_node;
- init = error_mark_node;
}
- /* Strip redundant TARGET_EXPR so we don't need to remap it, and
- so the aggregate init code below will see a CONSTRUCTOR. */
- bool simple_target = (init && SIMPLE_TARGET_EXPR_P (init));
- if (simple_target)
- init = TARGET_EXPR_INITIAL (init);
- init = break_out_target_exprs (init);
- if (simple_target && TREE_CODE (init) != CONSTRUCTOR)
- /* Now put it back so C++17 copy elision works. */
- init = get_target_expr (init);
+ init = error_mark_node;
}
+
+ /* Strip redundant TARGET_EXPR so we don't need to remap it, and
+ so the aggregate init code below will see a CONSTRUCTOR. */
+ bool simple_target = (init && SIMPLE_TARGET_EXPR_P (init));
+ if (simple_target)
+ init = TARGET_EXPR_INITIAL (init);
+ init = break_out_target_exprs (init);
+ if (simple_target && TREE_CODE (init) != CONSTRUCTOR)
+ /* Now put it back so C++17 copy elision works. */
+ init = get_target_expr (init);
+
current_class_ptr = save_ccp;
current_class_ref = save_ccr;
return init;
@@ -642,7 +648,7 @@ perform_member_init (tree member, tree init)
/* Use the non-static data member initializer if there was no
mem-initializer for this field. */
if (init == NULL_TREE)
- init = get_nsdmi (member, /*ctor*/true);
+ init = get_nsdmi (member, /*ctor*/true, tf_warning_or_error);
if (init == error_mark_node)
return;
@@ -3910,7 +3916,8 @@ finish_length_check (tree atype, tree iterator, tree obase, unsigned n)
}
/* Don't check an array new when -fno-exceptions. */
}
- else if (sanitize_flags_p (SANITIZE_BOUNDS))
+ else if (sanitize_flags_p (SANITIZE_BOUNDS)
+ && current_function_decl != NULL_TREE)
{
/* Make sure the last element of the initializer is in bounds. */
finish_expr_stmt
diff --git a/gcc/cp/lambda.c b/gcc/cp/lambda.c
index 0e02375fa1b..14ff6c2ae43 100644
--- a/gcc/cp/lambda.c
+++ b/gcc/cp/lambda.c
@@ -529,7 +529,10 @@ add_capture (tree lambda, tree id, tree orig_init, bool by_reference_p,
else if (id != this_identifier && by_reference_p)
{
if (!lvalue_p (initializer))
- error ("cannot capture %qE by reference", initializer);
+ {
+ error ("cannot capture %qE by reference", initializer);
+ return error_mark_node;
+ }
}
else
{
diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c
index 961b705a546..097fbb547d2 100644
--- a/gcc/cp/lex.c
+++ b/gcc/cp/lex.c
@@ -766,7 +766,7 @@ copy_decl (tree decl MEM_STAT_DECL)
{
tree copy;
- copy = copy_node_stat (decl PASS_MEM_STAT);
+ copy = copy_node (decl PASS_MEM_STAT);
cxx_dup_lang_specific_decl (copy);
return copy;
}
@@ -799,7 +799,7 @@ copy_type (tree type MEM_STAT_DECL)
{
tree copy;
- copy = copy_node_stat (type PASS_MEM_STAT);
+ copy = copy_node (type PASS_MEM_STAT);
copy_lang_type (copy);
return copy;
}
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index 3c57b41c8d9..809ebc8311c 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -1342,7 +1342,7 @@ walk_field_subobs (tree fields, tree fnname, special_function_kind sfk,
if (bad && deleted_p)
*deleted_p = true;
}
- else if (sfk == sfk_constructor)
+ else if (sfk == sfk_constructor || sfk == sfk_inheriting_constructor)
{
bool bad;
@@ -1357,7 +1357,7 @@ walk_field_subobs (tree fields, tree fnname, special_function_kind sfk,
default constructor is noexcept(false). */
if (spec_p)
{
- tree nsdmi = get_nsdmi (field, /*ctor*/false);
+ tree nsdmi = get_nsdmi (field, /*ctor*/false, complain);
if (!expr_noexcept_p (nsdmi, complain))
*spec_p = noexcept_false_spec;
}
@@ -1660,6 +1660,10 @@ synthesized_method_walk (tree ctype, special_function_kind sfk, bool const_p,
flags |= LOOKUP_DEFAULTED;
tsubst_flags_t complain = diag ? tf_warning_or_error : tf_none;
+ if (diag && spec_p)
+ /* We're in get_defaulted_eh_spec; we don't actually want any walking
+ diagnostics, we just want complain set. */
+ diag = false;
int quals = const_p ? TYPE_QUAL_CONST : TYPE_UNQUALIFIED;
for (binfo = TYPE_BINFO (ctype), i = 0;
@@ -1689,12 +1693,18 @@ synthesized_method_walk (tree ctype, special_function_kind sfk, bool const_p,
if (check_vdtor && type_has_virtual_destructor (BINFO_TYPE (base_binfo)))
{
- fn = locate_fn_flags (ctype, cp_operator_id (DELETE_EXPR),
- ptr_type_node, flags, complain);
/* Unlike for base ctor/op=/dtor, for operator delete it's fine
to have a null fn (no class-specific op delete). */
- if (fn && fn == error_mark_node && deleted_p)
- *deleted_p = true;
+ fn = locate_fn_flags (ctype, cp_operator_id (DELETE_EXPR),
+ ptr_type_node, flags, tf_none);
+ if (fn && fn == error_mark_node)
+ {
+ if (complain & tf_error)
+ locate_fn_flags (ctype, cp_operator_id (DELETE_EXPR),
+ ptr_type_node, flags, complain);
+ if (deleted_p)
+ *deleted_p = true;
+ }
check_vdtor = false;
}
}
@@ -1749,7 +1759,7 @@ synthesized_method_walk (tree ctype, special_function_kind sfk, bool const_p,
needed. Return what it should be. */
tree
-get_defaulted_eh_spec (tree decl)
+get_defaulted_eh_spec (tree decl, tsubst_flags_t complain)
{
if (DECL_CLONED_FUNCTION_P (decl))
decl = DECL_CLONED_FUNCTION (decl);
@@ -1759,8 +1769,9 @@ get_defaulted_eh_spec (tree decl)
tree parm_type = TREE_VALUE (parms);
bool const_p = CP_TYPE_CONST_P (non_reference (parm_type));
tree spec = empty_except_spec;
+ bool diag = !DECL_DELETED_FN (decl) && (complain & tf_error);
synthesized_method_walk (ctype, sfk, const_p, &spec, NULL, NULL,
- NULL, false, DECL_INHERITED_CTOR (decl),
+ NULL, diag, DECL_INHERITED_CTOR (decl),
parms);
return spec;
}
@@ -2173,6 +2184,12 @@ defaulted_late_check (tree fn)
"does not match expected signature %qD", implicit_fn);
}
+ if (DECL_DELETED_FN (implicit_fn))
+ {
+ DECL_DELETED_FN (fn) = 1;
+ return;
+ }
+
/* 8.4.2/2: An explicitly-defaulted function (...) may have an explicit
exception-specification only if it is compatible (15.4) with the
exception-specification on the implicit declaration. If a function
@@ -2231,9 +2248,6 @@ defaulted_late_check (tree fn)
}
DECL_DECLARED_CONSTEXPR_P (fn) = false;
}
-
- if (DECL_DELETED_FN (implicit_fn))
- DECL_DELETED_FN (fn) = 1;
}
/* OK, we've parsed the NSDMI for class T, now we can check any explicit
@@ -2246,8 +2260,10 @@ after_nsdmi_defaulted_late_checks (tree t)
return;
if (t == error_mark_node)
return;
- for (tree fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
- if (!DECL_ARTIFICIAL (fn) && DECL_DEFAULTED_IN_CLASS_P (fn))
+ for (tree fn = TYPE_FIELDS (t); fn; fn = DECL_CHAIN (fn))
+ if (!DECL_ARTIFICIAL (fn)
+ && DECL_DECLARES_FUNCTION_P (fn)
+ && DECL_DEFAULTED_IN_CLASS_P (fn))
{
tree fn_spec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
if (UNEVALUATED_NOEXCEPT_SPEC_P (fn_spec))
@@ -2379,20 +2395,25 @@ lazily_declare_fn (special_function_kind sfk, tree type)
|| sfk == sfk_move_assignment
|| sfk == sfk_copy_assignment)
check_for_override (fn, type);
+
/* Add it to CLASSTYPE_METHOD_VEC. */
bool added = add_method (type, fn, false);
gcc_assert (added);
- /* Add it to TYPE_METHODS. */
+
+ /* Add it to TYPE_FIELDS. */
if (sfk == sfk_destructor
&& DECL_VIRTUAL_P (fn))
/* The ABI requires that a virtual destructor go at the end of the
vtable. */
- TYPE_METHODS (type) = chainon (TYPE_METHODS (type), fn);
+ TYPE_FIELDS (type) = chainon (TYPE_FIELDS (type), fn);
else
{
- DECL_CHAIN (fn) = TYPE_METHODS (type);
- TYPE_METHODS (type) = fn;
+ DECL_CHAIN (fn) = TYPE_FIELDS (type);
+ TYPE_FIELDS (type) = fn;
}
+ /* Propagate TYPE_FIELDS. */
+ fixup_type_variants (type);
+
maybe_add_class_template_decl_list (type, fn, /*friend_p=*/0);
if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn)
|| DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn))
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index cd7428a4ea4..4dc19da6ade 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -6045,11 +6045,12 @@ add_using_namespace (vec<tree, va_gc> *&usings, tree target)
/* Tell the debug system of a using directive. */
static void
-emit_debug_info_using_namespace (tree from, tree target)
+emit_debug_info_using_namespace (tree from, tree target, bool implicit)
{
/* Emit debugging info. */
tree context = from != global_namespace ? from : NULL_TREE;
- debug_hooks->imported_module_or_decl (target, NULL_TREE, context, false);
+ debug_hooks->imported_module_or_decl (target, NULL_TREE, context, false,
+ implicit);
}
/* Process a namespace-scope using directive. */
@@ -6064,7 +6065,7 @@ finish_namespace_using_directive (tree target, tree attribs)
add_using_namespace (DECL_NAMESPACE_USING (current_namespace),
ORIGINAL_NAMESPACE (target));
emit_debug_info_using_namespace (current_namespace,
- ORIGINAL_NAMESPACE (target));
+ ORIGINAL_NAMESPACE (target), false);
if (attribs == error_mark_node)
return;
@@ -6223,14 +6224,14 @@ push_namespace (tree name, bool make_inline)
else if (TREE_PUBLIC (current_namespace))
TREE_PUBLIC (ns) = 1;
- if (name == anon_identifier || make_inline)
- emit_debug_info_using_namespace (current_namespace, ns);
-
if (make_inline)
{
DECL_NAMESPACE_INLINE_P (ns) = true;
vec_safe_push (DECL_NAMESPACE_INLINEES (current_namespace), ns);
}
+
+ if (name == anon_identifier || make_inline)
+ emit_debug_info_using_namespace (current_namespace, ns, true);
}
}
@@ -6358,8 +6359,8 @@ cp_emit_debug_info_for_using (tree t, tree context)
if (building_stmt_list_p ())
add_stmt (build_stmt (input_location, USING_STMT, fn));
else
- debug_hooks->imported_module_or_decl (fn,
- NULL_TREE, context, false);
+ debug_hooks->imported_module_or_decl (fn, NULL_TREE, context,
+ false, false);
}
}
}
diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c
index d646ef73803..09ffbda7ca8 100644
--- a/gcc/cp/optimize.c
+++ b/gcc/cp/optimize.c
@@ -184,10 +184,10 @@ cdtor_comdat_group (tree complete, tree base)
static bool
can_alias_cdtor (tree fn)
{
-#ifndef ASM_OUTPUT_DEF
/* If aliases aren't supported by the assembler, fail. */
- return false;
-#endif
+ if (!TARGET_SUPPORTS_ALIASES)
+ return false;
+
/* We can't use an alias if there are virtual bases. */
if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
return false;
@@ -326,7 +326,7 @@ maybe_thunk_body (tree fn, bool force)
}
args = XALLOCAVEC (tree, max_parms);
- /* We know that any clones immediately follow FN in TYPE_METHODS. */
+ /* We know that any clones immediately follow FN in TYPE_FIELDS. */
FOR_EACH_CLONE (clone, fn)
{
tree clone_parm;
@@ -447,7 +447,7 @@ maybe_clone_body (tree fn)
if (!tree_versionable_function_p (fn))
need_alias = true;
- /* We know that any clones immediately follow FN in the TYPE_METHODS
+ /* We know that any clones immediately follow FN in the TYPE_FIELDS
list. */
push_to_top_level ();
for (idx = 0; idx < 3; idx++)
@@ -516,7 +516,7 @@ maybe_clone_body (tree fn)
/* Emit the DWARF1 abstract instance. */
(*debug_hooks->deferred_inline_function) (fn);
- /* We know that any clones immediately follow FN in the TYPE_METHODS list. */
+ /* We know that any clones immediately follow FN in the TYPE_FIELDS. */
for (idx = 0; idx < 3; idx++)
{
tree parm;
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 88d0b2b250d..b849824fcd0 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -2551,9 +2551,9 @@ static void set_and_check_decl_spec_loc
static bool cp_parser_friend_p
(const cp_decl_specifier_seq *);
static void cp_parser_required_error
- (cp_parser *, required_token, bool);
+ (cp_parser *, required_token, bool, location_t);
static cp_token *cp_parser_require
- (cp_parser *, enum cpp_ttype, required_token);
+ (cp_parser *, enum cpp_ttype, required_token, location_t = UNKNOWN_LOCATION);
static cp_token *cp_parser_require_keyword
(cp_parser *, enum rid, required_token);
static bool cp_parser_token_starts_function_definition_p
@@ -2804,12 +2804,13 @@ cp_parser_error (cp_parser* parser, const char* gmsgid)
}
}
+ rich_location richloc (line_table, input_location);
c_parse_error (gmsgid,
/* Because c_parser_error does not understand
CPP_KEYWORD, keywords are treated like
identifiers. */
(token->type == CPP_KEYWORD ? CPP_NAME : token->type),
- token->u.value, token->flags);
+ token->u.value, token->flags, &richloc);
}
}
@@ -4503,6 +4504,90 @@ struct tentative_firewall
}
};
+/* Some tokens naturally come in pairs e.g.'(' and ')'.
+ This class is for tracking such a matching pair of symbols.
+ In particular, it tracks the location of the first token,
+ so that if the second token is missing, we can highlight the
+ location of the first token when notifying the user about the
+ problem. */
+
+template <typename traits_t>
+class token_pair
+{
+ public:
+ /* token_pair's ctor. */
+ token_pair () : m_open_loc (UNKNOWN_LOCATION) {}
+
+ /* If the next token is the opening symbol for this pair, consume it and
+ return true.
+ Otherwise, issue an error and return false.
+ In either case, record the location of the opening token. */
+
+ bool require_open (cp_parser *parser)
+ {
+ m_open_loc = cp_lexer_peek_token (parser->lexer)->location;
+ return cp_parser_require (parser, traits_t::open_token_type,
+ traits_t::required_token_open);
+ }
+
+ /* Consume the next token from PARSER, recording its location as
+ that of the opening token within the pair. */
+
+ cp_token * consume_open (cp_parser *parser)
+ {
+ cp_token *tok = cp_lexer_consume_token (parser->lexer);
+ gcc_assert (tok->type == traits_t::open_token_type);
+ m_open_loc = tok->location;
+ return tok;
+ }
+
+ /* If the next token is the closing symbol for this pair, consume it
+ and return it.
+ Otherwise, issue an error, highlighting the location of the
+ corresponding opening token, and return NULL. */
+
+ cp_token *require_close (cp_parser *parser) const
+ {
+ return cp_parser_require (parser, traits_t::close_token_type,
+ traits_t::required_token_close,
+ m_open_loc);
+ }
+
+ private:
+ location_t m_open_loc;
+};
+
+/* Traits for token_pair<T> for tracking matching pairs of parentheses. */
+
+struct matching_paren_traits
+{
+ static const enum cpp_ttype open_token_type = CPP_OPEN_PAREN;
+ static const enum required_token required_token_open = RT_OPEN_PAREN;
+ static const enum cpp_ttype close_token_type = CPP_CLOSE_PAREN;
+ static const enum required_token required_token_close = RT_CLOSE_PAREN;
+};
+
+/* "matching_parens" is a token_pair<T> class for tracking matching
+ pairs of parentheses. */
+
+typedef token_pair<matching_paren_traits> matching_parens;
+
+/* Traits for token_pair<T> for tracking matching pairs of braces. */
+
+struct matching_brace_traits
+{
+ static const enum cpp_ttype open_token_type = CPP_OPEN_BRACE;
+ static const enum required_token required_token_open = RT_OPEN_BRACE;
+ static const enum cpp_ttype close_token_type = CPP_CLOSE_BRACE;
+ static const enum required_token required_token_close = RT_CLOSE_BRACE;
+};
+
+/* "matching_braces" is a token_pair<T> class for tracking matching
+ pairs of braces. */
+
+typedef token_pair<matching_brace_traits> matching_braces;
+
+
/* Parse a GNU statement-expression, i.e. ({ stmts }), except for the
enclosing parentheses. */
@@ -4513,7 +4598,8 @@ cp_parser_statement_expr (cp_parser *parser)
/* Consume the '('. */
location_t start_loc = cp_lexer_peek_token (parser->lexer)->location;
- cp_lexer_consume_token (parser->lexer);
+ matching_parens parens;
+ parens.consume_open (parser);
/* Start the statement-expression. */
tree expr = begin_stmt_expr ();
/* Parse the compound-statement. */
@@ -4522,7 +4608,7 @@ cp_parser_statement_expr (cp_parser *parser)
expr = finish_stmt_expr (expr, false);
/* Consume the ')'. */
location_t finish_loc = cp_lexer_peek_token (parser->lexer)->location;
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
cp_parser_skip_to_end_of_statement (parser);
cp_parser_end_tentative_firewall (parser, start, expr);
@@ -4928,7 +5014,8 @@ cp_parser_primary_expression (cp_parser *parser,
location_t open_paren_loc = token->location;
/* Consume the `('. */
- cp_lexer_consume_token (parser->lexer);
+ matching_parens parens;
+ parens.consume_open (parser);
/* Within a parenthesized expression, a `>' token is always
the greater-than operator. */
saved_greater_than_is_operator_p
@@ -4976,7 +5063,7 @@ cp_parser_primary_expression (cp_parser *parser,
token = cp_lexer_peek_token (parser->lexer);
location_t close_paren_loc = token->location;
expr.set_range (open_paren_loc, close_paren_loc);
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN)
+ if (!parens.require_close (parser)
&& !cp_parser_uncommitted_to_tentative_parse_p (parser))
cp_parser_skip_to_end_of_statement (parser);
@@ -5098,7 +5185,8 @@ cp_parser_primary_expression (cp_parser *parser,
`va_arg'. Consume the `__builtin_va_arg' token. */
cp_lexer_consume_token (parser->lexer);
/* Look for the opening `('. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
/* Now, parse the assignment-expression. */
expression = cp_parser_assignment_expression (parser);
/* Look for the `,'. */
@@ -5112,7 +5200,7 @@ cp_parser_primary_expression (cp_parser *parser,
/* Look for the closing `)'. */
location_t finish_loc
= cp_lexer_peek_token (parser->lexer)->location;
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
/* Using `va_arg' in a constant-expression is not
allowed. */
if (cp_parser_non_integral_constant_expression (parser,
@@ -6345,9 +6433,6 @@ cp_parser_qualifying_entity (cp_parser *parser,
static bool
cp_parser_compound_literal_p (cp_parser *parser)
{
- /* Consume the `('. */
- cp_lexer_consume_token (parser->lexer);
-
cp_lexer_save_tokens (parser->lexer);
/* Skip tokens until the next token is a closing parenthesis.
@@ -6465,7 +6550,8 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
parser->greater_than_is_operator_p = true;
/* And the expression which is being cast. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
expression = cp_parser_expression (parser, & idk, /*cast_p=*/true);
cp_token *close_paren = cp_parser_require (parser, CPP_CLOSE_PAREN,
RT_CLOSE_PAREN);
@@ -6526,7 +6612,8 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
/* Consume the `typeid' token. */
cp_lexer_consume_token (parser->lexer);
/* Look for the `(' token. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
/* Types cannot be defined in a `typeid' expression. */
saved_message = parser->type_definition_forbidden_message;
parser->type_definition_forbidden_message
@@ -6542,8 +6629,7 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
/* Look for the `)' token. Otherwise, we can't be sure that
we're not looking at an expression: consider `typeid (int
(3))', for example. */
- cp_token *close_paren = cp_parser_require (parser, CPP_CLOSE_PAREN,
- RT_CLOSE_PAREN);
+ cp_token *close_paren = parens.require_close (parser);
/* If all went well, simply lookup the type-id. */
if (cp_parser_parse_definitely (parser))
postfix_expression = get_typeid (type, tf_warning_or_error);
@@ -6557,8 +6643,7 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
/* Compute its typeid. */
postfix_expression = build_typeid (expression, tf_warning_or_error);
/* Look for the `)' token. */
- close_paren
- = cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ close_paren = parens.require_close (parser);
}
/* Restore the saved message. */
parser->type_definition_forbidden_message = saved_message;
@@ -6759,6 +6844,9 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
cp_parser_parse_tentatively (parser);
+ matching_parens parens;
+ parens.consume_open (parser);
+
/* Avoid calling cp_parser_type_id pointlessly, see comment
in cp_parser_cast_expression about c++/29234. */
if (!cp_parser_compound_literal_p (parser))
@@ -6770,8 +6858,7 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
parser->in_type_id_in_expr_p = true;
type = cp_parser_type_id (parser);
parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
- /* Look for the `)'. */
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
}
/* If things aren't going well, there's no need to
@@ -7561,7 +7648,8 @@ cp_parser_parenthesized_expression_list (cp_parser* parser,
if (non_constant_p)
*non_constant_p = false;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return NULL;
expression_list = make_tree_vector ();
@@ -7657,7 +7745,7 @@ cp_parser_parenthesized_expression_list (cp_parser* parser,
if (close_paren_loc)
*close_paren_loc = cp_lexer_peek_token (parser->lexer)->location;
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
{
int ending;
@@ -7957,7 +8045,8 @@ cp_parser_unary_expression (cp_parser *parser, cp_id_kind * pidk,
bool saved_greater_than_is_operator_p;
cp_lexer_consume_token (parser->lexer);
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
saved_message = parser->type_definition_forbidden_message;
parser->type_definition_forbidden_message
@@ -7991,7 +8080,7 @@ cp_parser_unary_expression (cp_parser *parser, cp_id_kind * pidk,
parser->type_definition_forbidden_message = saved_message;
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
return finish_noexcept_expr (expr, tf_warning_or_error);
}
@@ -8235,7 +8324,8 @@ cp_parser_new_expression (cp_parser* parser)
const char *saved_message = parser->type_definition_forbidden_message;
/* Consume the `('. */
- cp_lexer_consume_token (parser->lexer);
+ matching_parens parens;
+ parens.consume_open (parser);
/* Parse the type-id. */
parser->type_definition_forbidden_message
@@ -8247,7 +8337,7 @@ cp_parser_new_expression (cp_parser* parser)
parser->type_definition_forbidden_message = saved_message;
/* Look for the closing `)'. */
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
token = cp_lexer_peek_token (parser->lexer);
/* There should not be a direct-new-declarator in this production,
but GCC used to allowed this, so we check and emit a sensible error
@@ -8787,7 +8877,8 @@ cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p,
parser->type_definition_forbidden_message
= G_("types may not be defined in casts");
/* Consume the `('. */
- cp_token *open_paren = cp_lexer_consume_token (parser->lexer);
+ matching_parens parens;
+ cp_token *open_paren = parens.consume_open (parser);
location_t open_paren_loc = open_paren->location;
location_t close_paren_loc = UNKNOWN_LOCATION;
@@ -8852,8 +8943,7 @@ cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p,
/* Look for the type-id. */
type = cp_parser_type_id (parser);
/* Look for the closing `)'. */
- cp_token *close_paren
- = cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ cp_token *close_paren = parens.require_close (parser);
if (close_paren)
close_paren_loc = close_paren->location;
parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
@@ -9638,7 +9728,8 @@ cp_parser_builtin_offsetof (cp_parser *parser)
/* Consume the "__builtin_offsetof" token. */
cp_lexer_consume_token (parser->lexer);
/* Consume the opening `('. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
/* Parse the type-id. */
location_t loc = cp_lexer_peek_token (parser->lexer)->location;
type = cp_parser_type_id (parser);
@@ -9688,7 +9779,7 @@ cp_parser_builtin_offsetof (cp_parser *parser)
default:
/* Error. We know the following require will fail, but
that gives the proper error message. */
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
expr = error_mark_node;
goto failure;
@@ -9834,7 +9925,8 @@ cp_parser_trait_expr (cp_parser* parser, enum rid keyword)
/* Consume the token. */
cp_lexer_consume_token (parser->lexer);
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
{
type_id_in_expr_sentinel s (parser);
@@ -9873,7 +9965,7 @@ cp_parser_trait_expr (cp_parser* parser, enum rid keyword)
}
}
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
/* Complete the trait expression, which may mean either processing
the trait expr now or saving it for template instantiation. */
@@ -10354,7 +10446,8 @@ cp_parser_lambda_declarator_opt (cp_parser* parser, tree lambda_expr)
opening parenthesis if present. */
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
{
- cp_lexer_consume_token (parser->lexer);
+ matching_parens parens;
+ parens.consume_open (parser);
begin_scope (sk_function_parms, /*entity=*/NULL_TREE);
@@ -10369,7 +10462,7 @@ cp_parser_lambda_declarator_opt (cp_parser* parser, tree lambda_expr)
pedwarn (DECL_SOURCE_LOCATION (TREE_VALUE (t)), OPT_Wpedantic,
"default argument specified for lambda parameter");
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
attributes = cp_parser_attributes_opt (parser);
@@ -10526,7 +10619,8 @@ cp_parser_lambda_body (cp_parser* parser, tree lambda_expr)
start_lambda_scope (fco);
body = begin_function_body ();
- if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
+ matching_braces braces;
+ if (!braces.require_open (parser))
goto out;
/* Push the proxies for any explicit captures. */
@@ -10567,7 +10661,7 @@ cp_parser_lambda_body (cp_parser* parser, tree lambda_expr)
expr = cp_parser_expression (parser, &idk);
cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
- cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
+ braces.require_close (parser);
if (cp_parser_parse_definitely (parser))
{
@@ -10591,7 +10685,7 @@ cp_parser_lambda_body (cp_parser* parser, tree lambda_expr)
while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
cp_parser_label_declaration (parser);
cp_parser_statement_seq_opt (parser, NULL_TREE);
- cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
+ braces.require_close (parser);
}
finish_compound_stmt (compound_stmt);
@@ -11127,9 +11221,10 @@ cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
int bcs_flags, bool function_body)
{
tree compound_stmt;
+ matching_braces braces;
/* Consume the `{'. */
- if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
+ if (!braces.require_open (parser))
return error_mark_node;
if (DECL_DECLARED_CONSTEXPR_P (current_function_decl)
&& !function_body && cxx_dialect < cxx14)
@@ -11145,7 +11240,7 @@ cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
/* Finish the compound-statement. */
finish_compound_stmt (compound_stmt);
/* Consume the `}'. */
- cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
+ braces.require_close (parser);
return compound_stmt;
}
@@ -11266,7 +11361,8 @@ cp_parser_selection_statement (cp_parser* parser, bool *if_p,
}
/* Look for the `('. */
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
{
cp_parser_skip_to_end_of_statement (parser);
return error_mark_node;
@@ -11295,7 +11391,7 @@ cp_parser_selection_statement (cp_parser* parser, bool *if_p,
/* Parse the condition. */
condition = cp_parser_condition (parser);
/* Look for the `)'. */
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, true, false,
/*consume_paren=*/true);
@@ -11925,7 +12021,7 @@ cp_parser_perform_range_for_lookup (tree range, tree *begin, tree *end)
*end = build_binary_op (input_location, PLUS_EXPR,
range,
array_type_nelts_top (TREE_TYPE (range)),
- 0);
+ false);
return TREE_TYPE (*begin);
}
else
@@ -12082,12 +12178,13 @@ cp_parser_iteration_statement (cp_parser* parser, bool *if_p, bool ivdep)
/* Begin the while-statement. */
statement = begin_while_stmt ();
/* Look for the `('. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
/* Parse the condition. */
condition = cp_parser_condition (parser);
finish_while_stmt_cond (condition, statement, ivdep);
/* Look for the `)'. */
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
/* Parse the dependent statement. */
parser->in_statement = IN_ITERATION_STMT;
cp_parser_already_scoped_statement (parser, if_p, guard_tinfo);
@@ -12111,13 +12208,14 @@ cp_parser_iteration_statement (cp_parser* parser, bool *if_p, bool ivdep)
/* Look for the `while' keyword. */
cp_parser_require_keyword (parser, RID_WHILE, RT_WHILE);
/* Look for the `('. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
/* Parse the expression. */
expression = cp_parser_expression (parser);
/* We're done with the do-statement. */
finish_do_stmt (expression, statement, ivdep);
/* Look for the `)'. */
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
/* Look for the `;'. */
cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
}
@@ -12126,12 +12224,13 @@ cp_parser_iteration_statement (cp_parser* parser, bool *if_p, bool ivdep)
case RID_FOR:
{
/* Look for the `('. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
statement = cp_parser_for (parser, ivdep);
/* Look for the `)'. */
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
/* Parse the body of the for-statement. */
parser->in_statement = IN_ITERATION_STMT;
@@ -12481,13 +12580,14 @@ cp_parser_already_scoped_statement (cp_parser* parser, bool *if_p,
{
/* Avoid calling cp_parser_compound_statement, so that we
don't create a new scope. Do everything else by hand. */
- cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
+ matching_braces braces;
+ braces.require_open (parser);
/* If the next keyword is `__label__' we have a label declaration. */
while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
cp_parser_label_declaration (parser);
/* Parse an (optional) statement-seq. */
cp_parser_statement_seq_opt (parser, NULL_TREE);
- cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
+ braces.require_close (parser);
}
}
@@ -13714,11 +13814,12 @@ cp_parser_linkage_specification (cp_parser* parser)
cp_ensure_no_oacc_routine (parser);
/* Consume the `{' token. */
- cp_lexer_consume_token (parser->lexer);
+ matching_braces braces;
+ braces.consume_open (parser)->location;
/* Parse the declarations. */
cp_parser_declaration_seq_opt (parser);
/* Look for the closing `}'. */
- cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
+ braces.require_close (parser);
}
/* Otherwise, there's just one declaration. */
else
@@ -13770,7 +13871,8 @@ cp_parser_static_assert(cp_parser *parser, bool member_p)
cp_parser_commit_to_tentative_parse (parser);
/* Parse the `(' starting the static assertion condition. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
/* Parse the constant-expression. Allow a non-constant expression
here in order to give better diagnostics in finish_static_assert. */
@@ -13802,7 +13904,7 @@ cp_parser_static_assert(cp_parser *parser, bool member_p)
/*wide_ok=*/true);
/* A `)' completes the static assertion. */
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser,
/*recovering=*/true,
/*or_comma=*/false,
@@ -13956,7 +14058,8 @@ cp_parser_decltype (cp_parser *parser)
return error_mark_node;
/* Parse the opening `('. */
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return error_mark_node;
/* decltype (auto) */
@@ -13964,7 +14067,7 @@ cp_parser_decltype (cp_parser *parser)
&& cp_lexer_next_token_is_keyword (parser->lexer, RID_AUTO))
{
cp_lexer_consume_token (parser->lexer);
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
return error_mark_node;
expr = make_decltype_auto ();
AUTO_IS_DECLTYPE (expr) = true;
@@ -14019,7 +14122,7 @@ cp_parser_decltype (cp_parser *parser)
= saved_non_integral_constant_expression_p;
/* Parse to the closing `)'. */
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
{
cp_parser_skip_to_closing_parenthesis (parser, true, false,
/*consume_paren=*/true);
@@ -14718,11 +14821,14 @@ cp_parser_operator (cp_parser* parser)
break;
case CPP_OPEN_PAREN:
- /* Consume the `('. */
- cp_lexer_consume_token (parser->lexer);
- /* Look for the matching `)'. */
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
- return cp_operator_id (CALL_EXPR);
+ {
+ /* Consume the `('. */
+ matching_parens parens;
+ parens.consume_open (parser);
+ /* Look for the matching `)'. */
+ parens.require_close (parser);
+ return cp_operator_id (CALL_EXPR);
+ }
case CPP_OPEN_SQUARE:
/* Consume the `['. */
@@ -18095,7 +18201,8 @@ cp_parser_enum_specifier (cp_parser* parser)
begin_scope (sk_scoped_enum, type);
/* Consume the opening brace. */
- cp_lexer_consume_token (parser->lexer);
+ matching_braces braces;
+ braces.consume_open (parser);
if (type == error_mark_node)
; /* Nothing to add */
@@ -18128,7 +18235,7 @@ cp_parser_enum_specifier (cp_parser* parser)
cp_parser_enumerator_list (parser, type);
/* Consume the final '}'. */
- cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
+ braces.require_close (parser);
if (scoped_enum_p)
finish_scope ();
@@ -18421,13 +18528,14 @@ cp_parser_namespace_definition (cp_parser* parser)
warning (OPT_Wnamespaces, "namespace %qD entered", current_namespace);
/* Look for the `{' to validate starting the namespace. */
- if (cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
+ matching_braces braces;
+ if (braces.require_open (parser))
{
/* Parse the body of the namespace. */
cp_parser_namespace_body (parser);
/* Look for the final `}'. */
- cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
+ braces.require_close (parser);
}
if (has_visibility)
@@ -19808,7 +19916,8 @@ cp_parser_direct_declarator (cp_parser* parser,
cp_parser_parse_tentatively (parser);
/* Consume the `('. */
- cp_lexer_consume_token (parser->lexer);
+ matching_parens parens;
+ parens.consume_open (parser);
if (first)
{
/* If this is going to be an abstract declarator, we're
@@ -19823,7 +19932,7 @@ cp_parser_direct_declarator (cp_parser* parser,
params = cp_parser_parameter_declaration_clause (parser);
/* Consume the `)'. */
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
/* If all went well, parse the cv-qualifier-seq,
ref-qualifier and the exception-specification. */
@@ -19919,7 +20028,8 @@ cp_parser_direct_declarator (cp_parser* parser,
parser->in_declarator_p = saved_in_declarator_p;
/* Consume the `('. */
- cp_lexer_consume_token (parser->lexer);
+ matching_parens parens;
+ parens.consume_open (parser);
/* Parse the nested declarator. */
saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
parser->in_type_id_in_expr_p = true;
@@ -19930,7 +20040,7 @@ cp_parser_direct_declarator (cp_parser* parser,
parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
first = false;
/* Expect a `)'. */
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
declarator = cp_error_declarator;
if (declarator == cp_error_declarator)
break;
@@ -21778,7 +21888,8 @@ cp_parser_braced_list (cp_parser* parser, bool* non_constant_p)
location_t start_loc = cp_lexer_peek_token (parser->lexer)->location;
/* Consume the `{' token. */
- cp_lexer_consume_token (parser->lexer);
+ matching_braces braces;
+ braces.consume_open (parser);
/* Create a CONSTRUCTOR to represent the braced-initializer. */
initializer = make_node (CONSTRUCTOR);
/* If it's not a `}', then there is a non-trivial initializer. */
@@ -21795,7 +21906,7 @@ cp_parser_braced_list (cp_parser* parser, bool* non_constant_p)
*non_constant_p = false;
/* Now, there should be a trailing `}'. */
location_t finish_loc = cp_lexer_peek_token (parser->lexer)->location;
- cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
+ braces.require_close (parser);
TREE_TYPE (initializer) = init_list_type_node;
cp_expr result (initializer);
@@ -22222,7 +22333,8 @@ cp_parser_class_specifier_1 (cp_parser* parser)
}
/* Look for the `{'. */
- if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
+ matching_braces braces;
+ if (!braces.require_open (parser))
{
pop_deferring_access_checks ();
return error_mark_node;
@@ -22274,7 +22386,7 @@ cp_parser_class_specifier_1 (cp_parser* parser)
cp_parser_member_specification_opt (parser);
/* Look for the trailing `}'. */
- closing_brace = cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
+ closing_brace = braces.require_close (parser);
/* Look for trailing attributes to apply to this class. */
if (cp_parser_allow_gnu_extensions_p (parser))
attributes = cp_parser_gnu_attributes_opt (parser);
@@ -23753,11 +23865,12 @@ cp_parser_constant_initializer (cp_parser* parser)
cp_parser_error (parser,
"a brace-enclosed initializer is not allowed here");
/* Consume the opening brace. */
- cp_lexer_consume_token (parser->lexer);
+ matching_braces braces;
+ braces.consume_open (parser);
/* Skip the initializer. */
cp_parser_skip_to_closing_brace (parser);
/* Look for the trailing `}'. */
- cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
+ braces.require_close (parser);
return error_mark_node;
}
@@ -24013,7 +24126,8 @@ cp_parser_noexcept_specification_opt (cp_parser* parser,
if (cp_lexer_peek_token (parser->lexer)->type == CPP_OPEN_PAREN)
{
- cp_lexer_consume_token (parser->lexer);
+ matching_parens parens;
+ parens.consume_open (parser);
if (require_constexpr)
{
@@ -24033,7 +24147,7 @@ cp_parser_noexcept_specification_opt (cp_parser* parser,
*consumed_expr = true;
}
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
}
else
{
@@ -24087,7 +24201,8 @@ cp_parser_exception_specification_opt (cp_parser* parser)
cp_lexer_consume_token (parser->lexer);
/* Look for the `('. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
/* Peek at the next token. */
token = cp_lexer_peek_token (parser->lexer);
@@ -24123,7 +24238,7 @@ cp_parser_exception_specification_opt (cp_parser* parser)
type_id_list = empty_except_spec;
/* Look for the `)'. */
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
return type_id_list;
}
@@ -24270,10 +24385,11 @@ cp_parser_handler (cp_parser* parser)
cp_parser_require_keyword (parser, RID_CATCH, RT_CATCH);
handler = begin_handler ();
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
declaration = cp_parser_exception_declaration (parser);
finish_handler_parms (declaration, handler);
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
cp_parser_compound_statement (parser, NULL, BCS_NORMAL, false);
finish_handler (handler);
}
@@ -24389,13 +24505,14 @@ cp_parser_asm_specification_opt (cp_parser* parser)
/* Consume the `asm' token. */
cp_lexer_consume_token (parser->lexer);
/* Look for the `('. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
/* Look for the string-literal. */
asm_specification = cp_parser_string_literal (parser, false, false);
/* Look for the `)'. */
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
return asm_specification;
}
@@ -24447,11 +24564,12 @@ cp_parser_asm_operand_list (cp_parser* parser)
string_literal = cp_parser_string_literal (parser, false, false);
/* Look for the `('. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
/* Parse the expression. */
expression = cp_parser_expression (parser);
/* Look for the `)'. */
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
if (name == error_mark_node
|| string_literal == error_mark_node
@@ -24705,8 +24823,10 @@ cp_parser_gnu_attributes_opt (cp_parser* parser)
/* Consume the `__attribute__' keyword. */
cp_lexer_consume_token (parser->lexer);
/* Look for the two `(' tokens. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens outer_parens;
+ outer_parens.require_open (parser);
+ matching_parens inner_parens;
+ inner_parens.require_open (parser);
/* Peek at the next token. */
token = cp_lexer_peek_token (parser->lexer);
@@ -24719,9 +24839,9 @@ cp_parser_gnu_attributes_opt (cp_parser* parser)
attribute_list = NULL;
/* Look for the two `)' tokens. */
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!inner_parens.require_close (parser))
ok = false;
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!outer_parens.require_close (parser))
ok = false;
if (!ok)
cp_parser_skip_to_end_of_statement (parser);
@@ -24782,7 +24902,8 @@ cp_parser_gnu_attribute_list (cp_parser* parser)
parsed identifier. */
? ridpointers[(int) token->keyword]
: id_token->u.value;
-
+
+ identifier = canonicalize_attr_name (identifier);
attribute = build_tree_list (identifier, NULL_TREE);
/* Peek at the next token. */
@@ -24928,6 +25049,8 @@ cp_parser_std_attribute (cp_parser *parser, tree attr_ns)
"expected an identifier for the attribute name");
return error_mark_node;
}
+
+ attr_id = canonicalize_attr_name (attr_id);
attribute = build_tree_list (build_tree_list (attr_ns, attr_id),
NULL_TREE);
token = cp_lexer_peek_token (parser->lexer);
@@ -24937,6 +25060,7 @@ cp_parser_std_attribute (cp_parser *parser, tree attr_ns)
NULL_TREE);
else
{
+ attr_id = canonicalize_attr_name (attr_id);
attribute = build_tree_list (build_tree_list (NULL_TREE, attr_id),
NULL_TREE);
/* C++11 noreturn attribute is equivalent to GNU's. */
@@ -25144,7 +25268,8 @@ cp_parser_std_attribute_spec (cp_parser *parser)
cp_lexer_consume_token (parser->lexer);
maybe_warn_cpp0x (CPP0X_ATTRIBUTES);
- if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN) == NULL)
+ matching_parens parens;
+ if (!parens.require_open (parser))
{
cp_parser_error (parser, "expected %<(%>");
return error_mark_node;
@@ -25177,7 +25302,7 @@ cp_parser_std_attribute_spec (cp_parser *parser)
if (alignas_expr == error_mark_node)
return error_mark_node;
- if (cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN) == NULL)
+ if (!parens.require_close (parser))
{
cp_parser_error (parser, "expected %<)%>");
return error_mark_node;
@@ -25409,12 +25534,13 @@ cp_parser_requires_expression (cp_parser *parser)
static tree
cp_parser_requirement_parameter_list (cp_parser *parser)
{
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return error_mark_node;
tree parms = cp_parser_parameter_declaration_clause (parser);
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
return error_mark_node;
return parms;
@@ -25427,12 +25553,13 @@ cp_parser_requirement_parameter_list (cp_parser *parser)
static tree
cp_parser_requirement_body (cp_parser *parser)
{
- if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
+ matching_braces braces;
+ if (!braces.require_open (parser))
return error_mark_node;
tree reqs = cp_parser_requirement_list (parser);
- if (!cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE))
+ if (!braces.require_close (parser))
return error_mark_node;
return reqs;
@@ -25571,14 +25698,15 @@ static tree
cp_parser_compound_requirement (cp_parser *parser)
{
/* Parse an expression enclosed in '{ }'s. */
- if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
+ matching_braces braces;
+ if (!braces.require_open (parser))
return error_mark_node;
tree expr = cp_parser_expression (parser, NULL, false, false);
if (!expr || expr == error_mark_node)
return error_mark_node;
- if (!cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE))
+ if (!braces.require_close (parser))
return error_mark_node;
/* Parse the optional noexcept. */
@@ -26649,7 +26777,8 @@ cp_parser_template_introduction (cp_parser* parser, bool member_p)
cp_parser_simulate_error (parser);
/* Look for opening brace for introduction. */
- cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
+ matching_braces braces;
+ braces.require_open (parser);
if (!cp_parser_parse_definitely (parser))
return false;
@@ -26669,7 +26798,7 @@ cp_parser_template_introduction (cp_parser* parser, bool member_p)
}
/* Look for closing brace for introduction. */
- if (!cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE))
+ if (!braces.require_close (parser))
return true;
if (tmpl_decl == error_mark_node)
@@ -27427,7 +27556,7 @@ cp_parser_late_parse_one_default_arg (cp_parser *parser, tree decl,
else if (maybe_reject_flexarray_init (decl, parsed_arg))
parsed_arg = error_mark_node;
else
- parsed_arg = digest_nsdmi_init (decl, parsed_arg);
+ parsed_arg = digest_nsdmi_init (decl, parsed_arg, tf_warning_or_error);
}
/* If the token stream has not been completely used up, then
@@ -27554,9 +27683,10 @@ cp_parser_sizeof_pack (cp_parser *parser)
cp_lexer_consume_token (parser->lexer);
maybe_warn_variadic_templates ();
+ matching_parens parens;
bool paren = cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN);
if (paren)
- cp_lexer_consume_token (parser->lexer);
+ parens.consume_open (parser);
else
permerror (cp_lexer_peek_token (parser->lexer)->location,
"%<sizeof...%> argument must be surrounded by parentheses");
@@ -27581,7 +27711,7 @@ cp_parser_sizeof_pack (cp_parser *parser)
PACK_EXPANSION_SIZEOF_P (expr) = true;
if (paren)
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
return expr;
}
@@ -27635,6 +27765,10 @@ cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
/* We can't be sure yet whether we're looking at a type-id or an
expression. */
cp_parser_parse_tentatively (parser);
+
+ matching_parens parens;
+ parens.consume_open (parser);
+
/* Note: as a GNU Extension, compound literals are considered
postfix-expressions as they are in C99, so they are valid
arguments to sizeof. See comment in cp_parser_cast_expression
@@ -27648,7 +27782,7 @@ cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
/* Look for the type-id. */
type = cp_parser_type_id (parser);
/* Look for the closing `)'. */
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
}
@@ -27930,187 +28064,245 @@ cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
return decl_spec_seq_has_spec_p (decl_specifiers, ds_friend);
}
+/* Get a description of the matching symbol to TOKEN_DESC e.g. "(" for
+ RT_CLOSE_PAREN. */
+
+static const char *
+get_matching_symbol (required_token token_desc)
+{
+ switch (token_desc)
+ {
+ default:
+ gcc_unreachable ();
+ return "";
+ case RT_CLOSE_BRACE:
+ return "{";
+ case RT_CLOSE_PAREN:
+ return "(";
+ }
+}
+
/* Issue an error message indicating that TOKEN_DESC was expected.
If KEYWORD is true, it indicated this function is called by
cp_parser_require_keword and the required token can only be
- a indicated keyword. */
+ a indicated keyword.
+
+ If MATCHING_LOCATION is not UNKNOWN_LOCATION, then highlight it
+ within any error as the location of an "opening" token matching
+ the close token TYPE (e.g. the location of the '(' when TOKEN_DESC is
+ RT_CLOSE_PAREN). */
static void
cp_parser_required_error (cp_parser *parser,
required_token token_desc,
- bool keyword)
+ bool keyword,
+ location_t matching_location)
{
+ if (cp_parser_simulate_error (parser))
+ return;
+
+ const char *gmsgid = NULL;
switch (token_desc)
{
case RT_NEW:
- cp_parser_error (parser, "expected %<new%>");
- return;
+ gmsgid = G_("expected %<new%>");
+ break;
case RT_DELETE:
- cp_parser_error (parser, "expected %<delete%>");
- return;
+ gmsgid = G_("expected %<delete%>");
+ break;
case RT_RETURN:
- cp_parser_error (parser, "expected %<return%>");
- return;
+ gmsgid = G_("expected %<return%>");
+ break;
case RT_WHILE:
- cp_parser_error (parser, "expected %<while%>");
- return;
+ gmsgid = G_("expected %<while%>");
+ break;
case RT_EXTERN:
- cp_parser_error (parser, "expected %<extern%>");
- return;
+ gmsgid = G_("expected %<extern%>");
+ break;
case RT_STATIC_ASSERT:
- cp_parser_error (parser, "expected %<static_assert%>");
- return;
+ gmsgid = G_("expected %<static_assert%>");
+ break;
case RT_DECLTYPE:
- cp_parser_error (parser, "expected %<decltype%>");
- return;
+ gmsgid = G_("expected %<decltype%>");
+ break;
case RT_OPERATOR:
- cp_parser_error (parser, "expected %<operator%>");
- return;
+ gmsgid = G_("expected %<operator%>");
+ break;
case RT_CLASS:
- cp_parser_error (parser, "expected %<class%>");
- return;
+ gmsgid = G_("expected %<class%>");
+ break;
case RT_TEMPLATE:
- cp_parser_error (parser, "expected %<template%>");
- return;
+ gmsgid = G_("expected %<template%>");
+ break;
case RT_NAMESPACE:
- cp_parser_error (parser, "expected %<namespace%>");
- return;
+ gmsgid = G_("expected %<namespace%>");
+ break;
case RT_USING:
- cp_parser_error (parser, "expected %<using%>");
- return;
+ gmsgid = G_("expected %<using%>");
+ break;
case RT_ASM:
- cp_parser_error (parser, "expected %<asm%>");
- return;
+ gmsgid = G_("expected %<asm%>");
+ break;
case RT_TRY:
- cp_parser_error (parser, "expected %<try%>");
- return;
+ gmsgid = G_("expected %<try%>");
+ break;
case RT_CATCH:
- cp_parser_error (parser, "expected %<catch%>");
- return;
+ gmsgid = G_("expected %<catch%>");
+ break;
case RT_THROW:
- cp_parser_error (parser, "expected %<throw%>");
- return;
+ gmsgid = G_("expected %<throw%>");
+ break;
case RT_LABEL:
- cp_parser_error (parser, "expected %<__label__%>");
- return;
+ gmsgid = G_("expected %<__label__%>");
+ break;
case RT_AT_TRY:
- cp_parser_error (parser, "expected %<@try%>");
- return;
+ gmsgid = G_("expected %<@try%>");
+ break;
case RT_AT_SYNCHRONIZED:
- cp_parser_error (parser, "expected %<@synchronized%>");
- return;
+ gmsgid = G_("expected %<@synchronized%>");
+ break;
case RT_AT_THROW:
- cp_parser_error (parser, "expected %<@throw%>");
- return;
+ gmsgid = G_("expected %<@throw%>");
+ break;
case RT_TRANSACTION_ATOMIC:
- cp_parser_error (parser, "expected %<__transaction_atomic%>");
- return;
+ gmsgid = G_("expected %<__transaction_atomic%>");
+ break;
case RT_TRANSACTION_RELAXED:
- cp_parser_error (parser, "expected %<__transaction_relaxed%>");
- return;
+ gmsgid = G_("expected %<__transaction_relaxed%>");
+ break;
default:
break;
}
- if (!keyword)
+
+ if (!gmsgid && !keyword)
{
switch (token_desc)
{
case RT_SEMICOLON:
- cp_parser_error (parser, "expected %<;%>");
- return;
+ gmsgid = G_("expected %<;%>");
+ break;
case RT_OPEN_PAREN:
- cp_parser_error (parser, "expected %<(%>");
- return;
+ gmsgid = G_("expected %<(%>");
+ break;
case RT_CLOSE_BRACE:
- cp_parser_error (parser, "expected %<}%>");
- return;
+ gmsgid = G_("expected %<}%>");
+ break;
case RT_OPEN_BRACE:
- cp_parser_error (parser, "expected %<{%>");
- return;
+ gmsgid = G_("expected %<{%>");
+ break;
case RT_CLOSE_SQUARE:
- cp_parser_error (parser, "expected %<]%>");
- return;
+ gmsgid = G_("expected %<]%>");
+ break;
case RT_OPEN_SQUARE:
- cp_parser_error (parser, "expected %<[%>");
- return;
+ gmsgid = G_("expected %<[%>");
+ break;
case RT_COMMA:
- cp_parser_error (parser, "expected %<,%>");
- return;
+ gmsgid = G_("expected %<,%>");
+ break;
case RT_SCOPE:
- cp_parser_error (parser, "expected %<::%>");
- return;
+ gmsgid = G_("expected %<::%>");
+ break;
case RT_LESS:
- cp_parser_error (parser, "expected %<<%>");
- return;
+ gmsgid = G_("expected %<<%>");
+ break;
case RT_GREATER:
- cp_parser_error (parser, "expected %<>%>");
- return;
+ gmsgid = G_("expected %<>%>");
+ break;
case RT_EQ:
- cp_parser_error (parser, "expected %<=%>");
- return;
+ gmsgid = G_("expected %<=%>");
+ break;
case RT_ELLIPSIS:
- cp_parser_error (parser, "expected %<...%>");
- return;
+ gmsgid = G_("expected %<...%>");
+ break;
case RT_MULT:
- cp_parser_error (parser, "expected %<*%>");
- return;
+ gmsgid = G_("expected %<*%>");
+ break;
case RT_COMPL:
- cp_parser_error (parser, "expected %<~%>");
- return;
+ gmsgid = G_("expected %<~%>");
+ break;
case RT_COLON:
- cp_parser_error (parser, "expected %<:%>");
- return;
+ gmsgid = G_("expected %<:%>");
+ break;
case RT_COLON_SCOPE:
- cp_parser_error (parser, "expected %<:%> or %<::%>");
- return;
+ gmsgid = G_("expected %<:%> or %<::%>");
+ break;
case RT_CLOSE_PAREN:
- cp_parser_error (parser, "expected %<)%>");
- return;
+ gmsgid = G_("expected %<)%>");
+ break;
case RT_COMMA_CLOSE_PAREN:
- cp_parser_error (parser, "expected %<,%> or %<)%>");
- return;
+ gmsgid = G_("expected %<,%> or %<)%>");
+ break;
case RT_PRAGMA_EOL:
- cp_parser_error (parser, "expected end of line");
- return;
+ gmsgid = G_("expected end of line");
+ break;
case RT_NAME:
- cp_parser_error (parser, "expected identifier");
- return;
+ gmsgid = G_("expected identifier");
+ break;
case RT_SELECT:
- cp_parser_error (parser, "expected selection-statement");
- return;
+ gmsgid = G_("expected selection-statement");
+ break;
case RT_ITERATION:
- cp_parser_error (parser, "expected iteration-statement");
- return;
+ gmsgid = G_("expected iteration-statement");
+ break;
case RT_JUMP:
- cp_parser_error (parser, "expected jump-statement");
- return;
+ gmsgid = G_("expected jump-statement");
+ break;
case RT_CLASS_KEY:
- cp_parser_error (parser, "expected class-key");
- return;
+ gmsgid = G_("expected class-key");
+ break;
case RT_CLASS_TYPENAME_TEMPLATE:
- cp_parser_error (parser,
- "expected %<class%>, %<typename%>, or %<template%>");
- return;
+ gmsgid = G_("expected %<class%>, %<typename%>, or %<template%>");
+ break;
default:
gcc_unreachable ();
}
}
- else
- gcc_unreachable ();
-}
+ if (gmsgid)
+ {
+ /* Emulate rest of cp_parser_error. */
+ cp_token *token = cp_lexer_peek_token (parser->lexer);
+ cp_lexer_set_source_position_from_token (token);
+
+ gcc_rich_location richloc (input_location);
+
+ /* If matching_location != UNKNOWN_LOCATION, highlight it.
+ Attempt to consolidate diagnostics by printing it as a
+ secondary range within the main diagnostic. */
+ bool added_matching_location = false;
+ if (matching_location != UNKNOWN_LOCATION)
+ added_matching_location
+ = richloc.add_location_if_nearby (matching_location);
+
+ c_parse_error (gmsgid,
+ (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
+ token->u.value, token->flags, &richloc);
+
+ /* If we weren't able to consolidate matching_location, then
+ print it as a secondary diagnostic. */
+ if (matching_location != UNKNOWN_LOCATION && !added_matching_location)
+ inform (matching_location, "to match this %qs",
+ get_matching_symbol (token_desc));
+ }
+}
/* If the next token is of the indicated TYPE, consume it. Otherwise,
issue an error message indicating that TOKEN_DESC was expected.
Returns the token consumed, if the token had the appropriate type.
- Otherwise, returns NULL. */
+ Otherwise, returns NULL.
+
+ If MATCHING_LOCATION is not UNKNOWN_LOCATION, then highlight it
+ within any error as the location of an "opening" token matching
+ the close token TYPE (e.g. the location of the '(' when TOKEN_DESC is
+ RT_CLOSE_PAREN). */
static cp_token *
cp_parser_require (cp_parser* parser,
enum cpp_ttype type,
- required_token token_desc)
+ required_token token_desc,
+ location_t matching_location)
{
if (cp_lexer_next_token_is (parser->lexer, type))
return cp_lexer_consume_token (parser->lexer);
@@ -28118,7 +28310,8 @@ cp_parser_require (cp_parser* parser,
{
/* Output the MESSAGE -- unless we're parsing tentatively. */
if (!cp_parser_simulate_error (parser))
- cp_parser_required_error (parser, token_desc, /*keyword=*/false);
+ cp_parser_required_error (parser, token_desc, /*keyword=*/false,
+ matching_location);
return NULL;
}
}
@@ -28220,7 +28413,8 @@ cp_parser_require_keyword (cp_parser* parser,
if (token && token->keyword != keyword)
{
- cp_parser_required_error (parser, token_desc, /*keyword=*/true);
+ cp_parser_required_error (parser, token_desc, /*keyword=*/true,
+ UNKNOWN_LOCATION);
return NULL;
}
@@ -28677,6 +28871,17 @@ cp_parser_cache_defarg (cp_parser *parser, bool nsdmi)
return default_argument;
}
+/* A location to use for diagnostics about an unparsed DEFAULT_ARG. */
+
+location_t
+defarg_location (tree default_argument)
+{
+ cp_token_cache *tokens = DEFARG_TOKENS (default_argument);
+ location_t start = tokens->first->location;
+ location_t end = tokens->last->location;
+ return make_location (start, start, end);
+}
+
/* Begin parsing tentatively. We always save tokens while parsing
tentatively so that if the tentative parsing fails we can restore the
tokens. */
@@ -29031,10 +29236,11 @@ cp_parser_objc_encode_expression (cp_parser* parser)
location_t start_loc = cp_lexer_peek_token (parser->lexer)->location;
cp_lexer_consume_token (parser->lexer); /* Eat '@encode'. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
token = cp_lexer_peek_token (parser->lexer);
type = complete_type (cp_parser_type_id (parser));
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
if (!type)
{
@@ -29076,9 +29282,10 @@ cp_parser_objc_defs_expression (cp_parser *parser)
tree name;
cp_lexer_consume_token (parser->lexer); /* Eat '@defs'. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
name = cp_parser_identifier (parser);
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
return objc_get_class_ivars (name);
}
@@ -29097,9 +29304,10 @@ cp_parser_objc_protocol_expression (cp_parser* parser)
location_t start_loc = cp_lexer_peek_token (parser->lexer)->location;
cp_lexer_consume_token (parser->lexer); /* Eat '@protocol'. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
proto = cp_parser_identifier (parser);
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
/* Build a location of the form:
@protocol(prot)
@@ -29137,7 +29345,8 @@ cp_parser_objc_selector_expression (cp_parser* parser)
location_t loc = cp_lexer_peek_token (parser->lexer)->location;
cp_lexer_consume_token (parser->lexer); /* Eat '@selector'. */
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
token = cp_lexer_peek_token (parser->lexer);
while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
@@ -29184,7 +29393,7 @@ cp_parser_objc_selector_expression (cp_parser* parser)
}
finish_selector:
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
/* Build a location of the form:
@@ -29391,7 +29600,8 @@ cp_parser_objc_typename (cp_parser* parser)
{
tree proto_quals, cp_type = NULL_TREE;
- cp_lexer_consume_token (parser->lexer); /* Eat '('. */
+ matching_parens parens;
+ parens.consume_open (parser); /* Eat '('. */
proto_quals = cp_parser_objc_protocol_qualifiers (parser);
/* An ObjC type name may consist of just protocol qualifiers, in which
@@ -29417,7 +29627,7 @@ cp_parser_objc_typename (cp_parser* parser)
}
}
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
type_name = build_tree_list (proto_quals, cp_type);
}
@@ -30031,7 +30241,8 @@ cp_parser_objc_superclass_or_category (cp_parser *parser,
}
else if (next->type == CPP_OPEN_PAREN)
{
- cp_lexer_consume_token (parser->lexer); /* Eat '('. */
+ matching_parens parens;
+ parens.consume_open (parser); /* Eat '('. */
/* If there is no category name, and this is an @interface, we
have a class extension. */
@@ -30043,7 +30254,7 @@ cp_parser_objc_superclass_or_category (cp_parser *parser,
else
*categ = cp_parser_identifier (parser);
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
}
}
@@ -30231,9 +30442,10 @@ cp_parser_objc_try_catch_finally_statement (cp_parser *parser)
cp_parameter_declarator *parm;
tree parameter_declaration = error_mark_node;
bool seen_open_paren = false;
+ matching_parens parens;
cp_lexer_consume_token (parser->lexer);
- if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ if (parens.require_open (parser))
seen_open_paren = true;
if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
{
@@ -30259,7 +30471,7 @@ cp_parser_objc_try_catch_finally_statement (cp_parser *parser)
/*attrlist=*/NULL);
}
if (seen_open_paren)
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
else
{
/* If there was no open parenthesis, we are recovering from
@@ -30313,9 +30525,10 @@ cp_parser_objc_synchronized_statement (cp_parser *parser)
location = cp_lexer_peek_token (parser->lexer)->location;
objc_maybe_warn_exceptions (location);
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
lock = cp_parser_expression (parser);
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
/* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
node, lest it get absorbed into the surrounding block. */
@@ -30556,7 +30769,8 @@ cp_parser_objc_at_property_declaration (cp_parser *parser)
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
{
/* Eat the '('. */
- cp_lexer_consume_token (parser->lexer);
+ matching_parens parens;
+ parens.consume_open (parser);
while (true)
{
@@ -30644,7 +30858,7 @@ cp_parser_objc_at_property_declaration (cp_parser *parser)
"error: expected ‘)’ before ‘,’ token". This is because
cp_parser_require, unlike the C counterpart, will produce an
error even if we are in error recovery. */
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
{
cp_parser_skip_to_closing_parenthesis (parser,
/*recovering=*/true,
@@ -31335,13 +31549,14 @@ cp_parser_oacc_single_int_clause (cp_parser *parser, omp_clause_code code,
{
location_t loc = cp_lexer_peek_token (parser->lexer)->location;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
tree t = cp_parser_assignment_expression (parser, NULL, false, false);
if (t == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
{
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
@@ -31388,7 +31603,8 @@ cp_parser_oacc_shape_clause (cp_parser *parser, omp_clause_code kind,
if (cp_lexer_next_token_is (lexer, CPP_OPEN_PAREN))
{
- cp_lexer_consume_token (lexer);
+ matching_parens parens;
+ parens.consume_open (parser);
do
{
@@ -31462,7 +31678,7 @@ cp_parser_oacc_shape_clause (cp_parser *parser, omp_clause_code kind,
}
while (1);
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
goto cleanup_error;
}
@@ -31608,12 +31824,13 @@ cp_parser_omp_clause_collapse (cp_parser *parser, tree list, location_t location
HOST_WIDE_INT n;
loc = cp_lexer_peek_token (parser->lexer)->location;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
num = cp_parser_constant_expression (parser);
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -31652,7 +31869,8 @@ cp_parser_omp_clause_default (cp_parser *parser, tree list,
enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
tree c;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
{
@@ -31695,7 +31913,7 @@ cp_parser_omp_clause_default (cp_parser *parser, tree list,
}
if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -31719,13 +31937,14 @@ cp_parser_omp_clause_final (cp_parser *parser, tree list, location_t location)
{
tree t, c;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
t = cp_parser_condition (parser);
if (t == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -31756,7 +31975,8 @@ cp_parser_omp_clause_if (cp_parser *parser, tree list, location_t location,
tree t, c;
enum tree_code if_modifier = ERROR_MARK;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
if (is_omp && cp_lexer_next_token_is (parser->lexer, CPP_NAME))
@@ -31839,7 +32059,7 @@ cp_parser_omp_clause_if (cp_parser *parser, tree list, location_t location,
t = cp_parser_condition (parser);
if (t == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -31934,13 +32154,14 @@ cp_parser_omp_clause_num_threads (cp_parser *parser, tree list,
{
tree t, c;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
t = cp_parser_expression (parser);
if (t == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -31964,13 +32185,14 @@ cp_parser_omp_clause_num_tasks (cp_parser *parser, tree list,
{
tree t, c;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
t = cp_parser_expression (parser);
if (t == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -31994,13 +32216,14 @@ cp_parser_omp_clause_grainsize (cp_parser *parser, tree list,
{
tree t, c;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
t = cp_parser_expression (parser);
if (t == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -32024,13 +32247,14 @@ cp_parser_omp_clause_priority (cp_parser *parser, tree list,
{
tree t, c;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
t = cp_parser_expression (parser);
if (t == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -32054,13 +32278,14 @@ cp_parser_omp_clause_hint (cp_parser *parser, tree list,
{
tree t, c;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
t = cp_parser_expression (parser);
if (t == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -32084,7 +32309,8 @@ cp_parser_omp_clause_defaultmap (cp_parser *parser, tree list,
tree c, id;
const char *p;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME))
@@ -32116,7 +32342,7 @@ cp_parser_omp_clause_defaultmap (cp_parser *parser, tree list,
goto out_err;
}
cp_lexer_consume_token (parser->lexer);
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
goto out_err;
check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULTMAP, "defaultmap",
@@ -32151,11 +32377,12 @@ cp_parser_omp_clause_ordered (cp_parser *parser,
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
{
- cp_lexer_consume_token (parser->lexer);
+ matching_parens parens;
+ parens.consume_open (parser);
num = cp_parser_constant_expression (parser);
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -32312,7 +32539,8 @@ cp_parser_omp_clause_schedule (cp_parser *parser, tree list, location_t location
tree c, t;
int modifiers = 0, nmodifiers = 0;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
c = build_omp_clause (location, OMP_CLAUSE_SCHEDULE);
@@ -32406,7 +32634,7 @@ cp_parser_omp_clause_schedule (cp_parser *parser, tree list, location_t location
else
OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
goto resync_fail;
}
else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_COMMA_CLOSE_PAREN))
@@ -32512,13 +32740,14 @@ cp_parser_omp_clause_num_teams (cp_parser *parser, tree list,
{
tree t, c;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
t = cp_parser_expression (parser);
if (t == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -32542,13 +32771,14 @@ cp_parser_omp_clause_thread_limit (cp_parser *parser, tree list,
{
tree t, c;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
t = cp_parser_expression (parser);
if (t == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -32573,7 +32803,8 @@ cp_parser_omp_clause_aligned (cp_parser *parser, tree list)
tree nlist, c, alignment = NULL_TREE;
bool colon;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_ALIGNED, list,
@@ -32583,7 +32814,7 @@ cp_parser_omp_clause_aligned (cp_parser *parser, tree list)
{
alignment = cp_parser_constant_expression (parser);
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -32614,7 +32845,8 @@ cp_parser_omp_clause_linear (cp_parser *parser, tree list,
bool colon;
enum omp_clause_linear_kind kind = OMP_CLAUSE_LINEAR_DEFAULT;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
if (!is_cilk_simd_fn
@@ -32644,7 +32876,7 @@ cp_parser_omp_clause_linear (cp_parser *parser, tree list,
colon = cp_lexer_next_token_is (parser->lexer, CPP_COLON);
if (colon)
cp_parser_require (parser, CPP_COLON, RT_COLON);
- else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ else if (!parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -32682,7 +32914,7 @@ cp_parser_omp_clause_linear (cp_parser *parser, tree list,
sorry ("using parameters for %<linear%> step is not supported yet");
step = integer_one_node;
}
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -32709,13 +32941,14 @@ cp_parser_omp_clause_safelen (cp_parser *parser, tree list,
{
tree t, c;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
t = cp_parser_constant_expression (parser);
if (t == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -32738,13 +32971,14 @@ cp_parser_omp_clause_simdlen (cp_parser *parser, tree list,
{
tree t, c;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
t = cp_parser_constant_expression (parser);
if (t == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -32860,7 +33094,8 @@ cp_parser_omp_clause_depend (cp_parser *parser, tree list, location_t loc)
tree nlist, c;
enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_INOUT;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
@@ -32892,7 +33127,7 @@ cp_parser_omp_clause_depend (cp_parser *parser, tree list, location_t loc)
OMP_CLAUSE_DEPEND_KIND (c) = kind;
OMP_CLAUSE_DECL (c) = NULL_TREE;
OMP_CLAUSE_CHAIN (c) = list;
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -33023,13 +33258,14 @@ cp_parser_omp_clause_device (cp_parser *parser, tree list,
{
tree t, c;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
t = cp_parser_expression (parser);
if (t == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -33054,7 +33290,8 @@ cp_parser_omp_clause_dist_schedule (cp_parser *parser, tree list,
{
tree c, t;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return list;
c = build_omp_clause (location, OMP_CLAUSE_DIST_SCHEDULE);
@@ -33073,7 +33310,7 @@ cp_parser_omp_clause_dist_schedule (cp_parser *parser, tree list,
goto resync_fail;
OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR (c) = t;
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
goto resync_fail;
}
else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_COMMA_CLOSE_PAREN))
@@ -33159,11 +33396,12 @@ cp_parser_oacc_clause_async (cp_parser *parser, tree list)
if (cp_lexer_peek_token (parser->lexer)->type == CPP_OPEN_PAREN)
{
- cp_lexer_consume_token (parser->lexer);
+ matching_parens parens;
+ parens.consume_open (parser);
t = cp_parser_expression (parser);
if (t == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -34213,12 +34451,13 @@ cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok, bool *if_p)
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
{
- cp_lexer_consume_token (parser->lexer);
+ matching_parens parens;
+ parens.consume_open (parser);
name = cp_parser_identifier (parser);
if (name == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -34716,7 +34955,8 @@ cp_parser_omp_for_loop (cp_parser *parser, enum tree_code code, tree clauses,
}
loc = cp_lexer_consume_token (parser->lexer)->location;
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return NULL;
init = orig_init = decl = real_decl = NULL;
@@ -34848,7 +35088,7 @@ cp_parser_omp_for_loop (cp_parser *parser, enum tree_code code, tree clauses,
protected_set_expr_location (incr, input_location);
}
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
@@ -35207,7 +35447,8 @@ cp_parser_omp_sections_scope (cp_parser *parser)
bool error_suppress = false;
cp_token *tok;
- if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
+ matching_braces braces;
+ if (!braces.require_open (parser))
return NULL_TREE;
stmt = push_stmt_list ();
@@ -35244,7 +35485,7 @@ cp_parser_omp_sections_scope (cp_parser *parser)
substmt = build1 (OMP_SECTION, void_type_node, substmt);
add_stmt (substmt);
}
- cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
+ braces.require_close (parser);
substmt = pop_stmt_list (stmt);
@@ -37106,7 +37347,8 @@ cp_parser_omp_declare_reduction_exprs (tree fndecl, cp_parser *parser)
if (strcmp (p, "initializer") == 0)
{
cp_lexer_consume_token (parser->lexer);
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return false;
p = "";
@@ -37197,12 +37439,13 @@ cp_parser_omp_declare_reduction_exprs (tree fndecl, cp_parser *parser)
if (ctor)
add_decl_expr (omp_orig);
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
return false;
}
if (!cp_lexer_next_token_is (parser->lexer, CPP_PRAGMA_EOL))
- cp_parser_required_error (parser, RT_PRAGMA_EOL, /*keyword=*/false);
+ cp_parser_required_error (parser, RT_PRAGMA_EOL, /*keyword=*/false,
+ UNKNOWN_LOCATION);
return true;
}
@@ -37630,7 +37873,8 @@ cp_parser_oacc_routine (cp_parser *parser, cp_token *pragma_tok,
/* Look for optional '( name )'. */
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
{
- cp_lexer_consume_token (parser->lexer); /* '(' */
+ matching_parens parens;
+ parens.consume_open (parser); /* '(' */
/* We parse the name as an id-expression. If it resolves to
anything other than a non-overloaded function at namespace
@@ -37647,7 +37891,7 @@ cp_parser_oacc_routine (cp_parser *parser, cp_token *pragma_tok,
cp_parser_name_lookup_error (parser, name, decl, NLE_NULL, name_loc);
if (decl == error_mark_node
- || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ || !parens.require_close (parser))
{
cp_parser_skip_to_pragma_eol (parser, pragma_tok);
parser->oacc_routine = NULL;
@@ -38079,12 +38323,13 @@ cp_parser_transaction_expression (cp_parser *parser, enum rid keyword)
if (!noex || !noex_expr
|| cp_lexer_peek_token (parser->lexer)->type == CPP_OPEN_PAREN)
{
- cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+ matching_parens parens;
+ parens.require_open (parser);
expr = cp_parser_expression (parser);
expr = finish_parenthesized_expr (expr);
- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+ parens.require_close (parser);
}
else
{
@@ -38672,7 +38917,8 @@ cp_parser_cilk_simd_vectorlength (cp_parser *parser, tree clauses,
check_no_duplicate_clause (clauses, OMP_CLAUSE_SIMDLEN, "vectorlength",
loc);
- if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
+ matching_parens parens;
+ if (!parens.require_open (parser))
return error_mark_node;
expr = cp_parser_constant_expression (parser);
@@ -38709,7 +38955,7 @@ cp_parser_cilk_simd_vectorlength (cp_parser *parser, tree clauses,
}
}
- if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
+ if (!parens.require_close (parser))
return error_mark_node;
return clauses;
}
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index da133bd1863..bf1f75de1e7 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -6879,7 +6879,7 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
}
else if (NULLPTR_TYPE_P (type))
{
- if (expr != nullptr_node)
+ if (!NULLPTR_TYPE_P (TREE_TYPE (expr)))
{
if (complain & tf_error)
error ("%qE is not a valid template argument for type %qT "
@@ -10551,7 +10551,6 @@ instantiate_class_template_1 (tree type)
}
else if (DECL_DECLARES_FUNCTION_P (t))
{
- /* Build new TYPE_METHODS. */
tree r;
if (TREE_CODE (t) == TEMPLATE_DECL)
@@ -12876,7 +12875,15 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
&& VAR_HAD_UNKNOWN_BOUND (t)
&& type != error_mark_node)
type = strip_array_domain (type);
+ tree auto_node = type_uses_auto (type);
+ int len = TREE_VEC_LENGTH (args);
+ if (auto_node)
+ /* Mask off any template args past the variable's context so we
+ don't replace the auto with an unrelated argument. */
+ TREE_VEC_LENGTH (args) = TEMPLATE_TYPE_LEVEL (auto_node) - 1;
type = tsubst (type, args, complain, in_decl);
+ if (auto_node)
+ TREE_VEC_LENGTH (args) = len;
}
if (VAR_P (r))
{
@@ -14657,6 +14664,10 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
= TREE_CONSTANT (r) = true;
DECL_INITIAL (r) = init;
+ if (tree auto_node = type_uses_auto (TREE_TYPE (r)))
+ TREE_TYPE (r)
+ = do_auto_deduction (TREE_TYPE (r), init, auto_node,
+ complain, adc_variable_type);
}
gcc_assert (cp_unevaluated_operand || TREE_STATIC (r)
|| decl_constant_var_p (r)
@@ -15106,6 +15117,8 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
return tsubst_binary_left_fold (t, args, complain, in_decl);
case BINARY_RIGHT_FOLD_EXPR:
return tsubst_binary_right_fold (t, args, complain, in_decl);
+ case PREDICT_EXPR:
+ return t;
default:
/* We shouldn't get here, but keep going if !flag_checking. */
@@ -16137,13 +16150,15 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
instantiated along with their containing function. And this
way we don't have to deal with pushing out of one local class
to instantiate a member of another local class. */
- tree fn;
/* Closures are handled by the LAMBDA_EXPR. */
gcc_assert (!LAMBDA_TYPE_P (TREE_TYPE (t)));
complete_type (tmp);
- for (fn = TYPE_METHODS (tmp); fn; fn = DECL_CHAIN (fn))
- if (!DECL_ARTIFICIAL (fn))
- instantiate_decl (fn, /*defer_ok=*/false,
+ for (tree fld = TYPE_FIELDS (tmp); fld; fld = DECL_CHAIN (fld))
+ if ((VAR_P (fld)
+ || (TREE_CODE (fld) == FUNCTION_DECL
+ && !DECL_ARTIFICIAL (fld)))
+ && DECL_TEMPLATE_INSTANTIATION (fld))
+ instantiate_decl (fld, /*defer_ok=*/false,
/*expl_inst_class=*/false);
}
break;
@@ -22133,18 +22148,6 @@ bt_instantiate_type_proc (binding_entry entry, void *data)
do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
}
-/* Called from do_type_instantiation to instantiate a member
- (a member function or a static member variable) of an
- explicitly instantiated class template. */
-static void
-instantiate_class_member (tree decl, int extern_p)
-{
- mark_decl_instantiated (decl, extern_p);
- if (! extern_p)
- instantiate_decl (decl, /*defer_ok=*/true,
- /*expl_inst_class_mem_p=*/true);
-}
-
/* Perform an explicit instantiation of template class T. STORAGE, if
non-null, is the RID for extern, inline or static. COMPLAIN is
nonzero if this is called from the parser, zero if called recursively,
@@ -22254,12 +22257,9 @@ do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
if (nomem_p)
return;
- {
- tree tmp;
-
- /* In contrast to implicit instantiation, where only the
- declarations, and not the definitions, of members are
- instantiated, we have here:
+ /* In contrast to implicit instantiation, where only the
+ declarations, and not the definitions, of members are
+ instantiated, we have here:
[temp.explicit]
@@ -22268,27 +22268,28 @@ do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
previously explicitly specialized in the translation unit
containing the explicit instantiation.
- Of course, we can't instantiate member template classes, since
- we don't have any arguments for them. Note that the standard
- is unclear on whether the instantiation of the members are
- *explicit* instantiations or not. However, the most natural
- interpretation is that it should be an explicit instantiation. */
-
- if (! static_p)
- for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
- if (TREE_CODE (tmp) == FUNCTION_DECL
- && DECL_TEMPLATE_INSTANTIATION (tmp)
- && user_provided_p (tmp))
- instantiate_class_member (tmp, extern_p);
-
- for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
- if (VAR_P (tmp) && DECL_TEMPLATE_INSTANTIATION (tmp))
- instantiate_class_member (tmp, extern_p);
-
- if (CLASSTYPE_NESTED_UTDS (t))
- binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
- bt_instantiate_type_proc, &storage);
- }
+ Of course, we can't instantiate member template classes, since we
+ don't have any arguments for them. Note that the standard is
+ unclear on whether the instantiation of the members are
+ *explicit* instantiations or not. However, the most natural
+ interpretation is that it should be an explicit
+ instantiation. */
+ for (tree fld = TYPE_FIELDS (t); fld; fld = DECL_CHAIN (fld))
+ if ((VAR_P (fld)
+ || (TREE_CODE (fld) == FUNCTION_DECL
+ && !static_p
+ && user_provided_p (fld)))
+ && DECL_TEMPLATE_INSTANTIATION (fld))
+ {
+ mark_decl_instantiated (fld, extern_p);
+ if (! extern_p)
+ instantiate_decl (fld, /*defer_ok=*/true,
+ /*expl_inst_class_mem_p=*/true);
+ }
+
+ if (CLASSTYPE_NESTED_UTDS (t))
+ binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
+ bt_instantiate_type_proc, &storage);
}
/* Given a function DECL, which is a specialization of TMPL, modify
@@ -22504,16 +22505,17 @@ always_instantiate_p (tree decl)
}
/* If FN has a noexcept-specifier that hasn't been instantiated yet,
- instantiate it now, modifying TREE_TYPE (fn). */
+ instantiate it now, modifying TREE_TYPE (fn). Returns false on
+ error, true otherwise. */
-void
-maybe_instantiate_noexcept (tree fn)
+bool
+maybe_instantiate_noexcept (tree fn, tsubst_flags_t complain)
{
tree fntype, spec, noex, clone;
/* Don't instantiate a noexcept-specification from template context. */
if (processing_template_decl)
- return;
+ return true;
if (DECL_CLONED_FUNCTION_P (fn))
fn = DECL_CLONED_FUNCTION (fn);
@@ -22521,7 +22523,7 @@ maybe_instantiate_noexcept (tree fn)
spec = TYPE_RAISES_EXCEPTIONS (fntype);
if (!spec || !TREE_PURPOSE (spec))
- return;
+ return true;
noex = TREE_PURPOSE (spec);
@@ -22530,7 +22532,7 @@ maybe_instantiate_noexcept (tree fn)
static hash_set<tree>* fns = new hash_set<tree>;
bool added = false;
if (DEFERRED_NOEXCEPT_PATTERN (noex) == NULL_TREE)
- spec = get_defaulted_eh_spec (fn);
+ spec = get_defaulted_eh_spec (fn, complain);
else if (!(added = !fns->add (fn)))
{
/* If hash_set::add returns true, the element was already there. */
@@ -22564,6 +22566,9 @@ maybe_instantiate_noexcept (tree fn)
if (added)
fns->remove (fn);
+ if (spec == error_mark_node)
+ return false;
+
TREE_TYPE (fn) = build_exception_variant (fntype, spec);
}
@@ -22574,6 +22579,8 @@ maybe_instantiate_noexcept (tree fn)
else
TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
}
+
+ return true;
}
/* Produce the definition of D, a _DECL generated from a template. If
@@ -23080,19 +23087,20 @@ instantiate_pending_templates (int retries)
if (TYPE_P (instantiation))
{
- tree fn;
-
if (!COMPLETE_TYPE_P (instantiation))
{
instantiate_class_template (instantiation);
if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
- for (fn = TYPE_METHODS (instantiation);
- fn;
- fn = TREE_CHAIN (fn))
- if (! DECL_ARTIFICIAL (fn))
- instantiate_decl (fn,
+ for (tree fld = TYPE_FIELDS (instantiation);
+ fld; fld = TREE_CHAIN (fld))
+ if ((VAR_P (fld)
+ || (TREE_CODE (fld) == FUNCTION_DECL
+ && !DECL_ARTIFICIAL (fld)))
+ && DECL_TEMPLATE_INSTANTIATION (fld))
+ instantiate_decl (fld,
/*defer_ok=*/false,
/*expl_inst_class_mem_p=*/false);
+
if (COMPLETE_TYPE_P (instantiation))
reconsider = 1;
}
@@ -25343,6 +25351,24 @@ do_class_deduction (tree ptype, tree tmpl, tree init, int flags,
else if (BRACE_ENCLOSED_INITIALIZER_P (init))
{
try_list_ctor = TYPE_HAS_LIST_CTOR (type);
+ if (try_list_ctor && CONSTRUCTOR_NELTS (init) == 1)
+ {
+ /* As an exception, the first phase in 16.3.1.7 (considering the
+ initializer list as a single argument) is omitted if the
+ initializer list consists of a single expression of type cv U,
+ where U is a specialization of C or a class derived from a
+ specialization of C. */
+ tree elt = CONSTRUCTOR_ELT (init, 0)->value;
+ tree etype = TREE_TYPE (elt);
+
+ tree tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
+ tree targs = make_tree_vec (TREE_VEC_LENGTH (tparms));
+ int err = unify (tparms, targs, type, etype,
+ UNIFY_ALLOW_DERIVED, /*explain*/false);
+ if (err == 0)
+ try_list_ctor = false;
+ ggc_free (targs);
+ }
if (try_list_ctor || is_std_init_list (type))
args = make_tree_vector_single (init);
else
@@ -25444,11 +25470,7 @@ do_class_deduction (tree ptype, tree tmpl, tree init, int flags,
if (gtype)
{
tree guide = build_deduction_guide (gtype, outer_args, complain);
- if ((flags & LOOKUP_ONLYCONVERTING)
- && DECL_NONCONVERTING_P (STRIP_TEMPLATE (guide)))
- elided = true;
- else
- cands = lookup_add (guide, cands);
+ cands = lookup_add (guide, cands);
}
}
@@ -25459,6 +25481,12 @@ do_class_deduction (tree ptype, tree tmpl, tree init, int flags,
"user-declared constructors", type);
return error_mark_node;
}
+ else if (!cands && call == error_mark_node)
+ {
+ error ("cannot deduce template arguments of %qT, as it has no viable "
+ "deduction guides", type);
+ return error_mark_node;
+ }
if (call == error_mark_node)
{
diff --git a/gcc/cp/search.c b/gcc/cp/search.c
index cd06e529fb9..ced82da6117 100644
--- a/gcc/cp/search.c
+++ b/gcc/cp/search.c
@@ -28,6 +28,8 @@ along with GCC; see the file COPYING3. If not see
#include "intl.h"
#include "toplev.h"
#include "spellcheck-tree.h"
+#include "stringpool.h"
+#include "attribs.h"
static int is_subobject_of_p (tree, tree);
static tree dfs_lookup_base (tree, void *);
@@ -444,6 +446,10 @@ lookup_field_1 (tree type, tree name, bool want_type)
{
tree decl = field;
+ if (DECL_DECLARES_FUNCTION_P (decl))
+ /* Functions are kep separately, at the moment. */
+ continue;
+
if (GATHER_STATISTICS)
n_fields_searched++;
@@ -1526,86 +1532,67 @@ lookup_fnfields (tree xbasetype, tree name, int protect)
return rval;
}
-/* Return the index in the CLASSTYPE_METHOD_VEC for CLASS_TYPE
- corresponding to "operator TYPE ()", or -1 if there is no such
- operator. Only CLASS_TYPE itself is searched; this routine does
- not scan the base classes of CLASS_TYPE. */
+/* Return the conversion operators in CLASS_TYPE corresponding to
+ "operator TYPE ()". Only CLASS_TYPE itself is searched; this
+ routine does not scan the base classes of CLASS_TYPE. */
-static int
+static tree
lookup_conversion_operator (tree class_type, tree type)
{
- int tpl_slot = -1;
+ tree tpls = NULL_TREE;
if (TYPE_HAS_CONVERSION (class_type))
{
- int i;
- tree fn;
+ tree fns;
vec<tree, va_gc> *methods = CLASSTYPE_METHOD_VEC (class_type);
- for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
- vec_safe_iterate (methods, i, &fn); ++i)
+ for (int i = CLASSTYPE_FIRST_CONVERSION_SLOT;
+ vec_safe_iterate (methods, i, &fns); ++i)
{
/* All the conversion operators come near the beginning of
the class. Therefore, if FN is not a conversion
operator, there is no matching conversion operator in
CLASS_TYPE. */
- fn = OVL_FIRST (fn);
+ tree fn = OVL_FIRST (fns);
if (!DECL_CONV_FN_P (fn))
break;
if (TREE_CODE (fn) == TEMPLATE_DECL)
/* All the templated conversion functions are on the same
slot, so remember it. */
- tpl_slot = i;
+ tpls = fns;
else if (same_type_p (DECL_CONV_FN_TYPE (fn), type))
- return i;
+ return fns;
}
}
- return tpl_slot;
+ return tpls;
}
-/* TYPE is a class type. Return the index of the fields within
- the method vector with name NAME, or -1 if no such field exists.
- Does not lazily declare implicitly-declared member functions. */
+/* TYPE is a class type. Return the member functions in the method
+ vector with name NAME. Does not lazily declare implicitly-declared
+ member functions. */
-static int
-lookup_fnfields_idx_nolazy (tree type, tree name)
+tree
+lookup_fnfields_slot_nolazy (tree type, tree name)
{
- vec<tree, va_gc> *method_vec;
- tree fn;
- size_t i;
-
- if (!CLASS_TYPE_P (type))
- return -1;
-
- method_vec = CLASSTYPE_METHOD_VEC (type);
+ vec<tree, va_gc> *method_vec = CLASSTYPE_METHOD_VEC (type);
if (!method_vec)
- return -1;
+ return NULL_TREE;
if (GATHER_STATISTICS)
n_calls_lookup_fnfields_1++;
- /* Constructors are first... */
- if (name == ctor_identifier)
- {
- fn = CLASSTYPE_CONSTRUCTORS (type);
- return fn ? CLASSTYPE_CONSTRUCTOR_SLOT : -1;
- }
- /* and destructors are second. */
- if (name == dtor_identifier)
- {
- fn = CLASSTYPE_DESTRUCTOR (type);
- return fn ? CLASSTYPE_DESTRUCTOR_SLOT : -1;
- }
if (IDENTIFIER_CONV_OP_P (name))
return lookup_conversion_operator (type, TREE_TYPE (name));
/* Skip the conversion operators. */
+ int i;
+ tree fns;
for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
- vec_safe_iterate (method_vec, i, &fn);
+ vec_safe_iterate (method_vec, i, &fns);
++i)
- if (!DECL_CONV_FN_P (OVL_FIRST (fn)))
+ if (!DECL_CONV_FN_P (OVL_FIRST (fns)))
break;
/* If the type is complete, use binary search. */
@@ -1623,36 +1610,35 @@ lookup_fnfields_idx_nolazy (tree type, tree name)
if (GATHER_STATISTICS)
n_outer_fields_searched++;
- tree tmp = (*method_vec)[i];
- tmp = OVL_NAME (tmp);
- if (tmp > name)
+ fns = (*method_vec)[i];
+ tree fn_name = OVL_NAME (fns);
+ if (fn_name > name)
hi = i;
- else if (tmp < name)
+ else if (fn_name < name)
lo = i + 1;
else
- return i;
+ return fns;
}
}
else
- for (; vec_safe_iterate (method_vec, i, &fn); ++i)
+ for (; vec_safe_iterate (method_vec, i, &fns); ++i)
{
if (GATHER_STATISTICS)
n_outer_fields_searched++;
- if (OVL_NAME (fn) == name)
- return i;
+ if (OVL_NAME (fns) == name)
+ return fns;
}
- return -1;
+ return NULL_TREE;
}
-/* TYPE is a class type. Return the index of the fields within
- the method vector with name NAME, or -1 if no such field exists. */
+/* TYPE is a class type. Return the overloads in
+ the method vector with name NAME. Lazily create ctors etc. */
-static int
-lookup_fnfields_1 (tree type, tree name)
+tree
+lookup_fnfields_slot (tree type, tree name)
{
- if (!CLASS_TYPE_P (type))
- return -1;
+ type = complete_type (type);
if (COMPLETE_TYPE_P (type))
{
@@ -1679,30 +1665,7 @@ lookup_fnfields_1 (tree type, tree name)
}
}
- return lookup_fnfields_idx_nolazy (type, name);
-}
-
-/* TYPE is a class type. Return the field within the method vector with
- name NAME, or NULL_TREE if no such field exists. */
-
-tree
-lookup_fnfields_slot (tree type, tree name)
-{
- int ix = lookup_fnfields_1 (complete_type (type), name);
- if (ix < 0)
- return NULL_TREE;
- return (*CLASSTYPE_METHOD_VEC (type))[ix];
-}
-
-/* As above, but avoid lazily declaring functions. */
-
-tree
-lookup_fnfields_slot_nolazy (tree type, tree name)
-{
- int ix = lookup_fnfields_idx_nolazy (complete_type (type), name);
- if (ix < 0)
- return NULL_TREE;
- return (*CLASSTYPE_METHOD_VEC (type))[ix];
+ return lookup_fnfields_slot_nolazy (type, name);
}
/* Collect all the conversion operators of KLASS. */
@@ -2424,37 +2387,26 @@ look_for_overrides (tree type, tree fndecl)
tree
look_for_overrides_here (tree type, tree fndecl)
{
- int ix;
-
- /* If there are no methods in TYPE (meaning that only implicitly
- declared methods will ever be provided for TYPE), then there are
- no virtual functions. */
- if (!CLASSTYPE_METHOD_VEC (type))
- return NULL_TREE;
+ tree ovl = lookup_fnfields_slot (type, DECL_NAME (fndecl));
- if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fndecl))
- ix = CLASSTYPE_DESTRUCTOR_SLOT;
- else
- ix = lookup_fnfields_1 (type, DECL_NAME (fndecl));
- if (ix >= 0)
- for (ovl_iterator iter ((*CLASSTYPE_METHOD_VEC (type))[ix]); iter; ++iter)
- {
- tree fn = *iter;
+ for (ovl_iterator iter (ovl); iter; ++iter)
+ {
+ tree fn = *iter;
- if (!DECL_VIRTUAL_P (fn))
- /* Not a virtual. */;
- else if (DECL_CONTEXT (fn) != type)
- /* Introduced with a using declaration. */;
- else if (DECL_STATIC_FUNCTION_P (fndecl))
- {
- tree btypes = TYPE_ARG_TYPES (TREE_TYPE (fn));
- tree dtypes = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
- if (compparms (TREE_CHAIN (btypes), dtypes))
- return fn;
- }
- else if (same_signature_p (fndecl, fn))
- return fn;
- }
+ if (!DECL_VIRTUAL_P (fn))
+ /* Not a virtual. */;
+ else if (DECL_CONTEXT (fn) != type)
+ /* Introduced with a using declaration. */;
+ else if (DECL_STATIC_FUNCTION_P (fndecl))
+ {
+ tree btypes = TYPE_ARG_TYPES (TREE_TYPE (fn));
+ tree dtypes = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
+ if (compparms (TREE_CHAIN (btypes), dtypes))
+ return fn;
+ }
+ else if (same_signature_p (fndecl, fn))
+ return fn;
+ }
return NULL_TREE;
}
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index cf19e5fd96a..5401e78fbc6 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -40,7 +40,10 @@ along with GCC; see the file COPYING3. If not see
#include "tree-iterator.h"
#include "omp-general.h"
#include "convert.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "gomp-constants.h"
+#include "predict.h"
/* There routines provide a modular interface to perform many parsing
operations. They may therefore be used during actual parsing, or
@@ -630,6 +633,7 @@ finish_goto_stmt (tree destination)
check_goto (destination);
+ add_stmt (build_predict_expr (PRED_GOTO, NOT_TAKEN));
return add_stmt (build_stmt (input_location, GOTO_EXPR, destination));
}
@@ -3037,9 +3041,9 @@ finish_member_declaration (tree decl)
if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
SET_DECL_LANGUAGE (decl, lang_cplusplus);
- /* Put functions on the TYPE_METHODS list and everything else on the
- TYPE_FIELDS list. Note that these are built up in reverse order.
- We reverse them (to obtain declaration order) in finish_struct. */
+ /* Put the decl on the TYPE_FIELDS list. Note that this is built up
+ in reverse order. We reverse it (to obtain declaration order) in
+ finish_struct. */
if (DECL_DECLARES_FUNCTION_P (decl))
{
/* We also need to add this function to the
@@ -3047,8 +3051,8 @@ finish_member_declaration (tree decl)
if (add_method (current_class_type, decl, false))
{
gcc_assert (TYPE_MAIN_VARIANT (current_class_type) == current_class_type);
- DECL_CHAIN (decl) = TYPE_METHODS (current_class_type);
- TYPE_METHODS (current_class_type) = decl;
+ DECL_CHAIN (decl) = TYPE_FIELDS (current_class_type);
+ TYPE_FIELDS (current_class_type) = decl;
maybe_add_class_template_decl_list (current_class_type, decl,
/*friend_p=*/0);
@@ -5794,7 +5798,7 @@ finish_omp_declare_simd_methods (tree t)
if (processing_template_decl)
return;
- for (tree x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
+ for (tree x = TYPE_FIELDS (t); x; x = DECL_CHAIN (x))
{
if (TREE_CODE (TREE_TYPE (x)) != METHOD_TYPE)
continue;
@@ -9083,15 +9087,7 @@ classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
if (assign_p)
fns = lookup_fnfields_slot (type, cp_assignment_operator_id (NOP_EXPR));
else if (TYPE_HAS_COPY_CTOR (type))
- {
- /* If construction of the copy constructor was postponed, create
- it now. */
- if (CLASSTYPE_LAZY_COPY_CTOR (type))
- lazily_declare_fn (sfk_copy_constructor, type);
- if (CLASSTYPE_LAZY_MOVE_CTOR (type))
- lazily_declare_fn (sfk_move_constructor, type);
- fns = CLASSTYPE_CONSTRUCTORS (type);
- }
+ fns = lookup_fnfields_slot (type, ctor_identifier);
bool saw_copy = false;
for (ovl_iterator iter (fns); iter; ++iter)
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 2122450c653..8f18665da41 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see
#include "debug.h"
#include "convert.h"
#include "gimplify.h"
+#include "stringpool.h"
#include "attribs.h"
#include "flags.h"
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 316d57fb38c..a5a363bc942 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -37,6 +37,8 @@ along with GCC; see the file COPYING3. If not see
#include "c-family/c-ubsan.h"
#include "params.h"
#include "gcc-rich-location.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
static tree cp_build_addr_expr_strict (tree, tsubst_flags_t);
@@ -4048,7 +4050,7 @@ enum_cast_to_int (tree op)
/* For the c-common bits. */
tree
build_binary_op (location_t location, enum tree_code code, tree op0, tree op1,
- int /*convert_p*/)
+ bool /*convert_p*/)
{
return cp_build_binary_op (location, code, op0, op1, tf_warning_or_error);
}
@@ -5256,6 +5258,7 @@ cp_build_binary_op (location_t location,
if (sanitize_flags_p ((SANITIZE_SHIFT
| SANITIZE_DIVIDE | SANITIZE_FLOAT_DIVIDE))
+ && current_function_decl != NULL_TREE
&& !processing_template_decl
&& (doing_div_or_mod || doing_shift))
{
@@ -5486,9 +5489,9 @@ build_x_unary_op (location_t loc, enum tree_code code, cp_expr xarg,
{
if (complain & tf_error)
error (DECL_CONSTRUCTOR_P (fn)
- ? G_("taking address of constructor %qE")
- : G_("taking address of destructor %qE"),
- xarg.get_value ());
+ ? G_("taking address of constructor %qD")
+ : G_("taking address of destructor %qD"),
+ fn);
return error_mark_node;
}
}
@@ -5589,7 +5592,7 @@ cp_truthvalue_conversion (tree expr)
if (TYPE_PTR_OR_PTRMEM_P (type)
/* Avoid ICE on invalid use of non-static member function. */
|| TREE_CODE (expr) == FUNCTION_DECL)
- return build_binary_op (input_location, NE_EXPR, expr, nullptr_node, 1);
+ return build_binary_op (input_location, NE_EXPR, expr, nullptr_node, true);
else
return c_common_truthvalue_conversion (input_location, expr);
}
@@ -9153,6 +9156,7 @@ check_return_expr (tree retval, bool *no_warning)
Note that these conditions are similar to, but not as strict as,
the conditions for the named return value optimization. */
+ bool converted = false;
if ((cxx_dialect != cxx98)
&& ((VAR_P (retval) && !DECL_HAS_VALUE_EXPR_P (retval))
|| TREE_CODE (retval) == PARM_DECL)
@@ -9160,14 +9164,25 @@ check_return_expr (tree retval, bool *no_warning)
&& !TREE_STATIC (retval)
/* This is only interesting for class type. */
&& CLASS_TYPE_P (functype))
- flags = flags | LOOKUP_PREFER_RVALUE;
+ {
+ tree moved = move (retval);
+ moved = convert_for_initialization
+ (NULL_TREE, functype, moved, flags|LOOKUP_PREFER_RVALUE,
+ ICR_RETURN, NULL_TREE, 0, tf_none);
+ if (moved != error_mark_node)
+ {
+ retval = moved;
+ converted = true;
+ }
+ }
/* First convert the value to the function's return type, then
to the type of return value's location to handle the
case that functype is smaller than the valtype. */
- retval = convert_for_initialization
- (NULL_TREE, functype, retval, flags, ICR_RETURN, NULL_TREE, 0,
- tf_warning_or_error);
+ if (!converted)
+ retval = convert_for_initialization
+ (NULL_TREE, functype, retval, flags, ICR_RETURN, NULL_TREE, 0,
+ tf_warning_or_error);
retval = convert (valtype, retval);
/* If the conversion failed, treat this just like `return;'. */
diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
index 430ba30536a..06c079e41be 100644
--- a/gcc/cp/typeck2.c
+++ b/gcc/cp/typeck2.c
@@ -1182,7 +1182,7 @@ digest_init_flags (tree type, tree init, int flags, tsubst_flags_t complain)
/* Process the initializer INIT for an NSDMI DECL (a FIELD_DECL). */
tree
-digest_nsdmi_init (tree decl, tree init)
+digest_nsdmi_init (tree decl, tree init, tsubst_flags_t complain)
{
gcc_assert (TREE_CODE (decl) == FIELD_DECL);
@@ -1192,8 +1192,8 @@ digest_nsdmi_init (tree decl, tree init)
flags = LOOKUP_NORMAL;
if (BRACE_ENCLOSED_INITIALIZER_P (init)
&& CP_AGGREGATE_TYPE_P (type))
- init = reshape_init (type, init, tf_warning_or_error);
- init = digest_init_flags (type, init, flags, tf_warning_or_error);
+ init = reshape_init (type, init, complain);
+ init = digest_init_flags (type, init, flags, complain);
if (TREE_CODE (init) == TARGET_EXPR)
/* This represents the whole initialization. */
TARGET_EXPR_DIRECT_INIT_P (init) = true;
@@ -1427,7 +1427,7 @@ process_init_constructor_record (tree type, tree init,
goto restart;
}
/* C++14 aggregate NSDMI. */
- next = get_nsdmi (field, /*ctor*/false);
+ next = get_nsdmi (field, /*ctor*/false, complain);
}
else if (type_build_ctor_call (TREE_TYPE (field)))
{
@@ -1525,7 +1525,8 @@ process_init_constructor_union (tree type, tree init,
{
CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (init),
field,
- get_nsdmi (field, /*in_ctor=*/false));
+ get_nsdmi (field, /*in_ctor=*/false,
+ complain));
break;
}
}
diff --git a/gcc/dbxout.c b/gcc/dbxout.c
index 783a70bec4f..3d9268c3d1d 100644
--- a/gcc/dbxout.c
+++ b/gcc/dbxout.c
@@ -371,7 +371,7 @@ const struct gcc_debug_hooks dbx_debug_hooks =
dbxout_early_global_decl, /* early_global_decl */
dbxout_late_global_decl, /* late_global_decl */
dbxout_type_decl, /* type_decl */
- debug_nothing_tree_tree_tree_bool, /* imported_module_or_decl */
+ debug_nothing_tree_tree_tree_bool_bool,/* imported_module_or_decl */
debug_nothing_tree, /* deferred_inline_function */
debug_nothing_tree, /* outlining_inline_function */
debug_nothing_rtx_code_label, /* label */
@@ -411,7 +411,7 @@ const struct gcc_debug_hooks xcoff_debug_hooks =
dbxout_early_global_decl, /* early_global_decl */
dbxout_late_global_decl, /* late_global_decl */
dbxout_type_decl, /* type_decl */
- debug_nothing_tree_tree_tree_bool, /* imported_module_or_decl */
+ debug_nothing_tree_tree_tree_bool_bool,/* imported_module_or_decl */
debug_nothing_tree, /* deferred_inline_function */
debug_nothing_tree, /* outlining_inline_function */
debug_nothing_rtx_code_label, /* label */
@@ -1481,6 +1481,8 @@ dbxout_type_fields (tree type)
/* Omit here local type decls until we know how to support them. */
if (TREE_CODE (tem) == TYPE_DECL
|| TREE_CODE (tem) == TEMPLATE_DECL
+ /* Member functions emitted after fields. */
+ || TREE_CODE (tem) == FUNCTION_DECL
/* Omit here the nameless fields that are used to skip bits. */
|| DECL_IGNORED_P (tem)
/* Omit fields whose position or size are variable or too large to
@@ -1586,55 +1588,38 @@ dbxout_type_method_1 (tree decl)
}
}
-/* Subroutine of `dbxout_type'. Output debug info about the methods defined
- in TYPE. */
+/* Subroutine of `dbxout_type'. Output debug info about the member
+ functions defined in TYPE. */
static void
dbxout_type_methods (tree type)
{
- /* C++: put out the method names and their parameter lists */
- tree methods = TYPE_METHODS (type);
- tree fndecl;
- tree last;
-
- if (methods == NULL_TREE)
- return;
-
- if (TREE_CODE (methods) != TREE_VEC)
- fndecl = methods;
- else if (TREE_VEC_ELT (methods, 0) != NULL_TREE)
- fndecl = TREE_VEC_ELT (methods, 0);
- else
- fndecl = TREE_VEC_ELT (methods, 1);
-
- while (fndecl)
+ for (tree fndecl = TYPE_FIELDS (type); fndecl;)
{
int need_prefix = 1;
/* Group together all the methods for the same operation.
These differ in the types of the arguments. */
- for (last = NULL_TREE;
+ for (tree last = NULL_TREE;
fndecl && (last == NULL_TREE || DECL_NAME (fndecl) == DECL_NAME (last));
fndecl = DECL_CHAIN (fndecl))
/* Output the name of the field (after overloading), as
well as the name of the field before overloading, along
with its parameter list */
{
- /* Skip methods that aren't FUNCTION_DECLs. (In C++, these
- include TEMPLATE_DECLs.) The debugger doesn't know what
- to do with such entities anyhow. */
+ /* Skip non-functions. */
if (TREE_CODE (fndecl) != FUNCTION_DECL)
continue;
- CONTIN;
-
- last = fndecl;
-
/* Also ignore abstract methods; those are only interesting to
the DWARF backends. */
if (DECL_IGNORED_P (fndecl) || DECL_ABSTRACT_P (fndecl))
continue;
+ CONTIN;
+
+ last = fndecl;
+
/* Redundantly output the plain name, since that's what gdb
expects. */
if (need_prefix)
@@ -2209,10 +2194,8 @@ dbxout_type (tree type, int full)
/* Write out the field declarations. */
dbxout_type_fields (type);
- if (use_gnu_debug_info_extensions && TYPE_METHODS (type) != NULL_TREE)
- {
- dbxout_type_methods (type);
- }
+ if (use_gnu_debug_info_extensions)
+ dbxout_type_methods (type);
stabstr_C (';');
diff --git a/gcc/debug.c b/gcc/debug.c
index 860f1e312b9..d68c30ff2b9 100644
--- a/gcc/debug.c
+++ b/gcc/debug.c
@@ -47,7 +47,7 @@ const struct gcc_debug_hooks do_nothing_debug_hooks =
debug_nothing_tree, /* early_global_decl */
debug_nothing_tree, /* late_global_decl */
debug_nothing_tree_int, /* type_decl */
- debug_nothing_tree_tree_tree_bool, /* imported_module_or_decl */
+ debug_nothing_tree_tree_tree_bool_bool,/* imported_module_or_decl */
debug_nothing_tree, /* deferred_inline_function */
debug_nothing_tree, /* outlining_inline_function */
debug_nothing_rtx_code_label, /* label */
@@ -80,10 +80,11 @@ debug_nothing_tree_tree (tree t1 ATTRIBUTE_UNUSED,
}
void
-debug_nothing_tree_tree_tree_bool (tree t1 ATTRIBUTE_UNUSED,
- tree t2 ATTRIBUTE_UNUSED,
- tree t3 ATTRIBUTE_UNUSED,
- bool b1 ATTRIBUTE_UNUSED)
+debug_nothing_tree_tree_tree_bool_bool (tree t1 ATTRIBUTE_UNUSED,
+ tree t2 ATTRIBUTE_UNUSED,
+ tree t3 ATTRIBUTE_UNUSED,
+ bool b1 ATTRIBUTE_UNUSED,
+ bool b2 ATTRIBUTE_UNUSED)
{
}
diff --git a/gcc/debug.h b/gcc/debug.h
index 395365861f7..bfb72213631 100644
--- a/gcc/debug.h
+++ b/gcc/debug.h
@@ -145,7 +145,8 @@ struct gcc_debug_hooks
/* Debug information for imported modules and declarations. */
void (* imported_module_or_decl) (tree decl, tree name,
- tree context, bool child);
+ tree context, bool child,
+ bool implicit);
/* DECL is an inline function, whose body is present, but which is
not being output at this point. */
@@ -206,7 +207,8 @@ extern void debug_nothing_int_int (unsigned int, unsigned int);
extern void debug_nothing_tree (tree);
extern void debug_nothing_tree_tree (tree, tree);
extern void debug_nothing_tree_int (tree, int);
-extern void debug_nothing_tree_tree_tree_bool (tree, tree, tree, bool);
+extern void debug_nothing_tree_tree_tree_bool_bool (tree, tree, tree,
+ bool, bool);
extern bool debug_true_const_tree (const_tree);
extern void debug_nothing_rtx_insn (rtx_insn *);
extern void debug_nothing_rtx_code_label (rtx_code_label *);
diff --git a/gcc/defaults.h b/gcc/defaults.h
index 7ad92d920f8..072ef6b6d17 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -863,6 +863,15 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#endif
#endif
+/* Decide whether target supports aliases. */
+#ifndef TARGET_SUPPORTS_ALIASES
+#ifdef ASM_OUTPUT_DEF
+#define TARGET_SUPPORTS_ALIASES 1
+#else
+#define TARGET_SUPPORTS_ALIASES 0
+#endif
+#endif
+
/* Select a format to encode pointers in exception handling data. We
prefer those that result in fewer dynamic relocations. Assume no
special support here and encode direct references. */
diff --git a/gcc/diagnostic-core.h b/gcc/diagnostic-core.h
index e9f7b6784da..1fa28027b5b 100644
--- a/gcc/diagnostic-core.h
+++ b/gcc/diagnostic-core.h
@@ -93,6 +93,8 @@ extern void inform_n (location_t, int, const char *, const char *, ...)
extern void verbatim (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
extern bool emit_diagnostic (diagnostic_t, location_t, int,
const char *, ...) ATTRIBUTE_GCC_DIAG(4,5);
+extern bool emit_diagnostic_valist (diagnostic_t, location_t, int, const char *,
+ va_list *) ATTRIBUTE_GCC_DIAG (4,0);
extern bool seen_error (void);
#ifdef BUFSIZ
diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c
index bbf5f5ce7a6..a98bf4a3333 100644
--- a/gcc/diagnostic.c
+++ b/gcc/diagnostic.c
@@ -1128,6 +1128,8 @@ diagnostic_n_impl (location_t location, int opt, int n,
singular_gmsgid, plural_gmsgid, ap, kind);
}
+/* Wrapper around diagnostic_impl taking a variable argument list. */
+
bool
emit_diagnostic (diagnostic_t kind, location_t location, int opt,
const char *gmsgid, ...)
@@ -1140,6 +1142,16 @@ emit_diagnostic (diagnostic_t kind, location_t location, int opt,
return ret;
}
+/* Wrapper around diagnostic_impl taking a va_list parameter. */
+
+bool
+emit_diagnostic_valist (diagnostic_t kind, location_t location, int opt,
+ const char *gmsgid, va_list *ap)
+{
+ rich_location richloc (line_table, location);
+ return diagnostic_impl (&richloc, opt, gmsgid, ap, kind);
+}
+
/* An informative note at LOCATION. Use this for additional details on an error
message. */
void
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index b6244a09d41..b253cccfa62 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -2984,6 +2984,19 @@ asm ("");
(@pxref{Extended Asm}) in the called function, to serve as a special
side-effect.
+@item noipa
+@cindex @code{noipa} function attribute
+Disable interprocedural optimizations between the function with this
+attribute and its callers, as if the body of the function is not available
+when optimizing callers and the callers are unavailable when optimizing
+the body. This attribute implies @code{noinline}, @code{noclone} and
+@code{no_icf} attributes. However, this attribute is not equivalent
+to a combination of other attributes, because its purpose is to suppress
+existing and future optimizations employing interprocedural analysis,
+including those that do not have an attribute suitable for disabling
+them individually. This attribute is supported mainly for the purpose
+of testing the compiler.
+
@item nonnull (@var{arg-index}, @dots{})
@cindex @code{nonnull} function attribute
@cindex functions with non-null pointer arguments
@@ -3105,6 +3118,27 @@ that affect more than one function.
This attribute should be used for debugging purposes only. It is not
suitable in production code.
+@item patchable_function_entry
+@cindex @code{patchable_function_entry} function attribute
+@cindex extra NOP instructions at the function entry point
+In case the target's text segment can be made writable at run time by
+any means, padding the function entry with a number of NOPs can be
+used to provide a universal tool for instrumentation.
+
+The @code{patchable_function_entry} function attribute can be used to
+change the number of NOPs to any desired value. The two-value syntax
+is the same as for the command-line switch
+@option{-fpatchable-function-entry=N,M}, generating @var{N} NOPs, with
+the function entry point before the @var{M}th NOP instruction.
+@var{M} defaults to 0 if omitted e.g. function entry point is before
+the first NOP.
+
+If patchable function entries are enabled globally using the command-line
+option @option{-fpatchable-function-entry=N,M}, then you must disable
+instrumentation on all functions that are part of the instrumentation
+framework with the attribute @code{patchable_function_entry (0)}
+to prevent recursion.
+
@item pure
@cindex @code{pure} function attribute
@cindex functions that have no side effects
@@ -5336,6 +5370,17 @@ this function attribute to make GCC generate the ``hot-patching'' function
prologue used in Win32 API functions in Microsoft Windows XP Service Pack 2
and newer.
+@item naked
+@cindex @code{naked} function attribute, x86
+This attribute allows the compiler to construct the
+requisite function declaration, while allowing the body of the
+function to be assembly code. The specified function will not have
+prologue/epilogue sequences generated by the compiler. Only basic
+@code{asm} statements can safely be included in naked functions
+(@pxref{Basic Asm}). While using extended @code{asm} or a mixture of
+basic @code{asm} and C code may appear to work, they cannot be
+depended upon to work reliably and are not supported.
+
@item regparm (@var{number})
@cindex @code{regparm} function attribute, x86
@cindex functions that are passed arguments in registers on x86-32
@@ -12748,54 +12793,37 @@ or if not a specific built-in is implemented or not. For example, if
@code{__builtin_avr_nop} is available the macro
@code{__BUILTIN_AVR_NOP} is defined to @code{1} and undefined otherwise.
-The following built-in functions map to the respective machine
+@table @code
+
+@item void __builtin_avr_nop (void)
+@itemx void __builtin_avr_sei (void)
+@itemx void __builtin_avr_cli (void)
+@itemx void __builtin_avr_sleep (void)
+@itemx void __builtin_avr_wdr (void)
+@itemx unsigned char __builtin_avr_swap (unsigned char)
+@itemx unsigned int __builtin_avr_fmul (unsigned char, unsigned char)
+@itemx int __builtin_avr_fmuls (char, char)
+@itemx int __builtin_avr_fmulsu (char, unsigned char)
+These built-in functions map to the respective machine
instruction, i.e.@: @code{nop}, @code{sei}, @code{cli}, @code{sleep},
@code{wdr}, @code{swap}, @code{fmul}, @code{fmuls}
resp. @code{fmulsu}. The three @code{fmul*} built-ins are implemented
as library call if no hardware multiplier is available.
-@smallexample
-void __builtin_avr_nop (void)
-void __builtin_avr_sei (void)
-void __builtin_avr_cli (void)
-void __builtin_avr_sleep (void)
-void __builtin_avr_wdr (void)
-unsigned char __builtin_avr_swap (unsigned char)
-unsigned int __builtin_avr_fmul (unsigned char, unsigned char)
-int __builtin_avr_fmuls (char, char)
-int __builtin_avr_fmulsu (char, unsigned char)
-@end smallexample
-
-In order to delay execution for a specific number of cycles, GCC
-implements
-@smallexample
-void __builtin_avr_delay_cycles (unsigned long ticks)
-@end smallexample
-
-@noindent
-@code{ticks} is the number of ticks to delay execution. Note that this
+@item void __builtin_avr_delay_cycles (unsigned long ticks)
+Delay execution for @var{ticks} cycles. Note that this
built-in does not take into account the effect of interrupts that
-might increase delay time. @code{ticks} must be a compile-time
+might increase delay time. @var{ticks} must be a compile-time
integer constant; delays with a variable number of cycles are not supported.
-@smallexample
-char __builtin_avr_flash_segment (const __memx void*)
-@end smallexample
-
-@noindent
+@item char __builtin_avr_flash_segment (const __memx void*)
This built-in takes a byte address to the 24-bit
@ref{AVR Named Address Spaces,address space} @code{__memx} and returns
the number of the flash segment (the 64 KiB chunk) where the address
points to. Counting starts at @code{0}.
If the address does not point to flash memory, return @code{-1}.
-@smallexample
-unsigned char __builtin_avr_insert_bits (unsigned long map,
- unsigned char bits,
- unsigned char val)
-@end smallexample
-
-@noindent
+@item uint8_t __builtin_avr_insert_bits (uint32_t map, uint8_t bits, uint8_t val)
Insert bits from @var{bits} into @var{val} and return the resulting
value. The nibbles of @var{map} determine how the insertion is
performed: Let @var{X} be the @var{n}-th nibble of @var{map}
@@ -12840,13 +12868,29 @@ __builtin_avr_insert_bits (0xffff3210, bits, val)
__builtin_avr_insert_bits (0x01234567, bits, 0)
@end smallexample
-@smallexample
-void __builtin_avr_nops (unsigned count)
-@end smallexample
+@item void __builtin_avr_nops (unsigned count)
+Insert @var{count} @code{NOP} instructions.
+The number of instructions must be a compile-time integer constant.
+
+@end table
@noindent
-Insert @code{count} @code{NOP} instructions.
-The number of instructions must be a compile-time integer constant.
+There are many more AVR-specific built-in functions that are used to
+implement the ISO/IEC TR 18037 ``Embedded C'' fixed-point functions of
+section 7.18a.6. You don't need to use these built-ins directly.
+Instead, use the declarations as supplied by the @code{stdfix.h} header
+with GNU-C99:
+
+@smallexample
+#include <stdfix.h>
+
+// Re-interpret the bit representation of unsigned 16-bit
+// integer @var{uval} as Q-format 0.16 value.
+unsigned fract get_bits (uint_ur_t uval)
+@{
+ return urbits (uval);
+@}
+@end smallexample
@node Blackfin Built-in Functions
@subsection Blackfin Built-in Functions
@@ -15433,6 +15477,15 @@ vector bool short vec_cmpnez (vector unsigned short arg1, vector unsigned short
vector bool int vec_cmpnez (vector signed int arg1, vector signed int arg2);
vector bool int vec_cmpnez (vector unsigned int, vector unsigned int);
+vector signed char vec_cnttz (vector signed char);
+vector unsigned char vec_cnttz (vector unsigned char);
+vector signed short vec_cnttz (vector signed short);
+vector unsigned short vec_cnttz (vector unsigned short);
+vector signed int vec_cnttz (vector signed int);
+vector unsigned int vec_cnttz (vector unsigned int);
+vector signed long long vec_cnttz (vector signed long long);
+vector unsigned long long vec_cnttz (vector unsigned long long);
+
signed int vec_cntlz_lsbb (vector signed char);
signed int vec_cntlz_lsbb (vector unsigned char);
@@ -15441,6 +15494,19 @@ signed int vec_cnttz_lsbb (vector unsigned char);
vector unsigned short vec_pack_to_short_fp32 (vector float, vector float);
+vector signed char vec_xl_be (signed long long, signed char *);
+vector unsigned char vec_xl_be (signed long long, unsigned char *);
+vector signed int vec_xl_be (signed long long, signed int *);
+vector unsigned int vec_xl_be (signed long long, unsigned int *);
+vector signed __int128 vec_xl_be (signed long long, signed __int128 *);
+vector unsigned __int128 vec_xl_be (signed long long, unsigned __int128 *);
+vector signed long long vec_xl_be (signed long long, signed long long *);
+vector unsigned long long vec_xl_be (signed long long, unsigned long long *);
+vector signed short vec_xl_be (signed long long, signed short *);
+vector unsigned short vec_xl_be (signed long long, unsigned short *);
+vector double vec_xl_be (signed long long, double *);
+vector float vec_xl_be (signed long long, float *);
+
vector signed char vec_xl_len (signed char *addr, size_t len);
vector unsigned char vec_xl_len (unsigned char *addr, size_t len);
vector signed int vec_xl_len (signed int *addr, size_t len);
@@ -18307,6 +18373,9 @@ vector bool short vec_cmpne (vector bool short, vector bool short);
vector bool int vec_cmpne (vector bool int, vector bool int);
vector bool long long vec_cmpne (vector bool long long, vector bool long long);
+vector float vec_extract_fp32_from_shorth (vector unsigned short);
+vector float vec_extract_fp32_from_shortl (vector unsigned short);
+
vector long long vec_vctz (vector long long);
vector unsigned long long vec_vctz (vector unsigned long long);
vector int vec_vctz (vector int);
diff --git a/gcc/doc/generic.texi b/gcc/doc/generic.texi
index 858521688b4..874d46440f4 100644
--- a/gcc/doc/generic.texi
+++ b/gcc/doc/generic.texi
@@ -2820,7 +2820,6 @@ This function cannot be used with namespaces that have
@findex BINFO_TYPE
@findex TYPE_FIELDS
@findex TYPE_VFIELD
-@findex TYPE_METHODS
Besides namespaces, the other high-level scoping construct in C++ is the
class. (Throughout this manual the term @dfn{class} is used to mean the
@@ -2837,7 +2836,7 @@ macro to discern whether or not a particular type is a @code{class} as
opposed to a @code{struct}. This macro will be true only for classes
declared with the @code{class} tag.
-Almost all non-function members are available on the @code{TYPE_FIELDS}
+Almost all members are available on the @code{TYPE_FIELDS}
list. Given one member, the next can be found by following the
@code{TREE_CHAIN}. You should not depend in any way on the order in
which fields appear on this list. All nodes on this list will be
@@ -2849,7 +2848,11 @@ list, if the enumeration type was declared in the class. (Of course,
the @code{TYPE_DECL} for the enumeration type will appear here as well.)
There are no entries for base classes on this list. In particular,
there is no @code{FIELD_DECL} for the ``base-class portion'' of an
-object.
+object. If a function member is overloaded, each of the overloaded
+functions appears; no @code{OVERLOAD} nodes appear on the @code{TYPE_FIELDS}
+list. Implicitly declared functions (including default constructors,
+copy constructors, assignment operators, and destructors) will appear on
+this list as well.
The @code{TYPE_VFIELD} is a compiler-generated field used to point to
virtual function tables. It may or may not appear on the
@@ -2857,14 +2860,6 @@ virtual function tables. It may or may not appear on the
@code{TYPE_VFIELD} just like all the entries on the @code{TYPE_FIELDS}
list.
-The function members are available on the @code{TYPE_METHODS} list.
-Again, subsequent members are found by following the @code{TREE_CHAIN}
-field. If a function is overloaded, each of the overloaded functions
-appears; no @code{OVERLOAD} nodes appear on the @code{TYPE_METHODS}
-list. Implicitly declared functions (including default constructors,
-copy constructors, assignment operators, and destructors) will appear on
-this list as well.
-
Every class has an associated @dfn{binfo}, which can be obtained with
@code{TYPE_BINFO}. Binfos are used to represent base-classes. The
binfo given by @code{TYPE_BINFO} is the degenerate case, whereby every
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index dfde403cbf2..ec29f1d629e 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -1045,14 +1045,10 @@ See RS/6000 and PowerPC Options.
-mquad-memory -mno-quad-memory @gol
-mquad-memory-atomic -mno-quad-memory-atomic @gol
-mcompat-align-parm -mno-compat-align-parm @gol
--mupper-regs-df -mno-upper-regs-df -mupper-regs-sf -mno-upper-regs-sf @gol
--mupper-regs-di -mno-upper-regs-di @gol
--mupper-regs -mno-upper-regs @gol
-mfloat128 -mno-float128 -mfloat128-hardware -mno-float128-hardware @gol
-mgnu-attribute -mno-gnu-attribute @gol
-mstack-protector-guard=@var{guard} -mstack-protector-guard-reg=@var{reg} @gol
--mstack-protector-guard-offset=@var{offset} @gol
--mlra -mno-lra}
+-mstack-protector-guard-offset=@var{offset}}
@emph{RX Options}
@gccoptlist{-m64bit-doubles -m32bit-doubles -fpu -nofpu@gol
@@ -1127,7 +1123,7 @@ See RS/6000 and PowerPC Options.
-mv8plus -mno-v8plus -mvis -mno-vis @gol
-mvis2 -mno-vis2 -mvis3 -mno-vis3 @gol
-mvis4 -mno-vis4 -mvis4b -mno-vis4b @gol
--mcbcond -mno-cbcond -mfmaf -mno-fmaf @gol
+-mcbcond -mno-cbcond -mfmaf -mno-fmaf -mfsmuld -mno-fsmuld @gol
-mpopc -mno-popc -msubxc -mno-subxc @gol
-mfix-at697f -mfix-ut699 -mfix-ut700 -mfix-gr712rc @gol
-mlra -mno-lra}
@@ -1219,7 +1215,10 @@ See RS/6000 and PowerPC Options.
-msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv @gol
-mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol
-malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol
--mmitigate-rop -mgeneral-regs-only -mcall-ms2sysv-xlogues}
+-mstack-protector-guard-reg=@var{reg} @gol
+-mstack-protector-guard-offset=@var{offset} @gol
+-mstack-protector-guard-symbol=@var{symbol} -mmitigate-rop @gol
+-mgeneral-regs-only -mcall-ms2sysv-xlogues}
@emph{x86 Windows Options}
@gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol
@@ -7252,13 +7251,20 @@ invoking @option{-O2} on programs that use computed gotos.
@item -O3
@opindex O3
Optimize yet more. @option{-O3} turns on all optimizations specified
-by @option{-O2} and also turns on the @option{-finline-functions},
-@option{-funswitch-loops}, @option{-fpredictive-commoning},
-@option{-fgcse-after-reload}, @option{-ftree-loop-vectorize},
-@option{-ftree-loop-distribute-patterns}, @option{-fsplit-paths}
-@option{-ftree-slp-vectorize}, @option{-fvect-cost-model},
-@option{-ftree-partial-pre}, @option{-fpeel-loops}
-and @option{-fipa-cp-clone} options.
+by @option{-O2} and also turns on the following optimization flags:
+@gccoptlist{-finline-functions @gol
+-funswitch-loops @gol
+-fpredictive-commoning @gol
+-fgcse-after-reload @gol
+-ftree-loop-vectorize @gol
+-ftree-loop-distribution @gol
+-ftree-loop-distribute-patterns @gol
+-fsplit-paths @gol
+-ftree-slp-vectorize @gol
+-fvect-cost-model @gol
+-ftree-partial-pre @gol
+-fpeel-loops @gol
+-fipa-cp-clone}
@item -O0
@opindex O0
@@ -7282,7 +7288,8 @@ Disregard strict standards compliance. @option{-Ofast} enables all
@option{-O3} optimizations. It also enables optimizations that are not
valid for all standard-compliant programs.
It turns on @option{-ffast-math} and the Fortran-specific
-@option{-fno-protect-parens} and @option{-fstack-arrays}.
+@option{-fstack-arrays}, unless @option{-fmax-stack-var-size} is
+specified, and @option{-fno-protect-parens}.
@item -Og
@opindex Og
@@ -7360,6 +7367,10 @@ size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86 targets is
@option{-fomit-frame-pointer}. You can configure GCC with the
@option{--enable-frame-pointer} configure option to change the default.
+Note that @option{-fno-omit-frame-pointer} doesn't force a new stack
+frame for all functions if it isn't otherwise needed, and hence doesn't
+guarantee a new frame pointer for all functions.
+
Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
@item -foptimize-sibling-calls
@@ -11522,6 +11533,34 @@ of the function name, it is considered to be a match. For C99 and C++
extended identifiers, the function name must be given in UTF-8, not
using universal character names.
+@item -fpatchable-function-entry=@var{N}[,@var{M}]
+@opindex fpatchable-function-entry
+Generate @var{N} NOPs right at the beginning
+of each function, with the function entry point before the @var{M}th NOP.
+If @var{M} is omitted, it defaults to @code{0} so the
+function entry points to the address just at the first NOP.
+The NOP instructions reserve extra space which can be used to patch in
+any desired instrumentation at run time, provided that the code segment
+is writable. The amount of space is controllable indirectly via
+the number of NOPs; the NOP instruction used corresponds to the instruction
+emitted by the internal GCC back-end interface @code{gen_nop}. This behavior
+is target-specific and may also depend on the architecture variant and/or
+other compilation options.
+
+For run-time identification, the starting addresses of these areas,
+which correspond to their respective function entries minus @var{M},
+are additionally collected in the @code{__patchable_function_entries}
+section of the resulting binary.
+
+Note that the value of @code{__attribute__ ((patchable_function_entry
+(N,M)))} takes precedence over command-line option
+@option{-fpatchable-function-entry=N,M}. This can be used to increase
+the area size or to remove it completely on a single function.
+If @code{N=0}, no pad location is recorded.
+
+The NOP instructions are inserted at---and maybe before, depending on
+@var{M}---the function entry address, even before the prologue.
+
@end table
@@ -14084,7 +14123,7 @@ support for the ARMv8.2-A architecture extensions.
The value @samp{armv8.1-a} implies @samp{armv8-a} and enables compiler
support for the ARMv8.1-A architecture extension. In particular, it
-enables the @samp{+crc} and @samp{+lse} features.
+enables the @samp{+crc}, @samp{+lse}, and @samp{+rdma} features.
The value @samp{native} is available on native AArch64 GNU/Linux and
causes the compiler to pick the architecture of the host system. This
@@ -14202,6 +14241,9 @@ instructions. This is on by default for all possible values for options
@item lse
Enable Large System Extension instructions. This is on by default for
@option{-march=armv8.1-a}.
+@item rdma
+Enable Round Double Multiply Accumulate instructions. This is on by default
+for @option{-march=armv8.1-a}.
@item fp16
Enable FP16 extension. This also enables floating-point instructions.
@item rcpc
@@ -15711,6 +15753,8 @@ incompatible. Code compiled with one value cannot necessarily expect to
work with code or libraries compiled with another value, if they exchange
information using structures or unions.
+This option is deprecated.
+
@item -mabort-on-noreturn
@opindex mabort-on-noreturn
Generate a call to the function @code{abort} at the end of a
@@ -21811,11 +21855,6 @@ This switch enables or disables the generation of ISEL instructions.
This switch has been deprecated. Use @option{-misel} and
@option{-mno-isel} instead.
-@item -mlra
-@opindex mlra
-Enable Local Register Allocation. By default the port uses LRA.
-(i.e. @option{-mno-lra}).
-
@item -mspe
@itemx -mno-spe
@opindex mspe
@@ -21899,50 +21938,6 @@ Generate code that uses (does not use) the atomic quad word memory
instructions. The @option{-mquad-memory-atomic} option requires use of
64-bit mode.
-@item -mupper-regs-di
-@itemx -mno-upper-regs-di
-@opindex mupper-regs-di
-@opindex mno-upper-regs-di
-Generate code that uses (does not use) the scalar instructions that
-target all 64 registers in the vector/scalar floating point register
-set that were added in version 2.06 of the PowerPC ISA when processing
-integers. @option{-mupper-regs-di} is turned on by default if you use
-any of the @option{-mcpu=power7}, @option{-mcpu=power8},
-@option{-mcpu=power9}, or @option{-mvsx} options.
-
-@item -mupper-regs-df
-@itemx -mno-upper-regs-df
-@opindex mupper-regs-df
-@opindex mno-upper-regs-df
-Generate code that uses (does not use) the scalar double precision
-instructions that target all 64 registers in the vector/scalar
-floating point register set that were added in version 2.06 of the
-PowerPC ISA. @option{-mupper-regs-df} is turned on by default if you
-use any of the @option{-mcpu=power7}, @option{-mcpu=power8},
-@option{-mcpu=power9}, or @option{-mvsx} options.
-
-@item -mupper-regs-sf
-@itemx -mno-upper-regs-sf
-@opindex mupper-regs-sf
-@opindex mno-upper-regs-sf
-Generate code that uses (does not use) the scalar single precision
-instructions that target all 64 registers in the vector/scalar
-floating point register set that were added in version 2.07 of the
-PowerPC ISA. @option{-mupper-regs-sf} is turned on by default if you
-use either of the @option{-mcpu=power8}, @option{-mpower8-vector}, or
-@option{-mcpu=power9} options.
-
-@item -mupper-regs
-@itemx -mno-upper-regs
-@opindex mupper-regs
-@opindex mno-upper-regs
-Generate code that uses (does not use) the scalar
-instructions that target all 64 registers in the vector/scalar
-floating point register set, depending on the model of the machine.
-
-If the @option{-mno-upper-regs} option is used, it turns off both
-@option{-mupper-regs-sf} and @option{-mupper-regs-df} options.
-
@item -mfloat128
@itemx -mno-float128
@opindex mfloat128
@@ -22763,9 +22758,11 @@ The @option{-mno-compat-align-parm} option is the default.
@item -mstack-protector-guard=@var{guard}
@itemx -mstack-protector-guard-reg=@var{reg}
@itemx -mstack-protector-guard-offset=@var{offset}
+@itemx -mstack-protector-guard-symbol=@var{symbol}
@opindex mstack-protector-guard
@opindex mstack-protector-guard-reg
@opindex mstack-protector-guard-offset
+@opindex mstack-protector-guard-symbol
Generate stack protection code using canary at @var{guard}. Supported
locations are @samp{global} for global canary or @samp{tls} for per-thread
canary in the TLS block (the default with GNU libc version 2.4 or later).
@@ -22775,7 +22772,8 @@ With the latter choice the options
@option{-mstack-protector-guard-offset=@var{offset}} furthermore specify
which register to use as base register for reading the canary, and from what
offset from that base register. The default for those is as specified in the
-relevant ABI.
+relevant ABI. @option{-mstack-protector-guard-symbol=@var{symbol}} overrides
+the offset with a symbol reference to a canary in the TLS block.
@end table
@node RX Options
@@ -24083,6 +24081,15 @@ Fused Multiply-Add Floating-point instructions. The default is @option{-mfmaf}
when targeting a CPU that supports such instructions, such as Niagara-3 and
later.
+@item -mfsmuld
+@itemx -mno-fsmuld
+@opindex mfsmuld
+@opindex mno-fsmuld
+With @option{-mfsmuld}, GCC generates code that takes advantage of the
+Floating-point Multiply Single to Double (FsMULd) instruction. The default is
+@option{-mfsmuld} when targeting a CPU supporting the architecture versions V8
+or V9 with FPU except @option{-mcpu=leon}.
+
@item -mpopc
@itemx -mno-popc
@opindex mpopc
@@ -26150,12 +26157,23 @@ to 255, 8-bit unsigned integer divide is used instead of
Split 32-byte AVX unaligned load and store.
@item -mstack-protector-guard=@var{guard}
-@opindex mstack-protector-guard=@var{guard}
+@itemx -mstack-protector-guard-reg=@var{reg}
+@itemx -mstack-protector-guard-offset=@var{offset}
+@opindex mstack-protector-guard
+@opindex mstack-protector-guard-reg
+@opindex mstack-protector-guard-offset
Generate stack protection code using canary at @var{guard}. Supported
locations are @samp{global} for global canary or @samp{tls} for per-thread
canary in the TLS block (the default). This option has effect only when
@option{-fstack-protector} or @option{-fstack-protector-all} is specified.
+With the latter choice the options
+@option{-mstack-protector-guard-reg=@var{reg}} and
+@option{-mstack-protector-guard-offset=@var{offset}} furthermore specify
+which segment register (@code{%fs} or @code{%gs}) to use as base register
+for reading the canary, and from what offset from that base register.
+The default for those is as specified in the relevant ABI.
+
@item -mmitigate-rop
@opindex mmitigate-rop
Try to avoid generating code sequences that contain unintended return
diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi
index 5a00a2c45c7..ea959208c98 100644
--- a/gcc/doc/md.texi
+++ b/gcc/doc/md.texi
@@ -4871,15 +4871,22 @@ This pattern is not allowed to @code{FAIL}.
Set given field in the vector value. Operand 0 is the vector to modify,
operand 1 is new value of field and operand 2 specify the field index.
-@cindex @code{vec_extract@var{m}} instruction pattern
-@item @samp{vec_extract@var{m}}
+@cindex @code{vec_extract@var{m}@var{n}} instruction pattern
+@item @samp{vec_extract@var{m}@var{n}}
Extract given field from the vector value. Operand 1 is the vector, operand 2
-specify field index and operand 0 place to store value into.
-
-@cindex @code{vec_init@var{m}} instruction pattern
-@item @samp{vec_init@var{m}}
+specify field index and operand 0 place to store value into. The
+@var{n} mode is the mode of the field or vector of fields that should be
+extracted, should be either element mode of the vector mode @var{m}, or
+a vector mode with the same element mode and smaller number of elements.
+If @var{n} is a vector mode, the index is counted in units of that mode.
+
+@cindex @code{vec_init@var{m}@var{n}} instruction pattern
+@item @samp{vec_init@var{m}@var{n}}
Initialize the vector to given values. Operand 0 is the vector to initialize
-and operand 1 is parallel containing values for individual fields.
+and operand 1 is parallel containing values for individual fields. The
+@var{n} mode is the mode of the elements, should be either element mode of
+the vector mode @var{m}, or a vector mode with the same element mode and
+smaller number of elements.
@cindex @code{vec_cmp@var{m}@var{n}} instruction pattern
@item @samp{vec_cmp@var{m}@var{n}}
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 795e49246af..23e85c7afea 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -4573,6 +4573,15 @@ will select the smallest suitable mode.
This section describes the macros that output function entry
(@dfn{prologue}) and exit (@dfn{epilogue}) code.
+@deftypefn {Target Hook} void TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY (FILE *@var{file}, unsigned HOST_WIDE_INT @var{patch_area_size}, bool @var{record_p})
+Generate a patchable area at the function start, consisting of
+@var{patch_area_size} NOP instructions. If the target supports named
+sections and if @var{record_p} is true, insert a pointer to the current
+location in the table of patchable functions. The default implementation
+of the hook places the table of pointers in the special section named
+@code{__patchable_function_entries}.
+@end deftypefn
+
@deftypefn {Target Hook} void TARGET_ASM_FUNCTION_PROLOGUE (FILE *@var{file}, HOST_WIDE_INT @var{size})
If defined, a function that outputs the assembler code for entry to a
function. The prologue is responsible for setting up the stack frame,
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index 98f2e6bce5f..6df08a2c477 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -3650,6 +3650,8 @@ will select the smallest suitable mode.
This section describes the macros that output function entry
(@dfn{prologue}) and exit (@dfn{epilogue}) code.
+@hook TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY
+
@hook TARGET_ASM_FUNCTION_PROLOGUE
@hook TARGET_ASM_FUNCTION_END_PROLOGUE
diff --git a/gcc/domwalk.c b/gcc/domwalk.c
index a0daae6b2d8..ff6604e5686 100644
--- a/gcc/domwalk.c
+++ b/gcc/domwalk.c
@@ -128,19 +128,45 @@ along with GCC; see the file COPYING3. If not see
which is currently an abstraction over walking tree statements. Thus
the dominator walker is currently only useful for trees. */
+/* Reverse postorder index of each basic block. */
static int *bb_postorder;
static int
cmp_bb_postorder (const void *a, const void *b)
{
- basic_block bb1 = *(basic_block *)const_cast<void *>(a);
- basic_block bb2 = *(basic_block *)const_cast<void *>(b);
- if (bb1->index == bb2->index)
- return 0;
+ basic_block bb1 = *(const basic_block *)(a);
+ basic_block bb2 = *(const basic_block *)(b);
/* Place higher completion number first (pop off lower number first). */
- if (bb_postorder[bb1->index] > bb_postorder[bb2->index])
- return -1;
- return 1;
+ return bb_postorder[bb2->index] - bb_postorder[bb1->index];
+}
+
+/* Permute array BBS of N basic blocks in postorder,
+ i.e. by descending number in BB_POSTORDER array. */
+
+static void
+sort_bbs_postorder (basic_block *bbs, int n)
+{
+ if (__builtin_expect (n == 2, true))
+ {
+ basic_block bb0 = bbs[0], bb1 = bbs[1];
+ if (bb_postorder[bb0->index] < bb_postorder[bb1->index])
+ bbs[0] = bb1, bbs[1] = bb0;
+ }
+ else if (__builtin_expect (n == 3, true))
+ {
+ basic_block bb0 = bbs[0], bb1 = bbs[1], bb2 = bbs[2];
+ if (bb_postorder[bb0->index] < bb_postorder[bb1->index])
+ std::swap (bb0, bb1);
+ if (bb_postorder[bb1->index] < bb_postorder[bb2->index])
+ {
+ std::swap (bb1, bb2);
+ if (bb_postorder[bb0->index] < bb_postorder[bb1->index])
+ std::swap (bb0, bb1);
+ }
+ bbs[0] = bb0, bbs[1] = bb1, bbs[2] = bb2;
+ }
+ else
+ qsort (bbs, n, sizeof *bbs, cmp_bb_postorder);
}
/* Constructor for a dom walker.
@@ -284,16 +310,8 @@ dom_walker::walk (basic_block bb)
for (dest = first_dom_son (m_dom_direction, bb);
dest; dest = next_dom_son (m_dom_direction, dest))
worklist[sp++] = dest;
- if (m_dom_direction == CDI_DOMINATORS)
- switch (sp - saved_sp)
- {
- case 0:
- case 1:
- break;
- default:
- qsort (&worklist[saved_sp], sp - saved_sp,
- sizeof (basic_block), cmp_bb_postorder);
- }
+ if (sp - saved_sp > 1 && m_dom_direction == CDI_DOMINATORS)
+ sort_bbs_postorder (&worklist[saved_sp], sp - saved_sp);
}
/* NULL is used to mark pop operations in the recursion stack. */
while (sp > 0 && !worklist[sp - 1])
diff --git a/gcc/dwarf2asm.c b/gcc/dwarf2asm.c
index 3f420405038..8e3e86f224c 100644
--- a/gcc/dwarf2asm.c
+++ b/gcc/dwarf2asm.c
@@ -345,7 +345,9 @@ dw2_asm_output_nstring (const char *str, size_t orig_len,
for (i = 0; i < len; i++)
{
int c = str[i];
- if (c == '\"' || c == '\\')
+ if (c == '\"')
+ fputc (XCOFF_DEBUGGING_INFO ? '\"' : '\\', asm_out_file);
+ else if (c == '\\')
fputc ('\\', asm_out_file);
if (ISPRINT (c))
fputc (c, asm_out_file);
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 72d2c588c86..917ab9fa58a 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -92,6 +92,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-dfa.h"
#include "gdb/gdb-index.h"
#include "rtl-iter.h"
+#include "stringpool.h"
+#include "attribs.h"
static void dwarf2out_source_line (unsigned int, unsigned int, const char *,
int, bool);
@@ -2680,7 +2682,7 @@ static bool dwarf2out_ignore_block (const_tree);
static void dwarf2out_early_global_decl (tree);
static void dwarf2out_late_global_decl (tree);
static void dwarf2out_type_decl (tree, int);
-static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
+static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool, bool);
static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
dw_die_ref);
static void dwarf2out_abstract_function (tree);
@@ -2764,7 +2766,7 @@ const struct gcc_debug_hooks dwarf2_lineno_debug_hooks =
debug_nothing_tree, /* early_global_decl */
debug_nothing_tree, /* late_global_decl */
debug_nothing_tree_int, /* type_decl */
- debug_nothing_tree_tree_tree_bool, /* imported_module_or_decl */
+ debug_nothing_tree_tree_tree_bool_bool,/* imported_module_or_decl */
debug_nothing_tree, /* deferred_inline_function */
debug_nothing_tree, /* outlining_inline_function */
debug_nothing_rtx_code_label, /* label */
@@ -11697,7 +11699,7 @@ output_file_names (void)
output_line_string (str_form, filename0, "File Entry", 0);
/* Include directory index. */
- if (dwarf_version >= 5 && idx_form != DW_FORM_udata)
+ if (idx_form != DW_FORM_udata)
dw2_asm_output_data (idx_form == DW_FORM_data1 ? 1 : 2,
0, NULL);
else
@@ -12504,6 +12506,15 @@ modified_type_die (tree type, int cv_quals, bool reverse,
if (qualified_type == dtype)
{
+ tree origin = decl_ultimate_origin (name);
+
+ /* Typedef variants that have an abstract origin don't get their own
+ type DIE (see gen_typedef_die), so fall back on the ultimate
+ abstract origin instead. */
+ if (origin != NULL)
+ return modified_type_die (TREE_TYPE (origin), cv_quals, reverse,
+ context_die);
+
/* For a named type, use the typedef. */
gen_type_die (qualified_type, context_die);
return lookup_type_die (qualified_type);
@@ -24032,7 +24043,8 @@ gen_member_die (tree type, dw_die_ref context_die)
{
tree member;
tree binfo = TYPE_BINFO (type);
- dw_die_ref child;
+
+ gcc_assert (TYPE_MAIN_VARIANT (type) == type);
/* If this is not an incomplete type, output descriptions of each of its
members. Note that as we output the DIEs necessary to represent the
@@ -24069,13 +24081,16 @@ gen_member_die (tree type, dw_die_ref context_die)
&& (lang_hooks.decls.decl_dwarf_attribute (member, DW_AT_inline)
!= -1));
+ /* Ignore clones. */
+ if (DECL_ABSTRACT_ORIGIN (member))
+ continue;
+
/* If we thought we were generating minimal debug info for TYPE
and then changed our minds, some of the member declarations
may have already been defined. Don't define them again, but
do put them in the right order. */
- child = lookup_decl_die (member);
- if (child)
+ if (dw_die_ref child = lookup_decl_die (member))
{
/* Handle inline static data members, which only have in-class
declarations. */
@@ -24103,6 +24118,7 @@ gen_member_die (tree type, dw_die_ref context_die)
static_inline_p = false;
}
}
+
if (child->die_tag == DW_TAG_variable
&& child->die_parent == comp_unit_die ()
&& ref == NULL)
@@ -24141,23 +24157,6 @@ gen_member_die (tree type, dw_die_ref context_die)
DECL_EXTERNAL (member) = old_extern;
}
}
-
- /* We do not keep type methods in type variants. */
- gcc_assert (TYPE_MAIN_VARIANT (type) == type);
- /* Now output info about the function members (if any). */
- if (TYPE_METHODS (type) != error_mark_node)
- for (member = TYPE_METHODS (type); member; member = DECL_CHAIN (member))
- {
- /* Don't include clones in the member list. */
- if (DECL_ABSTRACT_ORIGIN (member))
- continue;
-
- child = lookup_decl_die (member);
- if (child)
- splice_child_die (context_die, child);
- else
- gen_decl_die (member, NULL, NULL, context_die);
- }
}
/* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG
@@ -24306,7 +24305,7 @@ static void
gen_typedef_die (tree decl, dw_die_ref context_die)
{
dw_die_ref type_die;
- tree origin;
+ tree type;
if (TREE_ASM_WRITTEN (decl))
{
@@ -24315,75 +24314,71 @@ gen_typedef_die (tree decl, dw_die_ref context_die)
return;
}
+ /* As we avoid creating DIEs for local typedefs (see decl_ultimate_origin
+ checks in process_scope_var and modified_type_die), this should be called
+ only for original types. */
+ gcc_assert (decl_ultimate_origin (decl) == NULL);
+
TREE_ASM_WRITTEN (decl) = 1;
type_die = new_die (DW_TAG_typedef, context_die, decl);
- origin = decl_ultimate_origin (decl);
- if (origin != NULL)
- add_abstract_origin_attribute (type_die, origin);
- else
+
+ add_name_and_src_coords_attributes (type_die, decl);
+ if (DECL_ORIGINAL_TYPE (decl))
{
- tree type = TREE_TYPE (decl);
+ type = DECL_ORIGINAL_TYPE (decl);
+ if (type == error_mark_node)
+ return;
+ gcc_assert (type != TREE_TYPE (decl));
+ equate_type_number_to_die (TREE_TYPE (decl), type_die);
+ }
+ else
+ {
+ type = TREE_TYPE (decl);
if (type == error_mark_node)
return;
- add_name_and_src_coords_attributes (type_die, decl);
- if (DECL_ORIGINAL_TYPE (decl))
+ if (is_naming_typedef_decl (TYPE_NAME (type)))
{
- type = DECL_ORIGINAL_TYPE (decl);
+ /* Here, we are in the case of decl being a typedef naming
+ an anonymous type, e.g:
+ typedef struct {...} foo;
+ In that case TREE_TYPE (decl) is not a typedef variant
+ type and TYPE_NAME of the anonymous type is set to the
+ TYPE_DECL of the typedef. This construct is emitted by
+ the C++ FE.
- if (type == error_mark_node)
- return;
+ TYPE is the anonymous struct named by the typedef
+ DECL. As we need the DW_AT_type attribute of the
+ DW_TAG_typedef to point to the DIE of TYPE, let's
+ generate that DIE right away. add_type_attribute
+ called below will then pick (via lookup_type_die) that
+ anonymous struct DIE. */
+ if (!TREE_ASM_WRITTEN (type))
+ gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
- gcc_assert (type != TREE_TYPE (decl));
- equate_type_number_to_die (TREE_TYPE (decl), type_die);
- }
- else
- {
- if (is_naming_typedef_decl (TYPE_NAME (type)))
- {
- /* Here, we are in the case of decl being a typedef naming
- an anonymous type, e.g:
- typedef struct {...} foo;
- In that case TREE_TYPE (decl) is not a typedef variant
- type and TYPE_NAME of the anonymous type is set to the
- TYPE_DECL of the typedef. This construct is emitted by
- the C++ FE.
-
- TYPE is the anonymous struct named by the typedef
- DECL. As we need the DW_AT_type attribute of the
- DW_TAG_typedef to point to the DIE of TYPE, let's
- generate that DIE right away. add_type_attribute
- called below will then pick (via lookup_type_die) that
- anonymous struct DIE. */
- if (!TREE_ASM_WRITTEN (type))
- gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
-
- /* This is a GNU Extension. We are adding a
- DW_AT_linkage_name attribute to the DIE of the
- anonymous struct TYPE. The value of that attribute
- is the name of the typedef decl naming the anonymous
- struct. This greatly eases the work of consumers of
- this debug info. */
- add_linkage_name_raw (lookup_type_die (type), decl);
- }
+ /* This is a GNU Extension. We are adding a
+ DW_AT_linkage_name attribute to the DIE of the
+ anonymous struct TYPE. The value of that attribute
+ is the name of the typedef decl naming the anonymous
+ struct. This greatly eases the work of consumers of
+ this debug info. */
+ add_linkage_name_raw (lookup_type_die (type), decl);
}
+ }
- add_type_attribute (type_die, type, decl_quals (decl), false,
- context_die);
-
- if (is_naming_typedef_decl (decl))
- /* We want that all subsequent calls to lookup_type_die with
- TYPE in argument yield the DW_TAG_typedef we have just
- created. */
- equate_type_number_to_die (type, type_die);
+ add_type_attribute (type_die, type, decl_quals (decl), false,
+ context_die);
- type = TREE_TYPE (decl);
+ if (is_naming_typedef_decl (decl))
+ /* We want that all subsequent calls to lookup_type_die with
+ TYPE in argument yield the DW_TAG_typedef we have just
+ created. */
+ equate_type_number_to_die (type, type_die);
- add_alignment_attribute (type_die, type);
+ add_alignment_attribute (type_die, TREE_TYPE (decl));
- add_accessibility_attribute (type_die, decl);
- }
+ add_accessibility_attribute (type_die, decl);
if (DECL_ABSTRACT_P (decl))
equate_decl_number_to_die (decl, type_die);
@@ -24495,15 +24490,23 @@ gen_type_die_with_usage (tree type, dw_die_ref context_die,
if (TREE_ASM_WRITTEN (type))
return;
+ tree name = TYPE_NAME (type);
+ tree origin = decl_ultimate_origin (name);
+ if (origin != NULL)
+ {
+ gen_decl_die (origin, NULL, NULL, context_die);
+ return;
+ }
+
/* Prevent broken recursion; we can't hand off to the same type. */
- gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
+ gcc_assert (DECL_ORIGINAL_TYPE (name) != type);
/* Give typedefs the right scope. */
context_die = scope_die_for (type, context_die);
TREE_ASM_WRITTEN (type) = 1;
- gen_decl_die (TYPE_NAME (type), NULL, NULL, context_die);
+ gen_decl_die (name, NULL, NULL, context_die);
return;
}
@@ -24822,6 +24825,22 @@ process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
else
die = NULL;
+ /* Avoid creating DIEs for local typedefs and concrete static variables that
+ will only be pruned later. */
+ if ((origin || decl_ultimate_origin (decl))
+ && (TREE_CODE (decl_or_origin) == TYPE_DECL
+ || (VAR_P (decl_or_origin) && TREE_STATIC (decl_or_origin))))
+ {
+ origin = decl_ultimate_origin (decl_or_origin);
+ if (decl && VAR_P (decl) && die != NULL)
+ {
+ die = lookup_decl_die (origin);
+ if (die != NULL)
+ equate_decl_number_to_die (decl, die);
+ }
+ return;
+ }
+
if (die != NULL && die->die_parent == NULL)
add_child_die (context_die, die);
else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
@@ -25178,6 +25197,11 @@ gen_namespace_die (tree decl, dw_die_ref context_die)
add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
equate_decl_number_to_die (decl, namespace_die);
}
+ if ((dwarf_version >= 5 || !dwarf_strict)
+ && lang_hooks.decls.decl_dwarf_attribute (decl,
+ DW_AT_export_symbols) == 1)
+ add_AT_flag (namespace_die, DW_AT_export_symbols, 1);
+
/* Bypass dwarf2_name's check for DECL_NAMELESS. */
if (want_pubnames ())
add_pubname_string (lang_hooks.dwarf_name (decl, 1), namespace_die);
@@ -25591,11 +25615,13 @@ dwarf2out_imported_module_or_decl_1 (tree decl,
/* Output debug information for imported module or decl DECL.
NAME is non-NULL name in context if the decl has been renamed.
CHILD is true if decl is one of the renamed decls as part of
- importing whole module. */
+ importing whole module.
+ IMPLICIT is set if this hook is called for an implicit import
+ such as inline namespace. */
static void
dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
- bool child)
+ bool child, bool implicit)
{
/* dw_die_ref at_import_die; */
dw_die_ref scope_die;
@@ -25605,6 +25631,16 @@ dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
gcc_assert (decl);
+ /* For DWARF5, just DW_AT_export_symbols on the DW_TAG_namespace
+ should be enough, for DWARF4 and older even if we emit as extension
+ DW_AT_export_symbols add the implicit DW_TAG_imported_module anyway
+ for the benefit of consumers unaware of DW_AT_export_symbols. */
+ if (implicit
+ && dwarf_version >= 5
+ && lang_hooks.decls.decl_dwarf_attribute (decl,
+ DW_AT_export_symbols) == 1)
+ return;
+
set_early_dwarf s;
/* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
@@ -26987,6 +27023,7 @@ output_macinfo (void)
macinfo_entry *ref;
vec<macinfo_entry, va_gc> *files = NULL;
macinfo_hash_type *macinfo_htab = NULL;
+ char dl_section_ref[MAX_ARTIFICIAL_LABEL_BYTES];
if (! length)
return;
@@ -26997,6 +27034,12 @@ output_macinfo (void)
&& (int) DW_MACINFO_start_file == (int) DW_MACRO_start_file
&& (int) DW_MACINFO_end_file == (int) DW_MACRO_end_file);
+ /* AIX Assembler inserts the length, so adjust the reference to match the
+ offset expected by debuggers. */
+ strcpy (dl_section_ref, debug_line_section_label);
+ if (XCOFF_DEBUGGING_INFO)
+ strcat (dl_section_ref, DWARF_INITIAL_LENGTH_SIZE_STR);
+
/* For .debug_macro emit the section header. */
if (!dwarf_strict || dwarf_version >= 5)
{
@@ -27007,7 +27050,7 @@ output_macinfo (void)
else
dw2_asm_output_data (1, 2, "Flags: 32-bit, lineptr present");
dw2_asm_output_offset (DWARF_OFFSET_SIZE,
- (!dwarf_split_debug_info ? debug_line_section_label
+ (!dwarf_split_debug_info ? dl_section_ref
: debug_skeleton_line_section_label),
debug_line_section, NULL);
}
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 2bc5d566933..6951f61703b 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -433,7 +433,7 @@ set_mode_and_regno (rtx x, machine_mode mode, unsigned int regno)
rtx
gen_raw_REG (machine_mode mode, unsigned int regno)
{
- rtx x = rtx_alloc_stat (REG MEM_STAT_INFO);
+ rtx x = rtx_alloc (REG MEM_STAT_INFO);
set_mode_and_regno (x, mode, regno);
REG_ATTRS (x) = NULL;
ORIGINAL_REGNO (x) = regno;
diff --git a/gcc/expmed.c b/gcc/expmed.c
index 9026472724c..8da98f5dc79 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -1566,6 +1566,55 @@ extract_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT bitsize,
return op0;
}
+ /* First try to check for vector from vector extractions. */
+ if (VECTOR_MODE_P (GET_MODE (op0))
+ && !MEM_P (op0)
+ && VECTOR_MODE_P (tmode)
+ && GET_MODE_SIZE (GET_MODE (op0)) > GET_MODE_SIZE (tmode))
+ {
+ machine_mode new_mode = GET_MODE (op0);
+ if (GET_MODE_INNER (new_mode) != GET_MODE_INNER (tmode))
+ {
+ new_mode = mode_for_vector (GET_MODE_INNER (tmode),
+ GET_MODE_BITSIZE (GET_MODE (op0))
+ / GET_MODE_UNIT_BITSIZE (tmode));
+ if (!VECTOR_MODE_P (new_mode)
+ || GET_MODE_SIZE (new_mode) != GET_MODE_SIZE (GET_MODE (op0))
+ || GET_MODE_INNER (new_mode) != GET_MODE_INNER (tmode)
+ || !targetm.vector_mode_supported_p (new_mode))
+ new_mode = VOIDmode;
+ }
+ if (new_mode != VOIDmode
+ && (convert_optab_handler (vec_extract_optab, new_mode, tmode)
+ != CODE_FOR_nothing)
+ && ((bitnum + bitsize - 1) / GET_MODE_BITSIZE (tmode)
+ == bitnum / GET_MODE_BITSIZE (tmode)))
+ {
+ struct expand_operand ops[3];
+ machine_mode outermode = new_mode;
+ machine_mode innermode = tmode;
+ enum insn_code icode
+ = convert_optab_handler (vec_extract_optab, outermode, innermode);
+ unsigned HOST_WIDE_INT pos = bitnum / GET_MODE_BITSIZE (innermode);
+
+ if (new_mode != GET_MODE (op0))
+ op0 = gen_lowpart (new_mode, op0);
+ create_output_operand (&ops[0], target, innermode);
+ ops[0].target = 1;
+ create_input_operand (&ops[1], op0, outermode);
+ create_integer_operand (&ops[2], pos);
+ if (maybe_expand_insn (icode, 3, ops))
+ {
+ if (alt_rtl && ops[0].target)
+ *alt_rtl = target;
+ target = ops[0].value;
+ if (GET_MODE (target) != mode)
+ return gen_lowpart (tmode, target);
+ return target;
+ }
+ }
+ }
+
/* See if we can get a better vector mode before extracting. */
if (VECTOR_MODE_P (GET_MODE (op0))
&& !MEM_P (op0)
@@ -1599,14 +1648,17 @@ extract_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT bitsize,
available. */
if (VECTOR_MODE_P (GET_MODE (op0))
&& !MEM_P (op0)
- && optab_handler (vec_extract_optab, GET_MODE (op0)) != CODE_FOR_nothing
+ && (convert_optab_handler (vec_extract_optab, GET_MODE (op0),
+ GET_MODE_INNER (GET_MODE (op0)))
+ != CODE_FOR_nothing)
&& ((bitnum + bitsize - 1) / GET_MODE_UNIT_BITSIZE (GET_MODE (op0))
== bitnum / GET_MODE_UNIT_BITSIZE (GET_MODE (op0))))
{
struct expand_operand ops[3];
machine_mode outermode = GET_MODE (op0);
machine_mode innermode = GET_MODE_INNER (outermode);
- enum insn_code icode = optab_handler (vec_extract_optab, outermode);
+ enum insn_code icode
+ = convert_optab_handler (vec_extract_optab, outermode, innermode);
unsigned HOST_WIDE_INT pos = bitnum / GET_MODE_BITSIZE (innermode);
create_output_operand (&ops[0], target, innermode);
diff --git a/gcc/expr.c b/gcc/expr.c
index 0e8216ba7d0..b194866313d 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -6589,6 +6589,7 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size,
rtvec vector = NULL;
unsigned n_elts;
alias_set_type alias;
+ bool vec_vec_init_p = false;
gcc_assert (eltmode != BLKmode);
@@ -6596,27 +6597,30 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size,
if (REG_P (target) && VECTOR_MODE_P (GET_MODE (target)))
{
machine_mode mode = GET_MODE (target);
+ machine_mode emode = eltmode;
- icode = (int) optab_handler (vec_init_optab, mode);
- /* Don't use vec_init<mode> if some elements have VECTOR_TYPE. */
- if (icode != CODE_FOR_nothing)
+ if (CONSTRUCTOR_NELTS (exp)
+ && (TREE_CODE (TREE_TYPE (CONSTRUCTOR_ELT (exp, 0)->value))
+ == VECTOR_TYPE))
{
- tree value;
-
- FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), idx, value)
- if (TREE_CODE (TREE_TYPE (value)) == VECTOR_TYPE)
- {
- icode = CODE_FOR_nothing;
- break;
- }
+ tree etype = TREE_TYPE (CONSTRUCTOR_ELT (exp, 0)->value);
+ gcc_assert (CONSTRUCTOR_NELTS (exp) * TYPE_VECTOR_SUBPARTS (etype)
+ == n_elts);
+ emode = TYPE_MODE (etype);
}
+ icode = (int) convert_optab_handler (vec_init_optab, mode, emode);
if (icode != CODE_FOR_nothing)
{
- unsigned int i;
+ unsigned int i, n = n_elts;
- vector = rtvec_alloc (n_elts);
- for (i = 0; i < n_elts; i++)
- RTVEC_ELT (vector, i) = CONST0_RTX (GET_MODE_INNER (mode));
+ if (emode != eltmode)
+ {
+ n = CONSTRUCTOR_NELTS (exp);
+ vec_vec_init_p = true;
+ }
+ vector = rtvec_alloc (n);
+ for (i = 0; i < n; i++)
+ RTVEC_ELT (vector, i) = CONST0_RTX (emode);
}
}
@@ -6634,10 +6638,10 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size,
FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), idx, value)
{
- int n_elts_here = tree_to_uhwi
- (int_const_binop (TRUNC_DIV_EXPR,
- TYPE_SIZE (TREE_TYPE (value)),
- TYPE_SIZE (elttype)));
+ tree sz = TYPE_SIZE (TREE_TYPE (value));
+ int n_elts_here
+ = tree_to_uhwi (int_const_binop (TRUNC_DIV_EXPR, sz,
+ TYPE_SIZE (elttype)));
count += n_elts_here;
if (mostly_zeros_p (value))
@@ -6687,18 +6691,21 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size,
if (vector)
{
- /* vec_init<mode> should not be used if there are VECTOR_TYPE
- elements. */
- gcc_assert (TREE_CODE (TREE_TYPE (value)) != VECTOR_TYPE);
- RTVEC_ELT (vector, eltpos)
- = expand_normal (value);
+ if (vec_vec_init_p)
+ {
+ gcc_assert (ce->index == NULL_TREE);
+ gcc_assert (TREE_CODE (TREE_TYPE (value)) == VECTOR_TYPE);
+ eltpos = idx;
+ }
+ else
+ gcc_assert (TREE_CODE (TREE_TYPE (value)) != VECTOR_TYPE);
+ RTVEC_ELT (vector, eltpos) = expand_normal (value);
}
else
{
- machine_mode value_mode =
- TREE_CODE (TREE_TYPE (value)) == VECTOR_TYPE
- ? TYPE_MODE (TREE_TYPE (value))
- : eltmode;
+ machine_mode value_mode
+ = (TREE_CODE (TREE_TYPE (value)) == VECTOR_TYPE
+ ? TYPE_MODE (TREE_TYPE (value)) : eltmode);
bitpos = eltpos * elt_size;
store_constructor_field (target, bitsize, bitpos, 0,
bitregion_end, value_mode,
@@ -6707,9 +6714,9 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size,
}
if (vector)
- emit_insn (GEN_FCN (icode)
- (target,
- gen_rtx_PARALLEL (GET_MODE (target), vector)));
+ emit_insn (GEN_FCN (icode) (target,
+ gen_rtx_PARALLEL (GET_MODE (target),
+ vector)));
break;
}
diff --git a/gcc/final.c b/gcc/final.c
index 356c923c4cd..ad999f77fdd 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -76,6 +76,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa.h"
#include "cfgloop.h"
#include "params.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
#include "rtl-iter.h"
#include "print-rtl.h"
@@ -4492,7 +4494,8 @@ rest_of_handle_final (void)
assemble_start_function (current_function_decl, fnname);
final_start_function (get_insns (), asm_out_file, optimize);
final (get_insns (), asm_out_file, optimize);
- if (flag_ipa_ra)
+ if (flag_ipa_ra
+ && !lookup_attribute ("noipa", DECL_ATTRIBUTES (current_function_decl)))
collect_fn_hard_reg_usage ();
final_end_function ();
diff --git a/gcc/flag-types.h b/gcc/flag-types.h
index 5faade53975..6372d3cb178 100644
--- a/gcc/flag-types.h
+++ b/gcc/flag-types.h
@@ -238,6 +238,7 @@ enum sanitize_code {
SANITIZE_OBJECT_SIZE = 1UL << 21,
SANITIZE_VPTR = 1UL << 22,
SANITIZE_BOUNDS_STRICT = 1UL << 23,
+ SANITIZE_POINTER_OVERFLOW = 1UL << 24,
SANITIZE_SHIFT = SANITIZE_SHIFT_BASE | SANITIZE_SHIFT_EXPONENT,
SANITIZE_UNDEFINED = SANITIZE_SHIFT | SANITIZE_DIVIDE | SANITIZE_UNREACHABLE
| SANITIZE_VLA | SANITIZE_NULL | SANITIZE_RETURN
@@ -245,7 +246,8 @@ enum sanitize_code {
| SANITIZE_BOUNDS | SANITIZE_ALIGNMENT
| SANITIZE_NONNULL_ATTRIBUTE
| SANITIZE_RETURNS_NONNULL_ATTRIBUTE
- | SANITIZE_OBJECT_SIZE | SANITIZE_VPTR,
+ | SANITIZE_OBJECT_SIZE | SANITIZE_VPTR
+ | SANITIZE_POINTER_OVERFLOW,
SANITIZE_UNDEFINED_NONDEFAULT = SANITIZE_FLOAT_DIVIDE | SANITIZE_FLOAT_CAST
| SANITIZE_BOUNDS_STRICT
};
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index d702de2f97f..5a118ca50a1 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -79,6 +79,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-vrp.h"
#include "tree-ssanames.h"
#include "selftest.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Nonzero if we are folding constants inside an initializer; zero
otherwise. */
@@ -108,8 +110,6 @@ enum comparison_code {
static bool negate_expr_p (tree);
static tree negate_expr (tree);
-static tree split_tree (location_t, tree, tree, enum tree_code,
- tree *, tree *, tree *, int);
static tree associate_trees (location_t, tree, tree, enum tree_code, tree);
static enum comparison_code comparison_to_compcode (enum tree_code);
static enum tree_code compcode_to_comparison (enum comparison_code);
@@ -775,12 +775,14 @@ negate_expr (tree t)
same type as IN, but they will have the same signedness and mode. */
static tree
-split_tree (location_t loc, tree in, tree type, enum tree_code code,
- tree *conp, tree *litp, tree *minus_litp, int negate_p)
+split_tree (tree in, tree type, enum tree_code code,
+ tree *minus_varp, tree *conp, tree *minus_conp,
+ tree *litp, tree *minus_litp, int negate_p)
{
tree var = 0;
-
+ *minus_varp = 0;
*conp = 0;
+ *minus_conp = 0;
*litp = 0;
*minus_litp = 0;
@@ -834,27 +836,19 @@ split_tree (location_t loc, tree in, tree type, enum tree_code code,
if (neg_litp_p)
*minus_litp = *litp, *litp = 0;
if (neg_conp_p && *conp)
- {
- /* Convert to TYPE before negating. */
- *conp = fold_convert_loc (loc, type, *conp);
- *conp = negate_expr (*conp);
- }
+ *minus_conp = *conp, *conp = 0;
if (neg_var_p && var)
- {
- /* Convert to TYPE before negating. */
- var = fold_convert_loc (loc, type, var);
- var = negate_expr (var);
- }
+ *minus_varp = var, var = 0;
}
else if (TREE_CONSTANT (in))
*conp = in;
else if (TREE_CODE (in) == BIT_NOT_EXPR
&& code == PLUS_EXPR)
{
- /* -X - 1 is folded to ~X, undo that here. Do _not_ do this
- when IN is constant. Convert to TYPE before negating. */
- *minus_litp = build_one_cst (type);
- var = negate_expr (fold_convert_loc (loc, type, TREE_OPERAND (in, 0)));
+ /* -1 - X is folded to ~X, undo that here. Do _not_ do this
+ when IN is constant. */
+ *litp = build_minus_one_cst (type);
+ *minus_varp = TREE_OPERAND (in, 0);
}
else
var = in;
@@ -866,17 +860,13 @@ split_tree (location_t loc, tree in, tree type, enum tree_code code,
else if (*minus_litp)
*litp = *minus_litp, *minus_litp = 0;
if (*conp)
- {
- /* Convert to TYPE before negating. */
- *conp = fold_convert_loc (loc, type, *conp);
- *conp = negate_expr (*conp);
- }
+ *minus_conp = *conp, *conp = 0;
+ else if (*minus_conp)
+ *conp = *minus_conp, *minus_conp = 0;
if (var)
- {
- /* Convert to TYPE before negating. */
- var = fold_convert_loc (loc, type, var);
- var = negate_expr (var);
- }
+ *minus_varp = var, var = 0;
+ else if (*minus_varp)
+ var = *minus_varp, *minus_varp = 0;
}
if (*litp
@@ -898,7 +888,10 @@ static tree
associate_trees (location_t loc, tree t1, tree t2, enum tree_code code, tree type)
{
if (t1 == 0)
- return t2;
+ {
+ gcc_assert (t2 == 0 || code != MINUS_EXPR);
+ return t2;
+ }
else if (t2 == 0)
return t1;
@@ -906,6 +899,7 @@ associate_trees (location_t loc, tree t1, tree t2, enum tree_code code, tree typ
try to fold this since we will have infinite recursion. But do
deal with any NEGATE_EXPRs. */
if (TREE_CODE (t1) == code || TREE_CODE (t2) == code
+ || TREE_CODE (t1) == PLUS_EXPR || TREE_CODE (t2) == PLUS_EXPR
|| TREE_CODE (t1) == MINUS_EXPR || TREE_CODE (t2) == MINUS_EXPR)
{
if (code == PLUS_EXPR)
@@ -3184,9 +3178,18 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags)
flags &= ~OEP_ADDRESS_OF;
return OP_SAME (0);
+ case BIT_INSERT_EXPR:
+ /* BIT_INSERT_EXPR has an implict operand as the type precision
+ of op1. Need to check to make sure they are the same. */
+ if (TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST
+ && TREE_CODE (TREE_OPERAND (arg1, 1)) == INTEGER_CST
+ && TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (arg0, 1)))
+ != TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (arg1, 1))))
+ return false;
+ /* FALLTHRU */
+
case VEC_COND_EXPR:
case DOT_PROD_EXPR:
- case BIT_INSERT_EXPR:
return OP_SAME (0) && OP_SAME (1) && OP_SAME (2);
case MODIFY_EXPR:
@@ -3927,7 +3930,7 @@ make_bit_field_ref (location_t loc, tree inner, tree orig_inner, tree type,
bftype = build_nonstandard_integer_type (bitsize, 0);
result = build3_loc (loc, BIT_FIELD_REF, bftype, inner,
- size_int (bitsize), bitsize_int (bitpos));
+ bitsize_int (bitsize), bitsize_int (bitpos));
REF_REVERSE_STORAGE_ORDER (result) = reversep;
if (bftype != type)
@@ -4850,21 +4853,21 @@ build_range_check (location_t loc, tree type, tree exp, int in_p,
if (low == 0)
return fold_build2_loc (loc, LE_EXPR, type, exp,
- fold_convert_loc (loc, etype, high));
+ fold_convert_loc (loc, etype, high));
if (high == 0)
return fold_build2_loc (loc, GE_EXPR, type, exp,
- fold_convert_loc (loc, etype, low));
+ fold_convert_loc (loc, etype, low));
if (operand_equal_p (low, high, 0))
return fold_build2_loc (loc, EQ_EXPR, type, exp,
- fold_convert_loc (loc, etype, low));
+ fold_convert_loc (loc, etype, low));
if (TREE_CODE (exp) == BIT_AND_EXPR
&& maskable_range_p (low, high, etype, &mask, &value))
return fold_build2_loc (loc, EQ_EXPR, type,
fold_build2_loc (loc, BIT_AND_EXPR, etype,
- exp, mask),
+ exp, mask),
value);
if (integer_zerop (low))
@@ -4896,7 +4899,7 @@ build_range_check (location_t loc, tree type, tree exp, int in_p,
exp = fold_convert_loc (loc, etype, exp);
}
return fold_build2_loc (loc, GT_EXPR, type, exp,
- build_int_cst (etype, 0));
+ build_int_cst (etype, 0));
}
}
@@ -4906,25 +4909,15 @@ build_range_check (location_t loc, tree type, tree exp, int in_p,
if (etype == NULL_TREE)
return NULL_TREE;
+ if (POINTER_TYPE_P (etype))
+ etype = unsigned_type_for (etype);
+
high = fold_convert_loc (loc, etype, high);
low = fold_convert_loc (loc, etype, low);
exp = fold_convert_loc (loc, etype, exp);
value = const_binop (MINUS_EXPR, high, low);
-
- if (POINTER_TYPE_P (etype))
- {
- if (value != 0 && !TREE_OVERFLOW (value))
- {
- low = fold_build1_loc (loc, NEGATE_EXPR, TREE_TYPE (low), low);
- return build_range_check (loc, type,
- fold_build_pointer_plus_loc (loc, exp, low),
- 1, build_int_cst (etype, 0), value);
- }
- return 0;
- }
-
if (value != 0 && !TREE_OVERFLOW (value))
return build_range_check (loc, type,
fold_build2_loc (loc, MINUS_EXPR, etype, exp, low),
@@ -8459,14 +8452,9 @@ fold_comparison (location_t loc, enum tree_code code, tree type,
{
/* We can fold this expression to a constant if the non-constant
offset parts are equal. */
- if ((offset0 == offset1
- || (offset0 && offset1
- && operand_equal_p (offset0, offset1, 0)))
- && (equality_code
- || (indirect_base0
- && (DECL_P (base0) || CONSTANT_CLASS_P (base0)))
- || POINTER_TYPE_OVERFLOW_UNDEFINED))
-
+ if (offset0 == offset1
+ || (offset0 && offset1
+ && operand_equal_p (offset0, offset1, 0)))
{
if (!equality_code
&& bitpos0 != bitpos1
@@ -8501,11 +8489,7 @@ fold_comparison (location_t loc, enum tree_code code, tree type,
because pointer arithmetic is restricted to retain within an
object and overflow on pointer differences is undefined as of
6.5.6/8 and /9 with respect to the signed ptrdiff_t. */
- else if (bitpos0 == bitpos1
- && (equality_code
- || (indirect_base0
- && (DECL_P (base0) || CONSTANT_CLASS_P (base0)))
- || POINTER_TYPE_OVERFLOW_UNDEFINED))
+ else if (bitpos0 == bitpos1)
{
/* By converting to signed sizetype we cover middle-end pointer
arithmetic which operates on unsigned pointer types of size
@@ -9570,8 +9554,8 @@ fold_binary_loc (location_t loc,
if ((! FLOAT_TYPE_P (type) || flag_associative_math)
&& !TYPE_SATURATING (type))
{
- tree var0, con0, lit0, minus_lit0;
- tree var1, con1, lit1, minus_lit1;
+ tree var0, minus_var0, con0, minus_con0, lit0, minus_lit0;
+ tree var1, minus_var1, con1, minus_con1, lit1, minus_lit1;
tree atype = type;
bool ok = true;
@@ -9580,10 +9564,12 @@ fold_binary_loc (location_t loc,
then the result with variables. This increases the chances of
literals being recombined later and of generating relocatable
expressions for the sum of a constant and literal. */
- var0 = split_tree (loc, arg0, type, code,
- &con0, &lit0, &minus_lit0, 0);
- var1 = split_tree (loc, arg1, type, code,
- &con1, &lit1, &minus_lit1, code == MINUS_EXPR);
+ var0 = split_tree (arg0, type, code,
+ &minus_var0, &con0, &minus_con0,
+ &lit0, &minus_lit0, 0);
+ var1 = split_tree (arg1, type, code,
+ &minus_var1, &con1, &minus_con1,
+ &lit1, &minus_lit1, code == MINUS_EXPR);
/* Recombine MINUS_EXPR operands by using PLUS_EXPR. */
if (code == MINUS_EXPR)
@@ -9591,7 +9577,7 @@ fold_binary_loc (location_t loc,
/* With undefined overflow prefer doing association in a type
which wraps on overflow, if that is one of the operand types. */
- if ((POINTER_TYPE_P (type) && POINTER_TYPE_OVERFLOW_UNDEFINED)
+ if (POINTER_TYPE_P (type)
|| (INTEGRAL_TYPE_P (type) && !TYPE_OVERFLOW_WRAPS (type)))
{
if (INTEGRAL_TYPE_P (TREE_TYPE (arg0))
@@ -9605,13 +9591,16 @@ fold_binary_loc (location_t loc,
/* With undefined overflow we can only associate constants with one
variable, and constants whose association doesn't overflow. */
- if ((POINTER_TYPE_P (atype) && POINTER_TYPE_OVERFLOW_UNDEFINED)
+ if (POINTER_TYPE_P (atype)
|| (INTEGRAL_TYPE_P (atype) && !TYPE_OVERFLOW_WRAPS (atype)))
{
- if (var0 && var1)
+ if ((var0 && var1) || (minus_var0 && minus_var1))
{
- tree tmp0 = var0;
- tree tmp1 = var1;
+ /* ??? If split_tree would handle NEGATE_EXPR we could
+ simply reject these cases and the allowed cases would
+ be the var0/minus_var1 ones. */
+ tree tmp0 = var0 ? var0 : minus_var0;
+ tree tmp1 = var1 ? var1 : minus_var1;
bool one_neg = false;
if (TREE_CODE (tmp0) == NEGATE_EXPR)
@@ -9640,22 +9629,46 @@ fold_binary_loc (location_t loc,
|| !operand_equal_p (tmp0, tmp1, 0))
ok = false;
}
+ else if ((var0 && minus_var1
+ && ! operand_equal_p (var0, minus_var1, 0))
+ || (minus_var0 && var1
+ && ! operand_equal_p (minus_var0, var1, 0)))
+ ok = false;
}
/* Only do something if we found more than two objects. Otherwise,
nothing has changed and we risk infinite recursion. */
if (ok
&& (2 < ((var0 != 0) + (var1 != 0)
+ + (minus_var0 != 0) + (minus_var1 != 0)
+ (con0 != 0) + (con1 != 0)
+ + (minus_con0 != 0) + (minus_con1 != 0)
+ (lit0 != 0) + (lit1 != 0)
+ (minus_lit0 != 0) + (minus_lit1 != 0))))
{
var0 = associate_trees (loc, var0, var1, code, atype);
+ minus_var0 = associate_trees (loc, minus_var0, minus_var1,
+ code, atype);
con0 = associate_trees (loc, con0, con1, code, atype);
+ minus_con0 = associate_trees (loc, minus_con0, minus_con1,
+ code, atype);
lit0 = associate_trees (loc, lit0, lit1, code, atype);
minus_lit0 = associate_trees (loc, minus_lit0, minus_lit1,
code, atype);
+ if (minus_var0 && var0)
+ {
+ var0 = associate_trees (loc, var0, minus_var0,
+ MINUS_EXPR, atype);
+ minus_var0 = 0;
+ }
+ if (minus_con0 && con0)
+ {
+ con0 = associate_trees (loc, con0, minus_con0,
+ MINUS_EXPR, atype);
+ minus_con0 = 0;
+ }
+
/* Preserve the MINUS_EXPR if the negative part of the literal is
greater than the positive part. Otherwise, the multiplicative
folding code (i.e extract_muldiv) may be fooled in case
@@ -9665,7 +9678,9 @@ fold_binary_loc (location_t loc,
{
if (TREE_CODE (lit0) == INTEGER_CST
&& TREE_CODE (minus_lit0) == INTEGER_CST
- && tree_int_cst_lt (lit0, minus_lit0))
+ && tree_int_cst_lt (lit0, minus_lit0)
+ /* But avoid ending up with only negated parts. */
+ && (var0 || con0))
{
minus_lit0 = associate_trees (loc, minus_lit0, lit0,
MINUS_EXPR, atype);
@@ -9684,25 +9699,38 @@ fold_binary_loc (location_t loc,
|| (minus_lit0 && TREE_OVERFLOW_P (minus_lit0)))
return NULL_TREE;
- if (minus_lit0)
+ /* Eliminate lit0 and minus_lit0 to con0 and minus_con0. */
+ con0 = associate_trees (loc, con0, lit0, code, atype);
+ lit0 = 0;
+ minus_con0 = associate_trees (loc, minus_con0, minus_lit0,
+ code, atype);
+ minus_lit0 = 0;
+
+ /* Eliminate minus_con0. */
+ if (minus_con0)
{
- if (con0 == 0)
- return
- fold_convert_loc (loc, type,
- associate_trees (loc, var0, minus_lit0,
- MINUS_EXPR, atype));
+ if (con0)
+ con0 = associate_trees (loc, con0, minus_con0,
+ MINUS_EXPR, atype);
+ else if (var0)
+ var0 = associate_trees (loc, var0, minus_con0,
+ MINUS_EXPR, atype);
else
- {
- con0 = associate_trees (loc, con0, minus_lit0,
- MINUS_EXPR, atype);
- return
- fold_convert_loc (loc, type,
- associate_trees (loc, var0, con0,
- PLUS_EXPR, atype));
- }
+ gcc_unreachable ();
+ minus_con0 = 0;
+ }
+
+ /* Eliminate minus_var0. */
+ if (minus_var0)
+ {
+ if (con0)
+ con0 = associate_trees (loc, con0, minus_var0,
+ MINUS_EXPR, atype);
+ else
+ gcc_unreachable ();
+ minus_var0 = 0;
}
- con0 = associate_trees (loc, con0, lit0, code, atype);
return
fold_convert_loc (loc, type, associate_trees (loc, var0, con0,
code, atype));
@@ -12196,8 +12224,8 @@ debug_fold_checksum (const_tree t)
expression with code CODE of type TYPE with an operand OP0. */
tree
-fold_build1_stat_loc (location_t loc,
- enum tree_code code, tree type, tree op0 MEM_STAT_DECL)
+fold_build1_loc (location_t loc,
+ enum tree_code code, tree type, tree op0 MEM_STAT_DECL)
{
tree tem;
#ifdef ENABLE_FOLD_CHECKING
@@ -12213,7 +12241,7 @@ fold_build1_stat_loc (location_t loc,
tem = fold_unary_loc (loc, code, type, op0);
if (!tem)
- tem = build1_stat_loc (loc, code, type, op0 PASS_MEM_STAT);
+ tem = build1_loc (loc, code, type, op0 PASS_MEM_STAT);
#ifdef ENABLE_FOLD_CHECKING
md5_init_ctx (&ctx);
@@ -12233,7 +12261,7 @@ fold_build1_stat_loc (location_t loc,
OP0 and OP1. */
tree
-fold_build2_stat_loc (location_t loc,
+fold_build2_loc (location_t loc,
enum tree_code code, tree type, tree op0, tree op1
MEM_STAT_DECL)
{
@@ -12259,7 +12287,7 @@ fold_build2_stat_loc (location_t loc,
tem = fold_binary_loc (loc, code, type, op0, op1);
if (!tem)
- tem = build2_stat_loc (loc, code, type, op0, op1 PASS_MEM_STAT);
+ tem = build2_loc (loc, code, type, op0, op1 PASS_MEM_STAT);
#ifdef ENABLE_FOLD_CHECKING
md5_init_ctx (&ctx);
@@ -12286,7 +12314,7 @@ fold_build2_stat_loc (location_t loc,
type TYPE with operands OP0, OP1, and OP2. */
tree
-fold_build3_stat_loc (location_t loc, enum tree_code code, tree type,
+fold_build3_loc (location_t loc, enum tree_code code, tree type,
tree op0, tree op1, tree op2 MEM_STAT_DECL)
{
tree tem;
@@ -12319,7 +12347,7 @@ fold_build3_stat_loc (location_t loc, enum tree_code code, tree type,
gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
tem = fold_ternary_loc (loc, code, type, op0, op1, op2);
if (!tem)
- tem = build3_stat_loc (loc, code, type, op0, op1, op2 PASS_MEM_STAT);
+ tem = build3_loc (loc, code, type, op0, op1, op2 PASS_MEM_STAT);
#ifdef ENABLE_FOLD_CHECKING
md5_init_ctx (&ctx);
@@ -13693,8 +13721,8 @@ fold_negate_const (tree arg0, tree type)
bool overflow;
wide_int val = wi::neg (arg0, &overflow);
t = force_fit_type (type, val, 1,
- (overflow | TREE_OVERFLOW (arg0))
- && !TYPE_UNSIGNED (type));
+ (overflow && ! TYPE_UNSIGNED (type))
+ || TREE_OVERFLOW (arg0));
break;
}
@@ -14081,14 +14109,23 @@ fold_indirect_ref_1 (location_t loc, tree type, tree op0)
&& type == TREE_TYPE (op00type))
{
tree type_domain = TYPE_DOMAIN (op00type);
- tree min_val = size_zero_node;
- if (type_domain && TYPE_MIN_VALUE (type_domain))
- min_val = TYPE_MIN_VALUE (type_domain);
- op01 = size_binop_loc (loc, EXACT_DIV_EXPR, op01,
- TYPE_SIZE_UNIT (type));
- op01 = size_binop_loc (loc, PLUS_EXPR, op01, min_val);
- return build4_loc (loc, ARRAY_REF, type, op00, op01,
- NULL_TREE, NULL_TREE);
+ tree min;
+ if (type_domain != NULL_TREE
+ && (min = TYPE_MIN_VALUE (type_domain))
+ && TREE_CODE (min) == INTEGER_CST)
+ {
+ offset_int off = wi::to_offset (op01);
+ offset_int el_sz = wi::to_offset (TYPE_SIZE_UNIT (type));
+ offset_int remainder;
+ off = wi::divmod_trunc (off, el_sz, SIGNED, &remainder);
+ if (remainder == 0)
+ {
+ off = off + wi::to_offset (min);
+ op01 = wide_int_to_tree (sizetype, off);
+ return build4_loc (loc, ARRAY_REF, type, op00, op01,
+ NULL_TREE, NULL_TREE);
+ }
+ }
}
}
}
diff --git a/gcc/fold-const.h b/gcc/fold-const.h
index 780e5c781b7..8380d420ddb 100644
--- a/gcc/fold-const.h
+++ b/gcc/fold-const.h
@@ -49,23 +49,17 @@ extern tree fold_binary_loc (location_t, enum tree_code, tree, tree, tree);
fold_ternary_loc (UNKNOWN_LOCATION, CODE, T1, T2, T3, T4)
extern tree fold_ternary_loc (location_t, enum tree_code, tree, tree, tree, tree);
#define fold_build1(c,t1,t2)\
- fold_build1_stat_loc (UNKNOWN_LOCATION, c, t1, t2 MEM_STAT_INFO)
-#define fold_build1_loc(l,c,t1,t2)\
- fold_build1_stat_loc (l, c, t1, t2 MEM_STAT_INFO)
-extern tree fold_build1_stat_loc (location_t, enum tree_code, tree,
- tree MEM_STAT_DECL);
+ fold_build1_loc (UNKNOWN_LOCATION, c, t1, t2 MEM_STAT_INFO)
+extern tree fold_build1_loc (location_t, enum tree_code, tree,
+ tree CXX_MEM_STAT_INFO);
#define fold_build2(c,t1,t2,t3)\
- fold_build2_stat_loc (UNKNOWN_LOCATION, c, t1, t2, t3 MEM_STAT_INFO)
-#define fold_build2_loc(l,c,t1,t2,t3)\
- fold_build2_stat_loc (l, c, t1, t2, t3 MEM_STAT_INFO)
-extern tree fold_build2_stat_loc (location_t, enum tree_code, tree, tree,
- tree MEM_STAT_DECL);
+ fold_build2_loc (UNKNOWN_LOCATION, c, t1, t2, t3 MEM_STAT_INFO)
+extern tree fold_build2_loc (location_t, enum tree_code, tree, tree,
+ tree CXX_MEM_STAT_INFO);
#define fold_build3(c,t1,t2,t3,t4)\
- fold_build3_stat_loc (UNKNOWN_LOCATION, c, t1, t2, t3, t4 MEM_STAT_INFO)
-#define fold_build3_loc(l,c,t1,t2,t3,t4)\
- fold_build3_stat_loc (l, c, t1, t2, t3, t4 MEM_STAT_INFO)
-extern tree fold_build3_stat_loc (location_t, enum tree_code, tree, tree, tree,
- tree MEM_STAT_DECL);
+ fold_build3_loc (UNKNOWN_LOCATION, c, t1, t2, t3, t4 MEM_STAT_INFO)
+extern tree fold_build3_loc (location_t, enum tree_code, tree, tree, tree,
+ tree CXX_MEM_STAT_INFO);
extern tree fold_build1_initializer_loc (location_t, enum tree_code, tree, tree);
extern tree fold_build2_initializer_loc (location_t, enum tree_code, tree, tree, tree);
#define fold_build_call_array(T1,T2,N,T4)\
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index ff72ba45ee9..1145259f32a 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,103 @@
+2017-08-11 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ * invoke.texi: Actually commit change about -Ofast.
+
+2017-08-11 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/60355
+ * resolve.c (resolve_symbol): Adjust (and reformat)
+ comment. Perform check if a BIND(C) is declared
+ at module level regardless of whether it is typed
+ implicitly or not.
+
+2017-08-10 Fritz Reese <fritzoreese@gmail.com>
+
+ * options.c (set_dec_flags): Only set legacy standards when value
+ is not zero.
+
+2017-08-10 Fritz Reese <fritzoreese@gmail.com>
+
+ * options.c (set_dec_flags, gfc_post_options): Only set flag_d_lines
+ with -fdec when not set by user.
+
+2017-08-10 Fritz Reese <fritzoreese@gmail.com>
+
+ * decl.c (attr_seen): New static variable.
+ * decl.c (variable_decl): Match %FILL in STRUCTURE body.
+ * gfortran.texi: Update documentation.
+
+2017-08-08 Martin Liska <mliska@suse.cz>
+
+ * trans-types.c: Include header files.
+
+2017-08-07 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/68829
+ PR fortran/81701
+ * options.c: Make -Ofast honor -fmax-stack-var-size.
+ * invoke.texi: Document change.
+
+2017-08-01 Thomas König <tkoenig@gcc.gnu.org>
+
+ PR fortran/79312
+ * intrisic.c (gfc_convert_type_warn): Only set typespec for
+ empty array constructors which don't have it already.
+
+2017-08-01 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/45435
+ * lang.opt (fc-prototypes): Add option.
+ * gfortran.h (gfc_typespec): Add interop_kind to struct.
+ (gfc_dump_c_prototypes): Add prototype.
+ * decl.c (gfc_match_kind_spec): Copy symbol used for kind to typespec.
+ * parse.c (gfc_parse_file): Call gfc_dump_prototypes.
+ * dump-parse-tree.c (gfc_dump_c_prototypes): New function.
+ (type_return): New enum.
+ (get_c_type_name): New function.
+ (write_decl): New function.
+ (write_type): New function.
+ (write_variable): New function.
+ (write_proc): New function.
+ (write_interop_decl): New function.
+ * invoke.texi: Document -fc-prototypes.
+
+2017-08-01 Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ PR fortran/53542
+ * expr.c (gfc_check_init_expr): Use the renamed name.
+
+2017-07-31 Jakub Jelinek <jakub@redhat.com>
+
+ * check.c (gfc_check_num_images): Fix a pasto.
+
+2017-07-29 Jakub Jelinek <jakub@redhat.com>
+
+ * trans-decl.c (gfc_trans_use_stmts): Pass false as new argument to
+ the imported_module_or_decl debug hook.
+
+2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * resolve.c (find_reachable_labels): Adjust.
+
+2017-07-25 Jakub Jelinek <jakub@redhat.com>
+
+ * ioparm.def: Use 1U << 31 instead of 1 << 31 as flags2 mask.
+
+2017-07-24 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ * dump-parse-tree.c (show_symbol): Show binding label if present.
+
+2017-07-24 Thomas Koenig <tkoenig@gcc.gnu.org>
+ Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/66102
+ * fortran/trans-array.c (gfc_conv_resolve_dependencies):
+ Break if dependency has been found.
+
+2017-07-23 Alexander Monakov <amonakov@ispras.ru>
+
+ * interface.c (pair_cmp): Fix gfc_symbol comparison. Adjust comment.
+
2017-07-18 Nathan Sidwell <nathan@acm.org>
* trans.c (gfc_build_array_ref): Use TYPE_MAX_VALUE.
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index 45bc68ef7ad..e85e398cd43 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -5149,7 +5149,7 @@ gfc_check_num_images (gfc_expr *distance, gfc_expr *failed)
return false;
if (!gfc_notify_std (GFC_STD_F2008_TS, "FAILED= argument to "
- "NUM_IMAGES at %L", &distance->where))
+ "NUM_IMAGES at %L", &failed->where))
return false;
}
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index bd310703557..b919f43cbd4 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -54,6 +54,7 @@ static gfc_typespec current_ts;
static symbol_attribute current_attr;
static gfc_array_spec *current_as;
static int colon_seen;
+static int attr_seen;
/* The current binding label (if any). */
static const char* curr_binding_label;
@@ -2140,6 +2141,7 @@ static match
variable_decl (int elem)
{
char name[GFC_MAX_SYMBOL_LEN + 1];
+ static unsigned int fill_id = 0;
gfc_expr *initializer, *char_len;
gfc_array_spec *as;
gfc_array_spec *cp_as; /* Extra copy for Cray Pointees. */
@@ -2157,9 +2159,47 @@ variable_decl (int elem)
/* When we get here, we've just matched a list of attributes and
maybe a type and a double colon. The next thing we expect to see
is the name of the symbol. */
- m = gfc_match_name (name);
+
+ /* If we are parsing a structure with legacy support, we allow the symbol
+ name to be '%FILL' which gives it an anonymous (inaccessible) name. */
+ m = MATCH_NO;
+ gfc_gobble_whitespace ();
+ if (gfc_peek_ascii_char () == '%')
+ {
+ gfc_next_ascii_char ();
+ m = gfc_match ("fill");
+ }
+
if (m != MATCH_YES)
- goto cleanup;
+ {
+ m = gfc_match_name (name);
+ if (m != MATCH_YES)
+ goto cleanup;
+ }
+
+ else
+ {
+ m = MATCH_ERROR;
+ if (gfc_current_state () != COMP_STRUCTURE)
+ {
+ if (flag_dec_structure)
+ gfc_error ("%qs not allowed outside STRUCTURE at %C", "%FILL");
+ else
+ gfc_error ("%qs at %C is a DEC extension, enable with "
+ "%<-fdec-structure%>", "%FILL");
+ goto cleanup;
+ }
+
+ if (attr_seen)
+ {
+ gfc_error ("%qs entity cannot have attributes at %C", "%FILL");
+ goto cleanup;
+ }
+
+ /* %FILL components are given invalid fortran names. */
+ snprintf (name, GFC_MAX_SYMBOL_LEN + 1, "%%FILL%u", fill_id++);
+ m = MATCH_YES;
+ }
var_locus = gfc_current_locus;
@@ -2260,6 +2300,14 @@ variable_decl (int elem)
}
}
+ /* %FILL components may not have initializers. */
+ if (strncmp (name, "%FILL", 5) == 0 && gfc_match_eos () != MATCH_YES)
+ {
+ gfc_error ("%qs entity cannot have an initializer at %C", "%FILL");
+ m = MATCH_ERROR;
+ goto cleanup;
+ }
+
/* If this symbol has already shown up in a Cray Pointer declaration,
and this is not a component declaration,
then we want to set the type & bail out. */
@@ -2631,6 +2679,8 @@ kind_expr:
of the named constants from iso_c_binding. */
ts->is_c_interop = e->ts.is_iso_c;
ts->f90_type = e->ts.f90_type;
+ if (e->symtree)
+ ts->interop_kind = e->symtree->n.sym;
}
gfc_free_expr (e);
@@ -3858,6 +3908,7 @@ match_attr_spec (void)
current_as = NULL;
colon_seen = 0;
+ attr_seen = 0;
/* See if we get all of the keywords up to the final double colon. */
for (d = GFC_DECL_BEGIN; d != GFC_DECL_END; d++)
@@ -4226,6 +4277,8 @@ match_attr_spec (void)
{
if (seen[d] == 0)
continue;
+ else
+ attr_seen = 1;
if ((d == DECL_STATIC || d == DECL_AUTOMATIC)
&& !flag_dec_static)
@@ -4434,6 +4487,7 @@ cleanup:
gfc_current_locus = start;
gfc_free_array_spec (current_as);
current_as = NULL;
+ attr_seen = 0;
return m;
}
diff --git a/gcc/fortran/dump-parse-tree.c b/gcc/fortran/dump-parse-tree.c
index 5b692e1ea9c..da9c5415e1d 100644
--- a/gcc/fortran/dump-parse-tree.c
+++ b/gcc/fortran/dump-parse-tree.c
@@ -857,6 +857,9 @@ show_symbol (gfc_symbol *sym)
for (i=len; i<12; i++)
fputc(' ', dumpfile);
+ if (sym->binding_label)
+ fprintf (dumpfile,"|| binding_label: '%s' ", sym->binding_label);
+
++show_level;
show_indent ();
@@ -2888,3 +2891,253 @@ gfc_dump_parse_tree (gfc_namespace *ns, FILE *file)
show_namespace (ns);
}
+/* This part writes BIND(C) definition for use in external C programs. */
+
+static void write_interop_decl (gfc_symbol *);
+
+void
+gfc_dump_c_prototypes (gfc_namespace *ns, FILE *file)
+{
+ int error_count;
+ gfc_get_errors (NULL, &error_count);
+ if (error_count != 0)
+ return;
+ dumpfile = file;
+ gfc_traverse_ns (ns, write_interop_decl);
+}
+
+enum type_return { T_OK=0, T_WARN, T_ERROR };
+
+/* Return the name of the type for later output. Both function pointers and
+ void pointers will be mapped to void *. */
+
+static enum type_return
+get_c_type_name (gfc_typespec *ts, gfc_array_spec *as, const char **pre,
+ const char **type_name, bool *asterisk, const char **post,
+ bool func_ret)
+{
+ static char post_buffer[40];
+ enum type_return ret;
+ ret = T_ERROR;
+
+ *pre = " ";
+ *asterisk = false;
+ *post = "";
+ *type_name = "<error>";
+ if (ts->type == BT_REAL || ts->type == BT_INTEGER)
+ {
+
+ if (ts->is_c_interop && ts->interop_kind)
+ {
+ *type_name = ts->interop_kind->name + 2;
+ if (strcmp (*type_name, "signed_char") == 0)
+ *type_name = "signed char";
+ else if (strcmp (*type_name, "size_t") == 0)
+ *type_name = "ssize_t";
+
+ ret = T_OK;
+ }
+ else
+ {
+ /* The user did not specify a C interop type. Let's look through
+ the available table and use the first one, but warn. */
+ int i;
+ for (i=0; i<ISOCBINDING_NUMBER; i++)
+ {
+ if (c_interop_kinds_table[i].f90_type == ts->type
+ && c_interop_kinds_table[i].value == ts->kind)
+ {
+ *type_name = c_interop_kinds_table[i].name + 2;
+ if (strcmp (*type_name, "signed_char") == 0)
+ *type_name = "signed char";
+ else if (strcmp (*type_name, "size_t") == 0)
+ *type_name = "ssize_t";
+
+ ret = T_WARN;
+ break;
+ }
+ }
+ }
+ }
+ else if (ts->type == BT_DERIVED)
+ {
+ if (ts->u.derived->from_intmod == INTMOD_ISO_C_BINDING)
+ {
+ if (strcmp (ts->u.derived->name, "c_ptr") == 0)
+ *type_name = "void";
+ else if (strcmp (ts->u.derived->name, "c_funptr") == 0)
+ {
+ *type_name = "int ";
+ if (func_ret)
+ {
+ *pre = "(";
+ *post = "())";
+ }
+ else
+ {
+ *pre = "(";
+ *post = ")()";
+ }
+ }
+ *asterisk = true;
+ }
+ else
+ *type_name = ts->u.derived->name;
+
+ ret = T_OK;
+ }
+ if (ret != T_ERROR && as)
+ {
+ mpz_t sz;
+ bool size_ok;
+ size_ok = spec_size (as, &sz);
+ gcc_assert (size_ok == true);
+ gmp_snprintf (post_buffer, sizeof(post_buffer), "[%Zd]", sz);
+ *post = post_buffer;
+ mpz_clear (sz);
+ }
+ return ret;
+}
+
+/* Write out a declaration. */
+static void
+write_decl (gfc_typespec *ts, gfc_array_spec *as, const char *sym_name,
+ bool func_ret)
+{
+ const char *pre, *type_name, *post;
+ bool asterisk;
+ enum type_return rok;
+
+ rok = get_c_type_name (ts, as, &pre, &type_name, &asterisk, &post, func_ret);
+ gcc_assert (rok != T_ERROR);
+ fputs (type_name, dumpfile);
+ fputs (pre, dumpfile);
+ if (asterisk)
+ fputs ("*", dumpfile);
+
+ fputs (sym_name, dumpfile);
+ fputs (post, dumpfile);
+
+ if (rok == T_WARN)
+ fputs(" /* WARNING: non-interoperable KIND */", dumpfile);
+}
+
+/* Write out an interoperable type. It will be written as a typedef
+ for a struct. */
+
+static void
+write_type (gfc_symbol *sym)
+{
+ gfc_component *c;
+
+ fprintf (dumpfile, "typedef struct %s {\n", sym->name);
+ for (c = sym->components; c; c = c->next)
+ {
+ fputs (" ", dumpfile);
+ write_decl (&(c->ts), c->as, c->name, false);
+ fputs (";\n", dumpfile);
+ }
+
+ fprintf (dumpfile, "} %s;\n", sym->name);
+}
+
+/* Write out a variable. */
+
+static void
+write_variable (gfc_symbol *sym)
+{
+ const char *sym_name;
+
+ gcc_assert (sym->attr.flavor == FL_VARIABLE);
+
+ if (sym->binding_label)
+ sym_name = sym->binding_label;
+ else
+ sym_name = sym->name;
+
+ fputs ("extern ", dumpfile);
+ write_decl (&(sym->ts), sym->as, sym_name, false);
+ fputs (";\n", dumpfile);
+}
+
+
+/* Write out a procedure, including its arguments. */
+static void
+write_proc (gfc_symbol *sym)
+{
+ const char *pre, *type_name, *post;
+ bool asterisk;
+ enum type_return rok;
+ gfc_formal_arglist *f;
+ const char *sym_name;
+ const char *intent_in;
+
+ if (sym->binding_label)
+ sym_name = sym->binding_label;
+ else
+ sym_name = sym->name;
+
+ if (sym->ts.type == BT_UNKNOWN)
+ {
+ fprintf (dumpfile, "void ");
+ fputs (sym_name, dumpfile);
+ }
+ else
+ write_decl (&(sym->ts), sym->as, sym->name, true);
+
+ fputs (" (", dumpfile);
+
+ for (f = sym->formal; f; f = f->next)
+ {
+ gfc_symbol *s;
+ s = f->sym;
+ rok = get_c_type_name (&(s->ts), NULL, &pre, &type_name, &asterisk,
+ &post, false);
+ gcc_assert (rok != T_ERROR);
+
+ if (!s->attr.value)
+ asterisk = true;
+
+ if (s->attr.intent == INTENT_IN && !s->attr.value)
+ intent_in = "const ";
+ else
+ intent_in = "";
+
+ fputs (intent_in, dumpfile);
+ fputs (type_name, dumpfile);
+ fputs (pre, dumpfile);
+ if (asterisk)
+ fputs ("*", dumpfile);
+
+ fputs (s->name, dumpfile);
+ fputs (post, dumpfile);
+ if (rok == T_WARN)
+ fputs(" /* WARNING: non-interoperable KIND */ ", dumpfile);
+
+ fputs (f->next ? ", " : ")", dumpfile);
+ }
+ fputs (";\n", dumpfile);
+}
+
+
+/* Write a C-interoperable declaration as a C prototype or extern
+ declaration. */
+
+static void
+write_interop_decl (gfc_symbol *sym)
+{
+ /* Only dump bind(c) entities. */
+ if (!sym->attr.is_bind_c)
+ return;
+
+ /* Don't dump our iso c module. */
+ if (sym->from_intmod == INTMOD_ISO_C_BINDING)
+ return;
+
+ if (sym->attr.flavor == FL_VARIABLE)
+ write_variable (sym);
+ else if (sym->attr.flavor == FL_DERIVED)
+ write_type (sym);
+ else if (sym->attr.flavor == FL_PROCEDURE)
+ write_proc (sym);
+}
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index d19e2fdde44..64af02cc29b 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -2591,7 +2591,7 @@ gfc_check_init_expr (gfc_expr *e)
else
gfc_error ("Parameter %qs at %L has not been declared or is "
"a variable, which does not reduce to a constant "
- "expression", e->symtree->n.sym->name, &e->where);
+ "expression", e->symtree->name, &e->where);
break;
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index 26b89bee98e..4d51d145277 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -1012,6 +1012,7 @@ typedef struct
int is_iso_c;
bt f90_type;
bool deferred;
+ gfc_symbol *interop_kind;
}
gfc_typespec;
@@ -3311,6 +3312,7 @@ void gfc_delete_bbt (void *, void *, compare_fn);
/* dump-parse-tree.c */
void gfc_dump_parse_tree (gfc_namespace *, FILE *);
+void gfc_dump_c_prototypes (gfc_namespace *, FILE *);
/* parse.c */
bool gfc_parse_file (void);
diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi
index 85afdda46ef..145ec7fb9ab 100644
--- a/gcc/fortran/gfortran.texi
+++ b/gcc/fortran/gfortran.texi
@@ -2220,6 +2220,20 @@ rules and exceptions:
@item Structures act like derived types with the @code{SEQUENCE} attribute.
Otherwise they may contain no specifiers.
+@item Structures may contain a special field with the name @code{%FILL}.
+This will create an anonymous component which cannot be accessed but occupies
+space just as if a component of the same type was declared in its place, useful
+for alignment purposes. As an example, the following structure will consist
+of at least sixteen bytes:
+
+@smallexample
+structure /padded/
+ character(4) start
+ character(8) %FILL
+ character(4) end
+end structure
+@end smallexample
+
@item Structures may share names with other symbols. For example, the following
is invalid for derived types, but valid for structures:
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c
index 6fe0647ecfe..13e2bdd6c7e 100644
--- a/gcc/fortran/interface.c
+++ b/gcc/fortran/interface.c
@@ -3294,7 +3294,7 @@ argpair;
order:
- p->a->expr == NULL
- p->a->expr->expr_type != EXPR_VARIABLE
- - growing p->a->expr->symbol. */
+ - by gfc_symbol pointer value (larger first). */
static int
pair_cmp (const void *p1, const void *p2)
@@ -3320,6 +3320,8 @@ pair_cmp (const void *p1, const void *p2)
}
if (a2->expr->expr_type != EXPR_VARIABLE)
return 1;
+ if (a1->expr->symtree->n.sym > a2->expr->symtree->n.sym)
+ return -1;
return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
}
diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c
index 2f60fe8c877..8965d509882 100644
--- a/gcc/fortran/intrinsic.c
+++ b/gcc/fortran/intrinsic.c
@@ -4919,9 +4919,11 @@ gfc_convert_type_warn (gfc_expr *expr, gfc_typespec *ts, int eflag, int wflag)
if (ts->type == BT_UNKNOWN)
goto bad;
- /* NULL and zero size arrays get their type here. */
- if (expr->expr_type == EXPR_NULL
- || (expr->expr_type == EXPR_ARRAY && expr->value.constructor == NULL))
+ /* NULL and zero size arrays get their type here, unless they already have a
+ typespec. */
+ if ((expr->expr_type == EXPR_NULL
+ || (expr->expr_type == EXPR_ARRAY && expr->value.constructor == NULL))
+ && expr->ts.type == BT_UNKNOWN)
{
/* Sometimes the RHS acquire the type. */
expr->ts = *ts;
diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi
index 8a1d09dd5e5..a478aed922a 100644
--- a/gcc/fortran/invoke.texi
+++ b/gcc/fortran/invoke.texi
@@ -100,6 +100,8 @@ one is not the default.
* Runtime Options:: Influencing runtime behavior
* Code Gen Options:: Specifying conventions for function calls, data layout
and register usage.
+* Interoperability Options:: Options for interoperability with other
+ languages.
* Environment Variables:: Environment variables that affect @command{gfortran}.
@end menu
@@ -171,6 +173,10 @@ and warnings}.
-frecord-marker=@var{length} -fsign-zero
}
+@item Interoperability Options
+@xref{Interoperability Options,,Options for interoperability}.
+@gccoptlist{-fc-prototypes}
+
@item Code Generation Options
@xref{Code Gen Options,,Options for code generation conventions}.
@gccoptlist{-faggressive-function-elimination -fblas-matmul-limit=@var{n} @gol
@@ -1564,12 +1570,12 @@ The default value for @var{n} is 32768.
@item -fstack-arrays
@opindex @code{fstack-arrays}
-Adding this option will make the Fortran compiler put all local arrays,
-even those of unknown size onto stack memory. If your program uses very
+Adding this option will make the Fortran compiler put all arrays of
+unknown size and array temporaries onto stack memory. If your program uses very
large local arrays it is possible that you will have to extend your runtime
limits for stack memory on some operating systems. This flag is enabled
-by default at optimization level @option{-Ofast}.
-
+by default at optimization level @option{-Ofast} unless
+@option{-fmax-stack-var-size} is specified.
@item -fpack-derived
@opindex @code{fpack-derived}
@@ -1746,6 +1752,34 @@ shared by @command{gfortran}, @command{gcc}, and other GNU compilers.
@c man end
+@node Interoperability Options
+@section Options for interoperability with other languages
+
+@table @asis
+
+@item -fc-prototypes
+@opindex @code{c-prototypes}
+@cindex Generating C prototypes from Fortran source code
+This option will generate C prototypes from @code{BIND(C)} variable
+declarations, types and procedure interfaces and writes them to
+standard output. @code{ENUM} is not yet supported.
+
+The generated prototypes may need inclusion of an appropriate header,
+such as @code{<stdint.h>} or @code{<stdlib.h>}. For types which are
+not specified using the appropriate kind from the @code{iso_c_binding}
+module, a warning is added as a comment to the code.
+
+For function pointers, a pointer to a function returning @code{int}
+without an explicit argument list is generated.
+
+Example of use:
+@smallexample
+$ gfortran -fc-prototypes -fsyntax-only foo.f90 > foo.h
+@end smallexample
+where the C code intended for interoperating with the Fortran code
+then uses @code{#include "foo.h"}.
+@end table
+
@node Environment Variables
@section Environment variables affecting @command{gfortran}
@cindex environment variable
diff --git a/gcc/fortran/ioparm.def b/gcc/fortran/ioparm.def
index 9789dd164ae..ca5631b9cd9 100644
--- a/gcc/fortran/ioparm.def
+++ b/gcc/fortran/ioparm.def
@@ -82,7 +82,7 @@ IOPARM (inquire, read, 1 << 27, char2)
IOPARM (inquire, write, 1 << 28, char1)
IOPARM (inquire, readwrite, 1 << 29, char2)
IOPARM (inquire, convert, 1 << 30, char1)
-IOPARM (inquire, flags2, 1 << 31, int4)
+IOPARM (inquire, flags2, 1U << 31, int4)
IOPARM (inquire, asynchronous, 1 << 0, char1)
IOPARM (inquire, decimal, 1 << 1, char2)
IOPARM (inquire, encoding, 1 << 2, char1)
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
index 4421ce42687..94185da103e 100644
--- a/gcc/fortran/lang.opt
+++ b/gcc/fortran/lang.opt
@@ -416,6 +416,10 @@ fcray-pointer
Fortran Var(flag_cray_pointer)
Use the Cray Pointer extension.
+fc-prototypes
+Fortran Var(flag_c_prototypes)
+Generate C prototypes from BIND(C) declarations.
+
fd-lines-as-code
Fortran RejectNegative
Ignore 'D' in column one in fixed form.
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index 1af76aa81ec..f7bbd7f2cde 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -52,14 +52,13 @@ set_default_std_flags (void)
static void
set_dec_flags (int value)
{
- /* Allow legacy code without warnings. */
- gfc_option.allow_std |= GFC_STD_F95_OBS | GFC_STD_F95_DEL
- | GFC_STD_GNU | GFC_STD_LEGACY;
- gfc_option.warn_std &= ~(GFC_STD_LEGACY | GFC_STD_F95_DEL);
-
- /* Set -fd-lines-as-comments by default. */
- if (value && gfc_current_form != FORM_FREE && gfc_option.flag_d_lines == -1)
- gfc_option.flag_d_lines = 0;
+ if (value)
+ {
+ /* Allow legacy code without warnings. */
+ gfc_option.allow_std |= GFC_STD_F95_OBS | GFC_STD_F95_DEL
+ | GFC_STD_GNU | GFC_STD_LEGACY;
+ gfc_option.warn_std &= ~(GFC_STD_LEGACY | GFC_STD_F95_DEL);
+ }
/* Set other DEC compatibility extensions. */
flag_dollar_ok |= value;
@@ -235,7 +234,9 @@ gfc_post_options (const char **pfilename)
if (flag_protect_parens == -1)
flag_protect_parens = !optimize_fast;
- if (flag_stack_arrays == -1)
+ /* -Ofast sets implies -fstack-arrays unless an explicit size is set for
+ stack arrays. */
+ if (flag_stack_arrays == -1 && flag_max_stack_var_size == -2)
flag_stack_arrays = optimize_fast;
/* By default, disable (re)allocation during assignment for -std=f95,
@@ -337,8 +338,15 @@ gfc_post_options (const char **pfilename)
diagnostic_classify_diagnostic (global_dc, OPT_Wline_truncation,
DK_ERROR, UNKNOWN_LOCATION);
}
- else if (warn_line_truncation == -1)
- warn_line_truncation = 0;
+ else
+ {
+ /* With -fdec, set -fd-lines-as-comments by default in fixed form. */
+ if (flag_dec && gfc_option.flag_d_lines == -1)
+ gfc_option.flag_d_lines = 0;
+
+ if (warn_line_truncation == -1)
+ warn_line_truncation = 0;
+ }
/* If -pedantic, warn about the use of GNU extensions. */
if (pedantic && (gfc_option.allow_std & GFC_STD_GNU) != 0)
@@ -380,6 +388,10 @@ gfc_post_options (const char **pfilename)
flag_max_stack_var_size = -1;
}
+ /* Set flag_stack_arrays correctly. */
+ if (flag_stack_arrays == -1)
+ flag_stack_arrays = 0;
+
/* Set default. */
if (flag_max_stack_var_size == -2)
flag_max_stack_var_size = 32768;
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index 305a036a71e..9ac50f002dd 100644
--- a/gcc/fortran/parse.c
+++ b/gcc/fortran/parse.c
@@ -6218,6 +6218,9 @@ loop:
if (flag_dump_fortran_original)
gfc_dump_parse_tree (gfc_current_ns, stdout);
+ if (flag_c_prototypes)
+ gfc_dump_c_prototypes (gfc_current_ns, stdout);
+
gfc_get_errors (NULL, &errors);
if (s.state == COMP_MODULE || s.state == COMP_SUBMODULE)
{
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 12903a4390a..30928a2ac2d 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -9098,7 +9098,7 @@ find_reachable_labels (gfc_code *block)
if (!block)
return;
- cs_base->reachable_labels = bitmap_obstack_alloc (&labels_obstack);
+ cs_base->reachable_labels = bitmap_alloc (&labels_obstack);
/* Collect labels in this block. We don't keep those corresponding
to END {IF|SELECT}, these are checked in resolve_branch by going
@@ -14397,17 +14397,18 @@ resolve_symbol (gfc_symbol *sym)
}
}
- /* If the symbol is marked as bind(c), verify it's type and kind. Do not
- do this for something that was implicitly typed because that is handled
- in gfc_set_default_type. Handle dummy arguments and procedure
- definitions separately. Also, anything that is use associated is not
- handled here but instead is handled in the module it is declared in.
- Finally, derived type definitions are allowed to be BIND(C) since that
- only implies that they're interoperable, and they are checked fully for
- interoperability when a variable is declared of that type. */
- if (sym->attr.is_bind_c && sym->attr.implicit_type == 0 &&
- sym->attr.use_assoc == 0 && sym->attr.dummy == 0 &&
- sym->attr.flavor != FL_PROCEDURE && sym->attr.flavor != FL_DERIVED)
+ /* If the symbol is marked as bind(c), that it is declared at module level
+ scope and verify its type and kind. Do not do the latter for symbols
+ that are implicitly typed because that is handled in
+ gfc_set_default_type. Handle dummy arguments and procedure definitions
+ separately. Also, anything that is use associated is not handled here
+ but instead is handled in the module it is declared in. Finally, derived
+ type definitions are allowed to be BIND(C) since that only implies that
+ they're interoperable, and they are checked fully for interoperability
+ when a variable is declared of that type. */
+ if (sym->attr.is_bind_c && sym->attr.use_assoc == 0
+ && sym->attr.dummy == 0 && sym->attr.flavor != FL_PROCEDURE
+ && sym->attr.flavor != FL_DERIVED)
{
bool t = true;
@@ -14421,11 +14422,11 @@ resolve_symbol (gfc_symbol *sym)
"module level scope", sym->name, &(sym->declared_at));
t = false;
}
- else if (sym->common_head != NULL)
+ else if (sym->common_head != NULL && sym->attr.implicit_type == 0)
{
t = verify_com_block_vars_c_interop (sym->common_head);
}
- else
+ else if (sym->attr.implicit_type == 0)
{
/* If type() declaration, we need to verify that the components
of the given type are all C interoperable, etc. */
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 47e8c091a9b..9efb531a722 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -4577,7 +4577,10 @@ gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest,
&& gfc_check_dependency (dest_expr, ss_expr, false))
ss_info->data.scalar.needs_temporary = 1;
- continue;
+ if (nDepend)
+ break;
+ else
+ continue;
}
if (dest_expr->symtree->n.sym != ss_expr->symtree->n.sym)
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index b2f73b78466..74d860689ee 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -4875,7 +4875,7 @@ gfc_trans_use_stmts (gfc_namespace * ns)
(*debug_hooks->imported_module_or_decl) (entry->namespace_decl,
NULL_TREE,
ns->proc_name->backend_decl,
- false);
+ false, false);
for (rent = use_stmt->rename; rent; rent = rent->next)
{
tree decl, local_name;
@@ -4952,7 +4952,8 @@ gfc_trans_use_stmts (gfc_namespace * ns)
gfc_set_backend_locus (&rent->where);
(*debug_hooks->imported_module_or_decl) (decl, local_name,
ns->proc_name->backend_decl,
- !use_stmt->only_flag);
+ !use_stmt->only_flag,
+ false);
}
}
}
diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c
index 8617cd51a7c..76ee97b81c0 100644
--- a/gcc/fortran/trans-types.c
+++ b/gcc/fortran/trans-types.c
@@ -36,6 +36,7 @@ along with GCC; see the file COPYING3. If not see
#include "trans-types.h"
#include "trans-const.h"
#include "dwarf2out.h" /* For struct array_descr_info. */
+#include "attribs.h"
#if (GFC_MAX_DIMENSIONS < 10)
diff --git a/gcc/function.c b/gcc/function.c
index f625489205b..20c287bc8e0 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -77,6 +77,8 @@ along with GCC; see the file COPYING3. If not see
#include "rtl-chkp.h"
#include "tree-dfa.h"
#include "tree-ssa.h"
+#include "stringpool.h"
+#include "attribs.h"
/* So we can assign to cfun in this file. */
#undef cfun
@@ -2218,20 +2220,11 @@ use_register_for_decl (const_tree decl)
if (!DECL_REGISTER (decl))
return false;
- switch (TREE_CODE (TREE_TYPE (decl)))
- {
- case RECORD_TYPE:
- case UNION_TYPE:
- case QUAL_UNION_TYPE:
- /* When not optimizing, disregard register keyword for variables with
- types containing methods, otherwise the methods won't be callable
- from the debugger. */
- if (TYPE_METHODS (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
- return false;
- break;
- default:
- break;
- }
+ /* When not optimizing, disregard register keyword for types that
+ could have methods, otherwise the methods won't be callable from
+ the debugger. */
+ if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (decl)))
+ return false;
return true;
}
@@ -5263,6 +5256,16 @@ expand_function_start (tree subr)
}
}
+ /* The following was moved from init_function_start.
+ The move is supposed to make sdb output more accurate. */
+ /* Indicate the beginning of the function body,
+ as opposed to parm setup. */
+ emit_note (NOTE_INSN_FUNCTION_BEG);
+
+ gcc_assert (NOTE_P (get_last_insn ()));
+
+ parm_birth_insn = get_last_insn ();
+
/* If the function receives a non-local goto, then store the
bits we need to restore the frame pointer. */
if (cfun->nonlocal_goto_save_area)
@@ -5284,16 +5287,6 @@ expand_function_start (tree subr)
update_nonlocal_goto_save_area ();
}
- /* The following was moved from init_function_start.
- The move is supposed to make sdb output more accurate. */
- /* Indicate the beginning of the function body,
- as opposed to parm setup. */
- emit_note (NOTE_INSN_FUNCTION_BEG);
-
- gcc_assert (NOTE_P (get_last_insn ()));
-
- parm_birth_insn = get_last_insn ();
-
if (crtl->profile)
{
#ifdef PROFILE_HOOK
@@ -6057,20 +6050,42 @@ thread_prologue_and_epilogue_insns (void)
if (split_prologue_seq || prologue_seq)
{
+ rtx_insn *split_prologue_insn = split_prologue_seq;
if (split_prologue_seq)
- insert_insn_on_edge (split_prologue_seq, orig_entry_edge);
+ {
+ while (split_prologue_insn && !NONDEBUG_INSN_P (split_prologue_insn))
+ split_prologue_insn = NEXT_INSN (split_prologue_insn);
+ insert_insn_on_edge (split_prologue_seq, orig_entry_edge);
+ }
+ rtx_insn *prologue_insn = prologue_seq;
if (prologue_seq)
- insert_insn_on_edge (prologue_seq, entry_edge);
+ {
+ while (prologue_insn && !NONDEBUG_INSN_P (prologue_insn))
+ prologue_insn = NEXT_INSN (prologue_insn);
+ insert_insn_on_edge (prologue_seq, entry_edge);
+ }
commit_edge_insertions ();
/* Look for basic blocks within the prologue insns. */
- auto_sbitmap blocks (last_basic_block_for_fn (cfun));
- bitmap_clear (blocks);
- bitmap_set_bit (blocks, entry_edge->dest->index);
- bitmap_set_bit (blocks, orig_entry_edge->dest->index);
- find_many_sub_basic_blocks (blocks);
+ if (split_prologue_insn
+ && BLOCK_FOR_INSN (split_prologue_insn) == NULL)
+ split_prologue_insn = NULL;
+ if (prologue_insn
+ && BLOCK_FOR_INSN (prologue_insn) == NULL)
+ prologue_insn = NULL;
+ if (split_prologue_insn || prologue_insn)
+ {
+ auto_sbitmap blocks (last_basic_block_for_fn (cfun));
+ bitmap_clear (blocks);
+ if (split_prologue_insn)
+ bitmap_set_bit (blocks,
+ BLOCK_FOR_INSN (split_prologue_insn)->index);
+ if (prologue_insn)
+ bitmap_set_bit (blocks, BLOCK_FOR_INSN (prologue_insn)->index);
+ find_many_sub_basic_blocks (blocks);
+ }
}
default_rtl_profile ();
diff --git a/gcc/gcc.c b/gcc/gcc.c
index d8c5260e36b..987eff55aa6 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -878,8 +878,7 @@ proper position among the other output files. */
#endif
#ifdef ENABLE_DEFAULT_PIE
-#define NO_PIE_SPEC "no-pie|static"
-#define PIE_SPEC NO_PIE_SPEC "|r|shared:;"
+#define PIE_SPEC "!no-pie"
#define NO_FPIE1_SPEC "fno-pie"
#define FPIE1_SPEC NO_FPIE1_SPEC ":;"
#define NO_FPIE2_SPEC "fno-PIE"
@@ -900,7 +899,6 @@ proper position among the other output files. */
#define FPIE_OR_FPIC_SPEC NO_FPIE_AND_FPIC_SPEC ":;"
#else
#define PIE_SPEC "pie"
-#define NO_PIE_SPEC PIE_SPEC "|r|shared:;"
#define FPIE1_SPEC "fpie"
#define NO_FPIE1_SPEC FPIE1_SPEC ":;"
#define FPIE2_SPEC "fPIE"
@@ -929,7 +927,7 @@ proper position among the other output files. */
#else
#define LD_PIE_SPEC ""
#endif
-#define LINK_PIE_SPEC "%{no-pie:} " "%{" PIE_SPEC ":" LD_PIE_SPEC "} "
+#define LINK_PIE_SPEC "%{static|shared|r:;" PIE_SPEC ":" LD_PIE_SPEC "} "
#endif
#ifndef LINK_BUILDID_SPEC
@@ -1017,8 +1015,10 @@ proper position among the other output files. */
#endif
/* -u* was put back because both BSD and SysV seem to support it. */
-/* %{static:} simply prevents an error message if the target machine
- doesn't handle -static. */
+/* %{static|no-pie:} simply prevents an error message:
+ 1. If the target machine doesn't handle -static.
+ 2. If PIE isn't enabled by default.
+ */
/* We want %{T*} after %{L*} and %D so that it can be used to specify linker
scripts which exist in user specified directories, or in standard
directories. */
@@ -1035,7 +1035,7 @@ proper position among the other output files. */
"%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \
"%X %{o*} %{e*} %{N} %{n} %{r}\
%{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}} \
- %{static:} %{L*} %(mfwrap) %(link_libgcc) " \
+ %{static|no-pie:} %{L*} %(mfwrap) %(link_libgcc) " \
VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o " CHKP_SPEC " \
%{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
%:include(libgomp.spec)%(link_gomp)}\
diff --git a/gcc/gcov.c b/gcc/gcov.c
index e324cadad82..c56bac20278 100644
--- a/gcc/gcov.c
+++ b/gcc/gcov.c
@@ -539,13 +539,13 @@ unblock (const block_t *u, block_vector_t &blocked,
unsigned index = it - blocked.begin ();
blocked.erase (it);
- for (block_vector_t::iterator it2 = block_lists[index].begin ();
- it2 != block_lists[index].end (); it2++)
- unblock (*it2, blocked, block_lists);
- for (unsigned j = 0; j < block_lists[index].size (); j++)
- unblock (u, blocked, block_lists);
+ block_vector_t to_unblock (block_lists[index]);
block_lists.erase (block_lists.begin () + index);
+
+ for (block_vector_t::iterator it = to_unblock.begin ();
+ it != to_unblock.end (); it++)
+ unblock (*it, blocked, block_lists);
}
/* Find circuit going to block V, PATH is provisional seen cycle.
diff --git a/gcc/gengenrtl.c b/gcc/gengenrtl.c
index 19381be38d2..e23327b5cfc 100644
--- a/gcc/gengenrtl.c
+++ b/gcc/gengenrtl.c
@@ -250,7 +250,7 @@ gendef (const char *format)
the memory and initializes it. */
puts ("{");
puts (" rtx rt;");
- puts (" rt = rtx_alloc_stat (code PASS_MEM_STAT);\n");
+ puts (" rt = rtx_alloc (code PASS_MEM_STAT);\n");
puts (" PUT_MODE_RAW (rt, mode);");
diff --git a/gcc/genmatch.c b/gcc/genmatch.c
index 7045bb9103c..9da911a3695 100644
--- a/gcc/genmatch.c
+++ b/gcc/genmatch.c
@@ -793,13 +793,17 @@ struct simplify
{
enum simplify_kind { SIMPLIFY, MATCH };
- simplify (simplify_kind kind_, operand *match_, operand *result_,
- vec<vec<user_id *> > for_vec_, cid_map_t *capture_ids_)
- : kind (kind_), match (match_), result (result_),
+ simplify (simplify_kind kind_, unsigned id_, operand *match_,
+ operand *result_, vec<vec<user_id *> > for_vec_,
+ cid_map_t *capture_ids_)
+ : kind (kind_), id (id_), match (match_), result (result_),
for_vec (for_vec_), for_subst_vec (vNULL),
capture_ids (capture_ids_), capture_max (capture_ids_->elements () - 1) {}
simplify_kind kind;
+ /* ID. This is kept to easily associate related simplifies expanded
+ from the same original one. */
+ unsigned id;
/* The expression that is matched against the GENERIC or GIMPLE IL. */
operand *match;
/* For a (simplify ...) an expression with ifs and withs with the expression
@@ -1008,7 +1012,7 @@ lower_commutative (simplify *s, vec<simplify *>& simplifiers)
vec<operand *> matchers = commutate (s->match, s->for_vec);
for (unsigned i = 0; i < matchers.length (); ++i)
{
- simplify *ns = new simplify (s->kind, matchers[i], s->result,
+ simplify *ns = new simplify (s->kind, s->id, matchers[i], s->result,
s->for_vec, s->capture_ids);
simplifiers.safe_push (ns);
}
@@ -1137,7 +1141,7 @@ lower_opt_convert (simplify *s, vec<simplify *>& simplifiers)
vec<operand *> matchers = lower_opt_convert (s->match);
for (unsigned i = 0; i < matchers.length (); ++i)
{
- simplify *ns = new simplify (s->kind, matchers[i], s->result,
+ simplify *ns = new simplify (s->kind, s->id, matchers[i], s->result,
s->for_vec, s->capture_ids);
simplifiers.safe_push (ns);
}
@@ -1238,7 +1242,7 @@ lower_cond (simplify *s, vec<simplify *>& simplifiers)
vec<operand *> matchers = lower_cond (s->match);
for (unsigned i = 0; i < matchers.length (); ++i)
{
- simplify *ns = new simplify (s->kind, matchers[i], s->result,
+ simplify *ns = new simplify (s->kind, s->id, matchers[i], s->result,
s->for_vec, s->capture_ids);
simplifiers.safe_push (ns);
}
@@ -1453,7 +1457,7 @@ lower_for (simplify *sin, vec<simplify *>& simplifiers)
if (skip)
continue;
- simplify *ns = new simplify (s->kind, match_op, result_op,
+ simplify *ns = new simplify (s->kind, s->id, match_op, result_op,
vNULL, s->capture_ids);
ns->for_subst_vec.safe_splice (s->for_subst_vec);
if (result_op
@@ -1527,8 +1531,11 @@ struct sinfo_hashmap_traits : simple_hashmap_traits<pointer_hash<dt_simplify>,
typedef hash_map<void * /* unused */, sinfo *, sinfo_hashmap_traits>
sinfo_map_t;
+/* Current simplifier ID we are processing during insertion into the
+ decision tree. */
+static unsigned current_id;
-/* Decision tree base class, used for DT_TRUE and DT_NODE. */
+/* Decision tree base class, used for DT_NODE. */
struct dt_node
{
@@ -1536,6 +1543,7 @@ struct dt_node
enum dt_type type;
unsigned level;
+ dt_node *parent;
vec<dt_node *> kids;
/* Statistics. */
@@ -1543,12 +1551,14 @@ struct dt_node
unsigned total_size;
unsigned max_level;
- dt_node (enum dt_type type_): type (type_), level (0), kids (vNULL) {}
+ dt_node (enum dt_type type_, dt_node *parent_)
+ : type (type_), level (0), parent (parent_), kids (vNULL) {}
dt_node *append_node (dt_node *);
- dt_node *append_op (operand *, dt_node *parent = 0, unsigned pos = 0);
- dt_node *append_true_op (dt_node *parent = 0, unsigned pos = 0);
- dt_node *append_match_op (dt_operand *, dt_node *parent = 0, unsigned pos = 0);
+ dt_node *append_op (operand *, dt_node *parent, unsigned pos);
+ dt_node *append_true_op (operand *, dt_node *parent, unsigned pos);
+ dt_node *append_match_op (operand *, dt_operand *, dt_node *parent,
+ unsigned pos);
dt_node *append_simplify (simplify *, unsigned, dt_operand **);
virtual void gen (FILE *, int, bool) {}
@@ -1561,20 +1571,20 @@ struct dt_node
void analyze (sinfo_map_t &);
};
-/* Generic decision tree node used for DT_OPERAND and DT_MATCH. */
+/* Generic decision tree node used for DT_OPERAND, DT_MATCH and DT_TRUE. */
struct dt_operand : public dt_node
{
operand *op;
dt_operand *match_dop;
- dt_operand *parent;
unsigned pos;
bool value_match;
+ unsigned for_id;
dt_operand (enum dt_type type, operand *op_, dt_operand *match_dop_,
- dt_operand *parent_ = 0, unsigned pos_ = 0)
- : dt_node (type), op (op_), match_dop (match_dop_),
- parent (parent_), pos (pos_), value_match (false) {}
+ dt_operand *parent_, unsigned pos_)
+ : dt_node (type, parent_), op (op_), match_dop (match_dop_),
+ pos (pos_), value_match (false), for_id (current_id) {}
void gen (FILE *, int, bool);
unsigned gen_predicate (FILE *, int, const char *, bool);
@@ -1597,7 +1607,7 @@ struct dt_simplify : public dt_node
sinfo *info;
dt_simplify (simplify *s_, unsigned pattern_no_, dt_operand **indexes_)
- : dt_node (DT_SIMPLIFY), s (s_), pattern_no (pattern_no_),
+ : dt_node (DT_SIMPLIFY, NULL), s (s_), pattern_no (pattern_no_),
indexes (indexes_), info (NULL) {}
void gen_1 (FILE *, int, bool, operand *);
@@ -1610,7 +1620,8 @@ inline bool
is_a_helper <dt_operand *>::test (dt_node *n)
{
return (n->type == dt_node::DT_OPERAND
- || n->type == dt_node::DT_MATCH);
+ || n->type == dt_node::DT_MATCH
+ || n->type == dt_node::DT_TRUE);
}
template<>
@@ -1633,7 +1644,7 @@ struct decision_tree
void gen (FILE *f, bool gimple);
void print (FILE *f = stderr);
- decision_tree () { root = new dt_node (dt_node::DT_NODE); }
+ decision_tree () { root = new dt_node (dt_node::DT_NODE, NULL); }
static dt_node *insert_operand (dt_node *, operand *, dt_operand **indexes,
unsigned pos = 0, dt_node *parent = 0);
@@ -1703,15 +1714,48 @@ decision_tree::find_node (vec<dt_node *>& ops, dt_node *p)
&& !ops.is_empty ()
&& ops.last ()->type == dt_node::DT_TRUE)
return ops.last ();
+ dt_operand *true_node = NULL;
for (int i = ops.length () - 1; i >= 0; --i)
{
/* But we can't merge across DT_TRUE nodes as they serve as
pattern order barriers to make sure that patterns apply
in order of appearance in case multiple matches are possible. */
if (ops[i]->type == dt_node::DT_TRUE)
- return NULL;
+ {
+ if (! true_node
+ || as_a <dt_operand *> (ops[i])->for_id > true_node->for_id)
+ true_node = as_a <dt_operand *> (ops[i]);
+ }
if (decision_tree::cmp_node (ops[i], p))
- return ops[i];
+ {
+ /* Unless we are processing the same pattern or the blocking
+ pattern is before the one we are going to merge with. */
+ if (true_node
+ && true_node->for_id != current_id
+ && true_node->for_id > as_a <dt_operand *> (ops[i])->for_id)
+ {
+ if (verbose >= 1)
+ {
+ source_location p_loc = 0;
+ if (p->type == dt_node::DT_OPERAND)
+ p_loc = as_a <dt_operand *> (p)->op->location;
+ source_location op_loc = 0;
+ if (ops[i]->type == dt_node::DT_OPERAND)
+ op_loc = as_a <dt_operand *> (ops[i])->op->location;
+ source_location true_loc = 0;
+ true_loc = true_node->op->location;
+ warning_at (p_loc,
+ "failed to merge decision tree node");
+ warning_at (op_loc,
+ "with the following");
+ warning_at (true_loc,
+ "because of the following which serves as ordering "
+ "barrier");
+ }
+ return NULL;
+ }
+ return ops[i];
+ }
}
return NULL;
}
@@ -1747,20 +1791,21 @@ dt_node::append_op (operand *op, dt_node *parent, unsigned pos)
/* Append a DT_TRUE decision tree node. */
dt_node *
-dt_node::append_true_op (dt_node *parent, unsigned pos)
+dt_node::append_true_op (operand *op, dt_node *parent, unsigned pos)
{
dt_operand *parent_ = safe_as_a<dt_operand *> (parent);
- dt_operand *n = new dt_operand (DT_TRUE, 0, 0, parent_, pos);
+ dt_operand *n = new dt_operand (DT_TRUE, op, 0, parent_, pos);
return append_node (n);
}
/* Append a DT_MATCH decision tree node. */
dt_node *
-dt_node::append_match_op (dt_operand *match_dop, dt_node *parent, unsigned pos)
+dt_node::append_match_op (operand *op, dt_operand *match_dop,
+ dt_node *parent, unsigned pos)
{
dt_operand *parent_ = as_a<dt_operand *> (parent);
- dt_operand *n = new dt_operand (DT_MATCH, 0, match_dop, parent_, pos);
+ dt_operand *n = new dt_operand (DT_MATCH, op, match_dop, parent_, pos);
return append_node (n);
}
@@ -1839,7 +1884,7 @@ decision_tree::insert_operand (dt_node *p, operand *o, dt_operand **indexes,
q = insert_operand (p, c->what, indexes, pos, parent);
else
{
- q = elm = p->append_true_op (parent, pos);
+ q = elm = p->append_true_op (o, parent, pos);
goto at_assert_elm;
}
// get to the last capture
@@ -1853,19 +1898,19 @@ decision_tree::insert_operand (dt_node *p, operand *o, dt_operand **indexes,
unsigned cc_index = c->where;
dt_operand *match_op = indexes[cc_index];
- dt_operand temp (dt_node::DT_TRUE, 0, 0);
+ dt_operand temp (dt_node::DT_TRUE, 0, 0, 0, 0);
elm = decision_tree::find_node (p->kids, &temp);
if (elm == 0)
{
- dt_operand temp (dt_node::DT_MATCH, 0, match_op);
+ dt_operand temp (dt_node::DT_MATCH, 0, match_op, 0, 0);
temp.value_match = c->value_match;
elm = decision_tree::find_node (p->kids, &temp);
}
}
else
{
- dt_operand temp (dt_node::DT_OPERAND, c->what, 0);
+ dt_operand temp (dt_node::DT_OPERAND, c->what, 0, 0, 0);
elm = decision_tree::find_node (p->kids, &temp);
}
@@ -1878,7 +1923,7 @@ at_assert_elm:
}
else
{
- p = p->append_match_op (indexes[capt_index], parent, pos);
+ p = p->append_match_op (o, indexes[capt_index], parent, pos);
as_a <dt_operand *>(p)->value_match = c->value_match;
if (c->what)
return insert_operand (p, c->what, indexes, 0, p);
@@ -1903,6 +1948,7 @@ at_assert_elm:
void
decision_tree::insert (struct simplify *s, unsigned pattern_no)
{
+ current_id = s->id;
dt_operand **indexes = XCNEWVEC (dt_operand *, s->capture_max + 1);
dt_node *p = decision_tree::insert_operand (root, s->match, indexes);
p->append_simplify (s, pattern_no, indexes);
@@ -1938,9 +1984,12 @@ decision_tree::print_node (dt_node *p, FILE *f, unsigned indent)
fprintf (f, "%p, ", (void *) s->indexes[i]);
fprintf (f, " } ");
}
+ if (is_a <dt_operand *> (p))
+ fprintf (f, " [%u]", as_a <dt_operand *> (p)->for_id);
}
- fprintf (stderr, " (%p), %u, %u\n", (void *) p, p->level, p->kids.length ());
+ fprintf (stderr, " (%p, %p), %u, %u\n",
+ (void *) p, (void *) p->parent, p->level, p->kids.length ());
for (unsigned i = 0; i < p->kids.length (); ++i)
decision_tree::print_node (p->kids[i], f, indent + 2);
@@ -2572,12 +2621,12 @@ capture::gen_transform (FILE *f, int indent, const char *dest, bool gimple,
char *
dt_operand::get_name (char *name)
{
- if (!parent)
+ if (! parent)
sprintf (name, "t");
else if (parent->level == 1)
sprintf (name, "op%u", pos);
else if (parent->type == dt_node::DT_MATCH)
- return parent->get_name (name);
+ return as_a <dt_operand *> (parent)->get_name (name);
else
sprintf (name, "o%u%u", parent->level, pos);
return name;
@@ -2588,7 +2637,7 @@ dt_operand::get_name (char *name)
void
dt_operand::gen_opname (char *name, unsigned pos)
{
- if (!parent)
+ if (! parent)
sprintf (name, "op%u", pos);
else
sprintf (name, "o%u%u", level, pos);
@@ -2646,6 +2695,7 @@ dt_operand::gen_gimple_expr (FILE *f, int indent)
expr *e = static_cast<expr *> (op);
id_base *id = e->operation;
unsigned n_ops = e->ops.length ();
+ unsigned n_braces = 0;
for (unsigned i = 0; i < n_ops; ++i)
{
@@ -2678,14 +2728,15 @@ dt_operand::gen_gimple_expr (FILE *f, int indent)
"if ((TREE_CODE (%s) == SSA_NAME\n",
child_opname);
fprintf_indent (f, indent,
- " || is_gimple_min_invariant (%s))\n",
+ " || is_gimple_min_invariant (%s)))\n",
child_opname);
fprintf_indent (f, indent,
- " && (%s = do_valueize (valueize, %s)))\n",
- child_opname, child_opname);
- fprintf_indent (f, indent,
" {\n");
indent += 4;
+ n_braces++;
+ fprintf_indent (f, indent,
+ "%s = do_valueize (valueize, %s);\n",
+ child_opname, child_opname);
continue;
}
else
@@ -2698,10 +2749,8 @@ dt_operand::gen_gimple_expr (FILE *f, int indent)
"tree %s = gimple_call_arg (def, %u);\n",
child_opname, i);
fprintf_indent (f, indent,
- "if ((%s = do_valueize (valueize, %s)))\n",
+ "%s = do_valueize (valueize, %s);\n",
child_opname, child_opname);
- fprintf_indent (f, indent, " {\n");
- indent += 4;
}
/* While the toplevel operands are canonicalized by the caller
after valueizing operands of sub-expressions we have to
@@ -2726,7 +2775,7 @@ dt_operand::gen_gimple_expr (FILE *f, int indent)
}
}
- return n_ops;
+ return n_braces;
}
/* Generate GENERIC matching code for the decision tree operand. */
@@ -2867,14 +2916,10 @@ dt_node::gen_kids_1 (FILE *f, int indent, bool gimple,
fprintf_indent (f, indent,
"case SSA_NAME:\n");
fprintf_indent (f, indent,
- " if (do_valueize (valueize, %s) != NULL_TREE)\n",
+ " if (gimple *def_stmt = get_def (valueize, %s))\n",
kid_opname);
fprintf_indent (f, indent,
" {\n");
- fprintf_indent (f, indent,
- " gimple *def_stmt = SSA_NAME_DEF_STMT (%s);\n",
- kid_opname);
-
indent += 6;
if (exprs_len)
{
@@ -3461,11 +3506,11 @@ dt_simplify::gen (FILE *f, int indent, bool gimple)
if (! s->for_subst_vec[i].first->used)
continue;
if (is_a <operator_id *> (s->for_subst_vec[i].second))
- fprintf_indent (f, indent, "enum tree_code %s = %s;\n",
+ fprintf_indent (f, indent, "const enum tree_code %s = %s;\n",
s->for_subst_vec[i].first->id,
s->for_subst_vec[i].second->id);
else if (is_a <fn_id *> (s->for_subst_vec[i].second))
- fprintf_indent (f, indent, "combined_fn %s = %s;\n",
+ fprintf_indent (f, indent, "const combined_fn %s = %s;\n",
s->for_subst_vec[i].first->id,
s->for_subst_vec[i].second->id);
else
@@ -3601,13 +3646,13 @@ decision_tree::gen (FILE *f, bool gimple)
"%s (code_helper *res_code, tree *res_ops,\n"
" gimple_seq *seq, tree (*valueize)(tree) "
"ATTRIBUTE_UNUSED,\n"
- " tree ARG_UNUSED (type), tree *ARG_UNUSED "
+ " const tree ARG_UNUSED (type), tree *ARG_UNUSED "
"(captures)\n",
s->fname);
else
{
fprintf (f, "\nstatic tree\n"
- "%s (location_t ARG_UNUSED (loc), tree ARG_UNUSED (type),\n",
+ "%s (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),\n",
(*iter).second->fname);
for (unsigned i = 0;
i < as_a <expr *>(s->s->s->match)->ops.length (); ++i)
@@ -3619,10 +3664,10 @@ decision_tree::gen (FILE *f, bool gimple)
if (! s->s->s->for_subst_vec[i].first->used)
continue;
if (is_a <operator_id *> (s->s->s->for_subst_vec[i].second))
- fprintf (f, ", enum tree_code ARG_UNUSED (%s)",
+ fprintf (f, ", const enum tree_code ARG_UNUSED (%s)",
s->s->s->for_subst_vec[i].first->id);
else if (is_a <fn_id *> (s->s->s->for_subst_vec[i].second))
- fprintf (f, ", combined_fn ARG_UNUSED (%s)",
+ fprintf (f, ", const combined_fn ARG_UNUSED (%s)",
s->s->s->for_subst_vec[i].first->id);
}
@@ -3663,7 +3708,7 @@ decision_tree::gen (FILE *f, bool gimple)
else
fprintf (f, "\nstatic tree\n"
"generic_simplify_%s (location_t ARG_UNUSED (loc), enum "
- "tree_code ARG_UNUSED (code), tree ARG_UNUSED (type)",
+ "tree_code ARG_UNUSED (code), const tree ARG_UNUSED (type)",
e->operation->id);
for (unsigned i = 0; i < n; ++i)
fprintf (f, ", tree op%d", i);
@@ -3683,11 +3728,11 @@ decision_tree::gen (FILE *f, bool gimple)
fprintf (f, "\nstatic bool\n"
"gimple_simplify (code_helper *res_code, tree *res_ops,\n"
" gimple_seq *seq, tree (*valueize)(tree),\n"
- " code_helper code, tree type");
+ " code_helper code, const tree type");
else
fprintf (f, "\ntree\n"
"generic_simplify (location_t loc, enum tree_code code, "
- "tree type ATTRIBUTE_UNUSED");
+ "const tree type ATTRIBUTE_UNUSED");
for (unsigned i = 0; i < n; ++i)
fprintf (f, ", tree op%d", i);
fprintf (f, ")\n");
@@ -3751,7 +3796,7 @@ write_predicate (FILE *f, predicate_id *p, decision_tree &dt, bool gimple)
p->nargs > 0 ? ", tree *res_ops" : "",
gimple ? ", tree (*valueize)(tree) ATTRIBUTE_UNUSED" : "");
/* Conveniently make 'type' available. */
- fprintf_indent (f, 2, "tree type = TREE_TYPE (t);\n");
+ fprintf_indent (f, 2, "const tree type = TREE_TYPE (t);\n");
if (!gimple)
fprintf_indent (f, 2, "if (TREE_SIDE_EFFECTS (t)) return false;\n");
@@ -3823,6 +3868,7 @@ private:
vec<user_id *> oper_lists;
cid_map_t *capture_ids;
+ unsigned last_id;
public:
vec<simplify *> simplifiers;
@@ -4318,7 +4364,7 @@ parser::push_simplify (simplify::simplify_kind kind,
active_fors.safe_push (oper_lists);
simplifiers.safe_push
- (new simplify (kind, match, result,
+ (new simplify (kind, last_id++, match, result,
active_fors.copy (), capture_ids));
if (!oper_lists.is_empty ())
@@ -4883,6 +4929,7 @@ parser::parser (cpp_reader *r_)
capture_ids = NULL;
user_predicates = vNULL;
parsing_match_operand = false;
+ last_id = 0;
const cpp_token *token = next ();
while (token->type != CPP_EOF)
diff --git a/gcc/gimple-expr.c b/gcc/gimple-expr.c
index 13e55ef55fe..c1771fcf1d0 100644
--- a/gcc/gimple-expr.c
+++ b/gcc/gimple-expr.c
@@ -35,6 +35,8 @@ along with GCC; see the file COPYING3. If not see
#include "hash-set.h"
#include "rtl.h"
#include "tree-pass.h"
+#include "stringpool.h"
+#include "attribs.h"
/* ----- Type related ----- */
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index d94dc9cd563..251446c5b82 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -56,6 +56,8 @@ along with GCC; see the file COPYING3. If not see
#include "ipa-chkp.h"
#include "tree-cfg.h"
#include "fold-const-call.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
/* Return true when DECL can be referenced from current unit.
@@ -4245,7 +4247,7 @@ maybe_canonicalize_mem_ref_addr (tree *t)
TREE_TYPE (*t),
TREE_OPERAND (TREE_OPERAND (*t, 0), 0),
TYPE_SIZE (TREE_TYPE (*t)),
- wide_int_to_tree (sizetype, idx));
+ wide_int_to_tree (bitsizetype, idx));
res = true;
}
}
diff --git a/gcc/gimple-match-head.c b/gcc/gimple-match-head.c
index 5f6aa273b96..8ad1f8c5eae 100644
--- a/gcc/gimple-match-head.c
+++ b/gcc/gimple-match-head.c
@@ -779,10 +779,25 @@ inline tree
do_valueize (tree (*valueize)(tree), tree op)
{
if (valueize && TREE_CODE (op) == SSA_NAME)
- return valueize (op);
+ {
+ tree tem = valueize (op);
+ if (tem)
+ return tem;
+ }
return op;
}
+/* Helper for the autogenerated code, get at the definition of NAME when
+ VALUEIZE allows that. */
+
+inline gimple *
+get_def (tree (*valueize)(tree), tree name)
+{
+ if (valueize && ! valueize (name))
+ return NULL;
+ return SSA_NAME_DEF_STMT (name);
+}
+
/* Routine to determine if the types T1 and T2 are effectively
the same for GIMPLE. If T1 or T2 is not a type, the test
applies to their TREE_TYPE. */
diff --git a/gcc/gimple-pretty-print.c b/gcc/gimple-pretty-print.c
index 4012b3b9e2d..5727d14777a 100644
--- a/gcc/gimple-pretty-print.c
+++ b/gcc/gimple-pretty-print.c
@@ -38,6 +38,8 @@ along with GCC; see the file COPYING3. If not see
#include "value-prof.h"
#include "trans-mem.h"
#include "cfganal.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
#define INDENT(SPACE) \
@@ -91,10 +93,10 @@ dump_profile (int frequency, profile_count &count)
char *buf;
if (count.initialized_p ())
- asprintf (&buf, "[%.2f%%] [count: %" PRId64 "]", fvalue,
- count.to_gcov_type ());
+ buf = xasprintf ("[%.2f%%] [count: %" PRId64 "]", fvalue,
+ count.to_gcov_type ());
else
- asprintf (&buf, "[%.2f%%] [count: INV]", fvalue);
+ buf = xasprintf ("[%.2f%%] [count: INV]", fvalue);
const char *ret = xstrdup_for_dump (buf);
free (buf);
@@ -121,12 +123,12 @@ dump_probability (profile_probability probability, profile_count &count)
char *buf;
if (count.initialized_p ())
- asprintf (&buf, "[%.2f%%] [count: %" PRId64 "]", fvalue,
- count.to_gcov_type ());
+ buf = xasprintf ("[%.2f%%] [count: %" PRId64 "]", fvalue,
+ count.to_gcov_type ());
else if (probability.initialized_p ())
- asprintf (&buf, "[%.2f%%] [count: INV]", fvalue);
+ buf = xasprintf ("[%.2f%%] [count: INV]", fvalue);
else
- asprintf (&buf, "[INV] [count: INV]");
+ buf = xasprintf ("[INV] [count: INV]");
const char *ret = xstrdup_for_dump (buf);
free (buf);
@@ -1120,9 +1122,6 @@ dump_gimple_label (pretty_printer *buffer, glabel *gs, int spc,
else
{
dump_generic_node (buffer, label, spc, flags, false);
- basic_block bb = gimple_bb (gs);
- if (bb && !(flags & TDF_GIMPLE))
- pp_scalar (buffer, " %s", dump_profile (bb->frequency, bb->count));
pp_colon (buffer);
}
if (flags & TDF_GIMPLE)
@@ -2695,16 +2694,12 @@ dump_gimple_bb_header (FILE *outf, basic_block bb, int indent,
}
else
{
- gimple *stmt = first_stmt (bb);
- if (!stmt || gimple_code (stmt) != GIMPLE_LABEL)
- {
- if (flags & TDF_GIMPLE)
- fprintf (outf, "%*sbb_%d:\n", indent, "", bb->index);
- else
- fprintf (outf, "%*s<bb %d> %s:\n",
- indent, "", bb->index, dump_profile (bb->frequency,
- bb->count));
- }
+ if (flags & TDF_GIMPLE)
+ fprintf (outf, "%*sbb_%d:\n", indent, "", bb->index);
+ else
+ fprintf (outf, "%*s<bb %d> %s:\n",
+ indent, "", bb->index, dump_profile (bb->frequency,
+ bb->count));
}
}
@@ -2760,22 +2755,10 @@ pp_cfg_jump (pretty_printer *buffer, edge e, dump_flags_t flags)
}
else
{
- gimple *stmt = first_stmt (e->dest);
-
pp_string (buffer, "goto <bb ");
pp_decimal_int (buffer, e->dest->index);
pp_greater (buffer);
- if (stmt && gimple_code (stmt) == GIMPLE_LABEL)
- {
- pp_string (buffer, " (");
- dump_generic_node (buffer,
- gimple_label_label (as_a <glabel *> (stmt)),
- 0, 0, false);
- pp_right_paren (buffer);
- pp_semicolon (buffer);
- }
- else
- pp_semicolon (buffer);
+ pp_semicolon (buffer);
dump_edge_probability (buffer, e);
}
diff --git a/gcc/gimple-ssa-store-merging.c b/gcc/gimple-ssa-store-merging.c
index 5e9227314b8..ea7dc846c43 100644
--- a/gcc/gimple-ssa-store-merging.c
+++ b/gcc/gimple-ssa-store-merging.c
@@ -516,12 +516,12 @@ sort_by_bitpos (const void *x, const void *y)
store_immediate_info *const *tmp = (store_immediate_info * const *) x;
store_immediate_info *const *tmp2 = (store_immediate_info * const *) y;
- if ((*tmp)->bitpos <= (*tmp2)->bitpos)
+ if ((*tmp)->bitpos < (*tmp2)->bitpos)
return -1;
else if ((*tmp)->bitpos > (*tmp2)->bitpos)
return 1;
-
- gcc_unreachable ();
+ else
+ return 0;
}
/* Sorting function for store_immediate_info objects.
diff --git a/gcc/gimple-ssa-strength-reduction.c b/gcc/gimple-ssa-strength-reduction.c
index 00c30444700..780e07914f6 100644
--- a/gcc/gimple-ssa-strength-reduction.c
+++ b/gcc/gimple-ssa-strength-reduction.c
@@ -2224,8 +2224,6 @@ create_add_on_incoming_edge (slsr_cand_t c, tree basis_name,
widest_int increment, edge e, location_t loc,
bool known_stride)
{
- basic_block insert_bb;
- gimple_stmt_iterator gsi;
tree lhs, basis_type;
gassign *new_stmt, *cast_stmt = NULL;
@@ -2294,39 +2292,25 @@ create_add_on_incoming_edge (slsr_cand_t c, tree basis_name,
}
}
- insert_bb = single_succ_p (e->src) ? e->src : split_edge (e);
- gsi = gsi_last_bb (insert_bb);
-
- if (!gsi_end_p (gsi) && stmt_ends_bb_p (gsi_stmt (gsi)))
+ if (cast_stmt)
{
- gsi_insert_before (&gsi, new_stmt, GSI_SAME_STMT);
- if (cast_stmt)
- {
- gsi_insert_before (&gsi, cast_stmt, GSI_SAME_STMT);
- gimple_set_location (cast_stmt, loc);
- }
- }
- else
- {
- if (cast_stmt)
- {
- gsi_insert_after (&gsi, cast_stmt, GSI_NEW_STMT);
- gimple_set_location (cast_stmt, loc);
- }
- gsi_insert_after (&gsi, new_stmt, GSI_NEW_STMT);
+ gimple_set_location (cast_stmt, loc);
+ gsi_insert_on_edge (e, cast_stmt);
}
gimple_set_location (new_stmt, loc);
+ gsi_insert_on_edge (e, new_stmt);
if (dump_file && (dump_flags & TDF_DETAILS))
{
if (cast_stmt)
{
- fprintf (dump_file, "Inserting cast in block %d: ",
- insert_bb->index);
+ fprintf (dump_file, "Inserting cast on edge %d->%d: ",
+ e->src->index, e->dest->index);
print_gimple_stmt (dump_file, cast_stmt, 0);
}
- fprintf (dump_file, "Inserting in block %d: ", insert_bb->index);
+ fprintf (dump_file, "Inserting on edge %d->%d: ", e->src->index,
+ e->dest->index);
print_gimple_stmt (dump_file, new_stmt, 0);
}
@@ -3770,6 +3754,10 @@ analyze_candidates_and_replace (void)
free (incr_vec);
}
}
+
+ /* For conditional candidates, we may have uncommitted insertions
+ on edges to clean up. */
+ gsi_commit_edge_inserts ();
}
namespace {
diff --git a/gcc/gimple.c b/gcc/gimple.c
index 488f8c82b82..c4e6f8176b9 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -41,6 +41,8 @@ along with GCC; see the file COPYING3. If not see
#include "builtins.h"
#include "selftest.h"
#include "gimple-pretty-print.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
@@ -117,7 +119,7 @@ gimple_size (enum gimple_code code)
operands. */
gimple *
-gimple_alloc_stat (enum gimple_code code, unsigned num_ops MEM_STAT_DECL)
+gimple_alloc (enum gimple_code code, unsigned num_ops MEM_STAT_DECL)
{
size_t size;
gimple *stmt;
@@ -169,7 +171,7 @@ static gimple *
gimple_build_with_ops_stat (enum gimple_code code, unsigned subcode,
unsigned num_ops MEM_STAT_DECL)
{
- gimple *s = gimple_alloc_stat (code, num_ops PASS_MEM_STAT);
+ gimple *s = gimple_alloc (code, num_ops PASS_MEM_STAT);
gimple_set_subcode (s, subcode);
return s;
@@ -796,7 +798,7 @@ gimple_build_eh_dispatch (int region)
VAR is bound to VALUE; block and location are taken from STMT. */
gdebug *
-gimple_build_debug_bind_stat (tree var, tree value, gimple *stmt MEM_STAT_DECL)
+gimple_build_debug_bind (tree var, tree value, gimple *stmt MEM_STAT_DECL)
{
gdebug *p
= as_a <gdebug *> (gimple_build_with_ops_stat (GIMPLE_DEBUG,
@@ -816,7 +818,7 @@ gimple_build_debug_bind_stat (tree var, tree value, gimple *stmt MEM_STAT_DECL)
VAR is bound to VALUE; block and location are taken from STMT. */
gdebug *
-gimple_build_debug_source_bind_stat (tree var, tree value,
+gimple_build_debug_source_bind (tree var, tree value,
gimple *stmt MEM_STAT_DECL)
{
gdebug *p
@@ -1613,7 +1615,7 @@ gimple_assign_set_rhs_with_ops (gimple_stmt_iterator *gsi, enum tree_code code,
gimple *new_stmt = gimple_alloc (gimple_code (stmt), new_rhs_ops + 1);
memcpy (new_stmt, stmt, gimple_size (gimple_code (stmt)));
gimple_init_singleton (new_stmt);
- gsi_replace (gsi, new_stmt, true);
+ gsi_replace (gsi, new_stmt, false);
stmt = new_stmt;
/* The LHS needs to be reset as this also changes the SSA name
diff --git a/gcc/gimple.h b/gcc/gimple.h
index 2d81eedab4a..6213c49b91f 100644
--- a/gcc/gimple.h
+++ b/gcc/gimple.h
@@ -1417,8 +1417,7 @@ extern enum gimple_statement_structure_enum const gss_for_code_[];
of comminucating the profile info to the builtin expanders. */
extern gimple *currently_expanding_gimple_stmt;
-#define gimple_alloc(c, n) gimple_alloc_stat (c, n MEM_STAT_INFO)
-gimple *gimple_alloc_stat (enum gimple_code, unsigned MEM_STAT_DECL);
+gimple *gimple_alloc (enum gimple_code, unsigned CXX_MEM_STAT_INFO);
greturn *gimple_build_return (tree);
void gimple_call_reset_alias_info (gcall *);
gcall *gimple_build_call_vec (tree, vec<tree> );
@@ -1454,12 +1453,8 @@ gresx *gimple_build_resx (int);
gswitch *gimple_build_switch_nlabels (unsigned, tree, tree);
gswitch *gimple_build_switch (tree, tree, vec<tree> );
geh_dispatch *gimple_build_eh_dispatch (int);
-gdebug *gimple_build_debug_bind_stat (tree, tree, gimple * MEM_STAT_DECL);
-#define gimple_build_debug_bind(var,val,stmt) \
- gimple_build_debug_bind_stat ((var), (val), (stmt) MEM_STAT_INFO)
-gdebug *gimple_build_debug_source_bind_stat (tree, tree, gimple * MEM_STAT_DECL);
-#define gimple_build_debug_source_bind(var,val,stmt) \
- gimple_build_debug_source_bind_stat ((var), (val), (stmt) MEM_STAT_INFO)
+gdebug *gimple_build_debug_bind (tree, tree, gimple * CXX_MEM_STAT_INFO);
+gdebug *gimple_build_debug_source_bind (tree, tree, gimple * CXX_MEM_STAT_INFO);
gomp_critical *gimple_build_omp_critical (gimple_seq, tree, tree);
gomp_for *gimple_build_omp_for (gimple_seq, int, tree, size_t, gimple_seq);
gomp_parallel *gimple_build_omp_parallel (gimple_seq, tree, tree, tree);
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 641a8210dad..86623e09f5d 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -60,6 +60,8 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-walk.h"
#include "langhooks-def.h" /* FIXME: for lhd_set_decl_assembler_name */
#include "builtins.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
#include "dbgcnt.h"
@@ -818,12 +820,7 @@ mostly_copy_tree_r (tree *tp, int *walk_subtrees, void *data)
/* Stop at types, decls, constants like copy_tree_r. */
else if (TREE_CODE_CLASS (code) == tcc_type
|| TREE_CODE_CLASS (code) == tcc_declaration
- || TREE_CODE_CLASS (code) == tcc_constant
- /* We can't do anything sensible with a BLOCK used as an
- expression, but we also can't just die when we see it
- because of non-expression uses. So we avert our eyes
- and cross our fingers. Silly Java. */
- || code == BLOCK)
+ || TREE_CODE_CLASS (code) == tcc_constant)
*walk_subtrees = 0;
/* Cope with the statement expression extension. */
@@ -2042,7 +2039,9 @@ should_warn_for_implicit_fallthrough (gimple_stmt_iterator *gsi_p, tree label)
gsi = *gsi_p;
/* Skip all immediately following labels. */
- while (!gsi_end_p (gsi) && gimple_code (gsi_stmt (gsi)) == GIMPLE_LABEL)
+ while (!gsi_end_p (gsi)
+ && (gimple_code (gsi_stmt (gsi)) == GIMPLE_LABEL
+ || gimple_code (gsi_stmt (gsi)) == GIMPLE_PREDICT))
gsi_next (&gsi);
/* { ... something; default:; } */
@@ -5807,8 +5806,7 @@ gimplify_save_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
/* If the SAVE_EXPR has not been resolved, then evaluate it once. */
if (!SAVE_EXPR_RESOLVED_P (*expr_p))
{
- /* The operand may be a void-valued expression such as SAVE_EXPRs
- generated by the Java frontend for class initialization. It is
+ /* The operand may be a void-valued expression. It is
being executed only for its side-effects. */
if (TREE_TYPE (val) == void_type_node)
{
@@ -10829,6 +10827,7 @@ goa_stabilize_expr (tree *expr_p, gimple_seq *pre_p, tree lhs_addr,
case TRUTH_AND_EXPR:
case TRUTH_OR_EXPR:
case TRUTH_XOR_EXPR:
+ case BIT_INSERT_EXPR:
saw_lhs |= goa_stabilize_expr (&TREE_OPERAND (expr, 1), pre_p,
lhs_addr, lhs_var);
/* FALLTHRU */
@@ -10847,6 +10846,11 @@ goa_stabilize_expr (tree *expr_p, gimple_seq *pre_p, tree lhs_addr,
break;
}
break;
+ case tcc_reference:
+ if (TREE_CODE (expr) == BIT_FIELD_REF)
+ saw_lhs |= goa_stabilize_expr (&TREE_OPERAND (expr, 0), pre_p,
+ lhs_addr, lhs_var);
+ break;
default:
break;
}
diff --git a/gcc/go/ChangeLog b/gcc/go/ChangeLog
index ac0dbe3f99d..f62fdd77dbe 100644
--- a/gcc/go/ChangeLog
+++ b/gcc/go/ChangeLog
@@ -1,3 +1,13 @@
+2017-08-07 Martin Liska <mliska@suse.cz>
+
+ * go-gcc.cc (Gcc_backend::function): Look up for no_split_stack
+ and not __no_split_stack__.
+
+2017-07-27 Tony Reix <tony.reix@atos.net>
+
+ * go-backend.c (go_write_export_data): Use EXCLUDE section for
+ AIX.
+
2017-06-09 Ian Lance Taylor <iant@golang.org>
* go-lang.c (go_langhook_post_options): If -fsplit-stack is turned
diff --git a/gcc/go/go-backend.c b/gcc/go/go-backend.c
index 2f8d2f405da..21277ea2eb9 100644
--- a/gcc/go/go-backend.c
+++ b/gcc/go/go-backend.c
@@ -45,6 +45,10 @@ along with GCC; see the file COPYING3. If not see
#define GO_EXPORT_SECTION_NAME ".go_export"
#endif
+#ifndef TARGET_AIX
+#define TARGET_AIX 0
+#endif
+
/* This file holds all the cases where the Go frontend needs
information from gcc's backend. */
@@ -101,7 +105,9 @@ go_write_export_data (const char *bytes, unsigned int size)
if (sec == NULL)
{
gcc_assert (targetm_common.have_named_sections);
- sec = get_section (GO_EXPORT_SECTION_NAME, SECTION_DEBUG, NULL);
+ sec = get_section (GO_EXPORT_SECTION_NAME,
+ TARGET_AIX ? SECTION_EXCLUDE : SECTION_DEBUG,
+ NULL);
}
switch_to_section (sec);
diff --git a/gcc/go/go-gcc.cc b/gcc/go/go-gcc.cc
index a7977fe03c1..04912f0ed01 100644
--- a/gcc/go/go-gcc.cc
+++ b/gcc/go/go-gcc.cc
@@ -3046,7 +3046,7 @@ Gcc_backend::function(Btype* fntype, const std::string& name,
DECL_UNINLINABLE(decl) = 1;
if (disable_split_stack)
{
- tree attr = get_identifier("__no_split_stack__");
+ tree attr = get_identifier ("no_split_stack");
DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
}
if (in_unique_section)
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index f6d7a002cbf..c5ecb102c7e 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-3d9ff9bc339942922f1be3bef07c6fe2978ad81a
+480fdfa9dd416bd17115a94fa6021c4dd805fc39
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc
index 597f0a0daef..6f9c1c96c3f 100644
--- a/gcc/go/gofrontend/expressions.cc
+++ b/gcc/go/gofrontend/expressions.cc
@@ -5655,7 +5655,7 @@ Binary_expression::do_determine_type(const Type_context* context)
Type_context subcontext(*context);
- if (is_constant_expr)
+ if (is_constant_expr && !is_shift_op)
{
subcontext.type = NULL;
subcontext.may_be_abstract = true;
@@ -9463,24 +9463,28 @@ Call_expression::do_lower(Gogo* gogo, Named_object* function,
this->is_varargs_, loc);
// If this call returns multiple results, create a temporary
- // variable for each result.
- size_t rc = this->result_count();
- if (rc > 1 && this->results_ == NULL)
+ // variable to hold them.
+ if (this->result_count() > 1 && this->call_temp_ == NULL)
{
- std::vector<Temporary_statement*>* temps =
- new std::vector<Temporary_statement*>;
- temps->reserve(rc);
+ Struct_field_list* sfl = new Struct_field_list();
+ Function_type* fntype = this->get_function_type();
const Typed_identifier_list* results = fntype->results();
+ Location loc = this->location();
+
+ int i = 0;
+ char buf[20];
for (Typed_identifier_list::const_iterator p = results->begin();
- p != results->end();
- ++p)
- {
- Temporary_statement* temp = Statement::make_temporary(p->type(),
- NULL, loc);
- inserter->insert(temp);
- temps->push_back(temp);
- }
- this->results_ = temps;
+ p != results->end();
+ ++p, ++i)
+ {
+ snprintf(buf, sizeof buf, "res%d", i);
+ sfl->push_back(Struct_field(Typed_identifier(buf, p->type(), loc)));
+ }
+
+ Struct_type* st = Type::make_struct_type(sfl, loc);
+ st->set_is_struct_incomparable();
+ this->call_temp_ = Statement::make_temporary(st, NULL, loc);
+ inserter->insert(this->call_temp_);
}
// Handle a call to a varargs function by packaging up the extra
@@ -9779,30 +9783,6 @@ Call_expression::do_flatten(Gogo* gogo, Named_object*,
this->args_ = args;
}
- size_t rc = this->result_count();
- if (rc > 1 && this->call_temp_ == NULL)
- {
- Struct_field_list* sfl = new Struct_field_list();
- Function_type* fntype = this->get_function_type();
- const Typed_identifier_list* results = fntype->results();
- Location loc = this->location();
-
- int i = 0;
- char buf[20];
- for (Typed_identifier_list::const_iterator p = results->begin();
- p != results->end();
- ++p, ++i)
- {
- snprintf(buf, sizeof buf, "res%d", i);
- sfl->push_back(Struct_field(Typed_identifier(buf, p->type(), loc)));
- }
-
- Struct_type* st = Type::make_struct_type(sfl, loc);
- st->set_is_struct_incomparable();
- this->call_temp_ = Statement::make_temporary(st, NULL, loc);
- inserter->insert(this->call_temp_);
- }
-
return this;
}
@@ -9827,17 +9807,18 @@ Call_expression::result_count() const
return fntype->results()->size();
}
-// Return the temporary which holds a result.
+// Return the temporary that holds the result for a call with multiple
+// results.
Temporary_statement*
-Call_expression::result(size_t i) const
+Call_expression::results() const
{
- if (this->results_ == NULL || this->results_->size() <= i)
+ if (this->call_temp_ == NULL)
{
go_assert(saw_errors());
return NULL;
}
- return (*this->results_)[i];
+ return this->call_temp_;
}
// Set the number of results expected from a call expression.
@@ -10191,8 +10172,21 @@ Call_expression::interface_method_function(
Bexpression*
Call_expression::do_get_backend(Translate_context* context)
{
+ Location location = this->location();
+
if (this->call_ != NULL)
- return this->call_;
+ {
+ // If the call returns multiple results, make a new reference to
+ // the temporary.
+ if (this->call_temp_ != NULL)
+ {
+ Expression* ref =
+ Expression::make_temporary_reference(this->call_temp_, location);
+ return ref->get_backend(context);
+ }
+
+ return this->call_;
+ }
Function_type* fntype = this->get_function_type();
if (fntype == NULL)
@@ -10202,7 +10196,6 @@ Call_expression::do_get_backend(Translate_context* context)
return context->backend()->error_expression();
Gogo* gogo = context->gogo();
- Location location = this->location();
Func_expression* func = this->fn_->func_expression();
Interface_field_reference_expression* interface_method =
@@ -10323,91 +10316,28 @@ Call_expression::do_get_backend(Translate_context* context)
fn_args, bclosure,
location);
- if (this->results_ != NULL)
+ if (this->call_temp_ != NULL)
{
- Bexpression* bcall_ref = this->call_result_ref(context);
- Bstatement* assn_stmt =
- gogo->backend()->assignment_statement(bfunction,
- bcall_ref, call, location);
+ // This case occurs when the call returns multiple results.
- this->call_ = this->set_results(context);
+ Expression* ref = Expression::make_temporary_reference(this->call_temp_,
+ location);
+ Bexpression* bref = ref->get_backend(context);
+ Bstatement* bassn = gogo->backend()->assignment_statement(bfunction,
+ bref, call,
+ location);
- Bexpression* set_and_call =
- gogo->backend()->compound_expression(assn_stmt, this->call_,
- location);
- return set_and_call;
+ ref = Expression::make_temporary_reference(this->call_temp_, location);
+ this->call_ = ref->get_backend(context);
+
+ return gogo->backend()->compound_expression(bassn, this->call_,
+ location);
}
this->call_ = call;
return this->call_;
}
-// Return the backend representation of a reference to the struct used
-// to capture the result of a multiple-output call.
-
-Bexpression*
-Call_expression::call_result_ref(Translate_context* context)
-{
- go_assert(this->call_temp_ != NULL);
- Location location = this->location();
- Expression* call_ref =
- Expression::make_temporary_reference(this->call_temp_, location);
- Bexpression* bcall_ref = call_ref->get_backend(context);
- return bcall_ref;
-}
-
-// Set the result variables if this call returns multiple results.
-
-Bexpression*
-Call_expression::set_results(Translate_context* context)
-{
- Gogo* gogo = context->gogo();
-
- Bexpression* results = NULL;
- Location loc = this->location();
-
- go_assert(this->call_temp_ != NULL);
-
- size_t rc = this->result_count();
- for (size_t i = 0; i < rc; ++i)
- {
- Temporary_statement* temp = this->result(i);
- if (temp == NULL)
- {
- go_assert(saw_errors());
- return gogo->backend()->error_expression();
- }
- Temporary_reference_expression* ref =
- Expression::make_temporary_reference(temp, loc);
- ref->set_is_lvalue();
-
- Bfunction* bfunction = context->function()->func_value()->get_decl();
- Bexpression* result_ref = ref->get_backend(context);
- Bexpression* bcall_ref = this->call_result_ref(context);
- Bexpression* call_result =
- gogo->backend()->struct_field_expression(bcall_ref, i, loc);
- Bstatement* assn_stmt =
- gogo->backend()->assignment_statement(bfunction,
- result_ref, call_result, loc);
-
- bcall_ref = this->call_result_ref(context);
- call_result = gogo->backend()->struct_field_expression(bcall_ref, i, loc);
- Bexpression* result =
- gogo->backend()->compound_expression(assn_stmt, call_result, loc);
-
- if (results == NULL)
- results = result;
- else
- {
- Bstatement* expr_stmt =
- gogo->backend()->expression_statement(bfunction, result);
- results =
- gogo->backend()->compound_expression(expr_stmt, results, loc);
- }
- }
- return results;
-}
-
// Dump ast representation for a call expressin.
void
@@ -10528,13 +10458,14 @@ Call_result_expression::do_get_backend(Translate_context* context)
go_assert(this->call_->is_error_expression());
return context->backend()->error_expression();
}
- Temporary_statement* ts = ce->result(this->index_);
+ Temporary_statement* ts = ce->results();
if (ts == NULL)
{
go_assert(saw_errors());
return context->backend()->error_expression();
}
Expression* ref = Expression::make_temporary_reference(ts, this->location());
+ ref = Expression::make_field_reference(ref, this->index_, this->location());
return ref->get_backend(context);
}
@@ -12126,12 +12057,15 @@ Interface_field_reference_expression::do_get_backend(Translate_context* context)
Bexpression* bclosure =
Expression::make_heap_expression(expr, loc)->get_backend(context);
+ Gogo* gogo = context->gogo();
+ Btype* btype = this->type()->get_backend(gogo);
+ bclosure = gogo->backend()->convert_expression(btype, bclosure, loc);
+
Expression* nil_check =
Expression::make_binary(OPERATOR_EQEQ, this->expr_,
Expression::make_nil(loc), loc);
Bexpression* bnil_check = nil_check->get_backend(context);
- Gogo* gogo = context->gogo();
Bexpression* bcrash = gogo->runtime_error(RUNTIME_ERROR_NIL_DEREFERENCE,
loc)->get_backend(context);
@@ -14307,7 +14241,10 @@ Type_guard_expression::do_get_backend(Translate_context* context)
Expression::convert_for_assignment(context->gogo(), this->type_,
this->expr_, this->location());
- return conversion->get_backend(context);
+ Gogo* gogo = context->gogo();
+ Btype* bt = this->type_->get_backend(gogo);
+ Bexpression* bexpr = conversion->get_backend(context);
+ return gogo->backend()->convert_expression(bt, bexpr, this->location());
}
// Dump ast representation for a type guard expression.
diff --git a/gcc/go/gofrontend/expressions.h b/gcc/go/gofrontend/expressions.h
index a144ff4168b..0c742fd92df 100644
--- a/gcc/go/gofrontend/expressions.h
+++ b/gcc/go/gofrontend/expressions.h
@@ -2115,8 +2115,8 @@ class Call_expression : public Expression
Call_expression(Expression* fn, Expression_list* args, bool is_varargs,
Location location)
: Expression(EXPRESSION_CALL, location),
- fn_(fn), args_(args), type_(NULL), results_(NULL), call_(NULL),
- call_temp_(NULL), expected_result_count_(0), is_varargs_(is_varargs),
+ fn_(fn), args_(args), type_(NULL), call_(NULL), call_temp_(NULL)
+ , expected_result_count_(0), is_varargs_(is_varargs),
varargs_are_lowered_(false), types_are_determined_(false),
is_deferred_(false), is_concurrent_(false), issued_error_(false),
is_multi_value_arg_(false), is_flattened_(false)
@@ -2144,11 +2144,11 @@ class Call_expression : public Expression
size_t
result_count() const;
- // Return the temporary variable which holds result I. This is only
- // valid after the expression has been lowered, and is only valid
- // for calls which return multiple results.
+ // Return the temporary variable that holds the results. This is
+ // only valid after the expression has been lowered, and is only
+ // valid for calls which return multiple results.
Temporary_statement*
- result(size_t i) const;
+ results() const;
// Set the number of results expected from this call. This is used
// when the call appears in a context that expects multiple results,
@@ -2292,9 +2292,6 @@ class Call_expression : public Expression
Bexpression*
set_results(Translate_context*);
- Bexpression*
- call_result_ref(Translate_context* context);
-
// The function to call.
Expression* fn_;
// The arguments to pass. This may be NULL if there are no
@@ -2302,9 +2299,6 @@ class Call_expression : public Expression
Expression_list* args_;
// The type of the expression, to avoid recomputing it.
Type* type_;
- // The list of temporaries which will hold the results if the
- // function returns a tuple.
- std::vector<Temporary_statement*>* results_;
// The backend expression for the call, used for a call which returns a tuple.
Bexpression* call_;
// A temporary variable to store this call if the function returns a tuple.
diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc
index a9d72ff4aa0..5dbe29da261 100644
--- a/gcc/go/gofrontend/gogo.cc
+++ b/gcc/go/gofrontend/gogo.cc
@@ -3058,26 +3058,53 @@ Finalize_methods::type(Type* t)
case Type::TYPE_NAMED:
{
- // We have to finalize the methods of the real type first.
- // But if the real type is a struct type, then we only want to
- // finalize the methods of the field types, not of the struct
- // type itself. We don't want to add methods to the struct,
- // since it has a name.
Named_type* nt = t->named_type();
Type* rt = nt->real_type();
if (rt->classification() != Type::TYPE_STRUCT)
{
+ // Finalize the methods of the real type first.
if (Type::traverse(rt, this) == TRAVERSE_EXIT)
return TRAVERSE_EXIT;
+
+ // Finalize the methods of this type.
+ nt->finalize_methods(this->gogo_);
}
else
{
+ // We don't want to finalize the methods of a named struct
+ // type, as the methods should be attached to the named
+ // type, not the struct type. We just want to finalize
+ // the field types.
+ //
+ // It is possible that a field type refers indirectly to
+ // this type, such as via a field with function type with
+ // an argument or result whose type is this type. To
+ // avoid the cycle, first finalize the methods of any
+ // embedded types, which are the only types we need to
+ // know to finalize the methods of this type.
+ const Struct_field_list* fields = rt->struct_type()->fields();
+ if (fields != NULL)
+ {
+ for (Struct_field_list::const_iterator pf = fields->begin();
+ pf != fields->end();
+ ++pf)
+ {
+ if (pf->is_anonymous())
+ {
+ if (Type::traverse(pf->type(), this) == TRAVERSE_EXIT)
+ return TRAVERSE_EXIT;
+ }
+ }
+ }
+
+ // Finalize the methods of this type.
+ nt->finalize_methods(this->gogo_);
+
+ // Finalize all the struct fields.
if (rt->struct_type()->traverse_field_types(this) == TRAVERSE_EXIT)
return TRAVERSE_EXIT;
}
- nt->finalize_methods(this->gogo_);
-
// If this type is defined in a different package, then finalize the
// types of all the methods, since we won't see them otherwise.
if (nt->named_object()->package() != NULL && nt->has_any_methods())
@@ -4824,6 +4851,8 @@ Gogo::convert_named_types()
Runtime::convert_types(this);
this->named_types_are_converted_ = true;
+
+ Type::finish_pointer_types(this);
}
// Convert all names types in a set of bindings.
diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc
index ca5f5121d36..4d923733667 100644
--- a/gcc/go/gofrontend/types.cc
+++ b/gcc/go/gofrontend/types.cc
@@ -1057,6 +1057,8 @@ Type::get_backend_placeholder(Gogo* gogo)
{
Location loc = Linemap::unknown_location();
bt = gogo->backend()->placeholder_pointer_type("", loc, false);
+ Pointer_type* pt = this->convert<Pointer_type, TYPE_POINTER>();
+ Type::placeholder_pointers.push_back(pt);
}
break;
@@ -5516,14 +5518,22 @@ Pointer_type::do_import(Import* imp)
return Type::make_pointer_type(to);
}
+// Cache of pointer types. Key is "to" type, value is pointer type
+// that points to key.
+
+Type::Pointer_type_table Type::pointer_types;
+
+// A list of placeholder pointer types. We keep this so we can ensure
+// they are finalized.
+
+std::vector<Pointer_type*> Type::placeholder_pointers;
+
// Make a pointer type.
Pointer_type*
Type::make_pointer_type(Type* to_type)
{
- typedef Unordered_map(Type*, Pointer_type*) Hashtable;
- static Hashtable pointer_types;
- Hashtable::const_iterator p = pointer_types.find(to_type);
+ Pointer_type_table::const_iterator p = pointer_types.find(to_type);
if (p != pointer_types.end())
return p->second;
Pointer_type* ret = new Pointer_type(to_type);
@@ -5531,6 +5541,37 @@ Type::make_pointer_type(Type* to_type)
return ret;
}
+// This helper is invoked immediately after named types have been
+// converted, to clean up any unresolved pointer types remaining in
+// the pointer type cache.
+//
+// The motivation for this routine: occasionally the compiler creates
+// some specific pointer type as part of a lowering operation (ex:
+// pointer-to-void), then Type::backend_type_size() is invoked on the
+// type (which creates a Btype placeholder for it), that placeholder
+// passed somewhere along the line to the back end, but since there is
+// no reference to the type in user code, there is never a call to
+// Type::finish_backend for the type (hence the Btype remains as an
+// unresolved placeholder). Calling this routine will clean up such
+// instances.
+
+void
+Type::finish_pointer_types(Gogo* gogo)
+{
+ // We don't use begin() and end() because it is possible to add new
+ // placeholder pointer types as we finalized existing ones.
+ for (size_t i = 0; i < Type::placeholder_pointers.size(); i++)
+ {
+ Pointer_type* pt = Type::placeholder_pointers[i];
+ Type_btypes::iterator tbti = Type::type_btypes.find(pt);
+ if (tbti != Type::type_btypes.end() && tbti->second.is_placeholder)
+ {
+ pt->finish_backend(gogo, tbti->second.btype);
+ tbti->second.is_placeholder = false;
+ }
+ }
+}
+
// The nil type. We use a special type for nil because it is not the
// same as any other type. In C term nil has type void*, but there is
// no such type in Go.
diff --git a/gcc/go/gofrontend/types.h b/gcc/go/gofrontend/types.h
index aeb04d6c50f..f15f08ae4f0 100644
--- a/gcc/go/gofrontend/types.h
+++ b/gcc/go/gofrontend/types.h
@@ -504,6 +504,9 @@ class Type
static Pointer_type*
make_pointer_type(Type*);
+ static void
+ finish_pointer_types(Gogo* gogo);
+
static Type*
make_nil_type();
@@ -1341,6 +1344,15 @@ class Type
static Type_functions type_functions_table;
+ // Cache for reusing existing pointer types; maps from pointed-to-type
+ // to pointer type.
+ typedef Unordered_map(Type*, Pointer_type*) Pointer_type_table;
+
+ static Pointer_type_table pointer_types;
+
+ // List of placeholder pointer types.
+ static std::vector<Pointer_type*> placeholder_pointers;
+
// The type classification.
Type_classification classification_;
// The backend representation of the type, once it has been
diff --git a/gcc/hash-traits.h b/gcc/hash-traits.h
index f1bfd9faa8d..a5c4f103474 100644
--- a/gcc/hash-traits.h
+++ b/gcc/hash-traits.h
@@ -301,6 +301,76 @@ struct ggc_cache_ptr_hash : pointer_hash <T>, ggc_cache_remove <T *> {};
struct nofree_string_hash : string_hash, typed_noop_remove <const char *> {};
+/* Traits for pairs of values, using the first to record empty and
+ deleted slots. */
+
+template <typename T1, typename T2>
+struct pair_hash
+{
+ typedef std::pair <typename T1::value_type,
+ typename T2::value_type> value_type;
+ typedef std::pair <typename T1::compare_type,
+ typename T2::compare_type> compare_type;
+
+ static inline hashval_t hash (const value_type &);
+ static inline bool equal (const value_type &, const compare_type &);
+ static inline void remove (value_type &);
+ static inline void mark_deleted (value_type &);
+ static inline void mark_empty (value_type &);
+ static inline bool is_deleted (const value_type &);
+ static inline bool is_empty (const value_type &);
+};
+
+template <typename T1, typename T2>
+inline hashval_t
+pair_hash <T1, T2>::hash (const value_type &x)
+{
+ return iterative_hash_hashval_t (T1::hash (x.first), T2::hash (x.second));
+}
+
+template <typename T1, typename T2>
+inline bool
+pair_hash <T1, T2>::equal (const value_type &x, const compare_type &y)
+{
+ return T1::equal (x.first, y.first) && T2::equal (x.second, y.second);
+}
+
+template <typename T1, typename T2>
+inline void
+pair_hash <T1, T2>::remove (value_type &x)
+{
+ T1::remove (x.first);
+ T2::remove (x.second);
+}
+
+template <typename T1, typename T2>
+inline void
+pair_hash <T1, T2>::mark_deleted (value_type &x)
+{
+ T1::mark_deleted (x.first);
+}
+
+template <typename T1, typename T2>
+inline void
+pair_hash <T1, T2>::mark_empty (value_type &x)
+{
+ T1::mark_empty (x.first);
+}
+
+template <typename T1, typename T2>
+inline bool
+pair_hash <T1, T2>::is_deleted (const value_type &x)
+{
+ return T1::is_deleted (x.first);
+}
+
+template <typename T1, typename T2>
+inline bool
+pair_hash <T1, T2>::is_empty (const value_type &x)
+{
+ return T1::is_empty (x.first);
+}
+
template <typename T> struct default_hash_traits : T {};
template <typename T>
diff --git a/gcc/hsa-brig.c b/gcc/hsa-brig.c
index 6eed0140492..0f6cac57776 100644
--- a/gcc/hsa-brig.c
+++ b/gcc/hsa-brig.c
@@ -500,7 +500,7 @@ brig_init (void)
else
part++;
char *modname2;
- asprintf (&modname2, "%s_%s", modname, part);
+ modname2 = xasprintf ("%s_%s", modname, part);
free (modname);
modname = modname2;
}
diff --git a/gcc/hsa-common.c b/gcc/hsa-common.c
index 95636ebc9a8..c8c12afb04c 100644
--- a/gcc/hsa-common.c
+++ b/gcc/hsa-common.c
@@ -40,6 +40,8 @@ along with GCC; see the file COPYING3. If not see
#include "internal-fn.h"
#include "ctype.h"
#include "builtins.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Structure containing intermediate HSA representation of the generated
function. */
diff --git a/gcc/hsa-gen.c b/gcc/hsa-gen.c
index 6ec8c348eb4..bd227626e83 100644
--- a/gcc/hsa-gen.c
+++ b/gcc/hsa-gen.c
@@ -60,6 +60,8 @@ along with GCC; see the file COPYING3. If not see
#include "internal-fn.h"
#include "builtins.h"
#include "stor-layout.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Print a warning message and set that we have seen an error. */
diff --git a/gcc/input.c b/gcc/input.c
index 0480eb24ec0..a01c504fe57 100644
--- a/gcc/input.c
+++ b/gcc/input.c
@@ -898,6 +898,15 @@ make_location (location_t caret, location_t start, location_t finish)
return combined_loc;
}
+/* Same as above, but taking a source range rather than two locations. */
+
+location_t
+make_location (location_t caret, source_range src_range)
+{
+ location_t pure_loc = get_pure_location (caret);
+ return COMBINE_LOCATION_DATA (line_table, pure_loc, src_range, NULL);
+}
+
#define ONE_K 1024
#define ONE_M (ONE_K * ONE_K)
diff --git a/gcc/input.h b/gcc/input.h
index 7251eef664e..f58d2488342 100644
--- a/gcc/input.h
+++ b/gcc/input.h
@@ -109,6 +109,7 @@ get_finish (location_t loc)
extern location_t make_location (location_t caret,
location_t start, location_t finish);
+extern location_t make_location (location_t caret, source_range src_range);
void dump_line_table_statistics (void);
diff --git a/gcc/internal-fn.c b/gcc/internal-fn.c
index 1c9d1ea2c84..2b72367a1d3 100644
--- a/gcc/internal-fn.c
+++ b/gcc/internal-fn.c
@@ -39,6 +39,8 @@ along with GCC; see the file COPYING3. If not see
#include "stor-layout.h"
#include "dojump.h"
#include "expr.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
#include "ubsan.h"
#include "recog.h"
@@ -402,6 +404,14 @@ expand_UBSAN_VPTR (internal_fn, gcall *)
/* This should get expanded in the sanopt pass. */
static void
+expand_UBSAN_PTR (internal_fn, gcall *)
+{
+ gcc_unreachable ();
+}
+
+/* This should get expanded in the sanopt pass. */
+
+static void
expand_UBSAN_OBJECT_SIZE (internal_fn, gcall *)
{
gcc_unreachable ();
diff --git a/gcc/internal-fn.def b/gcc/internal-fn.def
index 79c19fb8e7a..b1211159845 100644
--- a/gcc/internal-fn.def
+++ b/gcc/internal-fn.def
@@ -129,6 +129,7 @@ DEF_INTERNAL_FLT_FN (REMAINDER, ECF_CONST, remainder, binary)
DEF_INTERNAL_FLT_FN (SCALB, ECF_CONST, scalb, binary)
DEF_INTERNAL_FLT_FN (FMIN, ECF_CONST, fmin, binary)
DEF_INTERNAL_FLT_FN (FMAX, ECF_CONST, fmax, binary)
+DEF_INTERNAL_OPTAB_FN (XORSIGN, ECF_CONST, xorsign, binary)
/* FP scales. */
DEF_INTERNAL_FLT_FN (LDEXP, ECF_CONST, ldexp, binary)
@@ -166,6 +167,7 @@ DEF_INTERNAL_FN (UBSAN_VPTR, ECF_LEAF | ECF_NOTHROW, ".RR..")
DEF_INTERNAL_FN (UBSAN_CHECK_ADD, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
DEF_INTERNAL_FN (UBSAN_CHECK_SUB, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
DEF_INTERNAL_FN (UBSAN_CHECK_MUL, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (UBSAN_PTR, ECF_LEAF | ECF_NOTHROW, ".R.")
DEF_INTERNAL_FN (UBSAN_OBJECT_SIZE, ECF_LEAF | ECF_NOTHROW, NULL)
DEF_INTERNAL_FN (ABNORMAL_DISPATCHER, ECF_NORETURN, NULL)
DEF_INTERNAL_FN (BUILTIN_EXPECT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
diff --git a/gcc/ipa-chkp.c b/gcc/ipa-chkp.c
index 753673c8f66..704ef6e4550 100644
--- a/gcc/ipa-chkp.c
+++ b/gcc/ipa-chkp.c
@@ -34,6 +34,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-chkp.h"
#include "tree-inline.h"
#include "ipa-chkp.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Pointer Bounds Checker has two IPA passes to support code instrumentation.
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index 3b9eab41672..6b3d8d7364c 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -122,6 +122,8 @@ along with GCC; see the file COPYING3. If not see
#include "ipa-fnsummary.h"
#include "ipa-utils.h"
#include "tree-ssa-ccp.h"
+#include "stringpool.h"
+#include "attribs.h"
template <typename valtype> class ipcp_value;
diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c
index f0bc2501c27..f0aecfbc455 100644
--- a/gcc/ipa-devirt.c
+++ b/gcc/ipa-devirt.c
@@ -129,6 +129,8 @@ along with GCC; see the file COPYING3. If not see
#include "dbgcnt.h"
#include "gimple-pretty-print.h"
#include "intl.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Hash based set of pairs of types. */
struct type_pair
@@ -1602,62 +1604,6 @@ odr_types_equivalent_p (tree t1, tree t2, bool warn, bool *warned,
return false;
}
- if ((TYPE_MAIN_VARIANT (t1) == t1 || TYPE_MAIN_VARIANT (t2) == t2)
- && COMPLETE_TYPE_P (TYPE_MAIN_VARIANT (t1))
- && COMPLETE_TYPE_P (TYPE_MAIN_VARIANT (t2))
- && odr_type_p (TYPE_MAIN_VARIANT (t1))
- && odr_type_p (TYPE_MAIN_VARIANT (t2))
- && (TYPE_METHODS (TYPE_MAIN_VARIANT (t1))
- != TYPE_METHODS (TYPE_MAIN_VARIANT (t2))))
- {
- /* Currently free_lang_data sets TYPE_METHODS to error_mark_node
- if it is non-NULL so this loop will never realy execute. */
- if (TYPE_METHODS (TYPE_MAIN_VARIANT (t1)) != error_mark_node
- && TYPE_METHODS (TYPE_MAIN_VARIANT (t2)) != error_mark_node)
- for (f1 = TYPE_METHODS (TYPE_MAIN_VARIANT (t1)),
- f2 = TYPE_METHODS (TYPE_MAIN_VARIANT (t2));
- f1 && f2 ; f1 = DECL_CHAIN (f1), f2 = DECL_CHAIN (f2))
- {
- if (DECL_ASSEMBLER_NAME (f1) != DECL_ASSEMBLER_NAME (f2))
- {
- warn_odr (t1, t2, f1, f2, warn, warned,
- G_("a different method of same type "
- "is defined in another "
- "translation unit"));
- return false;
- }
- if (DECL_VIRTUAL_P (f1) != DECL_VIRTUAL_P (f2))
- {
- warn_odr (t1, t2, f1, f2, warn, warned,
- G_("a definition that differs by virtual "
- "keyword in another translation unit"));
- return false;
- }
- if (DECL_VINDEX (f1) != DECL_VINDEX (f2))
- {
- warn_odr (t1, t2, f1, f2, warn, warned,
- G_("virtual table layout differs "
- "in another translation unit"));
- return false;
- }
- if (odr_subtypes_equivalent_p (TREE_TYPE (f1),
- TREE_TYPE (f2), visited,
- loc1, loc2))
- {
- warn_odr (t1, t2, f1, f2, warn, warned,
- G_("method with incompatible type is "
- "defined in another translation unit"));
- return false;
- }
- }
- if ((f1 == NULL) != (f2 == NULL))
- {
- warn_odr (t1, t2, NULL, NULL, warn, warned,
- G_("a type with different number of methods "
- "is defined in another translation unit"));
- return false;
- }
- }
}
break;
}
diff --git a/gcc/ipa-fnsummary.c b/gcc/ipa-fnsummary.c
index 7324aac32c2..076ccd40bd7 100644
--- a/gcc/ipa-fnsummary.c
+++ b/gcc/ipa-fnsummary.c
@@ -82,6 +82,8 @@ along with GCC; see the file COPYING3. If not see
#include "cilk.h"
#include "cfgexpand.h"
#include "gimplify.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Summaries. */
function_summary <ipa_fn_summary *> *ipa_fn_summaries;
@@ -3174,9 +3176,7 @@ ipa_fn_summary_generate (void)
FOR_EACH_DEFINED_FUNCTION (node)
if (DECL_STRUCT_FUNCTION (node->decl))
- node->local.versionable =
- (opt_for_fn (node->decl, optimize)
- && tree_versionable_function_p (node->decl));
+ node->local.versionable = tree_versionable_function_p (node->decl);
ipa_fn_summary_alloc ();
diff --git a/gcc/ipa-icf-gimple.c b/gcc/ipa-icf-gimple.c
index 08dd980fdf3..f44a995f580 100644
--- a/gcc/ipa-icf-gimple.c
+++ b/gcc/ipa-icf-gimple.c
@@ -361,10 +361,14 @@ func_checker::compare_cst_or_decl (tree t1, tree t2)
}
case LABEL_DECL:
{
+ if (t1 == t2)
+ return true;
+
int *bb1 = m_label_bb_map.get (t1);
int *bb2 = m_label_bb_map.get (t2);
- return return_with_debug (*bb1 == *bb2);
+ /* Labels can point to another function (non-local GOTOs). */
+ return return_with_debug (bb1 != NULL && bb2 != NULL && *bb1 == *bb2);
}
case PARM_DECL:
case RESULT_DECL:
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
index 608db8f8857..dd46cb61362 100644
--- a/gcc/ipa-inline.c
+++ b/gcc/ipa-inline.c
@@ -117,6 +117,8 @@ along with GCC; see the file COPYING3. If not see
#include "auto-profile.h"
#include "builtins.h"
#include "fibonacci_heap.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
typedef fibonacci_heap <sreal, cgraph_edge> edge_heap_t;
diff --git a/gcc/ipa-polymorphic-call.c b/gcc/ipa-polymorphic-call.c
index 6b9f82138dc..9ac5153bf67 100644
--- a/gcc/ipa-polymorphic-call.c
+++ b/gcc/ipa-polymorphic-call.c
@@ -921,9 +921,13 @@ ipa_polymorphic_call_context::ipa_polymorphic_call_context (tree fndecl,
and MEM_REF is meaningless, but we can look futher. */
if (TREE_CODE (base) == MEM_REF)
{
+ offset_int o = mem_ref_offset (base) * BITS_PER_UNIT;
+ o += offset;
+ o += offset2;
+ if (!wi::fits_shwi_p (o))
+ break;
base_pointer = TREE_OPERAND (base, 0);
- offset
- += offset2 + mem_ref_offset (base).to_short_addr () * BITS_PER_UNIT;
+ offset = o.to_shwi ();
outer_type = NULL;
}
/* We found base object. In this case the outer_type
@@ -961,10 +965,15 @@ ipa_polymorphic_call_context::ipa_polymorphic_call_context (tree fndecl,
break;
}
else if (TREE_CODE (base_pointer) == POINTER_PLUS_EXPR
- && tree_fits_uhwi_p (TREE_OPERAND (base_pointer, 1)))
+ && TREE_CODE (TREE_OPERAND (base_pointer, 1)) == INTEGER_CST)
{
- offset += tree_to_shwi (TREE_OPERAND (base_pointer, 1))
- * BITS_PER_UNIT;
+ offset_int o = offset_int::from (TREE_OPERAND (base_pointer, 1),
+ SIGNED);
+ o *= BITS_PER_UNIT;
+ o += offset;
+ if (!wi::fits_shwi_p (o))
+ break;
+ offset = o.to_shwi ();
base_pointer = TREE_OPERAND (base_pointer, 0);
}
else
diff --git a/gcc/ipa-visibility.c b/gcc/ipa-visibility.c
index 17186e9d2e6..b6bc870b11d 100644
--- a/gcc/ipa-visibility.c
+++ b/gcc/ipa-visibility.c
@@ -83,6 +83,9 @@ along with GCC; see the file COPYING3. If not see
#include "cgraph.h"
#include "calls.h"
#include "varasm.h"
+#include "ipa-utils.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Return true when NODE can not be local. Worker for cgraph_local_node_p. */
@@ -91,10 +94,11 @@ non_local_p (struct cgraph_node *node, void *data ATTRIBUTE_UNUSED)
{
return !(node->only_called_directly_or_aliased_p ()
/* i386 would need update to output thunk with local calling
- convetions. */
+ conventions. */
&& !node->thunk.thunk_p
&& node->definition
&& !DECL_EXTERNAL (node->decl)
+ && !lookup_attribute ("noipa", DECL_ATTRIBUTES (node->decl))
&& !node->externally_visible
&& !node->used_from_other_partition
&& !node->in_other_partition
@@ -210,6 +214,8 @@ cgraph_externally_visible_p (struct cgraph_node *node,
if (lookup_attribute ("externally_visible",
DECL_ATTRIBUTES (node->decl)))
return true;
+ if (lookup_attribute ("noipa", DECL_ATTRIBUTES (node->decl)))
+ return true;
if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
&& lookup_attribute ("dllexport",
DECL_ATTRIBUTES (node->decl)))
@@ -333,10 +339,10 @@ varpool_node::externally_visible_p (void)
static bool
can_replace_by_local_alias (symtab_node *node)
{
-#ifndef ASM_OUTPUT_DEF
/* If aliases aren't supported, we can't do replacement. */
- return false;
-#endif
+ if (!TARGET_SUPPORTS_ALIASES)
+ return false;
+
/* Weakrefs have a reason to be non-local. Be sure we do not replace
them. */
while (node->transparent_alias && node->definition && !node->weakref)
@@ -457,11 +463,6 @@ update_visibility_by_resolution_info (symtab_node * node)
static void
optimize_weakref (symtab_node *node)
{
-#ifdef ASM_OUTPUT_DEF
- bool aliases_supported = true;
-#else
- bool aliases_supported = false;
-#endif
bool strip_weakref = false;
bool static_alias = false;
@@ -480,8 +481,8 @@ optimize_weakref (symtab_node *node)
/* If we have definition of weakref's target and we know it binds locally,
we can turn weakref to static alias. */
- if (target->definition && decl_binds_to_current_def_p (target->decl)
- && aliases_supported)
+ if (TARGET_SUPPORTS_ALIASES
+ && target->definition && decl_binds_to_current_def_p (target->decl))
strip_weakref = static_alias = true;
/* Otherwise we can turn weakref into transparent alias. This transformation
may break asm statements which directly refers to symbol name and expect
@@ -614,9 +615,42 @@ function_and_variable_visibility (bool whole_program)
struct cgraph_node *node;
varpool_node *vnode;
- /* All aliases should be procssed at this point. */
+ /* All aliases should be processed at this point. */
gcc_checking_assert (!alias_pairs || !alias_pairs->length ());
+#ifdef ASM_OUTPUT_DEF
+ FOR_EACH_DEFINED_FUNCTION (node)
+ {
+ if (node->get_availability () != AVAIL_INTERPOSABLE
+ || DECL_EXTERNAL (node->decl)
+ || node->has_aliases_p ())
+ continue;
+
+ cgraph_node *alias = 0;
+ for (cgraph_edge *e = node->callees; e; e = e->next_callee)
+ {
+ /* Recursive function calls usually can't be interposed. */
+
+ if (!e->recursive_p ())
+ continue;
+
+ if (!alias)
+ {
+ alias = dyn_cast<cgraph_node *> (node->noninterposable_alias ());
+ gcc_assert (alias && alias != node);
+ }
+
+ e->redirect_callee (alias);
+ if (gimple_has_body_p (e->caller->decl))
+ {
+ push_cfun (DECL_STRUCT_FUNCTION (e->caller->decl));
+ e->redirect_call_stmt_to_callee ();
+ pop_cfun ();
+ }
+ }
+ }
+#endif
+
FOR_EACH_FUNCTION (node)
{
int flags = flags_from_decl_or_type (node->decl);
diff --git a/gcc/ipa.c b/gcc/ipa.c
index 00cd3084f66..16df4cacedd 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -37,7 +37,8 @@ along with GCC; see the file COPYING3. If not see
#include "ipa-fnsummary.h"
#include "dbgcnt.h"
#include "debug.h"
-
+#include "stringpool.h"
+#include "attribs.h"
/* Return true when NODE has ADDR reference. */
diff --git a/gcc/jit/ChangeLog b/gcc/jit/ChangeLog
index 8fd2fd43dc0..66e34b6f10c 100644
--- a/gcc/jit/ChangeLog
+++ b/gcc/jit/ChangeLog
@@ -1,3 +1,33 @@
+2017-08-09 David Malcolm <dmalcolm@redhat.com>
+
+ * docs/cp/topics/types.rst (Vector types): New section.
+ * docs/topics/compatibility.rst (LIBGCCJIT_ABI_8): New tag.
+ * docs/topics/types.rst (gcc_jit_context_get_type): Fix typo in
+ example.
+ (Vector types): New section.
+ * docs/_build/texinfo/libgccjit.texi: Regenerate.
+ * jit-playback.c (gcc::jit::playback::type::get_vector): New
+ method.
+ * jit-playback.h (gcc::jit::playback::type::get_vector): New
+ method.
+ * jit-recording.c: In namespace gcc::jit::recording::
+ (type::get_vector): New method.
+ (memento_of_get_aligned::write_reproducer): Fix typo
+ in leading comment.
+ (memento_of_get_vector::replay_into): New method.
+ (memento_of_get_vector::make_debug_string): New method.
+ (memento_of_get_vector::write_reproducer): New method.
+ * jit-recording.h: In namespace gcc::jit::recording::
+ (type::get_vector): New
+ method.
+ (class memento_of_get_vector): New class.
+ * libgccjit++.h (gccjit::type::get_vector): New method.
+ * libgccjit.c (gcc_jit_type_get_vector): New public entrypoint.
+ * libgccjit.h (LIBGCCJIT_HAVE_gcc_jit_type_get_vector): New
+ define.
+ (gcc_jit_type_get_vector): New decl.
+ * libgccjit.map (LIBGCCJIT_ABI_8): New ABI tag.
+
2017-07-05 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
diff --git a/gcc/jit/docs/_build/texinfo/libgccjit.texi b/gcc/jit/docs/_build/texinfo/libgccjit.texi
index fee8ef16271..7e9a7d54707 100644
--- a/gcc/jit/docs/_build/texinfo/libgccjit.texi
+++ b/gcc/jit/docs/_build/texinfo/libgccjit.texi
@@ -19,7 +19,7 @@
@copying
@quotation
-libgccjit 8.0.0 (experimental 20170424), April 24, 2017
+libgccjit 8.0.0 (experimental 20170809), August 09, 2017
David Malcolm
@@ -190,6 +190,7 @@ Types
* Standard types::
* Pointers@comma{} const@comma{} and volatile: Pointers const and volatile.
+* Vector types::
* Structures and unions::
Expressions
@@ -241,6 +242,7 @@ ABI symbol tags
* LIBGCCJIT_ABI_5::
* LIBGCCJIT_ABI_6::
* LIBGCCJIT_ABI_7::
+* LIBGCCJIT_ABI_8::
Performance
@@ -317,6 +319,7 @@ Types
* Standard types: Standard types<2>.
* Pointers@comma{} const@comma{} and volatile: Pointers const and volatile<2>.
+* Vector types: Vector types<2>.
* Structures and unions: Structures and unions<2>.
Expressions
@@ -4882,6 +4885,7 @@ Types
* Standard types::
* Pointers@comma{} const@comma{} and volatile: Pointers const and volatile.
+* Vector types::
* Structures and unions::
Expressions
@@ -4933,6 +4937,7 @@ ABI symbol tags
* LIBGCCJIT_ABI_5::
* LIBGCCJIT_ABI_6::
* LIBGCCJIT_ABI_7::
+* LIBGCCJIT_ABI_8::
Performance
@@ -5767,7 +5772,7 @@ fundamental types can be accessed using
@pxref{b,,gcc_jit_context_get_type()}:
@example
-gcc_jit_type *int_type = gcc_jit_context_get_type (GCC_JIT_TYPE_INT);
+gcc_jit_type *int_type = gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT);
@end example
@noindent
@@ -5792,6 +5797,7 @@ by creating structures (see below).
@menu
* Standard types::
* Pointers@comma{} const@comma{} and volatile: Pointers const and volatile.
+* Vector types::
* Structures and unions::
@end menu
@@ -6008,7 +6014,7 @@ C99's @code{_Complex long double}
Access the integer type of the given size.
@end deffn
-@node Pointers const and volatile,Structures and unions,Standard types,Types
+@node Pointers const and volatile,Vector types,Standard types,Types
@anchor{topics/types pointers-const-and-volatile}@anchor{7d}
@subsection Pointers, @cite{const}, and @cite{volatile}
@@ -6065,27 +6071,79 @@ its presence using
@noindent
@end deffn
-@node Structures and unions,,Pointers const and volatile,Types
-@anchor{topics/types structures-and-unions}@anchor{82}
+@node Vector types,Structures and unions,Pointers const and volatile,Types
+@anchor{topics/types vector-types}@anchor{82}
+@subsection Vector types
+
+
+@geindex gcc_jit_type_get_vector (C function)
+@anchor{topics/types gcc_jit_type_get_vector}@anchor{83}
+@deffn {C Function} gcc_jit_type * gcc_jit_type_get_vector (gcc_jit_type@w{ }*type, size_t@w{ }num_units)
+
+Given type "T", get type:
+
+@example
+T __attribute__ ((vector_size (sizeof(T) * num_units))
+@end example
+
+@noindent
+
+T must be integral or floating point; num_units must be a power of two.
+
+This can be used to construct a vector type in which operations
+are applied element-wise. The compiler will automatically
+use SIMD instructions where possible. See:
+@indicateurl{https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html}
+
+For example, assuming 4-byte @code{ints}, then:
+
+@example
+typedef int v4si __attribute__ ((vector_size (16)));
+@end example
+
+@noindent
+
+can be obtained using:
+
+@example
+gcc_jit_type *int_type = gcc_jit_context_get_type (ctxt,
+ GCC_JIT_TYPE_INT);
+gcc_jit_type *v4si_type = gcc_jit_type_get_vector (int_type, 4);
+@end example
+
+@noindent
+
+This API entrypoint was added in @pxref{84,,LIBGCCJIT_ABI_8}; you can test
+for its presence using
+
+@example
+#ifdef LIBGCCJIT_HAVE_gcc_jit_type_get_vector
+@end example
+
+@noindent
+@end deffn
+
+@node Structures and unions,,Vector types,Types
+@anchor{topics/types structures-and-unions}@anchor{85}
@subsection Structures and unions
@geindex gcc_jit_struct (C type)
-@anchor{topics/types gcc_jit_struct}@anchor{83}
+@anchor{topics/types gcc_jit_struct}@anchor{86}
@deffn {C Type} gcc_jit_struct
@end deffn
A compound type analagous to a C @cite{struct}.
@geindex gcc_jit_field (C type)
-@anchor{topics/types gcc_jit_field}@anchor{84}
+@anchor{topics/types gcc_jit_field}@anchor{87}
@deffn {C Type} gcc_jit_field
@end deffn
-A field within a @pxref{83,,gcc_jit_struct}.
+A field within a @pxref{86,,gcc_jit_struct}.
-You can model C @cite{struct} types by creating @pxref{83,,gcc_jit_struct *} and
-@pxref{84,,gcc_jit_field} instances, in either order:
+You can model C @cite{struct} types by creating @pxref{86,,gcc_jit_struct *} and
+@pxref{87,,gcc_jit_field} instances, in either order:
@itemize *
@@ -6142,7 +6200,7 @@ gcc_jit_struct_set_fields (node, NULL, 2, fields);
@end itemize
@geindex gcc_jit_context_new_field (C function)
-@anchor{topics/types gcc_jit_context_new_field}@anchor{85}
+@anchor{topics/types gcc_jit_context_new_field}@anchor{88}
@deffn {C Function} gcc_jit_field * gcc_jit_context_new_field (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_type@w{ }*type, const char@w{ }*name)
Construct a new field, with the given type and name.
@@ -6153,14 +6211,14 @@ buffer.
@end deffn
@geindex gcc_jit_field_as_object (C function)
-@anchor{topics/types gcc_jit_field_as_object}@anchor{86}
+@anchor{topics/types gcc_jit_field_as_object}@anchor{89}
@deffn {C Function} gcc_jit_object * gcc_jit_field_as_object (gcc_jit_field@w{ }*field)
Upcast from field to object.
@end deffn
@geindex gcc_jit_context_new_struct_type (C function)
-@anchor{topics/types gcc_jit_context_new_struct_type}@anchor{87}
+@anchor{topics/types gcc_jit_context_new_struct_type}@anchor{8a}
@deffn {C Function} gcc_jit_struct *gcc_jit_context_new_struct_type (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, const char@w{ }*name, int@w{ }num_fields, gcc_jit_field@w{ }**fields)
@quotation
@@ -6174,13 +6232,13 @@ on-stack buffer.
@end deffn
@geindex gcc_jit_context_new_opaque_struct (C function)
-@anchor{topics/types gcc_jit_context_new_opaque_struct}@anchor{88}
+@anchor{topics/types gcc_jit_context_new_opaque_struct}@anchor{8b}
@deffn {C Function} gcc_jit_struct * gcc_jit_context_new_opaque_struct (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, const char@w{ }*name)
Construct a new struct type, with the given name, but without
specifying the fields. The fields can be omitted (in which case the
size of the struct is not known), or later specified using
-@pxref{89,,gcc_jit_struct_set_fields()}.
+@pxref{8c,,gcc_jit_struct_set_fields()}.
The parameter @code{name} must be non-NULL. The call takes a copy of
the underlying string, so it is valid to pass in a pointer to an
@@ -6188,14 +6246,14 @@ on-stack buffer.
@end deffn
@geindex gcc_jit_struct_as_type (C function)
-@anchor{topics/types gcc_jit_struct_as_type}@anchor{8a}
+@anchor{topics/types gcc_jit_struct_as_type}@anchor{8d}
@deffn {C Function} gcc_jit_type * gcc_jit_struct_as_type (gcc_jit_struct@w{ }*struct_type)
Upcast from struct to type.
@end deffn
@geindex gcc_jit_struct_set_fields (C function)
-@anchor{topics/types gcc_jit_struct_set_fields}@anchor{89}
+@anchor{topics/types gcc_jit_struct_set_fields}@anchor{8c}
@deffn {C Function} void gcc_jit_struct_set_fields (gcc_jit_struct@w{ }*struct_type, gcc_jit_location@w{ }*loc, int@w{ }num_fields, gcc_jit_field@w{ }**fields)
Populate the fields of a formerly-opaque struct type.
@@ -6204,7 +6262,7 @@ This can only be called once on a given struct type.
@end deffn
@geindex gcc_jit_context_new_union_type (C function)
-@anchor{topics/types gcc_jit_context_new_union_type}@anchor{8b}
+@anchor{topics/types gcc_jit_context_new_union_type}@anchor{8e}
@deffn {C Function} gcc_jit_type * gcc_jit_context_new_union_type (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, const char@w{ }*name, int@w{ }num_fields, gcc_jit_field@w{ }**fields)
Construct a new union type, with the given name and fields.
@@ -6312,7 +6370,7 @@ create_code (gcc_jit_context *ctxt, void *user_data)
@c <http://www.gnu.org/licenses/>.
@node Expressions,Creating and using functions,Types,Topic Reference
-@anchor{topics/expressions expressions}@anchor{8c}@anchor{topics/expressions doc}@anchor{8d}
+@anchor{topics/expressions expressions}@anchor{8f}@anchor{topics/expressions doc}@anchor{90}
@section Expressions
@@ -6338,7 +6396,7 @@ Lvalues
@node Rvalues,Lvalues,,Expressions
-@anchor{topics/expressions rvalues}@anchor{8e}
+@anchor{topics/expressions rvalues}@anchor{91}
@subsection Rvalues
@@ -6392,7 +6450,7 @@ Every rvalue has an associated type, and the API will check to ensure
that types match up correctly (otherwise the context will emit an error).
@geindex gcc_jit_rvalue_get_type (C function)
-@anchor{topics/expressions gcc_jit_rvalue_get_type}@anchor{8f}
+@anchor{topics/expressions gcc_jit_rvalue_get_type}@anchor{92}
@deffn {C Function} gcc_jit_type *gcc_jit_rvalue_get_type (gcc_jit_rvalue@w{ }*rvalue)
Get the type of this rvalue.
@@ -6416,7 +6474,7 @@ Upcast the given rvalue to be an object.
@end menu
@node Simple expressions,Unary Operations,,Rvalues
-@anchor{topics/expressions simple-expressions}@anchor{90}
+@anchor{topics/expressions simple-expressions}@anchor{93}
@subsubsection Simple expressions
@@ -6429,7 +6487,7 @@ the given constant @code{int} value.
@end deffn
@geindex gcc_jit_context_new_rvalue_from_long (C function)
-@anchor{topics/expressions gcc_jit_context_new_rvalue_from_long}@anchor{91}
+@anchor{topics/expressions gcc_jit_context_new_rvalue_from_long}@anchor{94}
@deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_rvalue_from_long (gcc_jit_context@w{ }*ctxt, gcc_jit_type@w{ }*numeric_type, long@w{ }value)
Given a numeric type (integer or floating point), build an rvalue for
@@ -6473,14 +6531,14 @@ the given constant @code{double} value.
@end deffn
@geindex gcc_jit_context_new_rvalue_from_ptr (C function)
-@anchor{topics/expressions gcc_jit_context_new_rvalue_from_ptr}@anchor{92}
+@anchor{topics/expressions gcc_jit_context_new_rvalue_from_ptr}@anchor{95}
@deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_rvalue_from_ptr (gcc_jit_context@w{ }*ctxt, gcc_jit_type@w{ }*pointer_type, void@w{ }*value)
Given a pointer type, build an rvalue for the given address.
@end deffn
@geindex gcc_jit_context_null (C function)
-@anchor{topics/expressions gcc_jit_context_null}@anchor{93}
+@anchor{topics/expressions gcc_jit_context_null}@anchor{96}
@deffn {C Function} gcc_jit_rvalue *gcc_jit_context_null (gcc_jit_context@w{ }*ctxt, gcc_jit_type@w{ }*pointer_type)
Given a pointer type, build an rvalue for @code{NULL}. Essentially this
@@ -6494,7 +6552,7 @@ gcc_jit_context_new_rvalue_from_ptr (ctxt, pointer_type, NULL)
@end deffn
@geindex gcc_jit_context_new_string_literal (C function)
-@anchor{topics/expressions gcc_jit_context_new_string_literal}@anchor{94}
+@anchor{topics/expressions gcc_jit_context_new_string_literal}@anchor{97}
@deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_string_literal (gcc_jit_context@w{ }*ctxt, const char@w{ }*value)
Generate an rvalue for the given NIL-terminated string, of type
@@ -6506,19 +6564,19 @@ buffer.
@end deffn
@node Unary Operations,Binary Operations,Simple expressions,Rvalues
-@anchor{topics/expressions unary-operations}@anchor{95}
+@anchor{topics/expressions unary-operations}@anchor{98}
@subsubsection Unary Operations
@geindex gcc_jit_context_new_unary_op (C function)
-@anchor{topics/expressions gcc_jit_context_new_unary_op}@anchor{96}
+@anchor{topics/expressions gcc_jit_context_new_unary_op}@anchor{99}
@deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_unary_op (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, enum gcc_jit_unary_op@w{ }op, gcc_jit_type@w{ }*result_type, gcc_jit_rvalue@w{ }*rvalue)
Build a unary operation out of an input rvalue.
@end deffn
@geindex gcc_jit_unary_op (C type)
-@anchor{topics/expressions gcc_jit_unary_op}@anchor{97}
+@anchor{topics/expressions gcc_jit_unary_op}@anchor{9a}
@deffn {C Type} enum gcc_jit_unary_op
@end deffn
@@ -6536,7 +6594,7 @@ C equivalent
@item
-@pxref{98,,GCC_JIT_UNARY_OP_MINUS}
+@pxref{9b,,GCC_JIT_UNARY_OP_MINUS}
@tab
@@ -6544,7 +6602,7 @@ C equivalent
@item
-@pxref{99,,GCC_JIT_UNARY_OP_BITWISE_NEGATE}
+@pxref{9c,,GCC_JIT_UNARY_OP_BITWISE_NEGATE}
@tab
@@ -6552,7 +6610,7 @@ C equivalent
@item
-@pxref{9a,,GCC_JIT_UNARY_OP_LOGICAL_NEGATE}
+@pxref{9d,,GCC_JIT_UNARY_OP_LOGICAL_NEGATE}
@tab
@@ -6560,7 +6618,7 @@ C equivalent
@item
-@pxref{9b,,GCC_JIT_UNARY_OP_ABS}
+@pxref{9e,,GCC_JIT_UNARY_OP_ABS}
@tab
@@ -6570,7 +6628,7 @@ C equivalent
@geindex GCC_JIT_UNARY_OP_MINUS (C macro)
-@anchor{topics/expressions GCC_JIT_UNARY_OP_MINUS}@anchor{98}
+@anchor{topics/expressions GCC_JIT_UNARY_OP_MINUS}@anchor{9b}
@deffn {C Macro} GCC_JIT_UNARY_OP_MINUS
Negate an arithmetic value; analogous to:
@@ -6585,7 +6643,7 @@ in C.
@end deffn
@geindex GCC_JIT_UNARY_OP_BITWISE_NEGATE (C macro)
-@anchor{topics/expressions GCC_JIT_UNARY_OP_BITWISE_NEGATE}@anchor{99}
+@anchor{topics/expressions GCC_JIT_UNARY_OP_BITWISE_NEGATE}@anchor{9c}
@deffn {C Macro} GCC_JIT_UNARY_OP_BITWISE_NEGATE
Bitwise negation of an integer value (one's complement); analogous
@@ -6601,7 +6659,7 @@ in C.
@end deffn
@geindex GCC_JIT_UNARY_OP_LOGICAL_NEGATE (C macro)
-@anchor{topics/expressions GCC_JIT_UNARY_OP_LOGICAL_NEGATE}@anchor{9a}
+@anchor{topics/expressions GCC_JIT_UNARY_OP_LOGICAL_NEGATE}@anchor{9d}
@deffn {C Macro} GCC_JIT_UNARY_OP_LOGICAL_NEGATE
Logical negation of an arithmetic or pointer value; analogous to:
@@ -6616,7 +6674,7 @@ in C.
@end deffn
@geindex GCC_JIT_UNARY_OP_ABS (C macro)
-@anchor{topics/expressions GCC_JIT_UNARY_OP_ABS}@anchor{9b}
+@anchor{topics/expressions GCC_JIT_UNARY_OP_ABS}@anchor{9e}
@deffn {C Macro} GCC_JIT_UNARY_OP_ABS
Absolute value of an arithmetic expression; analogous to:
@@ -6631,7 +6689,7 @@ in C.
@end deffn
@node Binary Operations,Comparisons,Unary Operations,Rvalues
-@anchor{topics/expressions binary-operations}@anchor{9c}
+@anchor{topics/expressions binary-operations}@anchor{9f}
@subsubsection Binary Operations
@@ -6643,7 +6701,7 @@ Build a binary operation out of two constituent rvalues.
@end deffn
@geindex gcc_jit_binary_op (C type)
-@anchor{topics/expressions gcc_jit_binary_op}@anchor{9d}
+@anchor{topics/expressions gcc_jit_binary_op}@anchor{a0}
@deffn {C Type} enum gcc_jit_binary_op
@end deffn
@@ -6661,7 +6719,7 @@ C equivalent
@item
-@pxref{9e,,GCC_JIT_BINARY_OP_PLUS}
+@pxref{a1,,GCC_JIT_BINARY_OP_PLUS}
@tab
@@ -6669,7 +6727,7 @@ C equivalent
@item
-@pxref{9f,,GCC_JIT_BINARY_OP_MINUS}
+@pxref{a2,,GCC_JIT_BINARY_OP_MINUS}
@tab
@@ -6677,7 +6735,7 @@ C equivalent
@item
-@pxref{a0,,GCC_JIT_BINARY_OP_MULT}
+@pxref{a3,,GCC_JIT_BINARY_OP_MULT}
@tab
@@ -6685,7 +6743,7 @@ C equivalent
@item
-@pxref{a1,,GCC_JIT_BINARY_OP_DIVIDE}
+@pxref{a4,,GCC_JIT_BINARY_OP_DIVIDE}
@tab
@@ -6693,7 +6751,7 @@ C equivalent
@item
-@pxref{a2,,GCC_JIT_BINARY_OP_MODULO}
+@pxref{a5,,GCC_JIT_BINARY_OP_MODULO}
@tab
@@ -6701,7 +6759,7 @@ C equivalent
@item
-@pxref{a3,,GCC_JIT_BINARY_OP_BITWISE_AND}
+@pxref{a6,,GCC_JIT_BINARY_OP_BITWISE_AND}
@tab
@@ -6709,7 +6767,7 @@ C equivalent
@item
-@pxref{a4,,GCC_JIT_BINARY_OP_BITWISE_XOR}
+@pxref{a7,,GCC_JIT_BINARY_OP_BITWISE_XOR}
@tab
@@ -6717,7 +6775,7 @@ C equivalent
@item
-@pxref{a5,,GCC_JIT_BINARY_OP_BITWISE_OR}
+@pxref{a8,,GCC_JIT_BINARY_OP_BITWISE_OR}
@tab
@@ -6725,7 +6783,7 @@ C equivalent
@item
-@pxref{a6,,GCC_JIT_BINARY_OP_LOGICAL_AND}
+@pxref{a9,,GCC_JIT_BINARY_OP_LOGICAL_AND}
@tab
@@ -6733,7 +6791,7 @@ C equivalent
@item
-@pxref{a7,,GCC_JIT_BINARY_OP_LOGICAL_OR}
+@pxref{aa,,GCC_JIT_BINARY_OP_LOGICAL_OR}
@tab
@@ -6741,7 +6799,7 @@ C equivalent
@item
-@pxref{a8,,GCC_JIT_BINARY_OP_LSHIFT}
+@pxref{ab,,GCC_JIT_BINARY_OP_LSHIFT}
@tab
@@ -6749,7 +6807,7 @@ C equivalent
@item
-@pxref{a9,,GCC_JIT_BINARY_OP_RSHIFT}
+@pxref{ac,,GCC_JIT_BINARY_OP_RSHIFT}
@tab
@@ -6759,7 +6817,7 @@ C equivalent
@geindex GCC_JIT_BINARY_OP_PLUS (C macro)
-@anchor{topics/expressions GCC_JIT_BINARY_OP_PLUS}@anchor{9e}
+@anchor{topics/expressions GCC_JIT_BINARY_OP_PLUS}@anchor{a1}
@deffn {C Macro} GCC_JIT_BINARY_OP_PLUS
Addition of arithmetic values; analogous to:
@@ -6772,11 +6830,11 @@ Addition of arithmetic values; analogous to:
in C.
-For pointer addition, use @pxref{aa,,gcc_jit_context_new_array_access()}.
+For pointer addition, use @pxref{ad,,gcc_jit_context_new_array_access()}.
@end deffn
@geindex GCC_JIT_BINARY_OP_MINUS (C macro)
-@anchor{topics/expressions GCC_JIT_BINARY_OP_MINUS}@anchor{9f}
+@anchor{topics/expressions GCC_JIT_BINARY_OP_MINUS}@anchor{a2}
@deffn {C Macro} GCC_JIT_BINARY_OP_MINUS
Subtraction of arithmetic values; analogous to:
@@ -6791,7 +6849,7 @@ in C.
@end deffn
@geindex GCC_JIT_BINARY_OP_MULT (C macro)
-@anchor{topics/expressions GCC_JIT_BINARY_OP_MULT}@anchor{a0}
+@anchor{topics/expressions GCC_JIT_BINARY_OP_MULT}@anchor{a3}
@deffn {C Macro} GCC_JIT_BINARY_OP_MULT
Multiplication of a pair of arithmetic values; analogous to:
@@ -6806,7 +6864,7 @@ in C.
@end deffn
@geindex GCC_JIT_BINARY_OP_DIVIDE (C macro)
-@anchor{topics/expressions GCC_JIT_BINARY_OP_DIVIDE}@anchor{a1}
+@anchor{topics/expressions GCC_JIT_BINARY_OP_DIVIDE}@anchor{a4}
@deffn {C Macro} GCC_JIT_BINARY_OP_DIVIDE
Quotient of division of arithmetic values; analogous to:
@@ -6825,7 +6883,7 @@ a floating-point result type indicates floating-point division.
@end deffn
@geindex GCC_JIT_BINARY_OP_MODULO (C macro)
-@anchor{topics/expressions GCC_JIT_BINARY_OP_MODULO}@anchor{a2}
+@anchor{topics/expressions GCC_JIT_BINARY_OP_MODULO}@anchor{a5}
@deffn {C Macro} GCC_JIT_BINARY_OP_MODULO
Remainder of division of arithmetic values; analogous to:
@@ -6840,7 +6898,7 @@ in C.
@end deffn
@geindex GCC_JIT_BINARY_OP_BITWISE_AND (C macro)
-@anchor{topics/expressions GCC_JIT_BINARY_OP_BITWISE_AND}@anchor{a3}
+@anchor{topics/expressions GCC_JIT_BINARY_OP_BITWISE_AND}@anchor{a6}
@deffn {C Macro} GCC_JIT_BINARY_OP_BITWISE_AND
Bitwise AND; analogous to:
@@ -6855,7 +6913,7 @@ in C.
@end deffn
@geindex GCC_JIT_BINARY_OP_BITWISE_XOR (C macro)
-@anchor{topics/expressions GCC_JIT_BINARY_OP_BITWISE_XOR}@anchor{a4}
+@anchor{topics/expressions GCC_JIT_BINARY_OP_BITWISE_XOR}@anchor{a7}
@deffn {C Macro} GCC_JIT_BINARY_OP_BITWISE_XOR
Bitwise exclusive OR; analogous to:
@@ -6870,7 +6928,7 @@ in C.
@end deffn
@geindex GCC_JIT_BINARY_OP_BITWISE_OR (C macro)
-@anchor{topics/expressions GCC_JIT_BINARY_OP_BITWISE_OR}@anchor{a5}
+@anchor{topics/expressions GCC_JIT_BINARY_OP_BITWISE_OR}@anchor{a8}
@deffn {C Macro} GCC_JIT_BINARY_OP_BITWISE_OR
Bitwise inclusive OR; analogous to:
@@ -6885,7 +6943,7 @@ in C.
@end deffn
@geindex GCC_JIT_BINARY_OP_LOGICAL_AND (C macro)
-@anchor{topics/expressions GCC_JIT_BINARY_OP_LOGICAL_AND}@anchor{a6}
+@anchor{topics/expressions GCC_JIT_BINARY_OP_LOGICAL_AND}@anchor{a9}
@deffn {C Macro} GCC_JIT_BINARY_OP_LOGICAL_AND
Logical AND; analogous to:
@@ -6900,7 +6958,7 @@ in C.
@end deffn
@geindex GCC_JIT_BINARY_OP_LOGICAL_OR (C macro)
-@anchor{topics/expressions GCC_JIT_BINARY_OP_LOGICAL_OR}@anchor{a7}
+@anchor{topics/expressions GCC_JIT_BINARY_OP_LOGICAL_OR}@anchor{aa}
@deffn {C Macro} GCC_JIT_BINARY_OP_LOGICAL_OR
Logical OR; analogous to:
@@ -6915,7 +6973,7 @@ in C.
@end deffn
@geindex GCC_JIT_BINARY_OP_LSHIFT (C macro)
-@anchor{topics/expressions GCC_JIT_BINARY_OP_LSHIFT}@anchor{a8}
+@anchor{topics/expressions GCC_JIT_BINARY_OP_LSHIFT}@anchor{ab}
@deffn {C Macro} GCC_JIT_BINARY_OP_LSHIFT
Left shift; analogous to:
@@ -6930,7 +6988,7 @@ in C.
@end deffn
@geindex GCC_JIT_BINARY_OP_RSHIFT (C macro)
-@anchor{topics/expressions GCC_JIT_BINARY_OP_RSHIFT}@anchor{a9}
+@anchor{topics/expressions GCC_JIT_BINARY_OP_RSHIFT}@anchor{ac}
@deffn {C Macro} GCC_JIT_BINARY_OP_RSHIFT
Right shift; analogous to:
@@ -6945,7 +7003,7 @@ in C.
@end deffn
@node Comparisons,Function calls,Binary Operations,Rvalues
-@anchor{topics/expressions comparisons}@anchor{ab}
+@anchor{topics/expressions comparisons}@anchor{ae}
@subsubsection Comparisons
@@ -6957,7 +7015,7 @@ Build a boolean rvalue out of the comparison of two other rvalues.
@end deffn
@geindex gcc_jit_comparison (C type)
-@anchor{topics/expressions gcc_jit_comparison}@anchor{ac}
+@anchor{topics/expressions gcc_jit_comparison}@anchor{af}
@deffn {C Type} enum gcc_jit_comparison
@end deffn
@@ -7023,12 +7081,12 @@ C equivalent
@node Function calls,Type-coercion,Comparisons,Rvalues
-@anchor{topics/expressions function-calls}@anchor{ad}
+@anchor{topics/expressions function-calls}@anchor{b0}
@subsubsection Function calls
@geindex gcc_jit_context_new_call (C function)
-@anchor{topics/expressions gcc_jit_context_new_call}@anchor{ae}
+@anchor{topics/expressions gcc_jit_context_new_call}@anchor{b1}
@deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_call (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_function@w{ }*func, int@w{ }numargs, gcc_jit_rvalue@w{ }**args)
Given a function and the given table of argument rvalues, construct a
@@ -7036,7 +7094,7 @@ call to the function, with the result as an rvalue.
@cartouche
@quotation Note
-@pxref{ae,,gcc_jit_context_new_call()} merely builds a
+@pxref{b1,,gcc_jit_context_new_call()} merely builds a
@pxref{13,,gcc_jit_rvalue} i.e. an expression that can be evaluated,
perhaps as part of a more complicated expression.
The call @emph{won't} happen unless you add a statement to a function
@@ -7044,7 +7102,7 @@ that evaluates the expression.
For example, if you want to call a function and discard the result
(or to call a function with @code{void} return type), use
-@pxref{af,,gcc_jit_block_add_eval()}:
+@pxref{b2,,gcc_jit_block_add_eval()}:
@example
/* Add "(void)printf (arg0, arg1);". */
@@ -7063,7 +7121,7 @@ gcc_jit_block_add_eval (
@end deffn
@geindex gcc_jit_context_new_call_through_ptr (C function)
-@anchor{topics/expressions gcc_jit_context_new_call_through_ptr}@anchor{b0}
+@anchor{topics/expressions gcc_jit_context_new_call_through_ptr}@anchor{b3}
@deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_call_through_ptr (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_rvalue@w{ }*fn_ptr, int@w{ }numargs, gcc_jit_rvalue@w{ }**args)
Given an rvalue of function pointer type, and the given table of
@@ -7072,18 +7130,18 @@ result as an rvalue.
@cartouche
@quotation Note
-The same caveat as for @pxref{ae,,gcc_jit_context_new_call()} applies.
+The same caveat as for @pxref{b1,,gcc_jit_context_new_call()} applies.
@end quotation
@end cartouche
@end deffn
@geindex gcc_jit_rvalue_set_bool_require_tail_call (C function)
-@anchor{topics/expressions gcc_jit_rvalue_set_bool_require_tail_call}@anchor{b1}
+@anchor{topics/expressions gcc_jit_rvalue_set_bool_require_tail_call}@anchor{b4}
@deffn {C Function} void gcc_jit_rvalue_set_bool_require_tail_call (gcc_jit_rvalue@w{ }*call, int@w{ }require_tail_call)
Given an @pxref{13,,gcc_jit_rvalue *} for a call created through
-@pxref{ae,,gcc_jit_context_new_call()} or
-@pxref{b0,,gcc_jit_context_new_call_through_ptr()}, mark/clear the
+@pxref{b1,,gcc_jit_context_new_call()} or
+@pxref{b3,,gcc_jit_context_new_call_through_ptr()}, mark/clear the
call as needing tail-call optimization. The optimizer will
attempt to optimize the call into a jump instruction; if it is
unable to do do, an error will be emitted.
@@ -7095,7 +7153,7 @@ languages), in which every function "returns" by calling a
guaranteed to be implemented as a jump, otherwise the program
could consume an arbitrary amount of stack space as it executed.
-This entrypoint was added in @pxref{b2,,LIBGCCJIT_ABI_6}; you can test for
+This entrypoint was added in @pxref{b5,,LIBGCCJIT_ABI_6}; you can test for
its presence using
@example
@@ -7106,12 +7164,12 @@ its presence using
@end deffn
@node Type-coercion,,Function calls,Rvalues
-@anchor{topics/expressions type-coercion}@anchor{b3}
+@anchor{topics/expressions type-coercion}@anchor{b6}
@subsubsection Type-coercion
@geindex gcc_jit_context_new_cast (C function)
-@anchor{topics/expressions gcc_jit_context_new_cast}@anchor{b4}
+@anchor{topics/expressions gcc_jit_context_new_cast}@anchor{b7}
@deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_cast (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_rvalue@w{ }*rvalue, gcc_jit_type@w{ }*type)
Given an rvalue of T, construct another rvalue of another type.
@@ -7136,7 +7194,7 @@ P* <-> Q*, for pointer types P and Q
@end deffn
@node Lvalues,Working with pointers structs and unions,Rvalues,Expressions
-@anchor{topics/expressions lvalues}@anchor{b5}
+@anchor{topics/expressions lvalues}@anchor{b8}
@subsection Lvalues
@@ -7150,21 +7208,21 @@ a storage area (such as a variable). It is also usable as an rvalue,
where the rvalue is computed by reading from the storage area.
@geindex gcc_jit_lvalue_as_object (C function)
-@anchor{topics/expressions gcc_jit_lvalue_as_object}@anchor{b6}
+@anchor{topics/expressions gcc_jit_lvalue_as_object}@anchor{b9}
@deffn {C Function} gcc_jit_object * gcc_jit_lvalue_as_object (gcc_jit_lvalue@w{ }*lvalue)
Upcast an lvalue to be an object.
@end deffn
@geindex gcc_jit_lvalue_as_rvalue (C function)
-@anchor{topics/expressions gcc_jit_lvalue_as_rvalue}@anchor{b7}
+@anchor{topics/expressions gcc_jit_lvalue_as_rvalue}@anchor{ba}
@deffn {C Function} gcc_jit_rvalue * gcc_jit_lvalue_as_rvalue (gcc_jit_lvalue@w{ }*lvalue)
Upcast an lvalue to be an rvalue.
@end deffn
@geindex gcc_jit_lvalue_get_address (C function)
-@anchor{topics/expressions gcc_jit_lvalue_get_address}@anchor{b8}
+@anchor{topics/expressions gcc_jit_lvalue_get_address}@anchor{bb}
@deffn {C Function} gcc_jit_rvalue * gcc_jit_lvalue_get_address (gcc_jit_lvalue@w{ }*lvalue, gcc_jit_location@w{ }*loc)
Take the address of an lvalue; analogous to:
@@ -7184,12 +7242,12 @@ in C.
@end menu
@node Global variables,,,Lvalues
-@anchor{topics/expressions global-variables}@anchor{b9}
+@anchor{topics/expressions global-variables}@anchor{bc}
@subsubsection Global variables
@geindex gcc_jit_context_new_global (C function)
-@anchor{topics/expressions gcc_jit_context_new_global}@anchor{ba}
+@anchor{topics/expressions gcc_jit_context_new_global}@anchor{bd}
@deffn {C Function} gcc_jit_lvalue * gcc_jit_context_new_global (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, enum gcc_jit_global_kind@w{ }kind, gcc_jit_type@w{ }*type, const char@w{ }*name)
Add a new global variable of the given type and name to the context.
@@ -7202,22 +7260,22 @@ The "kind" parameter determines the visibility of the "global" outside
of the @pxref{16,,gcc_jit_result}:
@geindex gcc_jit_global_kind (C type)
-@anchor{topics/expressions gcc_jit_global_kind}@anchor{bb}
+@anchor{topics/expressions gcc_jit_global_kind}@anchor{be}
@deffn {C Type} enum gcc_jit_global_kind
@end deffn
@geindex GCC_JIT_GLOBAL_EXPORTED (C macro)
-@anchor{topics/expressions GCC_JIT_GLOBAL_EXPORTED}@anchor{bc}
+@anchor{topics/expressions GCC_JIT_GLOBAL_EXPORTED}@anchor{bf}
@deffn {C Macro} GCC_JIT_GLOBAL_EXPORTED
Global is defined by the client code and is visible
by name outside of this JIT context via
-@pxref{bd,,gcc_jit_result_get_global()} (and this value is required for
+@pxref{c0,,gcc_jit_result_get_global()} (and this value is required for
the global to be accessible via that entrypoint).
@end deffn
@geindex GCC_JIT_GLOBAL_INTERNAL (C macro)
-@anchor{topics/expressions GCC_JIT_GLOBAL_INTERNAL}@anchor{be}
+@anchor{topics/expressions GCC_JIT_GLOBAL_INTERNAL}@anchor{c1}
@deffn {C Macro} GCC_JIT_GLOBAL_INTERNAL
Global is defined by the client code, but is invisible
@@ -7227,7 +7285,7 @@ context and within child contexts.
@end deffn
@geindex GCC_JIT_GLOBAL_IMPORTED (C macro)
-@anchor{topics/expressions GCC_JIT_GLOBAL_IMPORTED}@anchor{bf}
+@anchor{topics/expressions GCC_JIT_GLOBAL_IMPORTED}@anchor{c2}
@deffn {C Macro} GCC_JIT_GLOBAL_IMPORTED
Global is not defined by the client code; we're merely
@@ -7237,12 +7295,12 @@ header file.
@end deffn
@node Working with pointers structs and unions,,Lvalues,Expressions
-@anchor{topics/expressions working-with-pointers-structs-and-unions}@anchor{c0}
+@anchor{topics/expressions working-with-pointers-structs-and-unions}@anchor{c3}
@subsection Working with pointers, structs and unions
@geindex gcc_jit_rvalue_dereference (C function)
-@anchor{topics/expressions gcc_jit_rvalue_dereference}@anchor{c1}
+@anchor{topics/expressions gcc_jit_rvalue_dereference}@anchor{c4}
@deffn {C Function} gcc_jit_lvalue * gcc_jit_rvalue_dereference (gcc_jit_rvalue@w{ }*rvalue, gcc_jit_location@w{ }*loc)
Given an rvalue of pointer type @code{T *}, dereferencing the pointer,
@@ -7260,7 +7318,7 @@ in C.
Field access is provided separately for both lvalues and rvalues.
@geindex gcc_jit_lvalue_access_field (C function)
-@anchor{topics/expressions gcc_jit_lvalue_access_field}@anchor{c2}
+@anchor{topics/expressions gcc_jit_lvalue_access_field}@anchor{c5}
@deffn {C Function} gcc_jit_lvalue * gcc_jit_lvalue_access_field (gcc_jit_lvalue@w{ }*struct_, gcc_jit_location@w{ }*loc, gcc_jit_field@w{ }*field)
Given an lvalue of struct or union type, access the given field,
@@ -7276,7 +7334,7 @@ in C.
@end deffn
@geindex gcc_jit_rvalue_access_field (C function)
-@anchor{topics/expressions gcc_jit_rvalue_access_field}@anchor{c3}
+@anchor{topics/expressions gcc_jit_rvalue_access_field}@anchor{c6}
@deffn {C Function} gcc_jit_rvalue * gcc_jit_rvalue_access_field (gcc_jit_rvalue@w{ }*struct_, gcc_jit_location@w{ }*loc, gcc_jit_field@w{ }*field)
Given an rvalue of struct or union type, access the given field
@@ -7292,7 +7350,7 @@ in C.
@end deffn
@geindex gcc_jit_rvalue_dereference_field (C function)
-@anchor{topics/expressions gcc_jit_rvalue_dereference_field}@anchor{c4}
+@anchor{topics/expressions gcc_jit_rvalue_dereference_field}@anchor{c7}
@deffn {C Function} gcc_jit_lvalue * gcc_jit_rvalue_dereference_field (gcc_jit_rvalue@w{ }*ptr, gcc_jit_location@w{ }*loc, gcc_jit_field@w{ }*field)
Given an rvalue of pointer type @code{T *} where T is of struct or union
@@ -7308,7 +7366,7 @@ in C, itself equivalent to @code{(*EXPR).FIELD}.
@end deffn
@geindex gcc_jit_context_new_array_access (C function)
-@anchor{topics/expressions gcc_jit_context_new_array_access}@anchor{aa}
+@anchor{topics/expressions gcc_jit_context_new_array_access}@anchor{ad}
@deffn {C Function} gcc_jit_lvalue * gcc_jit_context_new_array_access (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_rvalue@w{ }*ptr, gcc_jit_rvalue@w{ }*index)
Given an rvalue of pointer type @code{T *}, get at the element @cite{T} at
@@ -7343,7 +7401,7 @@ in C (or, indeed, to @code{PTR + INDEX}).
@c <http://www.gnu.org/licenses/>.
@node Creating and using functions,Source Locations,Expressions,Topic Reference
-@anchor{topics/functions doc}@anchor{c5}@anchor{topics/functions creating-and-using-functions}@anchor{c6}
+@anchor{topics/functions doc}@anchor{c8}@anchor{topics/functions creating-and-using-functions}@anchor{c9}
@section Creating and using functions
@@ -7356,7 +7414,7 @@ in C (or, indeed, to @code{PTR + INDEX}).
@end menu
@node Params,Functions,,Creating and using functions
-@anchor{topics/functions params}@anchor{c7}
+@anchor{topics/functions params}@anchor{ca}
@subsection Params
@@ -7383,28 +7441,28 @@ Parameters are lvalues, and thus are also rvalues (and objects), so the
following upcasts are available:
@geindex gcc_jit_param_as_lvalue (C function)
-@anchor{topics/functions gcc_jit_param_as_lvalue}@anchor{c8}
+@anchor{topics/functions gcc_jit_param_as_lvalue}@anchor{cb}
@deffn {C Function} gcc_jit_lvalue * gcc_jit_param_as_lvalue (gcc_jit_param@w{ }*param)
Upcasting from param to lvalue.
@end deffn
@geindex gcc_jit_param_as_rvalue (C function)
-@anchor{topics/functions gcc_jit_param_as_rvalue}@anchor{c9}
+@anchor{topics/functions gcc_jit_param_as_rvalue}@anchor{cc}
@deffn {C Function} gcc_jit_rvalue * gcc_jit_param_as_rvalue (gcc_jit_param@w{ }*param)
Upcasting from param to rvalue.
@end deffn
@geindex gcc_jit_param_as_object (C function)
-@anchor{topics/functions gcc_jit_param_as_object}@anchor{ca}
+@anchor{topics/functions gcc_jit_param_as_object}@anchor{cd}
@deffn {C Function} gcc_jit_object * gcc_jit_param_as_object (gcc_jit_param@w{ }*param)
Upcasting from param to object.
@end deffn
@node Functions,Blocks,Params,Creating and using functions
-@anchor{topics/functions functions}@anchor{cb}
+@anchor{topics/functions functions}@anchor{ce}
@subsection Functions
@@ -7423,7 +7481,7 @@ creating ourselves, or one that we're referencing.
Create a gcc_jit_function with the given name and parameters.
@geindex gcc_jit_function_kind (C type)
-@anchor{topics/functions gcc_jit_function_kind}@anchor{cc}
+@anchor{topics/functions gcc_jit_function_kind}@anchor{cf}
@deffn {C Type} enum gcc_jit_function_kind
@end deffn
@@ -7433,7 +7491,7 @@ values:
@quotation
@geindex GCC_JIT_FUNCTION_EXPORTED (C macro)
-@anchor{topics/functions GCC_JIT_FUNCTION_EXPORTED}@anchor{cd}
+@anchor{topics/functions GCC_JIT_FUNCTION_EXPORTED}@anchor{d0}
@deffn {C Macro} GCC_JIT_FUNCTION_EXPORTED
Function is defined by the client code and visible
@@ -7445,7 +7503,7 @@ for this function from a @pxref{16,,gcc_jit_result} via
@end deffn
@geindex GCC_JIT_FUNCTION_INTERNAL (C macro)
-@anchor{topics/functions GCC_JIT_FUNCTION_INTERNAL}@anchor{ce}
+@anchor{topics/functions GCC_JIT_FUNCTION_INTERNAL}@anchor{d1}
@deffn {C Macro} GCC_JIT_FUNCTION_INTERNAL
Function is defined by the client code, but is invisible
@@ -7453,7 +7511,7 @@ outside of the JIT. Analogous to a "static" function.
@end deffn
@geindex GCC_JIT_FUNCTION_IMPORTED (C macro)
-@anchor{topics/functions GCC_JIT_FUNCTION_IMPORTED}@anchor{cf}
+@anchor{topics/functions GCC_JIT_FUNCTION_IMPORTED}@anchor{d2}
@deffn {C Macro} GCC_JIT_FUNCTION_IMPORTED
Function is not defined by the client code; we're merely
@@ -7462,7 +7520,7 @@ header file.
@end deffn
@geindex GCC_JIT_FUNCTION_ALWAYS_INLINE (C macro)
-@anchor{topics/functions GCC_JIT_FUNCTION_ALWAYS_INLINE}@anchor{d0}
+@anchor{topics/functions GCC_JIT_FUNCTION_ALWAYS_INLINE}@anchor{d3}
@deffn {C Macro} GCC_JIT_FUNCTION_ALWAYS_INLINE
Function is only ever inlined into other functions, and is
@@ -7483,19 +7541,19 @@ buffer.
@end deffn
@geindex gcc_jit_context_get_builtin_function (C function)
-@anchor{topics/functions gcc_jit_context_get_builtin_function}@anchor{d1}
+@anchor{topics/functions gcc_jit_context_get_builtin_function}@anchor{d4}
@deffn {C Function} gcc_jit_function *gcc_jit_context_get_builtin_function (gcc_jit_context@w{ }*ctxt, const char@w{ }*name)
@end deffn
@geindex gcc_jit_function_as_object (C function)
-@anchor{topics/functions gcc_jit_function_as_object}@anchor{d2}
+@anchor{topics/functions gcc_jit_function_as_object}@anchor{d5}
@deffn {C Function} gcc_jit_object * gcc_jit_function_as_object (gcc_jit_function@w{ }*func)
Upcasting from function to object.
@end deffn
@geindex gcc_jit_function_get_param (C function)
-@anchor{topics/functions gcc_jit_function_get_param}@anchor{d3}
+@anchor{topics/functions gcc_jit_function_get_param}@anchor{d6}
@deffn {C Function} gcc_jit_param * gcc_jit_function_get_param (gcc_jit_function@w{ }*func, int@w{ }index)
Get the param of the given index (0-based).
@@ -7521,7 +7579,7 @@ buffer.
@end deffn
@node Blocks,Statements,Functions,Creating and using functions
-@anchor{topics/functions blocks}@anchor{d4}
+@anchor{topics/functions blocks}@anchor{d7}
@subsection Blocks
@@ -7545,7 +7603,7 @@ one function.
@end deffn
@geindex gcc_jit_function_new_block (C function)
-@anchor{topics/functions gcc_jit_function_new_block}@anchor{d5}
+@anchor{topics/functions gcc_jit_function_new_block}@anchor{d8}
@deffn {C Function} gcc_jit_block * gcc_jit_function_new_block (gcc_jit_function@w{ }*func, const char@w{ }*name)
Create a basic block of the given name. The name may be NULL, but
@@ -7567,26 +7625,26 @@ for (pc = 0; pc < fn->fn_num_ops; pc++)
@end deffn
@geindex gcc_jit_block_as_object (C function)
-@anchor{topics/functions gcc_jit_block_as_object}@anchor{d6}
+@anchor{topics/functions gcc_jit_block_as_object}@anchor{d9}
@deffn {C Function} gcc_jit_object * gcc_jit_block_as_object (gcc_jit_block@w{ }*block)
Upcast from block to object.
@end deffn
@geindex gcc_jit_block_get_function (C function)
-@anchor{topics/functions gcc_jit_block_get_function}@anchor{d7}
+@anchor{topics/functions gcc_jit_block_get_function}@anchor{da}
@deffn {C Function} gcc_jit_function * gcc_jit_block_get_function (gcc_jit_block@w{ }*block)
Which function is this block within?
@end deffn
@node Statements,,Blocks,Creating and using functions
-@anchor{topics/functions statements}@anchor{d8}
+@anchor{topics/functions statements}@anchor{db}
@subsection Statements
@geindex gcc_jit_block_add_eval (C function)
-@anchor{topics/functions gcc_jit_block_add_eval}@anchor{af}
+@anchor{topics/functions gcc_jit_block_add_eval}@anchor{b2}
@deffn {C Function} void gcc_jit_block_add_eval (gcc_jit_block@w{ }*block, gcc_jit_location@w{ }*loc, gcc_jit_rvalue@w{ }*rvalue)
Add evaluation of an rvalue, discarding the result
@@ -7695,7 +7753,7 @@ block, boolval, on_true, and on_false must be non-NULL.
@end deffn
@geindex gcc_jit_block_end_with_jump (C function)
-@anchor{topics/functions gcc_jit_block_end_with_jump}@anchor{d9}
+@anchor{topics/functions gcc_jit_block_end_with_jump}@anchor{dc}
@deffn {C Function} void gcc_jit_block_end_with_jump (gcc_jit_block@w{ }*block, gcc_jit_location@w{ }*loc, gcc_jit_block@w{ }*target)
Terminate a block by adding a jump to the given target block.
@@ -7710,7 +7768,7 @@ goto target;
@end deffn
@geindex gcc_jit_block_end_with_return (C function)
-@anchor{topics/functions gcc_jit_block_end_with_return}@anchor{da}
+@anchor{topics/functions gcc_jit_block_end_with_return}@anchor{dd}
@deffn {C Function} void gcc_jit_block_end_with_return (gcc_jit_block@w{ }*block, gcc_jit_location@w{ }*loc, gcc_jit_rvalue@w{ }*rvalue)
Terminate a block by adding evaluation of an rvalue, returning the value.
@@ -7725,7 +7783,7 @@ return expression;
@end deffn
@geindex gcc_jit_block_end_with_void_return (C function)
-@anchor{topics/functions gcc_jit_block_end_with_void_return}@anchor{db}
+@anchor{topics/functions gcc_jit_block_end_with_void_return}@anchor{de}
@deffn {C Function} void gcc_jit_block_end_with_void_return (gcc_jit_block@w{ }*block, gcc_jit_location@w{ }*loc)
Terminate a block by adding a valueless return, for use within a function
@@ -7741,7 +7799,7 @@ return;
@end deffn
@geindex gcc_jit_block_end_with_switch (C function)
-@anchor{topics/functions gcc_jit_block_end_with_switch}@anchor{dc}
+@anchor{topics/functions gcc_jit_block_end_with_switch}@anchor{df}
@deffn {C Function} void gcc_jit_block_end_with_switch (gcc_jit_block@w{ }*block, gcc_jit_location@w{ }*loc, gcc_jit_rvalue@w{ }*expr, gcc_jit_block@w{ }*default_block, int@w{ }num_cases, gcc_jit_case@w{ }**cases)
Terminate a block by adding evalation of an rvalue, then performing
@@ -7789,17 +7847,17 @@ The API entrypoints relating to switch statements and cases:
@itemize *
@item
-@pxref{dc,,gcc_jit_block_end_with_switch()}
+@pxref{df,,gcc_jit_block_end_with_switch()}
@item
-@pxref{dd,,gcc_jit_case_as_object()}
+@pxref{e0,,gcc_jit_case_as_object()}
@item
-@pxref{de,,gcc_jit_context_new_case()}
+@pxref{e1,,gcc_jit_context_new_case()}
@end itemize
@end quotation
-were added in @pxref{df,,LIBGCCJIT_ABI_3}; you can test for their presence
+were added in @pxref{e2,,LIBGCCJIT_ABI_3}; you can test for their presence
using
@example
@@ -7809,20 +7867,20 @@ using
@noindent
@geindex gcc_jit_case (C type)
-@anchor{topics/functions gcc_jit_case}@anchor{e0}
+@anchor{topics/functions gcc_jit_case}@anchor{e3}
@deffn {C Type} gcc_jit_case
@end deffn
A @cite{gcc_jit_case} represents a case within a switch statement, and
is created within a particular @pxref{8,,gcc_jit_context} using
-@pxref{de,,gcc_jit_context_new_case()}.
+@pxref{e1,,gcc_jit_context_new_case()}.
Each case expresses a multivalued range of integer values. You
can express single-valued cases by passing in the same value for
both @cite{min_value} and @cite{max_value}.
@geindex gcc_jit_context_new_case (C function)
-@anchor{topics/functions gcc_jit_context_new_case}@anchor{de}
+@anchor{topics/functions gcc_jit_context_new_case}@anchor{e1}
@deffn {C Function} gcc_jit_case * gcc_jit_context_new_case (gcc_jit_context@w{ }*ctxt, gcc_jit_rvalue@w{ }*min_value, gcc_jit_rvalue@w{ }*max_value, gcc_jit_block@w{ }*dest_block)
Create a new gcc_jit_case instance for use in a switch statement.
@@ -7834,7 +7892,7 @@ statement.
@end deffn
@geindex gcc_jit_case_as_object (C function)
-@anchor{topics/functions gcc_jit_case_as_object}@anchor{dd}
+@anchor{topics/functions gcc_jit_case_as_object}@anchor{e0}
@deffn {C Function} gcc_jit_object * gcc_jit_case_as_object (gcc_jit_case@w{ }*case_)
Upcast from a case to an object.
@@ -7969,7 +8027,7 @@ create_code (gcc_jit_context *ctxt, void *user_data)
@c <http://www.gnu.org/licenses/>.
@node Source Locations,Compiling a context,Creating and using functions,Topic Reference
-@anchor{topics/locations source-locations}@anchor{e1}@anchor{topics/locations doc}@anchor{e2}
+@anchor{topics/locations source-locations}@anchor{e4}@anchor{topics/locations doc}@anchor{e5}
@section Source Locations
@@ -8019,7 +8077,7 @@ on-stack buffer.
@end menu
@node Faking it,,,Source Locations
-@anchor{topics/locations faking-it}@anchor{e3}
+@anchor{topics/locations faking-it}@anchor{e6}
@subsection Faking it
@@ -8057,7 +8115,7 @@ file, giving you @emph{something} you can step through in the debugger.
@c <http://www.gnu.org/licenses/>.
@node Compiling a context,ABI and API compatibility,Source Locations,Topic Reference
-@anchor{topics/compilation compiling-a-context}@anchor{e4}@anchor{topics/compilation doc}@anchor{e5}
+@anchor{topics/compilation compiling-a-context}@anchor{e7}@anchor{topics/compilation doc}@anchor{e8}
@section Compiling a context
@@ -8076,7 +8134,7 @@ prevent any future compilation of that context.
@end menu
@node In-memory compilation,Ahead-of-time compilation,,Compiling a context
-@anchor{topics/compilation in-memory-compilation}@anchor{e6}
+@anchor{topics/compilation in-memory-compilation}@anchor{e9}
@subsection In-memory compilation
@@ -8111,7 +8169,7 @@ Functions are looked up by name. For this to succeed, a function
with a name matching @cite{funcname} must have been created on
@cite{result}'s context (or a parent context) via a call to
@pxref{11,,gcc_jit_context_new_function()} with @cite{kind}
-@pxref{cd,,GCC_JIT_FUNCTION_EXPORTED}:
+@pxref{d0,,GCC_JIT_FUNCTION_EXPORTED}:
@example
gcc_jit_context_new_function (ctxt,
@@ -8141,7 +8199,7 @@ to a segmentation fault.
@end deffn
@geindex gcc_jit_result_get_global (C function)
-@anchor{topics/compilation gcc_jit_result_get_global}@anchor{bd}
+@anchor{topics/compilation gcc_jit_result_get_global}@anchor{c0}
@deffn {C Function} void * gcc_jit_result_get_global (gcc_jit_result@w{ }*result, const char@w{ }*name)
Locate a given global within the built machine code.
@@ -8149,8 +8207,8 @@ Locate a given global within the built machine code.
Globals are looked up by name. For this to succeed, a global
with a name matching @cite{name} must have been created on
@cite{result}'s context (or a parent context) via a call to
-@pxref{ba,,gcc_jit_context_new_global()} with @cite{kind}
-@pxref{bc,,GCC_JIT_GLOBAL_EXPORTED}.
+@pxref{bd,,gcc_jit_context_new_global()} with @cite{kind}
+@pxref{bf,,GCC_JIT_GLOBAL_EXPORTED}.
If the global is found, the result will need to be cast to a
pointer of the correct type before it can be called.
@@ -8198,11 +8256,11 @@ Once we're done with the code, this unloads the built .so file.
This cleans up the result; after calling this, it's no longer
valid to use the result, or any code or globals that were obtained
by calling @pxref{17,,gcc_jit_result_get_code()} or
-@pxref{bd,,gcc_jit_result_get_global()} on it.
+@pxref{c0,,gcc_jit_result_get_global()} on it.
@end deffn
@node Ahead-of-time compilation,,In-memory compilation,Compiling a context
-@anchor{topics/compilation ahead-of-time-compilation}@anchor{e7}
+@anchor{topics/compilation ahead-of-time-compilation}@anchor{ea}
@subsection Ahead-of-time compilation
@@ -8231,7 +8289,7 @@ suffix of the output file when determining what to do.
@end cartouche
@geindex gcc_jit_output_kind (C type)
-@anchor{topics/compilation gcc_jit_output_kind}@anchor{e8}
+@anchor{topics/compilation gcc_jit_output_kind}@anchor{eb}
@deffn {C Type} enum gcc_jit_output_kind
@end deffn
@@ -8249,7 +8307,7 @@ Typical suffix
@item
-@pxref{e9,,GCC_JIT_OUTPUT_KIND_ASSEMBLER}
+@pxref{ec,,GCC_JIT_OUTPUT_KIND_ASSEMBLER}
@tab
@@ -8257,7 +8315,7 @@ Typical suffix
@item
-@pxref{ea,,GCC_JIT_OUTPUT_KIND_OBJECT_FILE}
+@pxref{ed,,GCC_JIT_OUTPUT_KIND_OBJECT_FILE}
@tab
@@ -8265,7 +8323,7 @@ Typical suffix
@item
-@pxref{eb,,GCC_JIT_OUTPUT_KIND_DYNAMIC_LIBRARY}
+@pxref{ee,,GCC_JIT_OUTPUT_KIND_DYNAMIC_LIBRARY}
@tab
@@ -8273,7 +8331,7 @@ Typical suffix
@item
-@pxref{ec,,GCC_JIT_OUTPUT_KIND_EXECUTABLE}
+@pxref{ef,,GCC_JIT_OUTPUT_KIND_EXECUTABLE}
@tab
@@ -8283,21 +8341,21 @@ None, or .exe
@geindex GCC_JIT_OUTPUT_KIND_ASSEMBLER (C macro)
-@anchor{topics/compilation GCC_JIT_OUTPUT_KIND_ASSEMBLER}@anchor{e9}
+@anchor{topics/compilation GCC_JIT_OUTPUT_KIND_ASSEMBLER}@anchor{ec}
@deffn {C Macro} GCC_JIT_OUTPUT_KIND_ASSEMBLER
Compile the context to an assembler file.
@end deffn
@geindex GCC_JIT_OUTPUT_KIND_OBJECT_FILE (C macro)
-@anchor{topics/compilation GCC_JIT_OUTPUT_KIND_OBJECT_FILE}@anchor{ea}
+@anchor{topics/compilation GCC_JIT_OUTPUT_KIND_OBJECT_FILE}@anchor{ed}
@deffn {C Macro} GCC_JIT_OUTPUT_KIND_OBJECT_FILE
Compile the context to an object file.
@end deffn
@geindex GCC_JIT_OUTPUT_KIND_DYNAMIC_LIBRARY (C macro)
-@anchor{topics/compilation GCC_JIT_OUTPUT_KIND_DYNAMIC_LIBRARY}@anchor{eb}
+@anchor{topics/compilation GCC_JIT_OUTPUT_KIND_DYNAMIC_LIBRARY}@anchor{ee}
@deffn {C Macro} GCC_JIT_OUTPUT_KIND_DYNAMIC_LIBRARY
Compile the context to a dynamic library.
@@ -8307,7 +8365,7 @@ against.
@end deffn
@geindex GCC_JIT_OUTPUT_KIND_EXECUTABLE (C macro)
-@anchor{topics/compilation GCC_JIT_OUTPUT_KIND_EXECUTABLE}@anchor{ec}
+@anchor{topics/compilation GCC_JIT_OUTPUT_KIND_EXECUTABLE}@anchor{ef}
@deffn {C Macro} GCC_JIT_OUTPUT_KIND_EXECUTABLE
Compile the context to an executable.
@@ -8334,7 +8392,7 @@ against.
@c <http://www.gnu.org/licenses/>.
@node ABI and API compatibility,Performance,Compiling a context,Topic Reference
-@anchor{topics/compatibility abi-and-api-compatibility}@anchor{ed}@anchor{topics/compatibility doc}@anchor{ee}
+@anchor{topics/compatibility abi-and-api-compatibility}@anchor{f0}@anchor{topics/compatibility doc}@anchor{f1}
@section ABI and API compatibility
@@ -8400,12 +8458,13 @@ ABI symbol tags
* LIBGCCJIT_ABI_5::
* LIBGCCJIT_ABI_6::
* LIBGCCJIT_ABI_7::
+* LIBGCCJIT_ABI_8::
@end menu
@node ABI symbol tags,,,ABI and API compatibility
-@anchor{topics/compatibility abi-symbol-tags}@anchor{ef}
+@anchor{topics/compatibility abi-symbol-tags}@anchor{f2}
@subsection ABI symbol tags
@@ -8422,11 +8481,12 @@ Newer releases use the following tags.
* LIBGCCJIT_ABI_5::
* LIBGCCJIT_ABI_6::
* LIBGCCJIT_ABI_7::
+* LIBGCCJIT_ABI_8::
@end menu
@node LIBGCCJIT_ABI_0,LIBGCCJIT_ABI_1,,ABI symbol tags
-@anchor{topics/compatibility libgccjit-abi-0}@anchor{f0}@anchor{topics/compatibility id1}@anchor{f1}
+@anchor{topics/compatibility libgccjit-abi-0}@anchor{f3}@anchor{topics/compatibility id1}@anchor{f4}
@subsubsection @code{LIBGCCJIT_ABI_0}
@@ -8438,7 +8498,7 @@ continue to work, with this being handled transparently by the linker
(see this post@footnote{https://gcc.gnu.org/ml/gcc-patches/2015-06/msg02126.html})
@node LIBGCCJIT_ABI_1,LIBGCCJIT_ABI_2,LIBGCCJIT_ABI_0,ABI symbol tags
-@anchor{topics/compatibility libgccjit-abi-1}@anchor{73}@anchor{topics/compatibility id2}@anchor{f2}
+@anchor{topics/compatibility libgccjit-abi-1}@anchor{73}@anchor{topics/compatibility id2}@anchor{f5}
@subsubsection @code{LIBGCCJIT_ABI_1}
@@ -8446,7 +8506,7 @@ continue to work, with this being handled transparently by the linker
@pxref{72,,gcc_jit_context_add_command_line_option()}
@node LIBGCCJIT_ABI_2,LIBGCCJIT_ABI_3,LIBGCCJIT_ABI_1,ABI symbol tags
-@anchor{topics/compatibility libgccjit-abi-2}@anchor{6c}@anchor{topics/compatibility id3}@anchor{f3}
+@anchor{topics/compatibility libgccjit-abi-2}@anchor{6c}@anchor{topics/compatibility id3}@anchor{f6}
@subsubsection @code{LIBGCCJIT_ABI_2}
@@ -8454,7 +8514,7 @@ continue to work, with this being handled transparently by the linker
@pxref{6b,,gcc_jit_context_set_bool_allow_unreachable_blocks()}
@node LIBGCCJIT_ABI_3,LIBGCCJIT_ABI_4,LIBGCCJIT_ABI_2,ABI symbol tags
-@anchor{topics/compatibility libgccjit-abi-3}@anchor{df}@anchor{topics/compatibility id4}@anchor{f4}
+@anchor{topics/compatibility libgccjit-abi-3}@anchor{e2}@anchor{topics/compatibility id4}@anchor{f7}
@subsubsection @code{LIBGCCJIT_ABI_3}
@@ -8467,18 +8527,18 @@ entrypoints:
@itemize *
@item
-@pxref{dc,,gcc_jit_block_end_with_switch()}
+@pxref{df,,gcc_jit_block_end_with_switch()}
@item
-@pxref{dd,,gcc_jit_case_as_object()}
+@pxref{e0,,gcc_jit_case_as_object()}
@item
-@pxref{de,,gcc_jit_context_new_case()}
+@pxref{e1,,gcc_jit_context_new_case()}
@end itemize
@end quotation
@node LIBGCCJIT_ABI_4,LIBGCCJIT_ABI_5,LIBGCCJIT_ABI_3,ABI symbol tags
-@anchor{topics/compatibility id5}@anchor{f5}@anchor{topics/compatibility libgccjit-abi-4}@anchor{f6}
+@anchor{topics/compatibility id5}@anchor{f8}@anchor{topics/compatibility libgccjit-abi-4}@anchor{f9}
@subsubsection @code{LIBGCCJIT_ABI_4}
@@ -8491,30 +8551,30 @@ entrypoints:
@itemize *
@item
-@pxref{f7,,gcc_jit_context_get_timer()}
+@pxref{fa,,gcc_jit_context_get_timer()}
@item
-@pxref{f8,,gcc_jit_context_set_timer()}
+@pxref{fb,,gcc_jit_context_set_timer()}
@item
-@pxref{f9,,gcc_jit_timer_new()}
+@pxref{fc,,gcc_jit_timer_new()}
@item
-@pxref{fa,,gcc_jit_timer_release()}
+@pxref{fd,,gcc_jit_timer_release()}
@item
-@pxref{fb,,gcc_jit_timer_push()}
+@pxref{fe,,gcc_jit_timer_push()}
@item
-@pxref{fc,,gcc_jit_timer_pop()}
+@pxref{ff,,gcc_jit_timer_pop()}
@item
-@pxref{fd,,gcc_jit_timer_print()}
+@pxref{100,,gcc_jit_timer_print()}
@end itemize
@end quotation
@node LIBGCCJIT_ABI_5,LIBGCCJIT_ABI_6,LIBGCCJIT_ABI_4,ABI symbol tags
-@anchor{topics/compatibility id6}@anchor{fe}@anchor{topics/compatibility libgccjit-abi-5}@anchor{6e}
+@anchor{topics/compatibility id6}@anchor{101}@anchor{topics/compatibility libgccjit-abi-5}@anchor{6e}
@subsubsection @code{LIBGCCJIT_ABI_5}
@@ -8522,21 +8582,29 @@ entrypoints:
@pxref{6d,,gcc_jit_context_set_bool_use_external_driver()}
@node LIBGCCJIT_ABI_6,LIBGCCJIT_ABI_7,LIBGCCJIT_ABI_5,ABI symbol tags
-@anchor{topics/compatibility id7}@anchor{ff}@anchor{topics/compatibility libgccjit-abi-6}@anchor{b2}
+@anchor{topics/compatibility id7}@anchor{102}@anchor{topics/compatibility libgccjit-abi-6}@anchor{b5}
@subsubsection @code{LIBGCCJIT_ABI_6}
@code{LIBGCCJIT_ABI_6} covers the addition of
-@pxref{b1,,gcc_jit_rvalue_set_bool_require_tail_call()}
+@pxref{b4,,gcc_jit_rvalue_set_bool_require_tail_call()}
-@node LIBGCCJIT_ABI_7,,LIBGCCJIT_ABI_6,ABI symbol tags
-@anchor{topics/compatibility libgccjit-abi-7}@anchor{81}@anchor{topics/compatibility id8}@anchor{100}
+@node LIBGCCJIT_ABI_7,LIBGCCJIT_ABI_8,LIBGCCJIT_ABI_6,ABI symbol tags
+@anchor{topics/compatibility libgccjit-abi-7}@anchor{81}@anchor{topics/compatibility id8}@anchor{103}
@subsubsection @code{LIBGCCJIT_ABI_7}
@code{LIBGCCJIT_ABI_7} covers the addition of
@pxref{80,,gcc_jit_type_get_aligned()}
+@node LIBGCCJIT_ABI_8,,LIBGCCJIT_ABI_7,ABI symbol tags
+@anchor{topics/compatibility libgccjit-abi-8}@anchor{84}@anchor{topics/compatibility id9}@anchor{104}
+@subsubsection @code{LIBGCCJIT_ABI_8}
+
+
+@code{LIBGCCJIT_ABI_8} covers the addition of
+@pxref{83,,gcc_jit_type_get_vector()}
+
@c Copyright (C) 2015-2017 Free Software Foundation, Inc.
@c Originally contributed by David Malcolm <dmalcolm@redhat.com>
@c
@@ -8555,7 +8623,7 @@ entrypoints:
@c <http://www.gnu.org/licenses/>.
@node Performance,,ABI and API compatibility,Topic Reference
-@anchor{topics/performance performance}@anchor{101}@anchor{topics/performance doc}@anchor{102}
+@anchor{topics/performance performance}@anchor{105}@anchor{topics/performance doc}@anchor{106}
@section Performance
@@ -8565,14 +8633,14 @@ entrypoints:
@end menu
@node The timing API,,,Performance
-@anchor{topics/performance the-timing-api}@anchor{103}
+@anchor{topics/performance the-timing-api}@anchor{107}
@subsection The timing API
As of GCC 6, libgccjit exposes a timing API, for printing reports on
how long was spent in different parts of code.
-You can create a @pxref{104,,gcc_jit_timer} instance, which will
+You can create a @pxref{108,,gcc_jit_timer} instance, which will
measure time spent since its creation. The timer maintains a stack
of "timer items": as control flow moves through your code, you can push
and pop named items relating to your code onto the stack, and the timer
@@ -8674,7 +8742,7 @@ Client items:
The exact format is intended to be human-readable, and is subject to change.
@geindex LIBGCCJIT_HAVE_TIMING_API (C macro)
-@anchor{topics/performance LIBGCCJIT_HAVE_TIMING_API}@anchor{105}
+@anchor{topics/performance LIBGCCJIT_HAVE_TIMING_API}@anchor{109}
@deffn {C Macro} LIBGCCJIT_HAVE_TIMING_API
The timer API was added to libgccjit in GCC 6.
@@ -8693,15 +8761,15 @@ gcc_jit_context_set_timer (ctxt, t);
@end deffn
@geindex gcc_jit_timer (C type)
-@anchor{topics/performance gcc_jit_timer}@anchor{104}
+@anchor{topics/performance gcc_jit_timer}@anchor{108}
@deffn {C Type} gcc_jit_timer
@end deffn
@geindex gcc_jit_timer_new (C function)
-@anchor{topics/performance gcc_jit_timer_new}@anchor{f9}
+@anchor{topics/performance gcc_jit_timer_new}@anchor{fc}
@deffn {C Function} gcc_jit_timer * gcc_jit_timer_new (void)
-Create a @pxref{104,,gcc_jit_timer} instance, and start timing:
+Create a @pxref{108,,gcc_jit_timer} instance, and start timing:
@example
gcc_jit_timer *t = gcc_jit_timer_new ();
@@ -8709,7 +8777,7 @@ gcc_jit_timer *t = gcc_jit_timer_new ();
@noindent
-This API entrypoint was added in @pxref{f6,,LIBGCCJIT_ABI_4}; you can test
+This API entrypoint was added in @pxref{f9,,LIBGCCJIT_ABI_4}; you can test
for its presence using
@example
@@ -8720,10 +8788,10 @@ for its presence using
@end deffn
@geindex gcc_jit_timer_release (C function)
-@anchor{topics/performance gcc_jit_timer_release}@anchor{fa}
+@anchor{topics/performance gcc_jit_timer_release}@anchor{fd}
@deffn {C Function} void gcc_jit_timer_release (gcc_jit_timer@w{ }*timer)
-Release a @pxref{104,,gcc_jit_timer} instance:
+Release a @pxref{108,,gcc_jit_timer} instance:
@example
gcc_jit_timer_release (t);
@@ -8733,7 +8801,7 @@ gcc_jit_timer_release (t);
This should be called exactly once on a timer.
-This API entrypoint was added in @pxref{f6,,LIBGCCJIT_ABI_4}; you can test
+This API entrypoint was added in @pxref{f9,,LIBGCCJIT_ABI_4}; you can test
for its presence using
@example
@@ -8744,10 +8812,10 @@ for its presence using
@end deffn
@geindex gcc_jit_context_set_timer (C function)
-@anchor{topics/performance gcc_jit_context_set_timer}@anchor{f8}
+@anchor{topics/performance gcc_jit_context_set_timer}@anchor{fb}
@deffn {C Function} void gcc_jit_context_set_timer (gcc_jit_context@w{ }*ctxt, gcc_jit_timer@w{ }*timer)
-Associate a @pxref{104,,gcc_jit_timer} instance with a context:
+Associate a @pxref{108,,gcc_jit_timer} instance with a context:
@example
gcc_jit_context_set_timer (ctxt, t);
@@ -8762,7 +8830,7 @@ Timers have no locking, so if you have a multithreaded program, you
must provide your own locks if more than one thread could be working
with the same timer via timer-associated contexts.
-This API entrypoint was added in @pxref{f6,,LIBGCCJIT_ABI_4}; you can test
+This API entrypoint was added in @pxref{f9,,LIBGCCJIT_ABI_4}; you can test
for its presence using
@example
@@ -8773,12 +8841,12 @@ for its presence using
@end deffn
@geindex gcc_jit_context_get_timer (C function)
-@anchor{topics/performance gcc_jit_context_get_timer}@anchor{f7}
+@anchor{topics/performance gcc_jit_context_get_timer}@anchor{fa}
@deffn {C Function} gcc_jit_timer *gcc_jit_context_get_timer (gcc_jit_context@w{ }*ctxt)
Get the timer associated with a context (if any).
-This API entrypoint was added in @pxref{f6,,LIBGCCJIT_ABI_4}; you can test
+This API entrypoint was added in @pxref{f9,,LIBGCCJIT_ABI_4}; you can test
for its presence using
@example
@@ -8789,7 +8857,7 @@ for its presence using
@end deffn
@geindex gcc_jit_timer_push (C function)
-@anchor{topics/performance gcc_jit_timer_push}@anchor{fb}
+@anchor{topics/performance gcc_jit_timer_push}@anchor{fe}
@deffn {C Function} void gcc_jit_timer_push (gcc_jit_timer@w{ }*timer, const char@w{ }*item_name)
Push the given item onto the timer's stack:
@@ -8802,7 +8870,7 @@ gcc_jit_timer_pop (t, "running code");
@noindent
-This API entrypoint was added in @pxref{f6,,LIBGCCJIT_ABI_4}; you can test
+This API entrypoint was added in @pxref{f9,,LIBGCCJIT_ABI_4}; you can test
for its presence using
@example
@@ -8813,7 +8881,7 @@ for its presence using
@end deffn
@geindex gcc_jit_timer_pop (C function)
-@anchor{topics/performance gcc_jit_timer_pop}@anchor{fc}
+@anchor{topics/performance gcc_jit_timer_pop}@anchor{ff}
@deffn {C Function} void gcc_jit_timer_pop (gcc_jit_timer@w{ }*timer, const char@w{ }*item_name)
Pop the top item from the timer's stack.
@@ -8821,7 +8889,7 @@ Pop the top item from the timer's stack.
If "item_name" is provided, it must match that of the top item.
Alternatively, @code{NULL} can be passed in, to suppress checking.
-This API entrypoint was added in @pxref{f6,,LIBGCCJIT_ABI_4}; you can test
+This API entrypoint was added in @pxref{f9,,LIBGCCJIT_ABI_4}; you can test
for its presence using
@example
@@ -8832,13 +8900,13 @@ for its presence using
@end deffn
@geindex gcc_jit_timer_print (C function)
-@anchor{topics/performance gcc_jit_timer_print}@anchor{fd}
+@anchor{topics/performance gcc_jit_timer_print}@anchor{100}
@deffn {C Function} void gcc_jit_timer_print (gcc_jit_timer@w{ }*timer, FILE@w{ }*f_out)
Print timing information to the given stream about activity since
the timer was started.
-This API entrypoint was added in @pxref{f6,,LIBGCCJIT_ABI_4}; you can test
+This API entrypoint was added in @pxref{f9,,LIBGCCJIT_ABI_4}; you can test
for its presence using
@example
@@ -8866,7 +8934,7 @@ for its presence using
@c <http://www.gnu.org/licenses/>.
@node C++ bindings for libgccjit,Internals,Topic Reference,Top
-@anchor{cp/index c-bindings-for-libgccjit}@anchor{106}@anchor{cp/index doc}@anchor{107}
+@anchor{cp/index c-bindings-for-libgccjit}@anchor{10a}@anchor{cp/index doc}@anchor{10b}
@chapter C++ bindings for libgccjit
@@ -8973,6 +9041,7 @@ Types
* Standard types: Standard types<2>.
* Pointers@comma{} const@comma{} and volatile: Pointers const and volatile<2>.
+* Vector types: Vector types<2>.
* Structures and unions: Structures and unions<2>.
Expressions
@@ -9014,7 +9083,7 @@ Compiling a context
@node Tutorial<2>,Topic Reference<2>,,C++ bindings for libgccjit
-@anchor{cp/intro/index doc}@anchor{108}@anchor{cp/intro/index tutorial}@anchor{109}
+@anchor{cp/intro/index doc}@anchor{10c}@anchor{cp/intro/index tutorial}@anchor{10d}
@section Tutorial
@@ -9044,7 +9113,7 @@ Compiling a context
@end menu
@node Tutorial part 1 "Hello world"<2>,Tutorial part 2 Creating a trivial machine code function<2>,,Tutorial<2>
-@anchor{cp/intro/tutorial01 doc}@anchor{10a}@anchor{cp/intro/tutorial01 tutorial-part-1-hello-world}@anchor{10b}
+@anchor{cp/intro/tutorial01 doc}@anchor{10e}@anchor{cp/intro/tutorial01 tutorial-part-1-hello-world}@anchor{10f}
@subsection Tutorial part 1: "Hello world"
@@ -9214,7 +9283,7 @@ hello world
@c <http://www.gnu.org/licenses/>.
@node Tutorial part 2 Creating a trivial machine code function<2>,Tutorial part 3 Loops and variables<2>,Tutorial part 1 "Hello world"<2>,Tutorial<2>
-@anchor{cp/intro/tutorial02 doc}@anchor{10c}@anchor{cp/intro/tutorial02 tutorial-part-2-creating-a-trivial-machine-code-function}@anchor{10d}
+@anchor{cp/intro/tutorial02 doc}@anchor{110}@anchor{cp/intro/tutorial02 tutorial-part-2-creating-a-trivial-machine-code-function}@anchor{111}
@subsection Tutorial part 2: Creating a trivial machine code function
@@ -9243,7 +9312,7 @@ All state associated with compilation is associated with a
@code{gccjit::context}, which is a thin C++ wrapper around the C API's
@pxref{8,,gcc_jit_context *}.
-Create one using @pxref{10e,,gccjit;;context;;acquire()}:
+Create one using @pxref{112,,gccjit;;context;;acquire()}:
@example
gccjit::context ctxt;
@@ -9256,7 +9325,7 @@ The JIT library has a system of types. It is statically-typed: every
expression is of a specific type, fixed at compile-time. In our example,
all of the expressions are of the C @cite{int} type, so let's obtain this from
the context, as a @code{gccjit::type}, using
-@pxref{10f,,gccjit;;context;;get_type()}:
+@pxref{113,,gccjit;;context;;get_type()}:
@example
gccjit::type int_type = ctxt.get_type (GCC_JIT_TYPE_INT);
@@ -9269,7 +9338,7 @@ entity in the API is associated with a @code{gccjit::context}.
Memory management is easy: all such "contextual" objects are automatically
cleaned up for you when the context is released, using
-@pxref{110,,gccjit;;context;;release()}:
+@pxref{114,,gccjit;;context;;release()}:
@example
ctxt.release ();
@@ -9302,7 +9371,7 @@ The C++ class hierarchy within the @code{gccjit} namespace looks like this:
One thing you can do with a @code{gccjit::object} is
to ask it for a human-readable description as a @code{std::string}, using
-@pxref{111,,gccjit;;object;;get_debug_string()}:
+@pxref{115,,gccjit;;object;;get_debug_string()}:
@example
printf ("obj: %s\n", obj.get_debug_string ().c_str ());
@@ -9322,7 +9391,7 @@ This is invaluable when debugging.
Let's create the function. To do so, we first need to construct
its single parameter, specifying its type and giving it a name,
-using @pxref{112,,gccjit;;context;;new_param()}:
+using @pxref{116,,gccjit;;context;;new_param()}:
@example
gccjit::param param_i = ctxt.new_param (int_type, "i");
@@ -9371,7 +9440,7 @@ gccjit::block block = func.new_block ();
Our basic block is relatively simple: it immediately terminates by
returning the value of an expression.
-We can build the expression using @pxref{113,,gccjit;;context;;new_binary_op()}:
+We can build the expression using @pxref{117,,gccjit;;context;;new_binary_op()}:
@example
gccjit::rvalue expr =
@@ -9384,7 +9453,7 @@ gccjit::rvalue expr =
A @code{gccjit::rvalue} is another example of a
@code{gccjit::object} subclass. As before, we can print it with
-@pxref{111,,gccjit;;object;;get_debug_string()}.
+@pxref{115,,gccjit;;object;;get_debug_string()}.
@example
printf ("expr: %s\n", expr.get_debug_string ().c_str ());
@@ -9421,7 +9490,7 @@ block.end_with_return (expr);
@noindent
OK, we've populated the context. We can now compile it using
-@pxref{114,,gccjit;;context;;compile()}:
+@pxref{118,,gccjit;;context;;compile()}:
@example
gcc_jit_result *result;
@@ -9471,12 +9540,12 @@ result: 25
@end menu
@node Options<3>,Full example<3>,,Tutorial part 2 Creating a trivial machine code function<2>
-@anchor{cp/intro/tutorial02 options}@anchor{115}
+@anchor{cp/intro/tutorial02 options}@anchor{119}
@subsubsection Options
To get more information on what's going on, you can set debugging flags
-on the context using @pxref{116,,gccjit;;context;;set_bool_option()}.
+on the context using @pxref{11a,,gccjit;;context;;set_bool_option()}.
@c (I'm deliberately not mentioning
@c :c:macro:`GCC_JIT_BOOL_OPTION_DUMP_INITIAL_TREE` here since I think
@@ -9548,7 +9617,7 @@ square:
By default, no optimizations are performed, the equivalent of GCC's
@cite{-O0} option. We can turn things up to e.g. @cite{-O3} by calling
-@pxref{117,,gccjit;;context;;set_int_option()} with
+@pxref{11b,,gccjit;;context;;set_int_option()} with
@pxref{1f,,GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL}:
@example
@@ -9582,7 +9651,7 @@ square:
Naturally this has only a small effect on such a trivial function.
@node Full example<3>,,Options<3>,Tutorial part 2 Creating a trivial machine code function<2>
-@anchor{cp/intro/tutorial02 full-example}@anchor{118}
+@anchor{cp/intro/tutorial02 full-example}@anchor{11c}
@subsubsection Full example
@@ -9725,7 +9794,7 @@ result: 25
@c <http://www.gnu.org/licenses/>.
@node Tutorial part 3 Loops and variables<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2>,Tutorial part 2 Creating a trivial machine code function<2>,Tutorial<2>
-@anchor{cp/intro/tutorial03 tutorial-part-3-loops-and-variables}@anchor{119}@anchor{cp/intro/tutorial03 doc}@anchor{11a}
+@anchor{cp/intro/tutorial03 tutorial-part-3-loops-and-variables}@anchor{11d}@anchor{cp/intro/tutorial03 doc}@anchor{11e}
@subsection Tutorial part 3: Loops and variables
@@ -9849,7 +9918,7 @@ gccjit::function func =
@end menu
@node Expressions lvalues and rvalues<2>,Control flow<2>,,Tutorial part 3 Loops and variables<2>
-@anchor{cp/intro/tutorial03 expressions-lvalues-and-rvalues}@anchor{11b}
+@anchor{cp/intro/tutorial03 expressions-lvalues-and-rvalues}@anchor{11f}
@subsubsection Expressions: lvalues and rvalues
@@ -9922,7 +9991,7 @@ body of a function.
Our new example has a new kind of expression: we have two local
variables. We create them by calling
-@pxref{11c,,gccjit;;function;;new_local()}, supplying a type and a name:
+@pxref{120,,gccjit;;function;;new_local()}, supplying a type and a name:
@example
/* Build locals: */
@@ -9948,7 +10017,7 @@ Instead, having added the local to the function, we have to separately add
an assignment of @cite{0} to @cite{local_i} at the beginning of the function.
@node Control flow<2>,Visualizing the control flow graph<2>,Expressions lvalues and rvalues<2>,Tutorial part 3 Loops and variables<2>
-@anchor{cp/intro/tutorial03 control-flow}@anchor{11d}
+@anchor{cp/intro/tutorial03 control-flow}@anchor{121}
@subsubsection Control flow
@@ -9987,8 +10056,8 @@ We now populate each block with statements.
The entry block @cite{b_initial} consists of initializations followed by a jump
to the conditional. We assign @cite{0} to @cite{i} and to @cite{sum}, using
-@pxref{11e,,gccjit;;block;;add_assignment()} to add
-an assignment statement, and using @pxref{11f,,gccjit;;context;;zero()} to get
+@pxref{122,,gccjit;;block;;add_assignment()} to add
+an assignment statement, and using @pxref{123,,gccjit;;context;;zero()} to get
the constant value @cite{0} for the relevant type for the right-hand side of
the assignment:
@@ -10015,7 +10084,7 @@ C example. It contains a single statement: a conditional, which jumps to
one of two destination blocks depending on a boolean
@code{gccjit::rvalue}, in this case the comparison of @cite{i} and @cite{n}.
-We could build the comparison using @pxref{120,,gccjit;;context;;new_comparison()}:
+We could build the comparison using @pxref{124,,gccjit;;context;;new_comparison()}:
@example
gccjit::rvalue guard =
@@ -10026,7 +10095,7 @@ gccjit::rvalue guard =
@noindent
and can then use this to add @cite{b_loop_cond}'s sole statement, via
-@pxref{121,,gccjit;;block;;end_with_conditional()}:
+@pxref{125,,gccjit;;block;;end_with_conditional()}:
@example
b_loop_cond.end_with_conditional (guard,
@@ -10060,7 +10129,7 @@ Next, we populate the body of the loop.
The C statement @cite{sum += i * i;} is an assignment operation, where an
lvalue is modified "in-place". We use
-@pxref{122,,gccjit;;block;;add_assignment_op()} to handle these operations:
+@pxref{126,,gccjit;;block;;add_assignment_op()} to handle these operations:
@example
/* sum += i * i */
@@ -10088,7 +10157,7 @@ b_loop_body.add_assignment_op (i,
@cartouche
@quotation Note
For numeric constants other than 0 or 1, we could use
-@pxref{123,,gccjit;;context;;new_rvalue()}, which has overloads
+@pxref{127,,gccjit;;context;;new_rvalue()}, which has overloads
for both @code{int} and @code{double}.
@end quotation
@end cartouche
@@ -10164,12 +10233,12 @@ result: 285
@noindent
@node Visualizing the control flow graph<2>,Full example<4>,Control flow<2>,Tutorial part 3 Loops and variables<2>
-@anchor{cp/intro/tutorial03 visualizing-the-control-flow-graph}@anchor{124}
+@anchor{cp/intro/tutorial03 visualizing-the-control-flow-graph}@anchor{128}
@subsubsection Visualizing the control flow graph
You can see the control flow graph of a function using
-@pxref{125,,gccjit;;function;;dump_to_dot()}:
+@pxref{129,,gccjit;;function;;dump_to_dot()}:
@example
func.dump_to_dot ("/tmp/sum-of-squares.dot");
@@ -10203,7 +10272,7 @@ install it with @cite{yum install python-xdot}):
@end quotation
@node Full example<4>,,Visualizing the control flow graph<2>,Tutorial part 3 Loops and variables<2>
-@anchor{cp/intro/tutorial03 full-example}@anchor{126}
+@anchor{cp/intro/tutorial03 full-example}@anchor{12a}
@subsubsection Full example
@@ -10386,7 +10455,7 @@ loop_test returned: 285
@c <http://www.gnu.org/licenses/>.
@node Tutorial part 4 Adding JIT-compilation to a toy interpreter<2>,,Tutorial part 3 Loops and variables<2>,Tutorial<2>
-@anchor{cp/intro/tutorial04 tutorial-part-4-adding-jit-compilation-to-a-toy-interpreter}@anchor{127}@anchor{cp/intro/tutorial04 doc}@anchor{128}
+@anchor{cp/intro/tutorial04 tutorial-part-4-adding-jit-compilation-to-a-toy-interpreter}@anchor{12b}@anchor{cp/intro/tutorial04 doc}@anchor{12c}
@subsection Tutorial part 4: Adding JIT-compilation to a toy interpreter
@@ -10408,7 +10477,7 @@ to it.
@end menu
@node Our toy interpreter<2>,Compiling to machine code<2>,,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2>
-@anchor{cp/intro/tutorial04 our-toy-interpreter}@anchor{129}
+@anchor{cp/intro/tutorial04 our-toy-interpreter}@anchor{12d}
@subsubsection Our toy interpreter
@@ -10816,7 +10885,7 @@ toyvm_function::interpret (int arg, FILE *trace)
@end quotation
@node Compiling to machine code<2>,Setting things up<2>,Our toy interpreter<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2>
-@anchor{cp/intro/tutorial04 compiling-to-machine-code}@anchor{12a}
+@anchor{cp/intro/tutorial04 compiling-to-machine-code}@anchor{12e}
@subsubsection Compiling to machine code
@@ -10896,7 +10965,7 @@ This means our compiler has the following state:
@end quotation
@node Setting things up<2>,Populating the function<2>,Compiling to machine code<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2>
-@anchor{cp/intro/tutorial04 setting-things-up}@anchor{12b}
+@anchor{cp/intro/tutorial04 setting-things-up}@anchor{12f}
@subsubsection Setting things up
@@ -11064,7 +11133,7 @@ We create the locals within the function.
@end quotation
@node Populating the function<2>,Verifying the control flow graph<2>,Setting things up<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2>
-@anchor{cp/intro/tutorial04 populating-the-function}@anchor{12c}
+@anchor{cp/intro/tutorial04 populating-the-function}@anchor{130}
@subsubsection Populating the function
@@ -11192,7 +11261,7 @@ stack into @code{y} instead erroneously assigned it to @code{x}, leaving @code{y
uninitialized.
To track this kind of thing down, we can use
-@pxref{12d,,gccjit;;block;;add_comment()} to add descriptive comments
+@pxref{131,,gccjit;;block;;add_comment()} to add descriptive comments
to the internal representation. This is invaluable when looking through
the generated IR for, say @code{factorial}:
@@ -11341,14 +11410,14 @@ to the next block.
This is analogous to simply incrementing the program counter.
@node Verifying the control flow graph<2>,Compiling the context<2>,Populating the function<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2>
-@anchor{cp/intro/tutorial04 verifying-the-control-flow-graph}@anchor{12e}
+@anchor{cp/intro/tutorial04 verifying-the-control-flow-graph}@anchor{132}
@subsubsection Verifying the control flow graph
Having finished looping over the blocks, the context is complete.
As before, we can verify that the control flow and statements are sane by
-using @pxref{125,,gccjit;;function;;dump_to_dot()}:
+using @pxref{129,,gccjit;;function;;dump_to_dot()}:
@example
fn.dump_to_dot ("/tmp/factorial.dot");
@@ -11372,7 +11441,7 @@ errors in our compiler.
@end quotation
@node Compiling the context<2>,Single-stepping through the generated code<2>,Verifying the control flow graph<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2>
-@anchor{cp/intro/tutorial04 compiling-the-context}@anchor{12f}
+@anchor{cp/intro/tutorial04 compiling-the-context}@anchor{133}
@subsubsection Compiling the context
@@ -11429,7 +11498,7 @@ private:
@end quotation
@node Single-stepping through the generated code<2>,Examining the generated code<2>,Compiling the context<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2>
-@anchor{cp/intro/tutorial04 single-stepping-through-the-generated-code}@anchor{130}
+@anchor{cp/intro/tutorial04 single-stepping-through-the-generated-code}@anchor{134}
@subsubsection Single-stepping through the generated code
@@ -11443,14 +11512,14 @@ It's possible to debug the generated code. To do this we need to both:
@item
Set up source code locations for our statements, so that we can
meaningfully step through the code. We did this above by
-calling @pxref{131,,gccjit;;context;;new_location()} and using the
+calling @pxref{135,,gccjit;;context;;new_location()} and using the
results.
@item
Enable the generation of debugging information, by setting
@pxref{42,,GCC_JIT_BOOL_OPTION_DEBUGINFO} on the
@code{gccjit::context} via
-@pxref{116,,gccjit;;context;;set_bool_option()}:
+@pxref{11a,,gccjit;;context;;set_bool_option()}:
@example
ctxt.set_bool_option (GCC_JIT_BOOL_OPTION_DEBUGINFO, 1);
@@ -11522,14 +11591,14 @@ optimization level in a regular compiler.
@end cartouche
@node Examining the generated code<2>,Putting it all together<2>,Single-stepping through the generated code<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2>
-@anchor{cp/intro/tutorial04 examining-the-generated-code}@anchor{132}
+@anchor{cp/intro/tutorial04 examining-the-generated-code}@anchor{136}
@subsubsection Examining the generated code
How good is the optimized code?
We can turn up optimizations, by calling
-@pxref{117,,gccjit;;context;;set_int_option()} with
+@pxref{11b,,gccjit;;context;;set_int_option()} with
@pxref{1f,,GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL}:
@example
@@ -11711,7 +11780,7 @@ Note that the stack pushing and popping have been eliminated, as has the
recursive call (in favor of an iteration).
@node Putting it all together<2>,Behind the curtain How does our code get optimized?<2>,Examining the generated code<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2>
-@anchor{cp/intro/tutorial04 putting-it-all-together}@anchor{133}
+@anchor{cp/intro/tutorial04 putting-it-all-together}@anchor{137}
@subsubsection Putting it all together
@@ -11744,7 +11813,7 @@ compiler result: 55
@noindent
@node Behind the curtain How does our code get optimized?<2>,,Putting it all together<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2>
-@anchor{cp/intro/tutorial04 behind-the-curtain-how-does-our-code-get-optimized}@anchor{134}
+@anchor{cp/intro/tutorial04 behind-the-curtain-how-does-our-code-get-optimized}@anchor{138}
@subsubsection Behind the curtain: How does our code get optimized?
@@ -11945,7 +12014,7 @@ representation: @code{initial}, @code{instr4} and @code{instr9}.
@end menu
@node Optimizing away stack manipulation<2>,Elimination of tail recursion<2>,,Behind the curtain How does our code get optimized?<2>
-@anchor{cp/intro/tutorial04 optimizing-away-stack-manipulation}@anchor{135}
+@anchor{cp/intro/tutorial04 optimizing-away-stack-manipulation}@anchor{139}
@subsubsection Optimizing away stack manipulation
@@ -12225,7 +12294,7 @@ instr9:
@noindent
@node Elimination of tail recursion<2>,,Optimizing away stack manipulation<2>,Behind the curtain How does our code get optimized?<2>
-@anchor{cp/intro/tutorial04 elimination-of-tail-recursion}@anchor{136}
+@anchor{cp/intro/tutorial04 elimination-of-tail-recursion}@anchor{13a}
@subsubsection Elimination of tail recursion
@@ -12312,7 +12381,7 @@ instr9:
@c <http://www.gnu.org/licenses/>.
@node Topic Reference<2>,,Tutorial<2>,C++ bindings for libgccjit
-@anchor{cp/topics/index doc}@anchor{137}@anchor{cp/topics/index topic-reference}@anchor{138}
+@anchor{cp/topics/index doc}@anchor{13b}@anchor{cp/topics/index topic-reference}@anchor{13c}
@section Topic Reference
@@ -12361,6 +12430,7 @@ Types
* Standard types: Standard types<2>.
* Pointers@comma{} const@comma{} and volatile: Pointers const and volatile<2>.
+* Vector types: Vector types<2>.
* Structures and unions: Structures and unions<2>.
Expressions
@@ -12402,22 +12472,22 @@ Compiling a context
@node Compilation contexts<2>,Objects<2>,,Topic Reference<2>
-@anchor{cp/topics/contexts compilation-contexts}@anchor{139}@anchor{cp/topics/contexts doc}@anchor{13a}
+@anchor{cp/topics/contexts compilation-contexts}@anchor{13d}@anchor{cp/topics/contexts doc}@anchor{13e}
@subsection Compilation contexts
@geindex gccjit;;context (C++ class)
-@anchor{cp/topics/contexts gccjit context}@anchor{13b}
+@anchor{cp/topics/contexts gccjit context}@anchor{13f}
@deffn {C++ Class} gccjit::context
@end deffn
-The top-level of the C++ API is the @pxref{13b,,gccjit;;context} type.
+The top-level of the C++ API is the @pxref{13f,,gccjit;;context} type.
-A @pxref{13b,,gccjit;;context} instance encapsulates the state of a
+A @pxref{13f,,gccjit;;context} instance encapsulates the state of a
compilation.
You can set up options on it, and add types, functions and code.
-Invoking @pxref{114,,gccjit;;context;;compile()} on it gives you a
+Invoking @pxref{118,,gccjit;;context;;compile()} on it gives you a
@pxref{16,,gcc_jit_result *}.
It is a thin wrapper around the C API's @pxref{8,,gcc_jit_context *}.
@@ -12432,7 +12502,7 @@ It is a thin wrapper around the C API's @pxref{8,,gcc_jit_context *}.
@end menu
@node Lifetime-management<2>,Thread-safety<2>,,Compilation contexts<2>
-@anchor{cp/topics/contexts lifetime-management}@anchor{13c}
+@anchor{cp/topics/contexts lifetime-management}@anchor{140}
@subsubsection Lifetime-management
@@ -12441,16 +12511,16 @@ have their lifetime bounded by the context they are created within, and
cleanup of such objects is done for you when the context is released.
@geindex gccjit;;context;;acquire (C++ function)
-@anchor{cp/topics/contexts gccjit context acquire}@anchor{10e}
+@anchor{cp/topics/contexts gccjit context acquire}@anchor{112}
@deffn {C++ Function} gccjit::context gccjit::context::acquire ()
-This function acquires a new @pxref{13b,,gccjit;;context} instance,
+This function acquires a new @pxref{13f,,gccjit;;context} instance,
which is independent of any others that may be present within this
process.
@end deffn
@geindex gccjit;;context;;release (C++ function)
-@anchor{cp/topics/contexts gccjit context release}@anchor{110}
+@anchor{cp/topics/contexts gccjit context release}@anchor{114}
@deffn {C++ Function} void gccjit::context::release ()
This function releases all resources associated with the given context.
@@ -12469,7 +12539,7 @@ ctxt.release ();
@end deffn
@geindex gccjit;;context;;new_child_context (C++ function)
-@anchor{cp/topics/contexts gccjit context new_child_context}@anchor{13d}
+@anchor{cp/topics/contexts gccjit context new_child_context}@anchor{141}
@deffn {C++ Function} gccjit::context gccjit::context::new_child_context ()
Given an existing JIT context, create a child context.
@@ -12501,16 +12571,16 @@ there will likely be a performance hit for such nesting.
@end deffn
@node Thread-safety<2>,Error-handling<3>,Lifetime-management<2>,Compilation contexts<2>
-@anchor{cp/topics/contexts thread-safety}@anchor{13e}
+@anchor{cp/topics/contexts thread-safety}@anchor{142}
@subsubsection Thread-safety
-Instances of @pxref{13b,,gccjit;;context} created via
-@pxref{10e,,gccjit;;context;;acquire()} are independent from each other:
+Instances of @pxref{13f,,gccjit;;context} created via
+@pxref{112,,gccjit;;context;;acquire()} are independent from each other:
only one thread may use a given context at once, but multiple threads
could each have their own contexts without needing locks.
-Contexts created via @pxref{13d,,gccjit;;context;;new_child_context()} are
+Contexts created via @pxref{141,,gccjit;;context;;new_child_context()} are
related to their parent context. They can be partitioned by their
ultimate ancestor into independent "family trees". Only one thread
within a process may use a given "family tree" of such contexts at once,
@@ -12518,7 +12588,7 @@ and if you're using multiple threads you should provide your own locking
around entire such context partitions.
@node Error-handling<3>,Debugging<2>,Thread-safety<2>,Compilation contexts<2>
-@anchor{cp/topics/contexts error-handling}@anchor{13f}
+@anchor{cp/topics/contexts error-handling}@anchor{143}
@subsubsection Error-handling
@@ -12531,10 +12601,10 @@ NULL. You don't have to check everywhere for NULL results, since the
API gracefully handles a NULL being passed in for any argument.
Errors are printed on stderr and can be queried using
-@pxref{140,,gccjit;;context;;get_first_error()}.
+@pxref{144,,gccjit;;context;;get_first_error()}.
@geindex gccjit;;context;;get_first_error (C++ function)
-@anchor{cp/topics/contexts gccjit context get_first_error__gccjit contextP}@anchor{140}
+@anchor{cp/topics/contexts gccjit context get_first_error__gccjit contextP}@anchor{144}
@deffn {C++ Function} const char* gccjit::context::get_first_error (gccjit::context* ctxt)
Returns the first error message that occurred on the context.
@@ -12546,18 +12616,18 @@ If no errors occurred, this will be NULL.
@end deffn
@node Debugging<2>,Options<4>,Error-handling<3>,Compilation contexts<2>
-@anchor{cp/topics/contexts debugging}@anchor{141}
+@anchor{cp/topics/contexts debugging}@anchor{145}
@subsubsection Debugging
@geindex gccjit;;context;;dump_to_file (C++ function)
-@anchor{cp/topics/contexts gccjit context dump_to_file__ssCR i}@anchor{142}
+@anchor{cp/topics/contexts gccjit context dump_to_file__ssCR i}@anchor{146}
@deffn {C++ Function} void gccjit::context::dump_to_file (const std::string& path, int update_locations)
To help with debugging: dump a C-like representation to the given path,
describing what's been set up on the context.
-If "update_locations" is true, then also set up @pxref{143,,gccjit;;location}
+If "update_locations" is true, then also set up @pxref{147,,gccjit;;location}
information throughout the context, pointing at the dump file as if it
were a source file. This may be of use in conjunction with
@code{GCCJIT::BOOL_OPTION_DEBUGINFO} to allow stepping through the
@@ -12565,7 +12635,7 @@ code in a debugger.
@end deffn
@geindex gccjit;;context;;dump_reproducer_to_file (C++ function)
-@anchor{cp/topics/contexts gccjit context dump_reproducer_to_file__gcc_jit_contextP cCP}@anchor{144}
+@anchor{cp/topics/contexts gccjit context dump_reproducer_to_file__gcc_jit_contextP cCP}@anchor{148}
@deffn {C++ Function} void gccjit::context::dump_reproducer_to_file (gcc_jit_context* ctxt, const char* path)
This is a thin wrapper around the C API
@@ -12577,7 +12647,7 @@ for seeing what the C++ bindings are doing at the C level.
@end deffn
@node Options<4>,,Debugging<2>,Compilation contexts<2>
-@anchor{cp/topics/contexts options}@anchor{145}
+@anchor{cp/topics/contexts options}@anchor{149}
@subsubsection Options
@@ -12590,12 +12660,12 @@ for seeing what the C++ bindings are doing at the C level.
@end menu
@node String Options<2>,Boolean options<2>,,Options<4>
-@anchor{cp/topics/contexts string-options}@anchor{146}
+@anchor{cp/topics/contexts string-options}@anchor{14a}
@subsubsection String Options
@geindex gccjit;;context;;set_str_option (C++ function)
-@anchor{cp/topics/contexts gccjit context set_str_option__enum cCP}@anchor{147}
+@anchor{cp/topics/contexts gccjit context set_str_option__enum cCP}@anchor{14b}
@deffn {C++ Function} void gccjit::context::set_str_option (enum gcc_jit_str_option, const char* value)
Set a string option of the context.
@@ -12606,12 +12676,12 @@ meaning.
@end deffn
@node Boolean options<2>,Integer options<2>,String Options<2>,Options<4>
-@anchor{cp/topics/contexts boolean-options}@anchor{148}
+@anchor{cp/topics/contexts boolean-options}@anchor{14c}
@subsubsection Boolean options
@geindex gccjit;;context;;set_bool_option (C++ function)
-@anchor{cp/topics/contexts gccjit context set_bool_option__enum i}@anchor{116}
+@anchor{cp/topics/contexts gccjit context set_bool_option__enum i}@anchor{11a}
@deffn {C++ Function} void gccjit::context::set_bool_option (enum gcc_jit_bool_option, int value)
Set a boolean option of the context.
@@ -12622,7 +12692,7 @@ meaning.
@end deffn
@geindex gccjit;;context;;set_bool_allow_unreachable_blocks (C++ function)
-@anchor{cp/topics/contexts gccjit context set_bool_allow_unreachable_blocks__i}@anchor{149}
+@anchor{cp/topics/contexts gccjit context set_bool_allow_unreachable_blocks__i}@anchor{14d}
@deffn {C++ Function} void gccjit::context::set_bool_allow_unreachable_blocks (int bool_value)
By default, libgccjit will issue an error about unreachable blocks
@@ -12643,7 +12713,7 @@ its presence using
@end deffn
@geindex gccjit;;context;;set_bool_use_external_driver (C++ function)
-@anchor{cp/topics/contexts gccjit context set_bool_use_external_driver__i}@anchor{14a}
+@anchor{cp/topics/contexts gccjit context set_bool_use_external_driver__i}@anchor{14e}
@deffn {C++ Function} void gccjit::context::set_bool_use_external_driver (int bool_value)
libgccjit internally generates assembler, and uses "driver" code
@@ -12667,12 +12737,12 @@ its presence using
@end deffn
@node Integer options<2>,Additional command-line options<2>,Boolean options<2>,Options<4>
-@anchor{cp/topics/contexts integer-options}@anchor{14b}
+@anchor{cp/topics/contexts integer-options}@anchor{14f}
@subsubsection Integer options
@geindex gccjit;;context;;set_int_option (C++ function)
-@anchor{cp/topics/contexts gccjit context set_int_option__enum i}@anchor{117}
+@anchor{cp/topics/contexts gccjit context set_int_option__enum i}@anchor{11b}
@deffn {C++ Function} void gccjit::context::set_int_option (enum gcc_jit_int_option, int value)
Set an integer option of the context.
@@ -12683,12 +12753,12 @@ meaning.
@end deffn
@node Additional command-line options<2>,,Integer options<2>,Options<4>
-@anchor{cp/topics/contexts additional-command-line-options}@anchor{14c}
+@anchor{cp/topics/contexts additional-command-line-options}@anchor{150}
@subsubsection Additional command-line options
@geindex gccjit;;context;;add_command_line_option (C++ function)
-@anchor{cp/topics/contexts gccjit context add_command_line_option__cCP}@anchor{14d}
+@anchor{cp/topics/contexts gccjit context add_command_line_option__cCP}@anchor{151}
@deffn {C++ Function} void gccjit::context::add_command_line_option (const char* optname)
Add an arbitrary gcc command-line option to the context for use
@@ -12725,18 +12795,18 @@ its presence using
@c <http://www.gnu.org/licenses/>.
@node Objects<2>,Types<2>,Compilation contexts<2>,Topic Reference<2>
-@anchor{cp/topics/objects objects}@anchor{14e}@anchor{cp/topics/objects doc}@anchor{14f}
+@anchor{cp/topics/objects objects}@anchor{152}@anchor{cp/topics/objects doc}@anchor{153}
@subsection Objects
@geindex gccjit;;object (C++ class)
-@anchor{cp/topics/objects gccjit object}@anchor{150}
+@anchor{cp/topics/objects gccjit object}@anchor{154}
@deffn {C++ Class} gccjit::object
@end deffn
Almost every entity in the API (with the exception of
-@pxref{13b,,gccjit;;context} and @pxref{16,,gcc_jit_result *}) is a
-"contextual" object, a @pxref{150,,gccjit;;object}.
+@pxref{13f,,gccjit;;context} and @pxref{16,,gcc_jit_result *}) is a
+"contextual" object, a @pxref{154,,gccjit;;object}.
A JIT object:
@@ -12746,7 +12816,7 @@ A JIT object:
@itemize *
@item
-is associated with a @pxref{13b,,gccjit;;context}.
+is associated with a @pxref{13f,,gccjit;;context}.
@item
is automatically cleaned up for you when its context is released so
@@ -12773,17 +12843,17 @@ The C++ class hierarchy within the @code{gccjit} namespace looks like this:
@noindent
-The @pxref{150,,gccjit;;object} base class has the following operations:
+The @pxref{154,,gccjit;;object} base class has the following operations:
@geindex gccjit;;object;;get_context (C++ function)
-@anchor{cp/topics/objects gccjit object get_contextC}@anchor{151}
+@anchor{cp/topics/objects gccjit object get_contextC}@anchor{155}
@deffn {C++ Function} gccjit::context gccjit::object::get_context () const
Which context is the obj within?
@end deffn
@geindex gccjit;;object;;get_debug_string (C++ function)
-@anchor{cp/topics/objects gccjit object get_debug_stringC}@anchor{111}
+@anchor{cp/topics/objects gccjit object get_debug_stringC}@anchor{115}
@deffn {C++ Function} std::string gccjit::object::get_debug_string () const
Generate a human-readable description for the given object.
@@ -12823,16 +12893,16 @@ obj: 4.0 * (float)i
@c <http://www.gnu.org/licenses/>.
@node Types<2>,Expressions<2>,Objects<2>,Topic Reference<2>
-@anchor{cp/topics/types doc}@anchor{152}@anchor{cp/topics/types types}@anchor{153}
+@anchor{cp/topics/types doc}@anchor{156}@anchor{cp/topics/types types}@anchor{157}
@subsection Types
@geindex gccjit;;type (C++ class)
-@anchor{cp/topics/types gccjit type}@anchor{154}
+@anchor{cp/topics/types gccjit type}@anchor{158}
@deffn {C++ Class} gccjit::type
gccjit::type represents a type within the library. It is a subclass
-of @pxref{150,,gccjit;;object}.
+of @pxref{154,,gccjit;;object}.
@end deffn
Types can be created in several ways:
@@ -12842,7 +12912,7 @@ Types can be created in several ways:
@item
fundamental types can be accessed using
-@pxref{10f,,gccjit;;context;;get_type()}:
+@pxref{113,,gccjit;;context;;get_type()}:
@example
gccjit::type int_type = ctxt.get_type (GCC_JIT_TYPE_INT);
@@ -12862,7 +12932,7 @@ See @pxref{b,,gcc_jit_context_get_type()} for the available types.
@item
derived types can be accessed by using functions such as
-@pxref{155,,gccjit;;type;;get_pointer()} and @pxref{156,,gccjit;;type;;get_const()}:
+@pxref{159,,gccjit;;type;;get_pointer()} and @pxref{15a,,gccjit;;type;;get_const()}:
@example
gccjit::type const_int_star = int_type.get_const ().get_pointer ();
@@ -12878,17 +12948,18 @@ by creating structures (see below).
@menu
* Standard types: Standard types<2>.
* Pointers@comma{} const@comma{} and volatile: Pointers const and volatile<2>.
+* Vector types: Vector types<2>.
* Structures and unions: Structures and unions<2>.
@end menu
@node Standard types<2>,Pointers const and volatile<2>,,Types<2>
-@anchor{cp/topics/types standard-types}@anchor{157}
+@anchor{cp/topics/types standard-types}@anchor{15b}
@subsubsection Standard types
@geindex gccjit;;context;;get_type (C++ function)
-@anchor{cp/topics/types gccjit context get_type__enum}@anchor{10f}
+@anchor{cp/topics/types gccjit context get_type__enum}@anchor{113}
@deffn {C++ Function} gccjit::type gccjit::context::get_type (enum gcc_jit_types)
Access a specific type. This is a thin wrapper around
@@ -12896,14 +12967,14 @@ Access a specific type. This is a thin wrapper around
@end deffn
@geindex gccjit;;context;;get_int_type (C++ function)
-@anchor{cp/topics/types gccjit context get_int_type__s i}@anchor{158}
+@anchor{cp/topics/types gccjit context get_int_type__s i}@anchor{15c}
@deffn {C++ Function} gccjit::type gccjit::context::get_int_type (size_t num_bytes, int is_signed)
Access the integer type of the given size.
@end deffn
@geindex gccjit;;context;;get_int_type<T> (C++ function)
-@anchor{cp/topics/types gccjit context get_int_type T}@anchor{159}
+@anchor{cp/topics/types gccjit context get_int_type T}@anchor{15d}
@deffn {C++ Function} gccjit::type gccjit::context::get_int_type<T> ()
Access the given integer type. For example, you could map the
@@ -12916,34 +12987,34 @@ gccjit::type t = ctxt.get_int_type <unsigned short> ();
@noindent
@end deffn
-@node Pointers const and volatile<2>,Structures and unions<2>,Standard types<2>,Types<2>
-@anchor{cp/topics/types pointers-const-and-volatile}@anchor{15a}
+@node Pointers const and volatile<2>,Vector types<2>,Standard types<2>,Types<2>
+@anchor{cp/topics/types pointers-const-and-volatile}@anchor{15e}
@subsubsection Pointers, @cite{const}, and @cite{volatile}
@geindex gccjit;;type;;get_pointer (C++ function)
-@anchor{cp/topics/types gccjit type get_pointer}@anchor{155}
+@anchor{cp/topics/types gccjit type get_pointer}@anchor{159}
@deffn {C++ Function} gccjit::type gccjit::type::get_pointer ()
Given type "T", get type "T*".
@end deffn
@geindex gccjit;;type;;get_const (C++ function)
-@anchor{cp/topics/types gccjit type get_const}@anchor{156}
+@anchor{cp/topics/types gccjit type get_const}@anchor{15a}
@deffn {C++ Function} gccjit::type gccjit::type::get_const ()
Given type "T", get type "const T".
@end deffn
@geindex gccjit;;type;;get_volatile (C++ function)
-@anchor{cp/topics/types gccjit type get_volatile}@anchor{15b}
+@anchor{cp/topics/types gccjit type get_volatile}@anchor{15f}
@deffn {C++ Function} gccjit::type gccjit::type::get_volatile ()
Given type "T", get type "volatile T".
@end deffn
@geindex gccjit;;type;;get_aligned (C++ function)
-@anchor{cp/topics/types gccjit type get_aligned__s}@anchor{15c}
+@anchor{cp/topics/types gccjit type get_aligned__s}@anchor{160}
@deffn {C++ Function} gccjit::type gccjit::type::get_aligned (size_t alignment_in_bytes)
Given type "T", get type:
@@ -12958,39 +13029,59 @@ The alignment must be a power of two.
@end deffn
@geindex gccjit;;context;;new_array_type (C++ function)
-@anchor{cp/topics/types gccjit context new_array_type__gccjit type i gccjit location}@anchor{15d}
+@anchor{cp/topics/types gccjit context new_array_type__gccjit type i gccjit location}@anchor{161}
@deffn {C++ Function} gccjit::type gccjit::context::new_array_type (gccjit::type element_type, int num_elements, gccjit::location loc)
Given type "T", get type "T[N]" (for a constant N).
Param "loc" is optional.
@end deffn
-@node Structures and unions<2>,,Pointers const and volatile<2>,Types<2>
-@anchor{cp/topics/types structures-and-unions}@anchor{15e}
+@node Vector types<2>,Structures and unions<2>,Pointers const and volatile<2>,Types<2>
+@anchor{cp/topics/types vector-types}@anchor{162}
+@subsubsection Vector types
+
+
+@geindex gccjit;;type;;get_vector (C++ function)
+@anchor{cp/topics/types gccjit type get_vector__s}@anchor{163}
+@deffn {C++ Function} gccjit::type gccjit::type::get_vector (size_t num_units)
+
+Given type "T", get type:
+
+@example
+T __attribute__ ((vector_size (sizeof(T) * num_units))
+@end example
+
+@noindent
+
+T must be integral or floating point; num_units must be a power of two.
+@end deffn
+
+@node Structures and unions<2>,,Vector types<2>,Types<2>
+@anchor{cp/topics/types structures-and-unions}@anchor{164}
@subsubsection Structures and unions
@geindex gccjit;;struct_ (C++ class)
-@anchor{cp/topics/types gccjit struct_}@anchor{15f}
+@anchor{cp/topics/types gccjit struct_}@anchor{165}
@deffn {C++ Class} gccjit::struct_
@end deffn
A compound type analagous to a C @cite{struct}.
-@pxref{15f,,gccjit;;struct_} is a subclass of @pxref{154,,gccjit;;type} (and thus
-of @pxref{150,,gccjit;;object} in turn).
+@pxref{165,,gccjit;;struct_} is a subclass of @pxref{158,,gccjit;;type} (and thus
+of @pxref{154,,gccjit;;object} in turn).
@geindex gccjit;;field (C++ class)
-@anchor{cp/topics/types gccjit field}@anchor{160}
+@anchor{cp/topics/types gccjit field}@anchor{166}
@deffn {C++ Class} gccjit::field
@end deffn
-A field within a @pxref{15f,,gccjit;;struct_}.
+A field within a @pxref{165,,gccjit;;struct_}.
-@pxref{160,,gccjit;;field} is a subclass of @pxref{150,,gccjit;;object}.
+@pxref{166,,gccjit;;field} is a subclass of @pxref{154,,gccjit;;object}.
-You can model C @cite{struct} types by creating @pxref{15f,,gccjit;;struct_} and
-@pxref{160,,gccjit;;field} instances, in either order:
+You can model C @cite{struct} types by creating @pxref{165,,gccjit;;struct_} and
+@pxref{166,,gccjit;;field} instances, in either order:
@itemize *
@@ -13046,14 +13137,14 @@ node.set_fields (fields);
@c FIXME: the above API doesn't seem to exist yet
@geindex gccjit;;context;;new_field (C++ function)
-@anchor{cp/topics/types gccjit context new_field__gccjit type cCP gccjit location}@anchor{161}
+@anchor{cp/topics/types gccjit context new_field__gccjit type cCP gccjit location}@anchor{167}
@deffn {C++ Function} gccjit::field gccjit::context::new_field (gccjit::type type, const char* name, gccjit::location loc)
Construct a new field, with the given type and name.
@end deffn
@geindex gccjit;;context;;new_struct_type (C++ function)
-@anchor{cp/topics/types gccjit context new_struct_type__ssCR std vector field R gccjit location}@anchor{162}
+@anchor{cp/topics/types gccjit context new_struct_type__ssCR std vector field R gccjit location}@anchor{168}
@deffn {C++ Function} gccjit::struct_ gccjit::context::new_struct_type (const std::string& name, std::vector<field>& fields, gccjit::location loc)
@quotation
@@ -13063,13 +13154,13 @@ Construct a new struct type, with the given name and fields.
@end deffn
@geindex gccjit;;context;;new_opaque_struct (C++ function)
-@anchor{cp/topics/types gccjit context new_opaque_struct__ssCR gccjit location}@anchor{163}
+@anchor{cp/topics/types gccjit context new_opaque_struct__ssCR gccjit location}@anchor{169}
@deffn {C++ Function} gccjit::struct_ gccjit::context::new_opaque_struct (const std::string& name, gccjit::location loc)
Construct a new struct type, with the given name, but without
specifying the fields. The fields can be omitted (in which case the
size of the struct is not known), or later specified using
-@pxref{89,,gcc_jit_struct_set_fields()}.
+@pxref{8c,,gcc_jit_struct_set_fields()}.
@end deffn
@c Copyright (C) 2014-2017 Free Software Foundation, Inc.
@@ -13090,7 +13181,7 @@ size of the struct is not known), or later specified using
@c <http://www.gnu.org/licenses/>.
@node Expressions<2>,Creating and using functions<2>,Types<2>,Topic Reference<2>
-@anchor{cp/topics/expressions expressions}@anchor{164}@anchor{cp/topics/expressions doc}@anchor{165}
+@anchor{cp/topics/expressions expressions}@anchor{16a}@anchor{cp/topics/expressions doc}@anchor{16b}
@subsection Expressions
@@ -13116,17 +13207,17 @@ Lvalues
@node Rvalues<2>,Lvalues<2>,,Expressions<2>
-@anchor{cp/topics/expressions rvalues}@anchor{166}
+@anchor{cp/topics/expressions rvalues}@anchor{16c}
@subsubsection Rvalues
@geindex gccjit;;rvalue (C++ class)
-@anchor{cp/topics/expressions gccjit rvalue}@anchor{167}
+@anchor{cp/topics/expressions gccjit rvalue}@anchor{16d}
@deffn {C++ Class} gccjit::rvalue
@end deffn
-A @pxref{167,,gccjit;;rvalue} is an expression that can be computed. It is a
-subclass of @pxref{150,,gccjit;;object}, and is a thin wrapper around
+A @pxref{16d,,gccjit;;rvalue} is an expression that can be computed. It is a
+subclass of @pxref{154,,gccjit;;object}, and is a thin wrapper around
@pxref{13,,gcc_jit_rvalue *} from the C API.
It can be simple, e.g.:
@@ -13172,7 +13263,7 @@ Every rvalue has an associated type, and the API will check to ensure
that types match up correctly (otherwise the context will emit an error).
@geindex gccjit;;rvalue;;get_type (C++ function)
-@anchor{cp/topics/expressions gccjit rvalue get_type}@anchor{168}
+@anchor{cp/topics/expressions gccjit rvalue get_type}@anchor{16e}
@deffn {C++ Function} gccjit::type gccjit::rvalue::get_type ()
Get the type of this rvalue.
@@ -13189,12 +13280,12 @@ Get the type of this rvalue.
@end menu
@node Simple expressions<2>,Unary Operations<2>,,Rvalues<2>
-@anchor{cp/topics/expressions simple-expressions}@anchor{169}
+@anchor{cp/topics/expressions simple-expressions}@anchor{16f}
@subsubsection Simple expressions
@geindex gccjit;;context;;new_rvalue (C++ function)
-@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type iC}@anchor{123}
+@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type iC}@anchor{127}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_rvalue (gccjit::type numeric_type, int value) const
Given a numeric type (integer or floating point), build an rvalue for
@@ -13202,7 +13293,7 @@ the given constant @code{int} value.
@end deffn
@geindex gccjit;;context;;new_rvalue (C++ function)
-@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type lC}@anchor{16a}
+@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type lC}@anchor{170}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_rvalue (gccjit::type numeric_type, long value) const
Given a numeric type (integer or floating point), build an rvalue for
@@ -13210,7 +13301,7 @@ the given constant @code{long} value.
@end deffn
@geindex gccjit;;context;;zero (C++ function)
-@anchor{cp/topics/expressions gccjit context zero__gccjit typeC}@anchor{11f}
+@anchor{cp/topics/expressions gccjit context zero__gccjit typeC}@anchor{123}
@deffn {C++ Function} gccjit::rvalue gccjit::context::zero (gccjit::type numeric_type) const
Given a numeric type (integer or floating point), get the rvalue for
@@ -13224,7 +13315,7 @@ ctxt.new_rvalue (numeric_type, 0)
@end deffn
@geindex gccjit;;context;;one (C++ function)
-@anchor{cp/topics/expressions gccjit context one__gccjit typeC}@anchor{16b}
+@anchor{cp/topics/expressions gccjit context one__gccjit typeC}@anchor{171}
@deffn {C++ Function} gccjit::rvalue gccjit::context::one (gccjit::type numeric_type) const
Given a numeric type (integer or floating point), get the rvalue for
@@ -13238,7 +13329,7 @@ ctxt.new_rvalue (numeric_type, 1)
@end deffn
@geindex gccjit;;context;;new_rvalue (C++ function)
-@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type doubleC}@anchor{16c}
+@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type doubleC}@anchor{172}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_rvalue (gccjit::type numeric_type, double value) const
Given a numeric type (integer or floating point), build an rvalue for
@@ -13246,14 +13337,14 @@ the given constant @code{double} value.
@end deffn
@geindex gccjit;;context;;new_rvalue (C++ function)
-@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type voidPC}@anchor{16d}
+@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type voidPC}@anchor{173}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_rvalue (gccjit::type pointer_type, void* value) const
Given a pointer type, build an rvalue for the given address.
@end deffn
@geindex gccjit;;context;;new_rvalue (C++ function)
-@anchor{cp/topics/expressions gccjit context new_rvalue__ssCRC}@anchor{16e}
+@anchor{cp/topics/expressions gccjit context new_rvalue__ssCRC}@anchor{174}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_rvalue (const std::string& value) const
Generate an rvalue of type @code{GCC_JIT_TYPE_CONST_CHAR_PTR} for
@@ -13261,12 +13352,12 @@ the given string. This is akin to a string literal.
@end deffn
@node Unary Operations<2>,Binary Operations<2>,Simple expressions<2>,Rvalues<2>
-@anchor{cp/topics/expressions unary-operations}@anchor{16f}
+@anchor{cp/topics/expressions unary-operations}@anchor{175}
@subsubsection Unary Operations
@geindex gccjit;;context;;new_unary_op (C++ function)
-@anchor{cp/topics/expressions gccjit context new_unary_op__enum gccjit type gccjit rvalue gccjit location}@anchor{170}
+@anchor{cp/topics/expressions gccjit context new_unary_op__enum gccjit type gccjit rvalue gccjit location}@anchor{176}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_unary_op (enum gcc_jit_unary_op, gccjit::type result_type, gccjit::rvalue rvalue, gccjit::location loc)
Build a unary operation out of an input rvalue.
@@ -13274,7 +13365,7 @@ Build a unary operation out of an input rvalue.
Parameter @code{loc} is optional.
This is a thin wrapper around the C API's
-@pxref{96,,gcc_jit_context_new_unary_op()} and the available unary
+@pxref{99,,gcc_jit_context_new_unary_op()} and the available unary
operations are documented there.
@end deffn
@@ -13282,7 +13373,7 @@ There are shorter ways to spell the various specific kinds of unary
operation:
@geindex gccjit;;context;;new_minus (C++ function)
-@anchor{cp/topics/expressions gccjit context new_minus__gccjit type gccjit rvalue gccjit location}@anchor{171}
+@anchor{cp/topics/expressions gccjit context new_minus__gccjit type gccjit rvalue gccjit location}@anchor{177}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_minus (gccjit::type result_type, gccjit::rvalue a, gccjit::location loc)
Negate an arithmetic value; for example:
@@ -13303,7 +13394,7 @@ builds the equivalent of this C expression:
@end deffn
@geindex new_bitwise_negate (C++ function)
-@anchor{cp/topics/expressions new_bitwise_negate__gccjit type gccjit rvalue gccjit location}@anchor{172}
+@anchor{cp/topics/expressions new_bitwise_negate__gccjit type gccjit rvalue gccjit location}@anchor{178}
@deffn {C++ Function} gccjit::rvalue new_bitwise_negate (gccjit::type result_type, gccjit::rvalue a, gccjit::location loc)
Bitwise negation of an integer value (one's complement); for example:
@@ -13324,7 +13415,7 @@ builds the equivalent of this C expression:
@end deffn
@geindex new_logical_negate (C++ function)
-@anchor{cp/topics/expressions new_logical_negate__gccjit type gccjit rvalue gccjit location}@anchor{173}
+@anchor{cp/topics/expressions new_logical_negate__gccjit type gccjit rvalue gccjit location}@anchor{179}
@deffn {C++ Function} gccjit::rvalue new_logical_negate (gccjit::type result_type, gccjit::rvalue a, gccjit::location loc)
Logical negation of an arithmetic or pointer value; for example:
@@ -13347,7 +13438,7 @@ builds the equivalent of this C expression:
The most concise way to spell them is with overloaded operators:
@geindex operator- (C++ function)
-@anchor{cp/topics/expressions sub-operator__gccjit rvalue}@anchor{174}
+@anchor{cp/topics/expressions sub-operator__gccjit rvalue}@anchor{17a}
@deffn {C++ Function} gccjit::rvalue operator- (gccjit::rvalue a)
@example
@@ -13358,7 +13449,7 @@ gccjit::rvalue negpi = -pi;
@end deffn
@geindex operator~ (C++ function)
-@anchor{cp/topics/expressions inv-operator__gccjit rvalue}@anchor{175}
+@anchor{cp/topics/expressions inv-operator__gccjit rvalue}@anchor{17b}
@deffn {C++ Function} gccjit::rvalue operator~ (gccjit::rvalue a)
@example
@@ -13369,7 +13460,7 @@ gccjit::rvalue mask = ~a;
@end deffn
@geindex operator! (C++ function)
-@anchor{cp/topics/expressions not-operator__gccjit rvalue}@anchor{176}
+@anchor{cp/topics/expressions not-operator__gccjit rvalue}@anchor{17c}
@deffn {C++ Function} gccjit::rvalue operator! (gccjit::rvalue a)
@example
@@ -13380,12 +13471,12 @@ gccjit::rvalue guard = !cond;
@end deffn
@node Binary Operations<2>,Comparisons<2>,Unary Operations<2>,Rvalues<2>
-@anchor{cp/topics/expressions binary-operations}@anchor{177}
+@anchor{cp/topics/expressions binary-operations}@anchor{17d}
@subsubsection Binary Operations
@geindex gccjit;;context;;new_binary_op (C++ function)
-@anchor{cp/topics/expressions gccjit context new_binary_op__enum gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{113}
+@anchor{cp/topics/expressions gccjit context new_binary_op__enum gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{117}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_binary_op (enum gcc_jit_binary_op, gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
Build a binary operation out of two constituent rvalues.
@@ -13401,59 +13492,59 @@ There are shorter ways to spell the various specific kinds of binary
operation:
@geindex gccjit;;context;;new_plus (C++ function)
-@anchor{cp/topics/expressions gccjit context new_plus__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{178}
+@anchor{cp/topics/expressions gccjit context new_plus__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{17e}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_plus (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
@geindex gccjit;;context;;new_minus (C++ function)
-@anchor{cp/topics/expressions gccjit context new_minus__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{179}
+@anchor{cp/topics/expressions gccjit context new_minus__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{17f}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_minus (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
@geindex gccjit;;context;;new_mult (C++ function)
-@anchor{cp/topics/expressions gccjit context new_mult__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{17a}
+@anchor{cp/topics/expressions gccjit context new_mult__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{180}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_mult (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
@geindex gccjit;;context;;new_divide (C++ function)
-@anchor{cp/topics/expressions gccjit context new_divide__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{17b}
+@anchor{cp/topics/expressions gccjit context new_divide__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{181}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_divide (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
@geindex gccjit;;context;;new_modulo (C++ function)
-@anchor{cp/topics/expressions gccjit context new_modulo__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{17c}
+@anchor{cp/topics/expressions gccjit context new_modulo__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{182}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_modulo (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
@geindex gccjit;;context;;new_bitwise_and (C++ function)
-@anchor{cp/topics/expressions gccjit context new_bitwise_and__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{17d}
+@anchor{cp/topics/expressions gccjit context new_bitwise_and__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{183}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_bitwise_and (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
@geindex gccjit;;context;;new_bitwise_xor (C++ function)
-@anchor{cp/topics/expressions gccjit context new_bitwise_xor__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{17e}
+@anchor{cp/topics/expressions gccjit context new_bitwise_xor__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{184}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_bitwise_xor (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
@geindex gccjit;;context;;new_bitwise_or (C++ function)
-@anchor{cp/topics/expressions gccjit context new_bitwise_or__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{17f}
+@anchor{cp/topics/expressions gccjit context new_bitwise_or__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{185}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_bitwise_or (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
@geindex gccjit;;context;;new_logical_and (C++ function)
-@anchor{cp/topics/expressions gccjit context new_logical_and__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{180}
+@anchor{cp/topics/expressions gccjit context new_logical_and__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{186}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_logical_and (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
@geindex gccjit;;context;;new_logical_or (C++ function)
-@anchor{cp/topics/expressions gccjit context new_logical_or__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{181}
+@anchor{cp/topics/expressions gccjit context new_logical_or__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{187}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_logical_or (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
The most concise way to spell them is with overloaded operators:
@geindex operator+ (C++ function)
-@anchor{cp/topics/expressions add-operator__gccjit rvalue gccjit rvalue}@anchor{182}
+@anchor{cp/topics/expressions add-operator__gccjit rvalue gccjit rvalue}@anchor{188}
@deffn {C++ Function} gccjit::rvalue operator+ (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13464,7 +13555,7 @@ gccjit::rvalue sum = a + b;
@end deffn
@geindex operator- (C++ function)
-@anchor{cp/topics/expressions sub-operator__gccjit rvalue gccjit rvalue}@anchor{183}
+@anchor{cp/topics/expressions sub-operator__gccjit rvalue gccjit rvalue}@anchor{189}
@deffn {C++ Function} gccjit::rvalue operator- (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13475,7 +13566,7 @@ gccjit::rvalue diff = a - b;
@end deffn
@geindex operator* (C++ function)
-@anchor{cp/topics/expressions mul-operator__gccjit rvalue gccjit rvalue}@anchor{184}
+@anchor{cp/topics/expressions mul-operator__gccjit rvalue gccjit rvalue}@anchor{18a}
@deffn {C++ Function} gccjit::rvalue operator* (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13486,7 +13577,7 @@ gccjit::rvalue prod = a * b;
@end deffn
@geindex operator/ (C++ function)
-@anchor{cp/topics/expressions div-operator__gccjit rvalue gccjit rvalue}@anchor{185}
+@anchor{cp/topics/expressions div-operator__gccjit rvalue gccjit rvalue}@anchor{18b}
@deffn {C++ Function} gccjit::rvalue operator/ (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13497,7 +13588,7 @@ gccjit::rvalue result = a / b;
@end deffn
@geindex operator% (C++ function)
-@anchor{cp/topics/expressions mod-operator__gccjit rvalue gccjit rvalue}@anchor{186}
+@anchor{cp/topics/expressions mod-operator__gccjit rvalue gccjit rvalue}@anchor{18c}
@deffn {C++ Function} gccjit::rvalue operator% (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13508,7 +13599,7 @@ gccjit::rvalue mod = a % b;
@end deffn
@geindex operator& (C++ function)
-@anchor{cp/topics/expressions and-operator__gccjit rvalue gccjit rvalue}@anchor{187}
+@anchor{cp/topics/expressions and-operator__gccjit rvalue gccjit rvalue}@anchor{18d}
@deffn {C++ Function} gccjit::rvalue operator& (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13519,7 +13610,7 @@ gccjit::rvalue x = a & b;
@end deffn
@geindex operator^ (C++ function)
-@anchor{cp/topics/expressions xor-operator__gccjit rvalue gccjit rvalue}@anchor{188}
+@anchor{cp/topics/expressions xor-operator__gccjit rvalue gccjit rvalue}@anchor{18e}
@deffn {C++ Function} gccjit::rvalue operator^ (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13530,7 +13621,7 @@ gccjit::rvalue x = a ^ b;
@end deffn
@geindex operator| (C++ function)
-@anchor{cp/topics/expressions or-operator__gccjit rvalue gccjit rvalue}@anchor{189}
+@anchor{cp/topics/expressions or-operator__gccjit rvalue gccjit rvalue}@anchor{18f}
@deffn {C++ Function} gccjit::rvalue operator| (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13541,7 +13632,7 @@ gccjit::rvalue x = a | b;
@end deffn
@geindex operator&& (C++ function)
-@anchor{cp/topics/expressions sand-operator__gccjit rvalue gccjit rvalue}@anchor{18a}
+@anchor{cp/topics/expressions sand-operator__gccjit rvalue gccjit rvalue}@anchor{190}
@deffn {C++ Function} gccjit::rvalue operator&& (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13552,7 +13643,7 @@ gccjit::rvalue cond = a && b;
@end deffn
@geindex operator|| (C++ function)
-@anchor{cp/topics/expressions sor-operator__gccjit rvalue gccjit rvalue}@anchor{18b}
+@anchor{cp/topics/expressions sor-operator__gccjit rvalue gccjit rvalue}@anchor{191}
@deffn {C++ Function} gccjit::rvalue operator|| (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13575,12 +13666,12 @@ gccjit::rvalue discriminant = (b * b) - (four * a * c);
@end quotation
@node Comparisons<2>,Function calls<2>,Binary Operations<2>,Rvalues<2>
-@anchor{cp/topics/expressions comparisons}@anchor{18c}
+@anchor{cp/topics/expressions comparisons}@anchor{192}
@subsubsection Comparisons
@geindex gccjit;;context;;new_comparison (C++ function)
-@anchor{cp/topics/expressions gccjit context new_comparison__enum gccjit rvalue gccjit rvalue gccjit location}@anchor{120}
+@anchor{cp/topics/expressions gccjit context new_comparison__enum gccjit rvalue gccjit rvalue gccjit location}@anchor{124}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_comparison (enum gcc_jit_comparison, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
Build a boolean rvalue out of the comparison of two other rvalues.
@@ -13596,39 +13687,39 @@ There are shorter ways to spell the various specific kinds of binary
operation:
@geindex gccjit;;context;;new_eq (C++ function)
-@anchor{cp/topics/expressions gccjit context new_eq__gccjit rvalue gccjit rvalue gccjit location}@anchor{18d}
+@anchor{cp/topics/expressions gccjit context new_eq__gccjit rvalue gccjit rvalue gccjit location}@anchor{193}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_eq (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
@geindex gccjit;;context;;new_ne (C++ function)
-@anchor{cp/topics/expressions gccjit context new_ne__gccjit rvalue gccjit rvalue gccjit location}@anchor{18e}
+@anchor{cp/topics/expressions gccjit context new_ne__gccjit rvalue gccjit rvalue gccjit location}@anchor{194}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_ne (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
@geindex gccjit;;context;;new_lt (C++ function)
-@anchor{cp/topics/expressions gccjit context new_lt__gccjit rvalue gccjit rvalue gccjit location}@anchor{18f}
+@anchor{cp/topics/expressions gccjit context new_lt__gccjit rvalue gccjit rvalue gccjit location}@anchor{195}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_lt (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
@geindex gccjit;;context;;new_le (C++ function)
-@anchor{cp/topics/expressions gccjit context new_le__gccjit rvalue gccjit rvalue gccjit location}@anchor{190}
+@anchor{cp/topics/expressions gccjit context new_le__gccjit rvalue gccjit rvalue gccjit location}@anchor{196}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_le (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
@geindex gccjit;;context;;new_gt (C++ function)
-@anchor{cp/topics/expressions gccjit context new_gt__gccjit rvalue gccjit rvalue gccjit location}@anchor{191}
+@anchor{cp/topics/expressions gccjit context new_gt__gccjit rvalue gccjit rvalue gccjit location}@anchor{197}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_gt (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
@geindex gccjit;;context;;new_ge (C++ function)
-@anchor{cp/topics/expressions gccjit context new_ge__gccjit rvalue gccjit rvalue gccjit location}@anchor{192}
+@anchor{cp/topics/expressions gccjit context new_ge__gccjit rvalue gccjit rvalue gccjit location}@anchor{198}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_ge (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc)
@end deffn
The most concise way to spell them is with overloaded operators:
@geindex operator== (C++ function)
-@anchor{cp/topics/expressions eq-operator__gccjit rvalue gccjit rvalue}@anchor{193}
+@anchor{cp/topics/expressions eq-operator__gccjit rvalue gccjit rvalue}@anchor{199}
@deffn {C++ Function} gccjit::rvalue operator== (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13639,7 +13730,7 @@ gccjit::rvalue cond = (a == ctxt.zero (t_int));
@end deffn
@geindex operator!= (C++ function)
-@anchor{cp/topics/expressions neq-operator__gccjit rvalue gccjit rvalue}@anchor{194}
+@anchor{cp/topics/expressions neq-operator__gccjit rvalue gccjit rvalue}@anchor{19a}
@deffn {C++ Function} gccjit::rvalue operator!= (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13650,7 +13741,7 @@ gccjit::rvalue cond = (i != j);
@end deffn
@geindex operator< (C++ function)
-@anchor{cp/topics/expressions lt-operator__gccjit rvalue gccjit rvalue}@anchor{195}
+@anchor{cp/topics/expressions lt-operator__gccjit rvalue gccjit rvalue}@anchor{19b}
@deffn {C++ Function} gccjit::rvalue operator< (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13661,7 +13752,7 @@ gccjit::rvalue cond = i < n;
@end deffn
@geindex operator<= (C++ function)
-@anchor{cp/topics/expressions lte-operator__gccjit rvalue gccjit rvalue}@anchor{196}
+@anchor{cp/topics/expressions lte-operator__gccjit rvalue gccjit rvalue}@anchor{19c}
@deffn {C++ Function} gccjit::rvalue operator<= (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13672,7 +13763,7 @@ gccjit::rvalue cond = i <= n;
@end deffn
@geindex operator> (C++ function)
-@anchor{cp/topics/expressions gt-operator__gccjit rvalue gccjit rvalue}@anchor{197}
+@anchor{cp/topics/expressions gt-operator__gccjit rvalue gccjit rvalue}@anchor{19d}
@deffn {C++ Function} gccjit::rvalue operator> (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13683,7 +13774,7 @@ gccjit::rvalue cond = (ch > limit);
@end deffn
@geindex operator>= (C++ function)
-@anchor{cp/topics/expressions gte-operator__gccjit rvalue gccjit rvalue}@anchor{198}
+@anchor{cp/topics/expressions gte-operator__gccjit rvalue gccjit rvalue}@anchor{19e}
@deffn {C++ Function} gccjit::rvalue operator>= (gccjit::rvalue a, gccjit::rvalue b)
@example
@@ -13696,12 +13787,12 @@ gccjit::rvalue cond = (score >= ctxt.new_rvalue (t_int, 100));
@c TODO: beyond this point
@node Function calls<2>,Type-coercion<2>,Comparisons<2>,Rvalues<2>
-@anchor{cp/topics/expressions function-calls}@anchor{199}
+@anchor{cp/topics/expressions function-calls}@anchor{19f}
@subsubsection Function calls
@geindex gcc_jit_context_new_call (C++ function)
-@anchor{cp/topics/expressions gcc_jit_context_new_call__gcc_jit_contextP gcc_jit_locationP gcc_jit_functionP i gcc_jit_rvaluePP}@anchor{19a}
+@anchor{cp/topics/expressions gcc_jit_context_new_call__gcc_jit_contextP gcc_jit_locationP gcc_jit_functionP i gcc_jit_rvaluePP}@anchor{1a0}
@deffn {C++ Function} gcc_jit_rvalue* gcc_jit_context_new_call (gcc_jit_context* ctxt, gcc_jit_location* loc, gcc_jit_function* func, int numargs, gcc_jit_rvalue** args)
Given a function and the given table of argument rvalues, construct a
@@ -13710,14 +13801,14 @@ call to the function, with the result as an rvalue.
@cartouche
@quotation Note
@code{gccjit::context::new_call()} merely builds a
-@pxref{167,,gccjit;;rvalue} i.e. an expression that can be evaluated,
+@pxref{16d,,gccjit;;rvalue} i.e. an expression that can be evaluated,
perhaps as part of a more complicated expression.
The call @emph{won't} happen unless you add a statement to a function
that evaluates the expression.
For example, if you want to call a function and discard the result
(or to call a function with @code{void} return type), use
-@pxref{19b,,gccjit;;block;;add_eval()}:
+@pxref{1a1,,gccjit;;block;;add_eval()}:
@example
/* Add "(void)printf (arg0, arg1);". */
@@ -13730,12 +13821,12 @@ block.add_eval (ctxt.new_call (printf_func, arg0, arg1));
@end deffn
@node Type-coercion<2>,,Function calls<2>,Rvalues<2>
-@anchor{cp/topics/expressions type-coercion}@anchor{19c}
+@anchor{cp/topics/expressions type-coercion}@anchor{1a2}
@subsubsection Type-coercion
@geindex gccjit;;context;;new_cast (C++ function)
-@anchor{cp/topics/expressions gccjit context new_cast__gccjit rvalue gccjit type gccjit location}@anchor{19d}
+@anchor{cp/topics/expressions gccjit context new_cast__gccjit rvalue gccjit type gccjit location}@anchor{1a3}
@deffn {C++ Function} gccjit::rvalue gccjit::context::new_cast (gccjit::rvalue rvalue, gccjit::type type, gccjit::location loc)
Given an rvalue of T, construct another rvalue of another type.
@@ -13760,24 +13851,24 @@ P* <-> Q*, for pointer types P and Q
@end deffn
@node Lvalues<2>,Working with pointers structs and unions<2>,Rvalues<2>,Expressions<2>
-@anchor{cp/topics/expressions lvalues}@anchor{19e}
+@anchor{cp/topics/expressions lvalues}@anchor{1a4}
@subsubsection Lvalues
@geindex gccjit;;lvalue (C++ class)
-@anchor{cp/topics/expressions gccjit lvalue}@anchor{19f}
+@anchor{cp/topics/expressions gccjit lvalue}@anchor{1a5}
@deffn {C++ Class} gccjit::lvalue
@end deffn
An lvalue is something that can of the @emph{left}-hand side of an assignment:
a storage area (such as a variable). It is a subclass of
-@pxref{167,,gccjit;;rvalue}, where the rvalue is computed by reading from the
+@pxref{16d,,gccjit;;rvalue}, where the rvalue is computed by reading from the
storage area.
It iss a thin wrapper around @pxref{24,,gcc_jit_lvalue *} from the C API.
@geindex gccjit;;lvalue;;get_address (C++ function)
-@anchor{cp/topics/expressions gccjit lvalue get_address__gccjit location}@anchor{1a0}
+@anchor{cp/topics/expressions gccjit lvalue get_address__gccjit location}@anchor{1a6}
@deffn {C++ Function} gccjit::rvalue gccjit::lvalue::get_address (gccjit::location loc)
Take the address of an lvalue; analogous to:
@@ -13799,27 +13890,27 @@ Parameter "loc" is optional.
@end menu
@node Global variables<2>,,,Lvalues<2>
-@anchor{cp/topics/expressions global-variables}@anchor{1a1}
+@anchor{cp/topics/expressions global-variables}@anchor{1a7}
@subsubsection Global variables
@geindex gccjit;;context;;new_global (C++ function)
-@anchor{cp/topics/expressions gccjit context new_global__enum gccjit type cCP gccjit location}@anchor{1a2}
+@anchor{cp/topics/expressions gccjit context new_global__enum gccjit type cCP gccjit location}@anchor{1a8}
@deffn {C++ Function} gccjit::lvalue gccjit::context::new_global (enum gcc_jit_global_kind, gccjit::type type, const char* name, gccjit::location loc)
Add a new global variable of the given type and name to the context.
-This is a thin wrapper around @pxref{ba,,gcc_jit_context_new_global()} from
+This is a thin wrapper around @pxref{bd,,gcc_jit_context_new_global()} from
the C API; the "kind" parameter has the same meaning as there.
@end deffn
@node Working with pointers structs and unions<2>,,Lvalues<2>,Expressions<2>
-@anchor{cp/topics/expressions working-with-pointers-structs-and-unions}@anchor{1a3}
+@anchor{cp/topics/expressions working-with-pointers-structs-and-unions}@anchor{1a9}
@subsubsection Working with pointers, structs and unions
@geindex gccjit;;rvalue;;dereference (C++ function)
-@anchor{cp/topics/expressions gccjit rvalue dereference__gccjit location}@anchor{1a4}
+@anchor{cp/topics/expressions gccjit rvalue dereference__gccjit location}@anchor{1aa}
@deffn {C++ Function} gccjit::lvalue gccjit::rvalue::dereference (gccjit::location loc)
Given an rvalue of pointer type @code{T *}, dereferencing the pointer,
@@ -13840,7 +13931,7 @@ If you don't need to specify the location, this can also be expressed using
an overloaded operator:
@geindex gccjit;;rvalue;;operator* (C++ function)
-@anchor{cp/topics/expressions gccjit rvalue mul-operator}@anchor{1a5}
+@anchor{cp/topics/expressions gccjit rvalue mul-operator}@anchor{1ab}
@deffn {C++ Function} gccjit::lvalue gccjit::rvalue::operator* ()
@example
@@ -13853,7 +13944,7 @@ gccjit::lvalue content = *ptr;
Field access is provided separately for both lvalues and rvalues:
@geindex gccjit;;lvalue;;access_field (C++ function)
-@anchor{cp/topics/expressions gccjit lvalue access_field__gccjit field gccjit location}@anchor{1a6}
+@anchor{cp/topics/expressions gccjit lvalue access_field__gccjit field gccjit location}@anchor{1ac}
@deffn {C++ Function} gccjit::lvalue gccjit::lvalue::access_field (gccjit::field field, gccjit::location loc)
Given an lvalue of struct or union type, access the given field,
@@ -13869,7 +13960,7 @@ in C.
@end deffn
@geindex gccjit;;rvalue;;access_field (C++ function)
-@anchor{cp/topics/expressions gccjit rvalue access_field__gccjit field gccjit location}@anchor{1a7}
+@anchor{cp/topics/expressions gccjit rvalue access_field__gccjit field gccjit location}@anchor{1ad}
@deffn {C++ Function} gccjit::rvalue gccjit::rvalue::access_field (gccjit::field field, gccjit::location loc)
Given an rvalue of struct or union type, access the given field
@@ -13885,7 +13976,7 @@ in C.
@end deffn
@geindex gccjit;;rvalue;;dereference_field (C++ function)
-@anchor{cp/topics/expressions gccjit rvalue dereference_field__gccjit field gccjit location}@anchor{1a8}
+@anchor{cp/topics/expressions gccjit rvalue dereference_field__gccjit field gccjit location}@anchor{1ae}
@deffn {C++ Function} gccjit::lvalue gccjit::rvalue::dereference_field (gccjit::field field, gccjit::location loc)
Given an rvalue of pointer type @code{T *} where T is of struct or union
@@ -13901,7 +13992,7 @@ in C, itself equivalent to @code{(*EXPR).FIELD}.
@end deffn
@geindex gccjit;;context;;new_array_access (C++ function)
-@anchor{cp/topics/expressions gccjit context new_array_access__gccjit rvalue gccjit rvalue gccjit location}@anchor{1a9}
+@anchor{cp/topics/expressions gccjit context new_array_access__gccjit rvalue gccjit rvalue gccjit location}@anchor{1af}
@deffn {C++ Function} gccjit::lvalue gccjit::context::new_array_access (gccjit::rvalue ptr, gccjit::rvalue index, gccjit::location loc)
Given an rvalue of pointer type @code{T *}, get at the element @cite{T} at
@@ -13920,7 +14011,7 @@ in C (or, indeed, to @code{PTR + INDEX}).
Parameter "loc" is optional.
@end deffn
-For array accesses where you don't need to specify a @pxref{143,,gccjit;;location},
+For array accesses where you don't need to specify a @pxref{147,,gccjit;;location},
two overloaded operators are available:
@quotation
@@ -13960,7 +14051,7 @@ gccjit::lvalue element = array[0];
@c <http://www.gnu.org/licenses/>.
@node Creating and using functions<2>,Source Locations<2>,Expressions<2>,Topic Reference<2>
-@anchor{cp/topics/functions doc}@anchor{1aa}@anchor{cp/topics/functions creating-and-using-functions}@anchor{1ab}
+@anchor{cp/topics/functions doc}@anchor{1b0}@anchor{cp/topics/functions creating-and-using-functions}@anchor{1b1}
@subsection Creating and using functions
@@ -13973,36 +14064,36 @@ gccjit::lvalue element = array[0];
@end menu
@node Params<2>,Functions<2>,,Creating and using functions<2>
-@anchor{cp/topics/functions params}@anchor{1ac}
+@anchor{cp/topics/functions params}@anchor{1b2}
@subsubsection Params
@geindex gccjit;;param (C++ class)
-@anchor{cp/topics/functions gccjit param}@anchor{1ad}
+@anchor{cp/topics/functions gccjit param}@anchor{1b3}
@deffn {C++ Class} gccjit::param
A @cite{gccjit::param} represents a parameter to a function.
@end deffn
@geindex gccjit;;context;;new_param (C++ function)
-@anchor{cp/topics/functions gccjit context new_param__gccjit type cCP gccjit location}@anchor{112}
+@anchor{cp/topics/functions gccjit context new_param__gccjit type cCP gccjit location}@anchor{116}
@deffn {C++ Function} gccjit::param gccjit::context::new_param (gccjit::type type, const char* name, gccjit::location loc)
In preparation for creating a function, create a new parameter of the
given type and name.
@end deffn
-@pxref{1ad,,gccjit;;param} is a subclass of @pxref{19f,,gccjit;;lvalue} (and thus
-of @pxref{167,,gccjit;;rvalue} and @pxref{150,,gccjit;;object}). It is a thin
+@pxref{1b3,,gccjit;;param} is a subclass of @pxref{1a5,,gccjit;;lvalue} (and thus
+of @pxref{16d,,gccjit;;rvalue} and @pxref{154,,gccjit;;object}). It is a thin
wrapper around the C API's @pxref{25,,gcc_jit_param *}.
@node Functions<2>,Blocks<2>,Params<2>,Creating and using functions<2>
-@anchor{cp/topics/functions functions}@anchor{1ae}
+@anchor{cp/topics/functions functions}@anchor{1b4}
@subsubsection Functions
@geindex gccjit;;function (C++ class)
-@anchor{cp/topics/functions gccjit function}@anchor{1af}
+@anchor{cp/topics/functions gccjit function}@anchor{1b5}
@deffn {C++ Class} gccjit::function
A @cite{gccjit::function} represents a function - either one that we're
@@ -14010,7 +14101,7 @@ creating ourselves, or one that we're referencing.
@end deffn
@geindex gccjit;;context;;new_function (C++ function)
-@anchor{cp/topics/functions gccjit context new_function__enum gccjit type cCP std vector param R i gccjit location}@anchor{1b0}
+@anchor{cp/topics/functions gccjit context new_function__enum gccjit type cCP std vector param R i gccjit location}@anchor{1b6}
@deffn {C++ Function} gccjit::function gccjit::context::new_function (enum gcc_jit_function_kind, gccjit::type return_type, const char* name, std::vector<param>& params, int is_variadic, gccjit::location loc)
Create a gcc_jit_function with the given name and parameters.
@@ -14021,29 +14112,29 @@ This is a wrapper around the C API's @pxref{11,,gcc_jit_context_new_function()}.
@end deffn
@geindex gccjit;;context;;get_builtin_function (C++ function)
-@anchor{cp/topics/functions gccjit context get_builtin_function__cCP}@anchor{1b1}
+@anchor{cp/topics/functions gccjit context get_builtin_function__cCP}@anchor{1b7}
@deffn {C++ Function} gccjit::function gccjit::context::get_builtin_function (const char* name)
This is a wrapper around the C API's
-@pxref{d1,,gcc_jit_context_get_builtin_function()}.
+@pxref{d4,,gcc_jit_context_get_builtin_function()}.
@end deffn
@geindex gccjit;;function;;get_param (C++ function)
-@anchor{cp/topics/functions gccjit function get_param__iC}@anchor{1b2}
+@anchor{cp/topics/functions gccjit function get_param__iC}@anchor{1b8}
@deffn {C++ Function} gccjit::param gccjit::function::get_param (int index) const
Get the param of the given index (0-based).
@end deffn
@geindex gccjit;;function;;dump_to_dot (C++ function)
-@anchor{cp/topics/functions gccjit function dump_to_dot__cCP}@anchor{125}
+@anchor{cp/topics/functions gccjit function dump_to_dot__cCP}@anchor{129}
@deffn {C++ Function} void gccjit::function::dump_to_dot (const char* path)
Emit the function in graphviz format to the given path.
@end deffn
@geindex gccjit;;function;;new_local (C++ function)
-@anchor{cp/topics/functions gccjit function new_local__gccjit type cCP gccjit location}@anchor{11c}
+@anchor{cp/topics/functions gccjit function new_local__gccjit type cCP gccjit location}@anchor{120}
@deffn {C++ Function} gccjit::lvalue gccjit::function::new_local (gccjit::type type, const char* name, gccjit::location loc)
Create a new local variable within the function, of the given type and
@@ -14051,19 +14142,19 @@ name.
@end deffn
@node Blocks<2>,Statements<2>,Functions<2>,Creating and using functions<2>
-@anchor{cp/topics/functions blocks}@anchor{1b3}
+@anchor{cp/topics/functions blocks}@anchor{1b9}
@subsubsection Blocks
@geindex gccjit;;block (C++ class)
-@anchor{cp/topics/functions gccjit block}@anchor{1b4}
+@anchor{cp/topics/functions gccjit block}@anchor{1ba}
@deffn {C++ Class} gccjit::block
A @cite{gccjit::block} represents a basic block within a function i.e. a
sequence of statements with a single entry point and a single exit
point.
-@pxref{1b4,,gccjit;;block} is a subclass of @pxref{150,,gccjit;;object}.
+@pxref{1ba,,gccjit;;block} is a subclass of @pxref{154,,gccjit;;object}.
The first basic block that you create within a function will
be the entrypoint.
@@ -14077,7 +14168,7 @@ one function.
@end deffn
@geindex gccjit;;function;;new_block (C++ function)
-@anchor{cp/topics/functions gccjit function new_block__cCP}@anchor{1b5}
+@anchor{cp/topics/functions gccjit function new_block__cCP}@anchor{1bb}
@deffn {C++ Function} gccjit::block gccjit::function::new_block (const char* name)
Create a basic block of the given name. The name may be NULL, but
@@ -14087,12 +14178,12 @@ messages.
@end deffn
@node Statements<2>,,Blocks<2>,Creating and using functions<2>
-@anchor{cp/topics/functions statements}@anchor{1b6}
+@anchor{cp/topics/functions statements}@anchor{1bc}
@subsubsection Statements
@geindex gccjit;;block;;add_eval (C++ function)
-@anchor{cp/topics/functions gccjit block add_eval__gccjit rvalue gccjit location}@anchor{19b}
+@anchor{cp/topics/functions gccjit block add_eval__gccjit rvalue gccjit location}@anchor{1a1}
@deffn {C++ Function} void gccjit::block::add_eval (gccjit::rvalue rvalue, gccjit::location loc)
Add evaluation of an rvalue, discarding the result
@@ -14108,7 +14199,7 @@ This is equivalent to this C code:
@end deffn
@geindex gccjit;;block;;add_assignment (C++ function)
-@anchor{cp/topics/functions gccjit block add_assignment__gccjit lvalue gccjit rvalue gccjit location}@anchor{11e}
+@anchor{cp/topics/functions gccjit block add_assignment__gccjit lvalue gccjit rvalue gccjit location}@anchor{122}
@deffn {C++ Function} void gccjit::block::add_assignment (gccjit::lvalue lvalue, gccjit::rvalue rvalue, gccjit::location loc)
Add evaluation of an rvalue, assigning the result to the given
@@ -14124,7 +14215,7 @@ lvalue = rvalue;
@end deffn
@geindex gccjit;;block;;add_assignment_op (C++ function)
-@anchor{cp/topics/functions gccjit block add_assignment_op__gccjit lvalue enum gccjit rvalue gccjit location}@anchor{122}
+@anchor{cp/topics/functions gccjit block add_assignment_op__gccjit lvalue enum gccjit rvalue gccjit location}@anchor{126}
@deffn {C++ Function} void gccjit::block::add_assignment_op (gccjit::lvalue lvalue, enum gcc_jit_binary_op, gccjit::rvalue rvalue, gccjit::location loc)
Add evaluation of an rvalue, using the result to modify an
@@ -14154,7 +14245,7 @@ loop_body.add_assignment_op (
@end deffn
@geindex gccjit;;block;;add_comment (C++ function)
-@anchor{cp/topics/functions gccjit block add_comment__cCP gccjit location}@anchor{12d}
+@anchor{cp/topics/functions gccjit block add_comment__cCP gccjit location}@anchor{131}
@deffn {C++ Function} void gccjit::block::add_comment (const char* text, gccjit::location loc)
Add a no-op textual comment to the internal representation of the
@@ -14168,7 +14259,7 @@ Parameter "loc" is optional.
@end deffn
@geindex gccjit;;block;;end_with_conditional (C++ function)
-@anchor{cp/topics/functions gccjit block end_with_conditional__gccjit rvalue gccjit block gccjit block gccjit location}@anchor{121}
+@anchor{cp/topics/functions gccjit block end_with_conditional__gccjit rvalue gccjit block gccjit block gccjit location}@anchor{125}
@deffn {C++ Function} void gccjit::block::end_with_conditional (gccjit::rvalue boolval, gccjit::block on_true, gccjit::block on_false, gccjit::location loc)
Terminate a block by adding evaluation of an rvalue, branching on the
@@ -14189,7 +14280,7 @@ block, boolval, on_true, and on_false must be non-NULL.
@end deffn
@geindex gccjit;;block;;end_with_jump (C++ function)
-@anchor{cp/topics/functions gccjit block end_with_jump__gccjit block gccjit location}@anchor{1b7}
+@anchor{cp/topics/functions gccjit block end_with_jump__gccjit block gccjit location}@anchor{1bd}
@deffn {C++ Function} void gccjit::block::end_with_jump (gccjit::block target, gccjit::location loc)
Terminate a block by adding a jump to the given target block.
@@ -14204,7 +14295,7 @@ goto target;
@end deffn
@geindex gccjit;;block;;end_with_return (C++ function)
-@anchor{cp/topics/functions gccjit block end_with_return__gccjit rvalue gccjit location}@anchor{1b8}
+@anchor{cp/topics/functions gccjit block end_with_return__gccjit rvalue gccjit location}@anchor{1be}
@deffn {C++ Function} void gccjit::block::end_with_return (gccjit::rvalue rvalue, gccjit::location loc)
Terminate a block.
@@ -14238,7 +14329,7 @@ return;
@end deffn
@geindex gccjit;;block;;end_with_switch (C++ function)
-@anchor{cp/topics/functions gccjit block end_with_switch__gccjit rvalue gccjit block std vector gccjit case_ gccjit location}@anchor{1b9}
+@anchor{cp/topics/functions gccjit block end_with_switch__gccjit rvalue gccjit block std vector gccjit case_ gccjit location}@anchor{1bf}
@deffn {C++ Function} void gccjit::block::end_with_switch (gccjit::rvalue expr, gccjit::block default_block, std::vector<gccjit::case_> cases, gccjit::location loc)
Terminate a block by adding evalation of an rvalue, then performing
@@ -14281,14 +14372,14 @@ The API entrypoints relating to switch statements and cases:
@itemize *
@item
-@pxref{1b9,,gccjit;;block;;end_with_switch()}
+@pxref{1bf,,gccjit;;block;;end_with_switch()}
@item
-@pxref{1ba,,gccjit;;context;;new_case()}
+@pxref{1c0,,gccjit;;context;;new_case()}
@end itemize
@end quotation
-were added in @pxref{df,,LIBGCCJIT_ABI_3}; you can test for their presence
+were added in @pxref{e2,,LIBGCCJIT_ABI_3}; you can test for their presence
using
@example
@@ -14298,21 +14389,21 @@ using
@noindent
@geindex gccjit;;block;;end_with_switch;;gccjit;;case_ (C++ class)
-@anchor{cp/topics/functions gccjit block end_with_switch gccjit case_}@anchor{1bb}
+@anchor{cp/topics/functions gccjit block end_with_switch gccjit case_}@anchor{1c1}
@deffn {C++ Class} gccjit::case_
@end deffn
A @cite{gccjit::case_} represents a case within a switch statement, and
-is created within a particular @pxref{13b,,gccjit;;context} using
-@pxref{1ba,,gccjit;;context;;new_case()}. It is a subclass of
-@pxref{150,,gccjit;;object}.
+is created within a particular @pxref{13f,,gccjit;;context} using
+@pxref{1c0,,gccjit;;context;;new_case()}. It is a subclass of
+@pxref{154,,gccjit;;object}.
Each case expresses a multivalued range of integer values. You
can express single-valued cases by passing in the same value for
both @cite{min_value} and @cite{max_value}.
@geindex gccjit;;block;;end_with_switch;;gccjit;;context;;new_case (C++ function)
-@anchor{cp/topics/functions gccjit block end_with_switch gccjit context new_case__gccjit rvalue gccjit rvalue gccjit block}@anchor{1ba}
+@anchor{cp/topics/functions gccjit block end_with_switch gccjit context new_case__gccjit rvalue gccjit rvalue gccjit block}@anchor{1c0}
@deffn {C++ Function} gccjit::case_* gccjit::context::new_case (gccjit::rvalue min_value, gccjit::rvalue max_value, gccjit::block dest_block)
Create a new gccjit::case for use in a switch statement.
@@ -14423,12 +14514,12 @@ create_code (gcc_jit_context *c_ctxt, void *user_data)
@c <http://www.gnu.org/licenses/>.
@node Source Locations<2>,Compiling a context<2>,Creating and using functions<2>,Topic Reference<2>
-@anchor{cp/topics/locations source-locations}@anchor{1bc}@anchor{cp/topics/locations doc}@anchor{1bd}
+@anchor{cp/topics/locations source-locations}@anchor{1c2}@anchor{cp/topics/locations doc}@anchor{1c3}
@subsection Source Locations
@geindex gccjit;;location (C++ class)
-@anchor{cp/topics/locations gccjit location}@anchor{143}
+@anchor{cp/topics/locations gccjit location}@anchor{147}
@deffn {C++ Class} gccjit::location
A @cite{gccjit::location} encapsulates a source code location, so that
@@ -14439,10 +14530,10 @@ single-step through your language.
@cite{gccjit::location} instances are optional: you can always omit them
from any C++ API entrypoint accepting one.
-You can construct them using @pxref{131,,gccjit;;context;;new_location()}.
+You can construct them using @pxref{135,,gccjit;;context;;new_location()}.
You need to enable @pxref{42,,GCC_JIT_BOOL_OPTION_DEBUGINFO} on the
-@pxref{13b,,gccjit;;context} for these locations to actually be usable by
+@pxref{13f,,gccjit;;context} for these locations to actually be usable by
the debugger:
@example
@@ -14453,7 +14544,7 @@ ctxt.set_bool_option (GCC_JIT_BOOL_OPTION_DEBUGINFO, 1);
@end deffn
@geindex gccjit;;context;;new_location (C++ function)
-@anchor{cp/topics/locations gccjit context new_location__cCP i i}@anchor{131}
+@anchor{cp/topics/locations gccjit context new_location__cCP i i}@anchor{135}
@deffn {C++ Function} gccjit::location gccjit::context::new_location (const char* filename, int line, int column)
Create a @cite{gccjit::location} instance representing the given source
@@ -14466,13 +14557,13 @@ location.
@end menu
@node Faking it<2>,,,Source Locations<2>
-@anchor{cp/topics/locations faking-it}@anchor{1be}
+@anchor{cp/topics/locations faking-it}@anchor{1c4}
@subsubsection Faking it
If you don't have source code for your internal representation, but need
to debug, you can generate a C-like representation of the functions in
-your context using @pxref{142,,gccjit;;context;;dump_to_file()}:
+your context using @pxref{146,,gccjit;;context;;dump_to_file()}:
@example
ctxt.dump_to_file ("/tmp/something.c",
@@ -14504,13 +14595,13 @@ file, giving you @emph{something} you can step through in the debugger.
@c <http://www.gnu.org/licenses/>.
@node Compiling a context<2>,,Source Locations<2>,Topic Reference<2>
-@anchor{cp/topics/compilation compiling-a-context}@anchor{1bf}@anchor{cp/topics/compilation doc}@anchor{1c0}
+@anchor{cp/topics/compilation compiling-a-context}@anchor{1c5}@anchor{cp/topics/compilation doc}@anchor{1c6}
@subsection Compiling a context
-Once populated, a @pxref{13b,,gccjit;;context} can be compiled to
-machine code, either in-memory via @pxref{114,,gccjit;;context;;compile()} or
-to disk via @pxref{1c1,,gccjit;;context;;compile_to_file()}.
+Once populated, a @pxref{13f,,gccjit;;context} can be compiled to
+machine code, either in-memory via @pxref{118,,gccjit;;context;;compile()} or
+to disk via @pxref{1c7,,gccjit;;context;;compile_to_file()}.
You can compile a context multiple times (using either form of
compilation), although any errors that occur on the context will
@@ -14523,12 +14614,12 @@ prevent any future compilation of that context.
@end menu
@node In-memory compilation<2>,Ahead-of-time compilation<2>,,Compiling a context<2>
-@anchor{cp/topics/compilation in-memory-compilation}@anchor{1c2}
+@anchor{cp/topics/compilation in-memory-compilation}@anchor{1c8}
@subsubsection In-memory compilation
@geindex gccjit;;context;;compile (C++ function)
-@anchor{cp/topics/compilation gccjit context compile}@anchor{114}
+@anchor{cp/topics/compilation gccjit context compile}@anchor{118}
@deffn {C++ Function} gcc_jit_result* gccjit::context::compile ()
This calls into GCC and builds the code, returning a
@@ -14539,19 +14630,19 @@ This is a thin wrapper around the
@end deffn
@node Ahead-of-time compilation<2>,,In-memory compilation<2>,Compiling a context<2>
-@anchor{cp/topics/compilation ahead-of-time-compilation}@anchor{1c3}
+@anchor{cp/topics/compilation ahead-of-time-compilation}@anchor{1c9}
@subsubsection Ahead-of-time compilation
Although libgccjit is primarily aimed at just-in-time compilation, it
can also be used for implementing more traditional ahead-of-time
-compilers, via the @pxref{1c1,,gccjit;;context;;compile_to_file()} method.
+compilers, via the @pxref{1c7,,gccjit;;context;;compile_to_file()} method.
@geindex gccjit;;context;;compile_to_file (C++ function)
-@anchor{cp/topics/compilation gccjit context compile_to_file__enum cCP}@anchor{1c1}
+@anchor{cp/topics/compilation gccjit context compile_to_file__enum cCP}@anchor{1c7}
@deffn {C++ Function} void gccjit::context::compile_to_file (enum gcc_jit_output_kind, const char* output_path)
-Compile the @pxref{13b,,gccjit;;context} to a file of the given
+Compile the @pxref{13f,,gccjit;;context} to a file of the given
kind.
This is a thin wrapper around the
@@ -14576,7 +14667,7 @@ This is a thin wrapper around the
@c <http://www.gnu.org/licenses/>.
@node Internals,Indices and tables,C++ bindings for libgccjit,Top
-@anchor{internals/index internals}@anchor{1c4}@anchor{internals/index doc}@anchor{1c5}
+@anchor{internals/index internals}@anchor{1ca}@anchor{internals/index doc}@anchor{1cb}
@chapter Internals
@@ -14592,7 +14683,7 @@ This is a thin wrapper around the
@end menu
@node Working on the JIT library,Running the test suite,,Internals
-@anchor{internals/index working-on-the-jit-library}@anchor{1c6}
+@anchor{internals/index working-on-the-jit-library}@anchor{1cc}
@section Working on the JIT library
@@ -14629,7 +14720,7 @@ gcc/libgccjit.so.0.0.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),
Here's what those configuration options mean:
@geindex command line option; --enable-host-shared
-@anchor{internals/index cmdoption--enable-host-shared}@anchor{1c7}
+@anchor{internals/index cmdoption--enable-host-shared}@anchor{1cd}
@deffn {Option} --enable-host-shared
Configuring with this option means that the compiler is built as
@@ -14638,7 +14729,7 @@ but it necessary for a shared library.
@end deffn
@geindex command line option; --enable-languages=jit@comma{}c++
-@anchor{internals/index cmdoption--enable-languages}@anchor{1c8}
+@anchor{internals/index cmdoption--enable-languages}@anchor{1ce}
@deffn {Option} --enable-languages=jit,c++
This specifies which frontends to build. The JIT library looks like
@@ -14657,7 +14748,7 @@ c++: error trying to exec 'cc1plus': execvp: No such file or directory
@end deffn
@geindex command line option; --disable-bootstrap
-@anchor{internals/index cmdoption--disable-bootstrap}@anchor{1c9}
+@anchor{internals/index cmdoption--disable-bootstrap}@anchor{1cf}
@deffn {Option} --disable-bootstrap
For hacking on the "jit" subdirectory, performing a full
@@ -14667,7 +14758,7 @@ the compiler can still bootstrap itself.
@end deffn
@geindex command line option; --enable-checking=release
-@anchor{internals/index cmdoption--enable-checking}@anchor{1ca}
+@anchor{internals/index cmdoption--enable-checking}@anchor{1d0}
@deffn {Option} --enable-checking=release
The compile can perform extensive self-checking as it runs, useful when
@@ -14678,7 +14769,7 @@ disable this self-checking.
@end deffn
@node Running the test suite,Environment variables,Working on the JIT library,Internals
-@anchor{internals/index running-the-test-suite}@anchor{1cb}
+@anchor{internals/index running-the-test-suite}@anchor{1d1}
@section Running the test suite
@@ -14741,7 +14832,7 @@ and once a test has been compiled, you can debug it directly:
@end menu
@node Running under valgrind,,,Running the test suite
-@anchor{internals/index running-under-valgrind}@anchor{1cc}
+@anchor{internals/index running-under-valgrind}@anchor{1d2}
@subsection Running under valgrind
@@ -14789,7 +14880,7 @@ When running under valgrind, it's best to have configured gcc with
various known false positives.
@node Environment variables,Packaging notes,Running the test suite,Internals
-@anchor{internals/index environment-variables}@anchor{1cd}
+@anchor{internals/index environment-variables}@anchor{1d3}
@section Environment variables
@@ -14797,7 +14888,7 @@ When running client code against a locally-built libgccjit, three
environment variables need to be set up:
@geindex environment variable; LD_LIBRARY_PATH
-@anchor{internals/index envvar-LD_LIBRARY_PATH}@anchor{1ce}
+@anchor{internals/index envvar-LD_LIBRARY_PATH}@anchor{1d4}
@deffn {Environment Variable} LD_LIBRARY_PATH
@quotation
@@ -14819,7 +14910,7 @@ libgccjit.so.0.0.1: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux),
@end deffn
@geindex environment variable; PATH
-@anchor{internals/index envvar-PATH}@anchor{1cf}
+@anchor{internals/index envvar-PATH}@anchor{1d5}
@deffn {Environment Variable} PATH
The library uses a driver executable for converting from .s assembler
@@ -14838,7 +14929,7 @@ of development.
@end deffn
@geindex environment variable; LIBRARY_PATH
-@anchor{internals/index envvar-LIBRARY_PATH}@anchor{1d0}
+@anchor{internals/index envvar-LIBRARY_PATH}@anchor{1d6}
@deffn {Environment Variable} LIBRARY_PATH
The driver executable invokes the linker, and the latter needs to locate
@@ -14874,11 +14965,11 @@ hello world
@noindent
@node Packaging notes,Overview of code structure,Environment variables,Internals
-@anchor{internals/index packaging-notes}@anchor{1d1}
+@anchor{internals/index packaging-notes}@anchor{1d7}
@section Packaging notes
-The configure-time option @pxref{1c7,,--enable-host-shared} is needed when
+The configure-time option @pxref{1cd,,--enable-host-shared} is needed when
building the jit in order to get position-independent code. This will
slow down the regular compiler by a few percent. Hence when packaging gcc
with libgccjit, please configure and build twice:
@@ -14889,10 +14980,10 @@ with libgccjit, please configure and build twice:
@itemize *
@item
-once without @pxref{1c7,,--enable-host-shared} for most languages, and
+once without @pxref{1cd,,--enable-host-shared} for most languages, and
@item
-once with @pxref{1c7,,--enable-host-shared} for the jit
+once with @pxref{1cd,,--enable-host-shared} for the jit
@end itemize
@end quotation
@@ -14936,7 +15027,7 @@ popd
@noindent
@node Overview of code structure,Design notes,Packaging notes,Internals
-@anchor{internals/index overview-of-code-structure}@anchor{1d2}
+@anchor{internals/index overview-of-code-structure}@anchor{1d8}
@section Overview of code structure
@@ -15412,7 +15503,7 @@ JIT: gcc::jit::logger::~logger()
@noindent
@node Design notes,Submitting patches,Overview of code structure,Internals
-@anchor{internals/index design-notes}@anchor{1d3}
+@anchor{internals/index design-notes}@anchor{1d9}
@section Design notes
@@ -15425,7 +15516,7 @@ close as possible to the error; failing that, a good place is within
@code{recording::context::validate ()} in jit-recording.c.
@node Submitting patches,,Design notes,Internals
-@anchor{internals/index submitting-patches}@anchor{1d4}
+@anchor{internals/index submitting-patches}@anchor{1da}
@section Submitting patches
@@ -15559,7 +15650,7 @@ large and inconsequential (e.g. anchor renumbering), rather like generated
committing to svn.
@node Indices and tables,Index,Internals,Top
-@anchor{index indices-and-tables}@anchor{1d5}
+@anchor{index indices-and-tables}@anchor{1db}
@unnumbered Indices and tables
diff --git a/gcc/jit/docs/cp/topics/types.rst b/gcc/jit/docs/cp/topics/types.rst
index e85a4925896..1df896e5c28 100644
--- a/gcc/jit/docs/cp/topics/types.rst
+++ b/gcc/jit/docs/cp/topics/types.rst
@@ -109,6 +109,20 @@ Pointers, `const`, and `volatile`
Param "loc" is optional.
+Vector types
+------------
+
+.. function:: gccjit::type gccjit::type::get_vector (size_t num_units)
+
+ Given type "T", get type:
+
+ .. code-block:: c
+
+ T __attribute__ ((vector_size (sizeof(T) * num_units))
+
+ T must be integral or floating point; num_units must be a power of two.
+
+
Structures and unions
---------------------
diff --git a/gcc/jit/docs/topics/compatibility.rst b/gcc/jit/docs/topics/compatibility.rst
index 5a13653f3d1..1d5fbc2e554 100644
--- a/gcc/jit/docs/topics/compatibility.rst
+++ b/gcc/jit/docs/topics/compatibility.rst
@@ -149,3 +149,10 @@ entrypoints:
-------------------
``LIBGCCJIT_ABI_7`` covers the addition of
:func:`gcc_jit_type_get_aligned`
+
+.. _LIBGCCJIT_ABI_8:
+
+``LIBGCCJIT_ABI_8``
+-------------------
+``LIBGCCJIT_ABI_8`` covers the addition of
+:func:`gcc_jit_type_get_vector`
diff --git a/gcc/jit/docs/topics/types.rst b/gcc/jit/docs/topics/types.rst
index 119f10e5a47..c279222964b 100644
--- a/gcc/jit/docs/topics/types.rst
+++ b/gcc/jit/docs/topics/types.rst
@@ -35,7 +35,7 @@ Types can be created in several ways:
.. code-block:: c
- gcc_jit_type *int_type = gcc_jit_context_get_type (GCC_JIT_TYPE_INT);
+ gcc_jit_type *int_type = gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT);
See :func:`gcc_jit_context_get_type` for the available types.
@@ -136,6 +136,47 @@ Pointers, `const`, and `volatile`
#ifdef LIBGCCJIT_HAVE_gcc_jit_type_get_aligned
+Vector types
+------------
+
+.. function:: gcc_jit_type *\
+ gcc_jit_type_get_vector (gcc_jit_type *type, \
+ size_t num_units)
+
+ Given type "T", get type:
+
+ .. code-block:: c
+
+ T __attribute__ ((vector_size (sizeof(T) * num_units))
+
+ T must be integral or floating point; num_units must be a power of two.
+
+ This can be used to construct a vector type in which operations
+ are applied element-wise. The compiler will automatically
+ use SIMD instructions where possible. See:
+ https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html
+
+ For example, assuming 4-byte ``ints``, then:
+
+ .. code-block:: c
+
+ typedef int v4si __attribute__ ((vector_size (16)));
+
+ can be obtained using:
+
+ .. code-block:: c
+
+ gcc_jit_type *int_type = gcc_jit_context_get_type (ctxt,
+ GCC_JIT_TYPE_INT);
+ gcc_jit_type *v4si_type = gcc_jit_type_get_vector (int_type, 4);
+
+ This API entrypoint was added in :ref:`LIBGCCJIT_ABI_8`; you can test
+ for its presence using
+
+ .. code-block:: c
+
+ #ifdef LIBGCCJIT_HAVE_gcc_jit_type_get_vector
+
Structures and unions
---------------------
diff --git a/gcc/jit/jit-playback.c b/gcc/jit/jit-playback.c
index 76cc88fe364..19b6fe25299 100644
--- a/gcc/jit/jit-playback.c
+++ b/gcc/jit/jit-playback.c
@@ -1110,6 +1110,17 @@ get_aligned (size_t alignment_in_bytes) const
return new type (t_new_type);
}
+/* Construct a playback::type instance (wrapping a tree)
+ for the given vector type. */
+
+playback::type *
+playback::type::
+get_vector (size_t num_units) const
+{
+ tree t_new_type = build_vector_type (m_inner, num_units);
+ return new type (t_new_type);
+}
+
/* Construct a playback::lvalue instance (wrapping a tree) for a
field access. */
diff --git a/gcc/jit/jit-playback.h b/gcc/jit/jit-playback.h
index 0a83390f5a1..7dc7315330c 100644
--- a/gcc/jit/jit-playback.h
+++ b/gcc/jit/jit-playback.h
@@ -392,6 +392,7 @@ public:
}
type *get_aligned (size_t alignment_in_bytes) const;
+ type *get_vector (size_t num_units) const;
private:
tree m_inner;
diff --git a/gcc/jit/jit-recording.c b/gcc/jit/jit-recording.c
index 723ddb37507..ea4ebb12495 100644
--- a/gcc/jit/jit-recording.c
+++ b/gcc/jit/jit-recording.c
@@ -1988,6 +1988,20 @@ recording::type::get_aligned (size_t alignment_in_bytes)
return result;
}
+/* Given a type, get a vector version of the type.
+
+ Implements the post-error-checking part of
+ gcc_jit_type_get_vector. */
+
+recording::type *
+recording::type::get_vector (size_t num_units)
+{
+ recording::type *result
+ = new memento_of_get_vector (this, num_units);
+ m_ctxt->record (result);
+ return result;
+}
+
const char *
recording::type::access_as_type (reproducer &r)
{
@@ -2457,7 +2471,7 @@ recording::memento_of_get_aligned::make_debug_string ()
m_alignment_in_bytes);
}
-/* Implementation of recording::memento::write_reproducer for volatile
+/* Implementation of recording::memento::write_reproducer for aligned
types. */
void
@@ -2471,6 +2485,46 @@ recording::memento_of_get_aligned::write_reproducer (reproducer &r)
m_alignment_in_bytes);
}
+/* The implementation of class gcc::jit::recording::memento_of_get_vector. */
+
+/* Implementation of pure virtual hook recording::memento::replay_into
+ for recording::memento_of_get_vector. */
+
+void
+recording::memento_of_get_vector::replay_into (replayer *)
+{
+ set_playback_obj
+ (m_other_type->playback_type ()->get_vector (m_num_units));
+}
+
+/* Implementation of recording::memento::make_debug_string for
+ results of get_vector. */
+
+recording::string *
+recording::memento_of_get_vector::make_debug_string ()
+{
+ return string::from_printf
+ (m_ctxt,
+ "%s __attribute__((vector_size(sizeof (%s) * %zi)))",
+ m_other_type->get_debug_string (),
+ m_other_type->get_debug_string (),
+ m_num_units);
+}
+
+/* Implementation of recording::memento::write_reproducer for volatile
+ types. */
+
+void
+recording::memento_of_get_vector::write_reproducer (reproducer &r)
+{
+ const char *id = r.make_identifier (this, "type");
+ r.write (" gcc_jit_type *%s =\n"
+ " gcc_jit_type_get_vector (%s, %zi);\n",
+ id,
+ r.get_identifier_as_type (m_other_type),
+ m_num_units);
+}
+
/* The implementation of class gcc::jit::recording::array_type */
/* Implementation of pure virtual hook recording::type::dereference for
diff --git a/gcc/jit/jit-recording.h b/gcc/jit/jit-recording.h
index 5faf35e0b17..248765d4b81 100644
--- a/gcc/jit/jit-recording.h
+++ b/gcc/jit/jit-recording.h
@@ -474,6 +474,7 @@ public:
type *get_const ();
type *get_volatile ();
type *get_aligned (size_t alignment_in_bytes);
+ type *get_vector (size_t num_units);
/* Get the type obtained when dereferencing this type.
@@ -600,8 +601,8 @@ private:
type *m_other_type;
};
-/* A decorated version of a type, for get_const, get_volatile and
- get_aligned. */
+/* A decorated version of a type, for get_const, get_volatile,
+ get_aligned, and get_vector. */
class decorated_type : public type
{
@@ -683,6 +684,27 @@ private:
size_t m_alignment_in_bytes;
};
+/* Result of "gcc_jit_type_get_vector". */
+class memento_of_get_vector : public decorated_type
+{
+public:
+ memento_of_get_vector (type *other_type, size_t num_units)
+ : decorated_type (other_type),
+ m_num_units (num_units) {}
+
+ /* Strip off the alignment, giving the underlying type. */
+ type *unqualified () FINAL OVERRIDE { return m_other_type; }
+
+ void replay_into (replayer *) FINAL OVERRIDE;
+
+private:
+ string * make_debug_string () FINAL OVERRIDE;
+ void write_reproducer (reproducer &r) FINAL OVERRIDE;
+
+private:
+ size_t m_num_units;
+};
+
class array_type : public type
{
public:
diff --git a/gcc/jit/libgccjit++.h b/gcc/jit/libgccjit++.h
index ea277f8c51b..a83ccf6fb29 100644
--- a/gcc/jit/libgccjit++.h
+++ b/gcc/jit/libgccjit++.h
@@ -333,6 +333,7 @@ namespace gccjit
type get_const ();
type get_volatile ();
type get_aligned (size_t alignment_in_bytes);
+ type get_vector (size_t num_units);
// Shortcuts for getting values of numeric types:
rvalue zero ();
@@ -1306,6 +1307,13 @@ type::get_aligned (size_t alignment_in_bytes)
alignment_in_bytes));
}
+inline type
+type::get_vector (size_t num_units)
+{
+ return type (gcc_jit_type_get_vector (get_inner_type (),
+ num_units));
+}
+
inline rvalue
type::zero ()
{
diff --git a/gcc/jit/libgccjit.c b/gcc/jit/libgccjit.c
index 9b003e39000..6e352c6131d 100644
--- a/gcc/jit/libgccjit.c
+++ b/gcc/jit/libgccjit.c
@@ -2994,3 +2994,31 @@ gcc_jit_type_get_aligned (gcc_jit_type *type,
return (gcc_jit_type *)type->get_aligned (alignment_in_bytes);
}
+
+/* Public entrypoint. See description in libgccjit.h.
+
+ After error-checking, the real work is done by the
+ gcc::jit::recording::type::get_vector method, in
+ jit-recording.c. */
+
+gcc_jit_type *
+gcc_jit_type_get_vector (gcc_jit_type *type, size_t num_units)
+{
+ RETURN_NULL_IF_FAIL (type, NULL, NULL, "NULL type");
+
+ gcc::jit::recording::context *ctxt = type->m_ctxt;
+
+ JIT_LOG_FUNC (ctxt->get_logger ());
+
+ RETURN_NULL_IF_FAIL_PRINTF1
+ (type->is_int () || type->is_float (), ctxt, NULL,
+ "type is not integral or floating point: %s",
+ type->get_debug_string ());
+
+ RETURN_NULL_IF_FAIL_PRINTF1
+ (pow2_or_zerop (num_units), ctxt, NULL,
+ "num_units not a power of two: %zi",
+ num_units);
+
+ return (gcc_jit_type *)type->get_vector (num_units);
+}
diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h
index 898ee989b83..b863b07e959 100644
--- a/gcc/jit/libgccjit.h
+++ b/gcc/jit/libgccjit.h
@@ -1403,6 +1403,21 @@ extern gcc_jit_type *
gcc_jit_type_get_aligned (gcc_jit_type *type,
size_t alignment_in_bytes);
+#define LIBGCCJIT_HAVE_gcc_jit_type_get_vector
+
+/* Given type "T", get type:
+
+ T __attribute__ ((vector_size (sizeof(T) * num_units))
+
+ T must be integral/floating point; num_units must be a power of two.
+
+ This API entrypoint was added in LIBGCCJIT_ABI_8; you can test for its
+ presence using
+ #ifdef LIBGCCJIT_HAVE_gcc_jit_type_get_vector
+*/
+extern gcc_jit_type *
+gcc_jit_type_get_vector (gcc_jit_type *type, size_t num_units);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/gcc/jit/libgccjit.map b/gcc/jit/libgccjit.map
index 160f4cdd82a..08760e3cdfb 100644
--- a/gcc/jit/libgccjit.map
+++ b/gcc/jit/libgccjit.map
@@ -155,3 +155,8 @@ LIBGCCJIT_ABI_7 {
global:
gcc_jit_type_get_aligned;
} LIBGCCJIT_ABI_6;
+
+LIBGCCJIT_ABI_8 {
+ global:
+ gcc_jit_type_get_vector;
+} LIBGCCJIT_ABI_7;
diff --git a/gcc/lra-assigns.c b/gcc/lra-assigns.c
index 42556d3a65e..2aadeefb214 100644
--- a/gcc/lra-assigns.c
+++ b/gcc/lra-assigns.c
@@ -253,10 +253,9 @@ pseudo_compare_func (const void *v1p, const void *v2p)
/* Assign hard reg to static chain pointer first pseudo when
non-local goto is used. */
- if (non_spilled_static_chain_regno_p (r1))
- return -1;
- else if (non_spilled_static_chain_regno_p (r2))
- return 1;
+ if ((diff = (non_spilled_static_chain_regno_p (r2)
+ - non_spilled_static_chain_regno_p (r1))) != 0)
+ return diff;
/* Prefer to assign more frequently used registers first. */
if ((diff = lra_reg_info[r2].freq - lra_reg_info[r1].freq) != 0)
diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c
index e2680277bb5..15f0eaadf20 100644
--- a/gcc/lto-cgraph.c
+++ b/gcc/lto-cgraph.c
@@ -38,6 +38,8 @@ along with GCC; see the file COPYING3. If not see
#include "ipa-utils.h"
#include "omp-offload.h"
#include "ipa-chkp.h"
+#include "stringpool.h"
+#include "attribs.h"
/* True when asm nodes has been output. */
bool asm_nodes_output = false;
diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c
index ec47fe4f165..5710e8f126d 100644
--- a/gcc/lto-streamer-in.c
+++ b/gcc/lto-streamer-in.c
@@ -1143,6 +1143,10 @@ input_function (tree fn_decl, struct data_in *data_in,
if ((flag_sanitize & SANITIZE_OBJECT_SIZE) == 0)
remove = true;
break;
+ case IFN_UBSAN_PTR:
+ if ((flag_sanitize & SANITIZE_POINTER_OVERFLOW) == 0)
+ remove = true;
+ break;
case IFN_ASAN_MARK:
if ((flag_sanitize & SANITIZE_ADDRESS) == 0)
remove = true;
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index c8e6e4b08fe..baeeb393d9b 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,3 +1,24 @@
+2017-08-08 Tom de Vries <tom@codesourcery.com>
+
+ * lto.c: Include attribs.h.
+
+2017-08-08 Martin Liska <mliska@suse.cz>
+
+ * lto-lang.c: Include header files.
+ * lto-symtab.c: Likewise.
+
+2017-08-03 Richard Biener <rguenther@suse.de>
+
+ * lto-symtab.h (lto_symtab_prevail_decl): Do not use
+ DECL_ABSTRACT_ORIGIN as flag we can end up using that. Instead
+ use DECL_LANG_FLAG_0.
+ (lto_symtab_prevail_decl): Likewise.
+
+2017-07-07 Torsten Duwe <duwe@suse.de>
+
+ * lto-lang.c (lto_attribute_table): Add entry for
+ "patchable_function_entry".
+
2017-07-19 Nathan Sidwell <nathan@acm.org>
* lto.c (mentions_vars_p_type): Use TYPE_{MIN,MAX}_VALUE_RAW.
diff --git a/gcc/lto/lto-lang.c b/gcc/lto/lto-lang.c
index 58935172b2c..375cdd1a90b 100644
--- a/gcc/lto/lto-lang.c
+++ b/gcc/lto/lto-lang.c
@@ -35,6 +35,8 @@ along with GCC; see the file COPYING3. If not see
#include "lto-tree.h"
#include "lto.h"
#include "cilk.h"
+#include "stringpool.h"
+#include "attribs.h"
static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
static tree handle_leaf_attribute (tree *, tree, tree, int, bool *);
@@ -48,6 +50,8 @@ static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *);
static tree handle_transaction_pure_attribute (tree *, tree, tree, int, bool *);
static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
+static tree handle_patchable_function_entry_attribute (tree *, tree, tree,
+ int, bool *);
static tree ignore_attribute (tree *, tree, tree, int, bool *);
static tree handle_format_attribute (tree *, tree, tree, int, bool *);
@@ -76,6 +80,9 @@ const struct attribute_spec lto_attribute_table[] =
handle_nonnull_attribute, false },
{ "nothrow", 0, 0, true, false, false,
handle_nothrow_attribute, false },
+ { "patchable_function_entry", 1, 2, true, false, false,
+ handle_patchable_function_entry_attribute,
+ false },
{ "returns_twice", 0, 0, true, false, false,
handle_returns_twice_attribute, false },
{ "sentinel", 0, 1, false, true, true,
@@ -473,6 +480,13 @@ handle_returns_twice_attribute (tree *node, tree ARG_UNUSED (name),
return NULL_TREE;
}
+static tree
+handle_patchable_function_entry_attribute (tree *, tree, tree, int, bool *)
+{
+ /* Nothing to be done here. */
+ return NULL_TREE;
+}
+
/* Ignore the given attribute. Used when this attribute may be usefully
overridden by the target, but is not used generically. */
diff --git a/gcc/lto/lto-symtab.c b/gcc/lto/lto-symtab.c
index 019677eaf95..70190d0fda2 100644
--- a/gcc/lto/lto-symtab.c
+++ b/gcc/lto/lto-symtab.c
@@ -32,6 +32,8 @@ along with GCC; see the file COPYING3. If not see
#include "builtins.h"
#include "alias.h"
#include "lto-symtab.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Replace the cgraph node NODE with PREVAILING_NODE in the cgraph, merging
all edges and removing the old node. */
diff --git a/gcc/lto/lto-symtab.h b/gcc/lto/lto-symtab.h
index c2876c1e02b..89cd97b6dbd 100644
--- a/gcc/lto/lto-symtab.h
+++ b/gcc/lto/lto-symtab.h
@@ -23,7 +23,7 @@ extern tree lto_symtab_prevailing_decl (tree decl);
extern tree lto_symtab_prevailing_virtual_decl (tree decl);
/* Mark DECL to be previailed by PREVAILING.
- Use DECL_ABSTRACT_ORIGIN and DECL_CHAIN as special markers; those do not
+ Use DECL_LANG_FLAG_0 and DECL_CHAIN as special markers; those do not
disturb debug_tree and diagnostics.
We are safe to modify them as we wish, because the declarations disappear
from the IL after the merging. */
@@ -31,10 +31,10 @@ extern tree lto_symtab_prevailing_virtual_decl (tree decl);
inline void
lto_symtab_prevail_decl (tree prevailing, tree decl)
{
- gcc_checking_assert (DECL_ABSTRACT_ORIGIN (decl) != error_mark_node);
+ gcc_checking_assert (! DECL_LANG_FLAG_0 (decl));
gcc_assert (TREE_PUBLIC (decl) || DECL_EXTERNAL (decl));
DECL_CHAIN (decl) = prevailing;
- DECL_ABSTRACT_ORIGIN (decl) = error_mark_node;
+ DECL_LANG_FLAG_0 (decl) = 1;
}
/* Given the decl DECL, return the prevailing decl with the same name. */
@@ -42,7 +42,7 @@ lto_symtab_prevail_decl (tree prevailing, tree decl)
inline tree
lto_symtab_prevailing_decl (tree decl)
{
- if (DECL_ABSTRACT_ORIGIN (decl) == error_mark_node)
+ if (DECL_LANG_FLAG_0 (decl))
return DECL_CHAIN (decl);
else
{
diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
index a3b4d13d27d..31d1488dc86 100644
--- a/gcc/lto/lto.c
+++ b/gcc/lto/lto.c
@@ -53,6 +53,7 @@ along with GCC; see the file COPYING3. If not see
#include "lto-symtab.h"
#include "stringpool.h"
#include "fold-const.h"
+#include "attribs.h"
/* Number of parallel tasks to run, -1 if we want to use GNU Make jobserver. */
diff --git a/gcc/match.pd b/gcc/match.pd
index 7f5807ce2f1..0e36f46b914 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -284,6 +284,19 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
|| mul != wi::min_value (TYPE_PRECISION (type), SIGNED))
{ build_zero_cst (type); })))))
+/* Combine successive multiplications. Similar to above, but handling
+ overflow is different. */
+(simplify
+ (mult (mult @0 INTEGER_CST@1) INTEGER_CST@2)
+ (with {
+ bool overflow_p;
+ wide_int mul = wi::mul (@1, @2, TYPE_SIGN (type), &overflow_p);
+ }
+ /* Skip folding on overflow: the only special case is @1 * @2 == -INT_MIN,
+ otherwise undefined overflow implies that @0 must be zero. */
+ (if (!overflow_p || TYPE_OVERFLOW_WRAPS (type))
+ (mult @0 { wide_int_to_tree (type, mul); }))))
+
/* Optimize A / A to 1.0 if we don't care about
NaNs or Infinities. */
(simplify
@@ -887,7 +900,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(X | Y) | (X | Z) -> (X | Y) | Z */
(for op (bit_and bit_ior)
(simplify
- (op:c (convert1?@3 (op:c@4 @0 @1)) (convert2?@5 (op:c@6 @0 @2)))
+ (op (convert1?@3 (op:c@4 @0 @1)) (convert2?@5 (op:c@6 @0 @2)))
(if (tree_nop_conversion_p (type, TREE_TYPE (@1))
&& tree_nop_conversion_p (type, TREE_TYPE (@2)))
(if (single_use (@5) && single_use (@6))
@@ -2213,6 +2226,14 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(mult @0 integer_minus_onep)
(negate @0))
+/* Reassociate (X * CST) * Y to (X * Y) * CST. This does not introduce
+ signed overflow for CST != 0 && CST != -1. */
+(simplify
+ (mult:c (mult:s @0 INTEGER_CST@1) @2)
+ (if (TREE_CODE (@2) != INTEGER_CST
+ && !integer_zerop (@1) && !integer_minus_onep (@1))
+ (mult (mult @0 @2) @1)))
+
/* True if we can easily extract the real and imaginary parts of a complex
number. */
(match compositional_complex
@@ -2878,6 +2899,80 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(if (! HONOR_NANS (@0))
(cmp @0 @1))))))
+/* Optimize various special cases of (FTYPE) N CMP CST. */
+(for cmp (lt le eq ne ge gt)
+ icmp (le le eq ne ge ge)
+ (simplify
+ (cmp (float @0) REAL_CST@1)
+ (if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (@1))
+ && ! DECIMAL_FLOAT_TYPE_P (TREE_TYPE (@1)))
+ (with
+ {
+ tree itype = TREE_TYPE (@0);
+ signop isign = TYPE_SIGN (itype);
+ format_helper fmt (REAL_MODE_FORMAT (TYPE_MODE (TREE_TYPE (@1))));
+ const REAL_VALUE_TYPE *cst = TREE_REAL_CST_PTR (@1);
+ /* Be careful to preserve any potential exceptions due to
+ NaNs. qNaNs are ok in == or != context.
+ TODO: relax under -fno-trapping-math or
+ -fno-signaling-nans. */
+ bool exception_p
+ = real_isnan (cst) && (cst->signalling
+ || (cmp != EQ_EXPR || cmp != NE_EXPR));
+ /* INT?_MIN is power-of-two so it takes
+ only one mantissa bit. */
+ bool signed_p = isign == SIGNED;
+ bool itype_fits_ftype_p
+ = TYPE_PRECISION (itype) - signed_p <= significand_size (fmt);
+ }
+ /* TODO: allow non-fitting itype and SNaNs when
+ -fno-trapping-math. */
+ (if (itype_fits_ftype_p && ! exception_p)
+ (with
+ {
+ REAL_VALUE_TYPE imin, imax;
+ real_from_integer (&imin, fmt, wi::min_value (itype), isign);
+ real_from_integer (&imax, fmt, wi::max_value (itype), isign);
+
+ REAL_VALUE_TYPE icst;
+ if (cmp == GT_EXPR || cmp == GE_EXPR)
+ real_ceil (&icst, fmt, cst);
+ else if (cmp == LT_EXPR || cmp == LE_EXPR)
+ real_floor (&icst, fmt, cst);
+ else
+ real_trunc (&icst, fmt, cst);
+
+ bool cst_int_p = real_identical (&icst, cst);
+
+ bool overflow_p = false;
+ wide_int icst_val
+ = real_to_integer (&icst, &overflow_p, TYPE_PRECISION (itype));
+ }
+ (switch
+ /* Optimize cases when CST is outside of ITYPE's range. */
+ (if (real_compare (LT_EXPR, cst, &imin))
+ { constant_boolean_node (cmp == GT_EXPR || cmp == GE_EXPR || cmp == NE_EXPR,
+ type); })
+ (if (real_compare (GT_EXPR, cst, &imax))
+ { constant_boolean_node (cmp == LT_EXPR || cmp == LE_EXPR || cmp == NE_EXPR,
+ type); })
+ /* Remove cast if CST is an integer representable by ITYPE. */
+ (if (cst_int_p)
+ (cmp @0 { gcc_assert (!overflow_p);
+ wide_int_to_tree (itype, icst_val); })
+ )
+ /* When CST is fractional, optimize
+ (FTYPE) N == CST -> 0
+ (FTYPE) N != CST -> 1. */
+ (if (cmp == EQ_EXPR || cmp == NE_EXPR)
+ { constant_boolean_node (cmp == NE_EXPR, type); })
+ /* Otherwise replace with sensible integer constant. */
+ (with
+ {
+ gcc_checking_assert (!overflow_p);
+ }
+ (icmp @0 { wide_int_to_tree (itype, icst_val); })))))))))
+
/* Fold A /[ex] B CMP C to A CMP B * C. */
(for cmp (eq ne)
(simplify
@@ -3202,14 +3297,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
|| TREE_CODE (base1) == STRING_CST))
equal = (base0 == base1);
}
- (if (equal == 1
- && (cmp == EQ_EXPR || cmp == NE_EXPR
- /* If the offsets are equal we can ignore overflow. */
- || off0 == off1
- || POINTER_TYPE_OVERFLOW_UNDEFINED
- /* Or if we compare using pointers to decls or strings. */
- || (POINTER_TYPE_P (TREE_TYPE (@2))
- && (DECL_P (base0) || TREE_CODE (base0) == STRING_CST))))
+ (if (equal == 1)
(switch
(if (cmp == EQ_EXPR)
{ constant_boolean_node (off0 == off1, type); })
@@ -4157,3 +4245,25 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
{ CONSTRUCTOR_ELT (ctor, idx / k)->value; })
(BIT_FIELD_REF { CONSTRUCTOR_ELT (ctor, idx / k)->value; }
@1 { bitsize_int ((idx % k) * width); })))))))))
+
+/* Simplify a bit extraction from a bit insertion for the cases with
+ the inserted element fully covering the extraction or the insertion
+ not touching the extraction. */
+(simplify
+ (BIT_FIELD_REF (bit_insert @0 @1 @ipos) @rsize @rpos)
+ (with
+ {
+ unsigned HOST_WIDE_INT isize;
+ if (INTEGRAL_TYPE_P (TREE_TYPE (@1)))
+ isize = TYPE_PRECISION (TREE_TYPE (@1));
+ else
+ isize = tree_to_uhwi (TYPE_SIZE (TREE_TYPE (@1)));
+ }
+ (switch
+ (if (wi::leu_p (@ipos, @rpos)
+ && wi::leu_p (wi::add (@rpos, @rsize), wi::add (@ipos, isize)))
+ (BIT_FIELD_REF @1 @rsize { wide_int_to_tree (bitsizetype,
+ wi::sub (@rpos, @ipos)); }))
+ (if (wi::geu_p (@ipos, wi::add (@rpos, @rsize))
+ || wi::geu_p (@rpos, wi::add (@ipos, isize)))
+ (BIT_FIELD_REF @0 @rsize @rpos)))))
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog
index 053e4d4a543..0fc51e65bdd 100644
--- a/gcc/objc/ChangeLog
+++ b/gcc/objc/ChangeLog
@@ -1,3 +1,21 @@
+2017-08-09 Marek Polacek <polacek@redhat.com>
+
+ PR c/81417
+ * objc-next-runtime-abi-02.c (build_v2_build_objc_method_call): Update
+ a call to build_conditional_expr.
+
+2017-08-08 Martin Liska <mliska@suse.cz>
+
+ * objc-gnu-runtime-abi-01.c: Include header files.
+ * objc-next-runtime-abi-01.c: Likewise.
+ * objc-next-runtime-abi-02.c: Likewise.
+
+2017-07-20 Nathan Sidwell <nathan@acm.org>
+
+ Remove TYPE_METHODS.
+ * objc-runtime-shared-support.c (build_ivar_list_initializer):
+ Don't presume first item is a FIELD_DECL.
+
2017-07-19 Nathan Sidwell <nathan@acm.org>
* objc-act.h (CLASS_NST_METHODS, CLASS_CLS_METHODS): Use
diff --git a/gcc/objc/objc-gnu-runtime-abi-01.c b/gcc/objc/objc-gnu-runtime-abi-01.c
index d1686e659bd..b53d1820db3 100644
--- a/gcc/objc/objc-gnu-runtime-abi-01.c
+++ b/gcc/objc/objc-gnu-runtime-abi-01.c
@@ -22,7 +22,9 @@ along with GCC; see the file COPYING3. If not see
#include "system.h"
#include "coretypes.h"
#include "options.h"
+#include "tree.h"
#include "stringpool.h"
+#include "attribs.h"
#ifdef OBJCPLUS
#include "cp/cp-tree.h"
diff --git a/gcc/objc/objc-next-runtime-abi-01.c b/gcc/objc/objc-next-runtime-abi-01.c
index 7aff7883f21..686d9285482 100644
--- a/gcc/objc/objc-next-runtime-abi-01.c
+++ b/gcc/objc/objc-next-runtime-abi-01.c
@@ -26,7 +26,9 @@ along with GCC; see the file COPYING3. If not see
#include "config.h"
#include "system.h"
#include "coretypes.h"
+#include "tree.h"
#include "stringpool.h"
+#include "attribs.h"
#ifdef OBJCPLUS
#include "cp/cp-tree.h"
diff --git a/gcc/objc/objc-next-runtime-abi-02.c b/gcc/objc/objc-next-runtime-abi-02.c
index 97314860e01..0e7fd545650 100644
--- a/gcc/objc/objc-next-runtime-abi-02.c
+++ b/gcc/objc/objc-next-runtime-abi-02.c
@@ -28,7 +28,9 @@ along with GCC; see the file COPYING3. If not see
#include "config.h"
#include "system.h"
#include "coretypes.h"
+#include "tree.h"
#include "stringpool.h"
+#include "attribs.h"
#ifdef OBJCPLUS
#include "cp/cp-tree.h"
@@ -1645,8 +1647,8 @@ build_v2_build_objc_method_call (int super_flag, tree method_prototype,
/* ??? CHECKME. */
ret_val = build_conditional_expr (input_location,
ifexp, 1,
- ret_val, NULL_TREE,
- ftree, NULL_TREE);
+ ret_val, NULL_TREE, input_location,
+ ftree, NULL_TREE, input_location);
#endif
}
return ret_val;
diff --git a/gcc/objc/objc-runtime-shared-support.c b/gcc/objc/objc-runtime-shared-support.c
index 5ead87078c6..53303e47d20 100644
--- a/gcc/objc/objc-runtime-shared-support.c
+++ b/gcc/objc/objc-runtime-shared-support.c
@@ -528,34 +528,32 @@ build_ivar_list_initializer (tree type, tree field_decl)
{
vec<constructor_elt, va_gc> *inits = NULL;
- do
- {
- vec<constructor_elt, va_gc> *ivar = NULL;
- tree id;
-
- /* Set name. */
- if (DECL_NAME (field_decl))
- CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE,
- add_objc_string (DECL_NAME (field_decl),
- meth_var_names));
- else
- /* Unnamed bit-field ivar (yuck). */
- CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, build_int_cst (NULL_TREE, 0));
-
- /* Set type. */
- id = add_objc_string (encode_field_decl (field_decl),
- meth_var_types);
- CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, id);
-
- /* Set offset. */
- CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, byte_position (field_decl));
- CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE,
- objc_build_constructor (type, ivar));
- do
- field_decl = DECL_CHAIN (field_decl);
- while (field_decl && TREE_CODE (field_decl) != FIELD_DECL);
+ for (; field_decl; field_decl = DECL_CHAIN (field_decl))
+ if (TREE_CODE (field_decl) == FIELD_DECL)
+ {
+ vec<constructor_elt, va_gc> *ivar = NULL;
+ tree id;
+
+ /* Set name. */
+ if (DECL_NAME (field_decl))
+ CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE,
+ add_objc_string (DECL_NAME (field_decl),
+ meth_var_names));
+ else
+ /* Unnamed bit-field ivar (yuck). */
+ CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE,
+ build_int_cst (NULL_TREE, 0));
+
+ /* Set type. */
+ id = add_objc_string (encode_field_decl (field_decl),
+ meth_var_types);
+ CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, id);
+
+ /* Set offset. */
+ CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, byte_position (field_decl));
+ CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE,
+ objc_build_constructor (type, ivar));
}
- while (field_decl);
return objc_build_constructor (build_array_type (type, 0), inits);
}
diff --git a/gcc/omp-expand.c b/gcc/omp-expand.c
index d6755cd71ee..ac83ba168d2 100644
--- a/gcc/omp-expand.c
+++ b/gcc/omp-expand.c
@@ -58,7 +58,8 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-pretty-print.h"
#include "hsa-common.h"
#include "debug.h"
-
+#include "stringpool.h"
+#include "attribs.h"
/* OMP region information. Every parallel and workshare
directive is enclosed between two markers, the OMP_* directive
@@ -4851,8 +4852,7 @@ expand_omp_simd (struct omp_region *region, struct omp_for_data *fd)
/* If not -fno-tree-loop-vectorize, hint that we want to vectorize
the loop. */
if ((flag_tree_loop_vectorize
- || (!global_options_set.x_flag_tree_loop_vectorize
- && !global_options_set.x_flag_tree_vectorize))
+ || !global_options_set.x_flag_tree_loop_vectorize)
&& flag_tree_loop_optimize
&& loop->safelen > 1)
{
@@ -5329,6 +5329,8 @@ expand_oacc_for (struct omp_region *region, struct omp_for_data *fd)
}
if (POINTER_TYPE_P (diff_type) || TYPE_UNSIGNED (diff_type))
diff_type = signed_type_for (diff_type);
+ if (TYPE_PRECISION (diff_type) < TYPE_PRECISION (integer_type_node))
+ diff_type = integer_type_node;
basic_block entry_bb = region->entry; /* BB ending in OMP_FOR */
basic_block exit_bb = region->exit; /* BB ending in OMP_RETURN */
@@ -5664,9 +5666,16 @@ expand_oacc_for (struct omp_region *region, struct omp_for_data *fd)
cont_bb = split->dest;
split->flags ^= EDGE_FALLTHRU | EDGE_FALSE_VALUE;
- make_edge (elem_cont_bb, elem_body_bb, EDGE_TRUE_VALUE);
+ split->probability = profile_probability::unlikely ().guessed ();
+ edge latch_edge
+ = make_edge (elem_cont_bb, elem_body_bb, EDGE_TRUE_VALUE);
+ latch_edge->probability = profile_probability::likely ().guessed ();
- make_edge (body_bb, cont_bb, EDGE_FALSE_VALUE);
+ edge skip_edge = make_edge (body_bb, cont_bb, EDGE_FALSE_VALUE);
+ skip_edge->probability = profile_probability::unlikely ().guessed ();
+ edge loop_entry_edge = EDGE_SUCC (body_bb, 1 - skip_edge->dest_idx);
+ loop_entry_edge->probability
+ = profile_probability::likely ().guessed ();
gsi = gsi_for_stmt (cont_stmt);
}
@@ -5719,7 +5728,9 @@ expand_oacc_for (struct omp_region *region, struct omp_for_data *fd)
/* Fixup edges from bottom_bb. */
split->flags ^= EDGE_FALLTHRU | EDGE_FALSE_VALUE;
- make_edge (bottom_bb, head_bb, EDGE_TRUE_VALUE);
+ split->probability = profile_probability::unlikely ().guessed ();
+ edge latch_edge = make_edge (bottom_bb, head_bb, EDGE_TRUE_VALUE);
+ latch_edge->probability = profile_probability::likely ().guessed ();
}
}
diff --git a/gcc/omp-general.c b/gcc/omp-general.c
index 9a5ed88e2d6..af955bce783 100644
--- a/gcc/omp-general.c
+++ b/gcc/omp-general.c
@@ -33,7 +33,8 @@ along with GCC; see the file COPYING3. If not see
#include "fold-const.h"
#include "langhooks.h"
#include "omp-general.h"
-
+#include "stringpool.h"
+#include "attribs.h"
tree
omp_find_clause (tree clauses, enum omp_clause_code kind)
@@ -429,8 +430,7 @@ omp_max_vf (void)
|| optimize_debug
|| !flag_tree_loop_optimize
|| (!flag_tree_loop_vectorize
- && (global_options_set.x_flag_tree_loop_vectorize
- || global_options_set.x_flag_tree_vectorize)))
+ && global_options_set.x_flag_tree_loop_vectorize))
return 1;
int vf = 1;
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index bf3fc53b07a..dffdb7704ad 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -58,6 +58,8 @@ along with GCC; see the file COPYING3. If not see
#include "gomp-constants.h"
#include "gimple-pretty-print.h"
#include "hsa-common.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Lowering of OMP parallel and workshare constructs proceeds in two
phases. The first phase scans the function looking for OMP statements
@@ -796,6 +798,8 @@ omp_copy_decl (tree var, copy_body_data *cb)
if (TREE_CODE (var) == LABEL_DECL)
{
+ if (FORCED_LABEL (var) || DECL_NONLOCAL (var))
+ return var;
new_var = create_artificial_label (DECL_SOURCE_LOCATION (var));
DECL_CONTEXT (new_var) = current_function_decl;
insert_decl_map (&ctx->cb, var, new_var);
@@ -9083,7 +9087,7 @@ diagnose_sb_0 (gimple_stmt_iterator *gsi_p,
}
if (kind == NULL)
{
- gcc_checking_assert (flag_openmp);
+ gcc_checking_assert (flag_openmp || flag_openmp_simd);
kind = "OpenMP";
}
@@ -9343,7 +9347,7 @@ public:
/* opt_pass methods: */
virtual bool gate (function *)
{
- return flag_cilkplus || flag_openacc || flag_openmp;
+ return flag_cilkplus || flag_openacc || flag_openmp || flag_openmp_simd;
}
virtual unsigned int execute (function *)
{
diff --git a/gcc/omp-offload.c b/gcc/omp-offload.c
index 54a4e90f70c..2d4fd411680 100644
--- a/gcc/omp-offload.c
+++ b/gcc/omp-offload.c
@@ -49,6 +49,8 @@ along with GCC; see the file COPYING3. If not see
#include "gomp-constants.h"
#include "gimple-pretty-print.h"
#include "intl.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Describe the OpenACC looping structure of a function. The entire
function is held in a 'NULL' loop. */
diff --git a/gcc/omp-simd-clone.c b/gcc/omp-simd-clone.c
index a1a563e8094..0a3a386f33d 100644
--- a/gcc/omp-simd-clone.c
+++ b/gcc/omp-simd-clone.c
@@ -48,7 +48,8 @@ along with GCC; see the file COPYING3. If not see
#include "ipa-prop.h"
#include "tree-eh.h"
#include "varasm.h"
-
+#include "stringpool.h"
+#include "attribs.h"
/* Allocate a fresh `simd_clone' and return it. NARGS is the number
of arguments to reserve space for. */
@@ -1240,8 +1241,11 @@ simd_clone_adjust (struct cgraph_node *node)
g = gimple_build_cond (EQ_EXPR, mask, build_zero_cst (TREE_TYPE (mask)),
NULL, NULL);
gsi_insert_after (&gsi, g, GSI_CONTINUE_LINKING);
- make_edge (loop->header, incr_bb, EDGE_TRUE_VALUE);
- FALLTHRU_EDGE (loop->header)->flags = EDGE_FALSE_VALUE;
+ edge e = make_edge (loop->header, incr_bb, EDGE_TRUE_VALUE);
+ e->probability = profile_probability::unlikely ().guessed ();
+ edge fallthru = FALLTHRU_EDGE (loop->header);
+ fallthru->flags = EDGE_FALSE_VALUE;
+ fallthru->probability = profile_probability::likely ().guessed ();
}
basic_block latch_bb = NULL;
diff --git a/gcc/opt-functions.awk b/gcc/opt-functions.awk
index ad0b52c0903..5ee93f12feb 100644
--- a/gcc/opt-functions.awk
+++ b/gcc/opt-functions.awk
@@ -314,11 +314,13 @@ function search_var_name(name, opt_numbers, opts, flags, n_opts)
return ""
}
-function integer_range_info(range_option)
+function integer_range_info(range_option, init, option)
{
if (range_option != "") {
start = nth_arg(0, range_option);
end = nth_arg(1, range_option);
+ if (init != "" && init != "-1" && (init < start || init > end))
+ print "#error initial value " init " of '" option "' must be in range [" start "," end "]"
return start ", " end
}
else
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 9258e5f888b..a9900657a58 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -386,7 +386,8 @@ expand_vector_broadcast (machine_mode vmode, rtx op)
/* ??? If the target doesn't have a vec_init, then we have no easy way
of performing this operation. Most of this sort of generic support
is hidden away in the vector lowering support in gimple. */
- icode = optab_handler (vec_init_optab, vmode);
+ icode = convert_optab_handler (vec_init_optab, vmode,
+ GET_MODE_INNER (vmode));
if (icode == CODE_FOR_nothing)
return NULL;
diff --git a/gcc/optabs.def b/gcc/optabs.def
index 504c655be02..54afe2d796e 100644
--- a/gcc/optabs.def
+++ b/gcc/optabs.def
@@ -89,6 +89,8 @@ OPTAB_CD(vec_cmpu_optab, "vec_cmpu$a$b")
OPTAB_CD(vec_cmpeq_optab, "vec_cmpeq$a$b")
OPTAB_CD(maskload_optab, "maskload$a$b")
OPTAB_CD(maskstore_optab, "maskstore$a$b")
+OPTAB_CD(vec_extract_optab, "vec_extract$a$b")
+OPTAB_CD(vec_init_optab, "vec_init$a$b")
OPTAB_NL(add_optab, "add$P$a3", PLUS, "add", '3', gen_int_fp_fixed_libfunc)
OPTAB_NX(add_optab, "add$F$a3")
@@ -253,6 +255,7 @@ OPTAB_D (asin_optab, "asin$a2")
OPTAB_D (atan2_optab, "atan2$a3")
OPTAB_D (atan_optab, "atan$a2")
OPTAB_D (copysign_optab, "copysign$F$a3")
+OPTAB_D (xorsign_optab, "xorsign$F$a3")
OPTAB_D (cos_optab, "cos$a2")
OPTAB_D (exp10_optab, "exp10$a2")
OPTAB_D (exp2_optab, "exp2$a2")
@@ -294,8 +297,6 @@ OPTAB_D (udot_prod_optab, "udot_prod$I$a")
OPTAB_D (usum_widen_optab, "widen_usum$I$a3")
OPTAB_D (usad_optab, "usad$I$a")
OPTAB_D (ssad_optab, "ssad$I$a")
-OPTAB_D (vec_extract_optab, "vec_extract$a")
-OPTAB_D (vec_init_optab, "vec_init$a")
OPTAB_D (vec_pack_sfix_trunc_optab, "vec_pack_sfix_trunc_$a")
OPTAB_D (vec_pack_ssat_optab, "vec_pack_ssat_$a")
OPTAB_D (vec_pack_trunc_optab, "vec_pack_trunc_$a")
diff --git a/gcc/optc-gen.awk b/gcc/optc-gen.awk
index 45b1b95e7ec..3cb0005ba40 100644
--- a/gcc/optc-gen.awk
+++ b/gcc/optc-gen.awk
@@ -400,7 +400,8 @@ for (i = 0; i < n_opts; i++) {
" 0, %s,\n",
cl_flags, cl_bit_fields)
printf(" %s, %s, %s }%s\n", var_ref(opts[i], flags[i]),
- var_set(flags[i]), integer_range_info(opt_args("IntegerRange", flags[i])), comma)
+ var_set(flags[i]), integer_range_info(opt_args("IntegerRange", flags[i]),
+ opt_args("Init", flags[i]), opts[i]), comma)
}
print "};"
diff --git a/gcc/opts-global.c b/gcc/opts-global.c
index 50bad77c347..fc55512e554 100644
--- a/gcc/opts-global.c
+++ b/gcc/opts-global.c
@@ -35,6 +35,8 @@ along with GCC; see the file COPYING3. If not see
#include "plugin.h"
#include "toplev.h"
#include "context.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
typedef const char *const_char_p; /* For DEF_VEC_P. */
diff --git a/gcc/opts.c b/gcc/opts.c
index 3182bc99d65..19e8c7fb7d4 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -525,6 +525,7 @@ static const struct default_options default_options_table[] =
/* -O3 optimizations. */
{ OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribute_patterns, NULL, 1 },
+ { OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribution, NULL, 1 },
{ OPT_LEVELS_3_PLUS, OPT_fpredictive_commoning, NULL, 1 },
{ OPT_LEVELS_3_PLUS, OPT_fsplit_paths, NULL, 1 },
/* Inlining of functions reducing size is a good idea with -Os
@@ -1477,11 +1478,9 @@ enable_fdo_optimizations (struct gcc_options *opts,
opts->x_flag_unswitch_loops = value;
if (!opts_set->x_flag_gcse_after_reload)
opts->x_flag_gcse_after_reload = value;
- if (!opts_set->x_flag_tree_loop_vectorize
- && !opts_set->x_flag_tree_vectorize)
+ if (!opts_set->x_flag_tree_loop_vectorize)
opts->x_flag_tree_loop_vectorize = value;
- if (!opts_set->x_flag_tree_slp_vectorize
- && !opts_set->x_flag_tree_vectorize)
+ if (!opts_set->x_flag_tree_slp_vectorize)
opts->x_flag_tree_slp_vectorize = value;
if (!opts_set->x_flag_vect_cost_model)
opts->x_flag_vect_cost_model = VECT_COST_MODEL_DYNAMIC;
@@ -1521,6 +1520,7 @@ const struct sanitizer_opts_s sanitizer_opts[] =
true),
SANITIZER_OPT (object-size, SANITIZE_OBJECT_SIZE, true),
SANITIZER_OPT (vptr, SANITIZE_VPTR, true),
+ SANITIZER_OPT (pointer-overflow, SANITIZE_POINTER_OVERFLOW, true),
SANITIZER_OPT (all, ~0U, true),
#undef SANITIZER_OPT
{ NULL, 0U, 0UL, false }
@@ -2207,11 +2207,36 @@ common_handle_option (struct gcc_options *opts,
opts->x_flag_ipa_reference = false;
break;
+ case OPT_fpatchable_function_entry_:
+ {
+ char *patch_area_arg = xstrdup (arg);
+ char *comma = strchr (patch_area_arg, ',');
+ if (comma)
+ {
+ *comma = '\0';
+ function_entry_patch_area_size =
+ integral_argument (patch_area_arg);
+ function_entry_patch_area_start =
+ integral_argument (comma + 1);
+ }
+ else
+ {
+ function_entry_patch_area_size =
+ integral_argument (patch_area_arg);
+ function_entry_patch_area_start = 0;
+ }
+ if (function_entry_patch_area_size < 0
+ || function_entry_patch_area_start < 0
+ || function_entry_patch_area_size
+ < function_entry_patch_area_start)
+ error ("invalid arguments for %<-fpatchable_function_entry%>");
+ free (patch_area_arg);
+ }
+ break;
+
case OPT_ftree_vectorize:
- if (!opts_set->x_flag_tree_loop_vectorize)
- opts->x_flag_tree_loop_vectorize = value;
- if (!opts_set->x_flag_tree_slp_vectorize)
- opts->x_flag_tree_slp_vectorize = value;
+ /* Automatically sets -ftree-loop-vectorize and
+ -ftree-slp-vectorize. Nothing more to do here. */
break;
case OPT_fshow_column:
dc->show_column = value;
diff --git a/gcc/passes.c b/gcc/passes.c
index 374f6f77897..2c9add84c1d 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -61,6 +61,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-cfgcleanup.h"
#include "insn-addr.h" /* for INSN_ADDRESSES_ALLOC. */
#include "diagnostic-core.h" /* for fnotice */
+#include "stringpool.h"
+#include "attribs.h"
using namespace gcc;
@@ -1796,6 +1798,7 @@ emergency_dump_function ()
if (!dump_file || !cfun)
return;
fnotice (stderr, "dump file: %s\n", dump_file_name);
+ fprintf (dump_file, "\n\n\nEMERGENCY DUMP:\n\n");
execute_function_dump (cfun, current_pass);
}
diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog
index e4e86bb2e43..5bf1fbe00e8 100644
--- a/gcc/po/ChangeLog
+++ b/gcc/po/ChangeLog
@@ -1,3 +1,19 @@
+2017-08-07 Joseph Myers <joseph@codesourcery.com>
+
+ * es.po: Update.
+
+2017-08-04 Joseph Myers <joseph@codesourcery.com>
+
+ * gcc.pot: Regenerate.
+
+2017-08-01 Joseph Myers <joseph@codesourcery.com>
+
+ * fr.po: Update.
+
+2017-07-31 Joseph Myers <joseph@codesourcery.com>
+
+ * es.po, uk.po: Update.
+
2017-06-01 Joseph Myers <joseph@codesourcery.com>
* es.po: Update.
diff --git a/gcc/po/es.po b/gcc/po/es.po
index cb7f2e123d0..b4fcbae4799 100644
--- a/gcc/po/es.po
+++ b/gcc/po/es.po
@@ -21,6 +21,7 @@
# insns - instrucciones #: config/frv/frv.opt:126
# instruction - instrucción
# iv optimization - optimización iv
+# multiply - TBD
# omp (OpenMP) - omp
# OS - S.O.
# reallocate - reubicar
@@ -39,7 +40,7 @@ msgstr ""
"Project-Id-Version: gcc 7.1.0\n"
"Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n"
"POT-Creation-Date: 2017-05-01 22:24+0000\n"
-"PO-Revision-Date: 2017-05-29 00:00+0200\n"
+"PO-Revision-Date: 2017-07-26 08:25+0200\n"
"Last-Translator: Antonio Ceballos <aceballos@gmail.com>\n"
"Language-Team: Spanish <es@tp.org.es>\n"
"Language: es\n"
@@ -4339,7 +4340,7 @@ msgstr "La notaicón de array de Cilk no puede utilizarse para expresiones throw
#: c/c-parser.c:5715 cp/semantics.c:1144
msgid "Cilk array notation cannot be used as a condition for switch statement"
-msgstr "La notaicón de array de Cilk no puede utilizarse para sentencias switch"
+msgstr "La notación de array de Cilk no puede utilizarse para sentencias switch"
#: c/c-parser.c:5766 cp/semantics.c:799
msgid "Cilk array notation cannot be used as a condition for while statement"
@@ -28167,16 +28168,14 @@ msgid "the forth argument must be scale 1, 2, 4, 8"
msgstr "el argumento delantero debe ser un escalar 1, 2, 4, 8"
#: config/i386/i386.c:38511
-#, fuzzy, gcc-internal-format
-#| msgid "incorrect insn:"
+#, gcc-internal-format
msgid "incorrect hint operand"
-msgstr "insn incorrecta:"
+msgstr "operando de pista incorrecto"
#: config/i386/i386.c:38530
-#, fuzzy, gcc-internal-format
-#| msgid "the last argument must be an 8-bit immediate"
+#, gcc-internal-format
msgid "the xabort's argument must be an 8-bit immediate"
-msgstr "el último argumento debe ser un inmediato de 8-bit"
+msgstr "el argumento de xabort debe ser un inmediato de 8-bit"
#: config/i386/i386.c:41336
#, gcc-internal-format
@@ -28201,7 +28200,7 @@ msgstr "se descarta el atributo incompatible %qE"
#: config/i386/i386.c:41479
#, gcc-internal-format
msgid "interrupt service routine should have a pointer as the first argument"
-msgstr ""
+msgstr "la rutina de servicio de interrupciones debería tener un puntero como primer argumento"
#: config/i386/i386.c:41486
#, gcc-internal-format, gfc-internal-format
@@ -28211,106 +28210,93 @@ msgstr ""
#: config/i386/i386.c:41496
#, gcc-internal-format
msgid "interrupt service routine can only have a pointer argument and an optional integer argument"
-msgstr ""
+msgstr "la rutina de servicio de interrupciones solo puede tener un argumento puntero y un argumento entero opcional"
#: config/i386/i386.c:41499
-#, fuzzy, gcc-internal-format
-#| msgid "interrupt Service Routines cannot be coded in Thumb mode"
+#, gcc-internal-format
msgid "interrupt service routine can't have non-void return value"
-msgstr "no se pueden codificar las Rutinas de Servicios de Interrupción en el modo Thumb"
+msgstr "ls rutina de servicio de interrupción no puede tener valor de retorno que no sea void"
#: config/i386/i386.c:44401
-#, fuzzy, gcc-internal-format
-#| msgid "By-value argument at %L is not allowed in this context"
+#, gcc-internal-format
msgid "alternatives not allowed in asm flag output"
-msgstr "El argumento por valor en %L no se permite en este contexto"
+msgstr "no se permiten alternativas en la salida del indicador asm"
#: config/i386/i386.c:44465
-#, fuzzy, gcc-internal-format
-#| msgid "unknown IRA algorithm %qs"
+#, gcc-internal-format
msgid "unknown asm flag output %qs"
-msgstr "algoritmo IRA %qs desconocido"
+msgstr "salida del indicador asm %qs desconocida"
#: config/i386/i386.c:44494
-#, fuzzy, gcc-internal-format
-#| msgid "invalid type for make function"
+#, gcc-internal-format
msgid "invalid type for asm flag output"
-msgstr "tipo no válido para la función make"
+msgstr "tipo no válido para la salida del indicador asm"
#: config/i386/i386.c:50765
-#, fuzzy, gcc-internal-format
-#| msgid "unknown architecture %qs"
+#, gcc-internal-format
msgid "Unknown architecture specific memory model"
-msgstr "arquitectura %qs desconocida"
+msgstr "Modelo de memoria específico de la arquitectura desconocido"
#: config/i386/i386.c:50772
#, gcc-internal-format
msgid "HLE_ACQUIRE not used with ACQUIRE or stronger memory model"
-msgstr ""
+msgstr "HLE_ACQUIRE no se usa con ACQUIRE o modelos de memoria más fuertes"
#: config/i386/i386.c:50778
#, gcc-internal-format
msgid "HLE_RELEASE not used with RELEASE or stronger memory model"
-msgstr ""
+msgstr "HLE_RELEASE no se usa con RELEASE o modelos de memoria más fuertes"
#: config/i386/i386.c:50802 config/i386/i386.c:50923
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "unsupported version"
+#, gcc-internal-format, gfc-internal-format
msgid "unsupported simdlen %d"
-msgstr "versión sin soporte"
+msgstr "simdlen %d no admitido"
#: config/i386/i386.c:50821
#, gcc-internal-format
msgid "unsupported return type %qT for simd\n"
-msgstr ""
+msgstr "no se admite el tipo de retorno %qT para simd\n"
#: config/i386/i386.c:50843
-#, fuzzy, gcc-internal-format
-#| msgid "unsupported argument type to builtin function"
+#, gcc-internal-format
msgid "unsupported argument type %qT for simd\n"
-msgstr "no se admite el tipo de argumento para la función interna"
+msgstr "no se admite el tipo de argumento %qT para simd\n"
#: config/i386/i386.c:51169
#, gcc-internal-format
msgid "Pointer Checker requires MPX support on this target. Use -mmpx options to enable MPX."
-msgstr ""
+msgstr "El Comprobador de Punteros requiere suporte MPX en este objetivo. Utilice las opciones -mmpx para activar MPX."
#: config/i386/intelmic-mkoffload.c:71 config/nvptx/mkoffload.c:85
-#, fuzzy, gcc-internal-format
-#| msgid "deleting LTRANS input file %s: %m"
+#, gcc-internal-format
msgid "deleting file %s: %m"
-msgstr "se borra el fichero de entrada LTRANS %s: %m"
+msgstr "se borra el fichero %s: %m"
#: config/i386/intelmic-mkoffload.c:253 config/i386/intelmic-mkoffload.c:317
#: config/i386/intelmic-mkoffload.c:358 config/nvptx/mkoffload.c:524
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "cannot open %s"
+#, gcc-internal-format, gfc-internal-format
msgid "cannot open '%s'"
-msgstr "no se puede abrir %s"
+msgstr "no se puede abrir '%s'"
#: config/i386/intelmic-mkoffload.c:465
-#, fuzzy, gcc-internal-format
-#| msgid "no input file specified"
+#, gcc-internal-format
msgid "output file not specified"
-msgstr "no se especificaron ficheros de entrada"
+msgstr "no se ha especificado el fichero de salida"
#: config/i386/intelmic-mkoffload.c:558
-#, fuzzy, gcc-internal-format
-#| msgid "COLLECT_LTO_WRAPPER must be set"
+#, gcc-internal-format
msgid "COLLECT_GCC must be set"
-msgstr "se debe definir COLLECT_LTO_WRAPPER"
+msgstr "se debe definir COLLECT_GCC"
#: config/i386/intelmic-mkoffload.c:563 config/nvptx/mkoffload.c:455
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "field %qs not found"
+#, gcc-internal-format, gfc-internal-format
msgid "offload compiler %s not found"
-msgstr "no se encontró el campo %qs"
+msgstr "no se ha encontrado el compilador %s"
#: config/i386/intelmic-mkoffload.c:582 config/nvptx/mkoffload.c:475
-#, fuzzy, gcc-internal-format
-#| msgid "unrecognized argument in option %qs"
+#, gcc-internal-format
msgid "unrecognizable argument of option "
-msgstr "no se reconoce el argumento en la opción %qs"
+msgstr "No se reconoce el argumento de la opción "
#: config/i386/winnt.c:79
#, gcc-internal-format
@@ -28493,10 +28479,9 @@ msgid "-falign-loops=%d is not supported"
msgstr "no se admite -falign-loops=%d"
#: config/m68k/m68k.c:649
-#, fuzzy, gcc-internal-format
-#| msgid "stack limits not supported on this target"
+#, gcc-internal-format
msgid "-fstack-limit- options are not supported on this cpu"
-msgstr "no se admiten límites de la pila en este objetivo"
+msgstr "no se admiten las opciones -fstack-limit- en esta cpu"
#: config/m68k/m68k.c:767
#, gcc-internal-format
@@ -28519,10 +28504,9 @@ msgid "initialized variable %q+D is marked dllimport"
msgstr "la variable inicializada %q+D se marcó como dllimport"
#: config/microblaze/microblaze.c:1690
-#, fuzzy, gcc-internal-format
-#| msgid "-fstack-protector not supported for this target"
+#, gcc-internal-format
msgid "-fPIC/-fpic not supported for this target"
-msgstr "no se admite -fstack-protector para este objetivo"
+msgstr "no se admite -fPIC/-fpic para este objetivo"
#: config/microblaze/microblaze.c:1702
#, gcc-internal-format
@@ -28535,10 +28519,9 @@ msgid "-mxl-multiply-high can be used only with -mcpu=v6.00.a or greater"
msgstr "sólo se puede usar -mxl-multiply-high con -mcpu=v6.00.a o superior"
#: config/microblaze/microblaze.c:1767
-#, fuzzy, gcc-internal-format
-#| msgid "-mxl-multiply-high can be used only with -mcpu=v6.00.a or greater"
+#, gcc-internal-format
msgid "-mxl-reorder can be used only with -mcpu=v8.30.a or greater"
-msgstr "sólo se puede usar -mxl-multiply-high con -mcpu=v6.00.a o superior"
+msgstr "-mxl-reorder solo puede usarse con -mcpu=v8.30.a o superior"
#: config/microblaze/microblaze.c:1773
#, gcc-internal-format
@@ -28556,10 +28539,9 @@ msgid "%qs attribute only applies to functions"
msgstr "el atributo %qs se aplica solamente a funciones"
#: config/mips/mips.c:1405 config/mips/mips.c:1411
-#, fuzzy, gcc-internal-format
-#| msgid "%qE cannot have both %<mips16%> and %<nomips16%> attributes"
+#, gcc-internal-format
msgid "%qE cannot have both %qs and %qs attributes"
-msgstr "%qE no puede tener atributos %<mips16%> y %<nomips16%> al mismo tiempo"
+msgstr "%qE no puede tener los atributos %qs y %qs al mismo tiempo"
#: config/mips/mips.c:1440 config/mips/mips.c:1446 config/nios2/nios2.c:3994
#, gcc-internal-format
@@ -28567,27 +28549,24 @@ msgid "%qE redeclared with conflicting %qs attributes"
msgstr "%qE se redeclaró con los atributos %qs en conflicto"
#: config/mips/mips.c:1478 config/mips/mips.c:1532
-#, fuzzy, gcc-internal-format
-#| msgid "%qE attribute requires a string constant argument"
+#, gcc-internal-format
msgid "%qE attribute requires a string argument"
-msgstr "el atributo %qE requiere una constante entera como argumento"
+msgstr "el atributo %qE requiere una cadena como argumento"
#: config/mips/mips.c:1486
-#, fuzzy, gcc-internal-format
-#| msgid "argument to %qE attribute is neither zero, nor one"
+#, gcc-internal-format
msgid "argument to %qE attribute is neither eic, nor vector=<line>"
-msgstr "el argumento del atributo %qE no es cero ni uno"
+msgstr "el argumento del atributo %qE no es ni eic ni vector=<línea>"
#: config/mips/mips.c:1502
#, gcc-internal-format
msgid "interrupt vector to %qE attribute is not vector=(sw0|sw1|hw0|hw1|hw2|hw3|hw4|hw5)"
-msgstr ""
+msgstr "el vector de interrupciones para %qE no es vector=(sw0|sw1|hw0|hw1|hw2|hw3|hw4|hw5)"
#: config/mips/mips.c:1539
-#, fuzzy, gcc-internal-format
-#| msgid "argument of %qE attribute is not a string constant"
+#, gcc-internal-format
msgid "argument to %qE attribute is not intstack"
-msgstr "el argumento del atributo %qE no es una cadena constante"
+msgstr "el argumento del atributo %qE no es intstack"
#: config/mips/mips.c:7692
#, gcc-internal-format
@@ -28595,10 +28574,9 @@ msgid "cannot handle inconsistent calls to %qs"
msgstr "no se pueden manejar llamadas inconsistentes a %qs"
#: config/mips/mips.c:10928
-#, fuzzy, gcc-internal-format
-#| msgid "the %<interrupt%> attribute requires a MIPS32r2 processor"
+#, gcc-internal-format
msgid "the %<interrupt%> attribute requires a MIPS32r2 processor or greater"
-msgstr "el atributo %<interrupt%> requiere un procesador MIPS32r2"
+msgstr "el atributo %<interrupt%> requiere un procesador MIPS32r2 o superior"
#: config/mips/mips.c:10930
#, gcc-internal-format
@@ -28608,13 +28586,12 @@ msgstr "los manejadores de interrupciones no pueden ser funciones MIPS16"
#: config/mips/mips.c:11921
#, gcc-internal-format
msgid "-fstack-check=specific not implemented for MIPS16"
-msgstr ""
+msgstr "-fstack-check=specific no implementado para MIPS16"
#: config/mips/mips.c:16838
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "argument must be a constant"
+#, gcc-internal-format, gfc-internal-format
msgid "argument %d to the built-in must be a constant in range %d to %d"
-msgstr "el argumento debe ser una constante"
+msgstr "el argumento %d para la función interna debe ser una constante en el rango entre %d y %d"
#: config/mips/mips.c:16844 config/nds32/nds32-intrinsic.c:60
#: config/nds32/nds32-intrinsic.c:88 config/nds32/nds32-intrinsic.c:118
@@ -28624,10 +28601,9 @@ msgid "invalid argument to built-in function"
msgstr "argumento no válido para la función interna"
#: config/mips/mips.c:16958
-#, fuzzy, gcc-internal-format
-#| msgid "failed to reclaim unneeded function"
+#, gcc-internal-format
msgid "failed to expand built-in function"
-msgstr "falló al reclamar una función innecesaria"
+msgstr "fallo al expandir función interna"
#: config/mips/mips.c:17089
#, gcc-internal-format
@@ -28655,10 +28631,9 @@ msgid "hard-float MIPS16 code for ABIs other than o32 and o64"
msgstr "código MIPS16 de coma flotante hard para ABIs diferentes de o32 y o64"
#: config/mips/mips.c:19443
-#, fuzzy, gcc-internal-format
-#| msgid "Generate MIPS16 code."
+#, gcc-internal-format
msgid "MSA MIPS16 code"
-msgstr "Genera código MIPS16."
+msgstr "código MSA MIPS16"
#: config/mips/mips.c:19618 config/mips/mips.c:19623 config/mips/mips.c:19705
#: config/mips/mips.c:19707 config/mips/mips.c:19737 config/mips/mips.c:19747
@@ -28693,10 +28668,9 @@ msgid "%<-mgp64%> used with a 32-bit ABI"
msgstr "se utiliza %<-mgp64%> con una ABI de 32-bit"
#: config/mips/mips.c:19702
-#, fuzzy, gcc-internal-format
-#| msgid "the %qs architecture does not support the synci instruction"
+#, gcc-internal-format
msgid "the %qs architecture does not support %<-mfp32%>"
-msgstr "la arquitectura %qs no admite la instrucción synci"
+msgstr "la arquitectura %qs no admite %<-mfp32%>"
#: config/mips/mips.c:19711
#, gcc-internal-format
@@ -28709,22 +28683,19 @@ msgid "%<-mgp32%> and %<-mfp64%> can only be combined when using the o32 ABI"
msgstr "%<-mgp32%> y %<-mfp64%> sólo se pueden combinar al usar la ABI o32"
#: config/mips/mips.c:19735
-#, fuzzy, gcc-internal-format
-#| msgid "%<-mgp32%> and %<-mfp64%> can only be combined when using the o32 ABI"
+#, gcc-internal-format
msgid "%<-mfpxx%> can only be used with the o32 ABI"
-msgstr "%<-mgp32%> y %<-mfp64%> sólo se pueden combinar al usar la ABI o32"
+msgstr "%<-mfpxx%> solo se puede usar con la ABI o32"
#: config/mips/mips.c:19739
-#, fuzzy, gcc-internal-format
-#| msgid "%<-mips3d%> requires %<-mpaired-single%>"
+#, gcc-internal-format
msgid "%<-march=%s%> requires %<-mfp32%>"
-msgstr "%<-mips3d%> requiere %<-mpaired-single%>"
+msgstr "%<-march=%s%> requiere %<-mfp32%>"
#: config/mips/mips.c:19741
-#, fuzzy, gcc-internal-format
-#| msgid "%<-mips3d%> requires %<-mpaired-single%>"
+#, gcc-internal-format
msgid "%<-mfpxx%> requires %<-mlra%>"
-msgstr "%<-mips3d%> requiere %<-mpaired-single%>"
+msgstr "%<-mfpxx%> requiere %<-mlra%>"
#: config/mips/mips.c:19757 config/mips/mips.c:19759 config/mips/mips.c:19772
#, gcc-internal-format
@@ -28747,10 +28718,9 @@ msgid "the %qs architecture does not support branch-likely instructions"
msgstr "la arquitectura %qs no admite las instrucciones con probabilidad de ramificación"
#: config/mips/mips.c:19834
-#, fuzzy, gcc-internal-format
-#| msgid "the %qs architecture does not support the synci instruction"
+#, gcc-internal-format
msgid "the %qs architecture does not support madd or msub instructions"
-msgstr "la arquitectura %qs no admite la instrucción synci"
+msgstr "la arquitectura %qs no admite las instrucciones madd ni msub"
#: config/mips/mips.c:19848
#, fuzzy, gcc-internal-format
@@ -28759,28 +28729,24 @@ msgid "the %qs architecture does not support odd single-precision registers"
msgstr "la arquitectura %qs no admite las instrucciones par-sencillo"
#: config/mips/mips.c:19861 config/mips/mips.c:19867
-#, fuzzy, gcc-internal-format
-#| msgid "unsupported combination: %s"
+#, gcc-internal-format
msgid "unsupported combination: %qs%s %s"
-msgstr "no se admite la combinación: %s"
+msgstr "no se admite la combinación: %qs%s %s"
#: config/mips/mips.c:19876
-#, fuzzy, gcc-internal-format
-#| msgid "unsupported combination: %s"
+#, gcc-internal-format
msgid "unsupported combination: %qs %s"
-msgstr "no se admite la combinación: %s"
+msgstr "no se admite la combinación: %qs %s"
#: config/mips/mips.c:19891
-#, fuzzy, gcc-internal-format
-#| msgid "Generate position-independent code if possible (large mode)"
+#, gcc-internal-format
msgid "cannot generate position-independent code for %qs"
-msgstr "Genera código independiente de posición si es posible (modo large)"
+msgstr "no se puede generar código independiente de posición para %qs"
#: config/mips/mips.c:19894
-#, fuzzy, gcc-internal-format
-#| msgid "Disable position-independent code (PIC) for use in OS kernel code"
+#, gcc-internal-format
msgid "position-independent code requires %qs"
-msgstr "Desactiva el código independiente de posición (PIC) para su uso en código de núcleo de SO"
+msgstr "el código independiente de posición requiere %qs"
#: config/mips/mips.c:19927
#, gcc-internal-format
@@ -28793,16 +28759,14 @@ msgid "cannot use small-data accesses for %qs"
msgstr "no se pueden usar accesos de data small para %qs"
#: config/mips/mips.c:19953
-#, fuzzy, gcc-internal-format
-#| msgid "the %qs architecture does not support paired-single instructions"
+#, gcc-internal-format
msgid "the %qs architecture does not support %<-m%s=legacy%>"
-msgstr "la arquitectura %qs no admite las instrucciones par-sencillo"
+msgstr "la arquitectura %qs no admite %<-m%s=legacy%>"
#: config/mips/mips.c:19960
-#, fuzzy, gcc-internal-format
-#| msgid "the %qs architecture does not support the synci instruction"
+#, gcc-internal-format
msgid "the %qs architecture does not support %<-m%s=2008%>"
-msgstr "la arquitectura %qs no admite la instrucción synci"
+msgstr "la arquitectura %qs no admite %<-m%s=2008%>"
#: config/mips/mips.c:19978
#, gcc-internal-format
@@ -28815,10 +28779,9 @@ msgid "%qs must be used with %qs"
msgstr "%qs se debe usar con %qs"
#: config/mips/mips.c:19998
-#, fuzzy, gcc-internal-format
-#| msgid "-mips3d/-mpaired-single must be used with -mfp64 -mhard-float"
+#, gcc-internal-format
msgid "%<-mmsa%> must be used with %<-mfp64%> and %<-mhard-float%>"
-msgstr "-mips3d/-mpaired-single se deben usar con -mfp64 -mhard-float"
+msgstr "%<-mmsa%> debe usarse con %<-mfp64%> y %<-mhard-float%>"
#: config/mips/mips.c:20005
#, gcc-internal-format
@@ -28831,10 +28794,9 @@ msgid "%qs requires a target that provides the %qs instruction"
msgstr "%qs requiere un objetivo que provea la instrucción %qs"
#: config/mips/mips.c:20025
-#, fuzzy, gcc-internal-format
-#| msgid "the %qs architecture does not support the synci instruction"
+#, gcc-internal-format
msgid "the %qs architecture does not support DSP instructions"
-msgstr "la arquitectura %qs no admite la instrucción synci"
+msgstr "la arquitectura %qs no admite las instrucciones DSP"
#: config/mips/mips.c:20127
#, gcc-internal-format
@@ -28910,22 +28872,22 @@ msgstr "-mtune= espera mn10300, am33, am33-2 o am34"
#: config/msp430/driver-msp430.c:659
#, gcc-internal-format, gfc-internal-format
msgid "unexpected argument to msp430_select_hwmult_lib: %s"
-msgstr ""
+msgstr "argumento inesperado para msp430_select_hwmult_lib: %s"
#: config/msp430/driver-msp430.c:700
#, gcc-internal-format, gfc-internal-format
msgid "unrecognized hwpy field in msp430_mcu_data[%d]: %d"
-msgstr ""
+msgstr "campo hwpy no reconocido en msp430_mcu_data[%d]: %d"
#: config/msp430/driver-msp430.c:707
#, gcc-internal-format, gfc-internal-format
msgid "unexpected first argument to msp430_select_hwmult_lib: %s"
-msgstr ""
+msgstr "primer argumento inesperado para msp430_select_hwmult_lib: %s"
#: config/msp430/driver-msp430.c:711
#, gcc-internal-format
msgid "msp430_select_hwmult_lib needs one or more arguments"
-msgstr ""
+msgstr "msp430_select_hwmult_lib necesita uno o más argumentos"
#: config/msp430/msp430.c:776
#, gcc-internal-format, gfc-internal-format
@@ -28972,27 +28934,28 @@ msgid ""
"Unrecognized MCU name '%s', assuming that it just supports the MSP430 ISA.\n"
"Use the -mcpu option to set the ISA explicitly."
msgstr ""
+"No se reconoce el nombre MCU '%s'; se asume que solo admite el ISA MSP430.\n"
+"Utilice la opción -mcpu para poner el ISA explícitamente."
#: config/msp430/msp430.c:838
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "unrecognized register name %qs"
+#, gcc-internal-format, gfc-internal-format
msgid "Unrecognized MCU name '%s'."
-msgstr "no se reconoce el nombre de registro %qs."
+msgstr "No se reconoce el nombre MCU '%s'."
#: config/msp430/msp430.c:847
#, gcc-internal-format
msgid "-mlarge requires a 430X-compatible -mmcu="
-msgstr ""
+msgstr "-mlarge requiere una -mmcu= compatible con 430X"
#: config/msp430/msp430.c:850
#, gcc-internal-format
msgid "-mcode-region=upper requires 430X-compatible cpu"
-msgstr ""
+msgstr "-mcode-region=upper requiere una -mmcu= compatible con 430X"
#: config/msp430/msp430.c:852
#, gcc-internal-format
msgid "-mdata-region=upper requires 430X-compatible cpu"
-msgstr ""
+msgstr "-mdata-region=upper requiere una -mmcu= compatible con 430X"
#: config/msp430/msp430.c:1859
#, fuzzy, gcc-internal-format
@@ -29001,16 +28964,14 @@ msgid "unrecognized interrupt vector argument of %qE attribute"
msgstr "argumento no válido del atributo %qE"
#: config/msp430/msp430.c:1868
-#, fuzzy, gcc-internal-format
-#| msgid "argument %d of %qE must be in the range %d...%d"
+#, gcc-internal-format
msgid "numeric argument of %qE attribute must be in range 0..63"
-msgstr "el argumento %d de %qE debe estar dentro del rango %d...%d"
+msgstr "el argumento numérico del atributo %qE debe estar dentro del rango 0..63"
#: config/msp430/msp430.c:1874
-#, fuzzy, gcc-internal-format
-#| msgid "argument of %qE attribute is not a string constant"
+#, gcc-internal-format
msgid "argument of %qE attribute is not a string constant or number"
-msgstr "el argumento del atributo %qE no es una cadena constante"
+msgstr "el argumento del atributo %qE no es una cadena constante ni un número"
#: config/msp430/msp430.c:2124
#, fuzzy, gcc-internal-format
@@ -29019,26 +28980,24 @@ msgid "argument to interrupt attribute is unsupported for weak functions"
msgstr "no se puede establecer el atributo de interrupción: no hay una función actual"
#: config/msp430/msp430.c:2494
-#, fuzzy, gcc-internal-format
-#| msgid "%qE attribute allows only an integer constant argument"
+#, gcc-internal-format
msgid "__delay_cycles() only takes constant arguments"
-msgstr "el atributo %qE sólo permite una constante entera como argumento"
+msgstr "__delay_cycles() solo toma argumentos constantes"
#: config/msp430/msp430.c:2504
-#, fuzzy, gcc-internal-format
-#| msgid "%qE attribute allows only an integer constant argument"
+#, gcc-internal-format
msgid "__delay_cycles only takes non-negative cycle counts"
-msgstr "el atributo %qE sólo permite una constante entera como argumento"
+msgstr "__delay_cycles solo permite número de ciclos no negativo"
#: config/msp430/msp430.c:2524
#, gcc-internal-format
msgid "__delay_cycles is limited to 32-bit loop counts"
-msgstr ""
+msgstr "__delay_cycles está limitado a números de bucles de 32 bits"
#: config/msp430/msp430.c:2594
#, gcc-internal-format
msgid "MSP430 builtin functions only work inside interrupt handlers"
-msgstr ""
+msgstr "las funciones internas de MSP430 solo funcionan dentro de manejadores de interrupciones"
#: config/msp430/msp430.c:2606 config/rx/rx.c:2635 config/xtensa/xtensa.c:3375
#: config/xtensa/xtensa.c:3401
@@ -29059,10 +29018,9 @@ msgid "multiple nested types attributes to function %qD"
msgstr "se especificaron múltiples atributos de tipo de función"
#: config/nds32/nds32-isr.c:360
-#, fuzzy, gcc-internal-format
-#| msgid "multiple interrupt attributes not allowed"
+#, gcc-internal-format
msgid "multiple interrupt attributes to function %qD"
-msgstr "no se permiten atributos interrupt múltiples"
+msgstr "atributos interrupt múltiples para la función %qD"
#. Trampoline is not supported on reduced-set registers yet.
#: config/nds32/nds32.c:1742 config/nds32/nds32.c:1796
@@ -29070,78 +29028,70 @@ msgstr "no se permiten atributos interrupt múltiples"
#: config/nds32/nds32.c:2370 config/nds32/nds32.c:2376
#: config/nds32/nds32.c:2436 config/nds32/nds32.c:2442
#: config/nds32/nds32.c:2474
-#, fuzzy, gcc-internal-format
-#| msgid "nested functions not supported on this target"
+#, gcc-internal-format
msgid "a nested function is not supported for reduced registers"
-msgstr "no se admiten funciones anidadas en este objetivo"
+msgstr "no se admiten funciones anidadas para registros reducidos"
#. The enum index value for array size is out of range.
#: config/nds32/nds32.c:2277
-#, fuzzy, gcc-internal-format
-#| msgid "integer constant out of range"
+#, gcc-internal-format
msgid "intrinsic register index is out of range"
-msgstr "constante entera fuera de rango"
+msgstr "el índice de registro intrínseco está fuera de rango"
#: config/nds32/nds32.c:2582
-#, fuzzy, gcc-internal-format
-#| msgid "invalid type for iteration variable %qE"
+#, gcc-internal-format
msgid "invalid id value for interrupt/exception attribute"
-msgstr "tipo no válido para la variable de iteración %qE"
+msgstr "valor de id no válido para atributo de interrupción/excepción"
#: config/nds32/nds32.c:2610
-#, fuzzy, gcc-internal-format
-#| msgid "invalid argument of %qs attribute"
+#, gcc-internal-format
msgid "invalid id value for reset attribute"
-msgstr "argumento no válido del atributo %qs"
+msgstr "valor de id no válido atributo reset"
#: config/nds32/nds32.c:2626
-#, fuzzy, gcc-internal-format
-#| msgid "invalid argument of %qs attribute"
+#, gcc-internal-format
msgid "invalid nmi function for reset attribute"
-msgstr "argumento no válido del atributo %qs"
+msgstr "función nmi no válida para atributo reset"
#: config/nds32/nds32.c:2639
-#, fuzzy, gcc-internal-format
-#| msgid "invalid argument of %qs attribute"
+#, gcc-internal-format
msgid "invalid warm function for reset attribute"
-msgstr "argumento no válido del atributo %qs"
+msgstr "función warm no válida para atributo reset"
#: config/nds32/nds32.c:2707
-#, fuzzy, gcc-internal-format
-#| msgid "Disable position-independent code (PIC) for use in OS kernel code"
+#, gcc-internal-format
msgid "position-independent code not supported"
-msgstr "Desactiva el código independiente de posición (PIC) para su uso en código de núcleo de SO"
+msgstr "no se admite código independiente de posición"
#: config/nios2/nios2.c:561
#, gcc-internal-format
msgid "Unknown form for stack limit expression"
-msgstr ""
+msgstr "Forma desconocida para expresión de límite de pila"
#: config/nios2/nios2.c:1168
-#, fuzzy, gcc-internal-format
-#| msgid "target attribute or pragma changes double precision floating point"
+#, gcc-internal-format
msgid "switch %<-mcustom-%s%> is required for double precision floating point"
-msgstr "el atributo o pragma target cambia la coma flotante de precisión doble"
+msgstr "se requiere la opción %<-mcustom-%s%> para la coma flotante de precisión doble"
#: config/nios2/nios2.c:1181
#, gcc-internal-format
msgid "switch %<-mcustom-%s%> has no effect unless -funsafe-math-optimizations is specified"
-msgstr ""
+msgstr "la opción %<-mcustom-%s%> no produce efecto alguno a menos que se especifique -funsafe-math-optimizations"
#: config/nios2/nios2.c:1190
#, gcc-internal-format
msgid "switch %<-mcustom-%s%> has no effect unless -ffinite-math-only is specified"
-msgstr ""
+msgstr "la opción %<-mcustom-%s%> no produce efecto alguno a menos que se especifique -ffinite-math-only"
#: config/nios2/nios2.c:1199
#, gcc-internal-format
msgid "switch %<-mcustom-%s%> has no effect unless -fno-math-errno is specified"
-msgstr ""
+msgstr "la opción %<-mcustom-%s%> no produce efecto alguno a menos que se especifique -fno-math-errno"
#: config/nios2/nios2.c:1204
#, gcc-internal-format
msgid "conflicting use of -mcustom switches, target attributes, and/or __builtin_custom_ functions"
-msgstr ""
+msgstr "hay un conflicto al usar opciones -mcustom, atributos de objetivo y/o funciones _builtin_custom_"
#: config/nios2/nios2.c:1306
#, gcc-internal-format
@@ -29151,41 +29101,37 @@ msgstr ""
#: config/nios2/nios2.c:1325
#, gcc-internal-format
msgid "switch %<-mcustom-%s%> value %d must be between 0 and 255"
-msgstr ""
+msgstr "opción %<-mcustom-%s%>: el valor %d tiene que estar entre 0 y 255"
#: config/nios2/nios2.c:1348
-#, fuzzy, gcc-internal-format
-#| msgid "Disable position-independent code (PIC) for use in OS kernel code"
+#, gcc-internal-format
msgid "position-independent code requires the Linux ABI"
-msgstr "Desactiva el código independiente de posición (PIC) para su uso en código de núcleo de SO"
+msgstr "el código independiente de posición requiere la ABI de Linux"
#: config/nios2/nios2.c:1351
#, gcc-internal-format
msgid "PIC support for -fstack-limit-symbol"
-msgstr ""
+msgstr "soporte PIC para -fstack-limit-symbol"
#: config/nios2/nios2.c:1377
-#, fuzzy, gcc-internal-format
-#| msgid "generation of Branch Likely instructions enabled, but not supported by architecture"
+#, gcc-internal-format
msgid "BMX instructions are only supported with R2 architecture"
-msgstr "la generación de instrucciones Probables a Ramificar está activada, pero se admite por la arquitectura"
+msgstr "las instrucciones BMX solo se admiten con la arquitectura R2"
#: config/nios2/nios2.c:1379
-#, fuzzy, gcc-internal-format
-#| msgid "instruction scheduling not supported on this target machine"
+#, gcc-internal-format
msgid "CDX instructions are only supported with R2 architecture"
-msgstr "no se admite la planificación de instrucciones en este objetivo"
+msgstr "las instrucciones CDX solo se admiten con la arquitectura R2"
#: config/nios2/nios2.c:1384
-#, fuzzy, gcc-internal-format
-#| msgid "Generate code in little endian mode"
+#, gcc-internal-format
msgid "R2 architecture is little-endian only"
-msgstr "Genera código en modo little endian"
+msgstr "la arquitectura R2 solo es little endian"
#: config/nios2/nios2.c:3130
#, gcc-internal-format
msgid "Cannot call %<__builtin_custom_%s%> without specifying switch %<-mcustom-%s%>"
-msgstr ""
+msgstr "No se puede llamar a %<__builtin_custom_%s%> sin especificar la opción %<-mcustom-%s%>"
#: config/nios2/nios2.c:3238
#, gcc-internal-format, gfc-internal-format
@@ -29193,156 +29139,144 @@ msgid "custom instruction opcode must be compile time constant in the range 0-25
msgstr ""
#: config/nios2/nios2.c:3384
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "invalid argument to built-in function"
+#, gcc-internal-format, gfc-internal-format
msgid "invalid argument to built-in function %s"
-msgstr "argumento no válido para la función interna"
+msgstr "argumento no válido para la función interna %s"
#: config/nios2/nios2.c:3443
#, gcc-internal-format, gfc-internal-format
msgid "Control register number must be in range 0-31 for %s"
-msgstr ""
+msgstr "El número del registro de control tiene que estar en el rango 0-31 para %s"
#: config/nios2/nios2.c:3471
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "number must be 0 or 1"
+#, gcc-internal-format, gfc-internal-format
msgid "Register number must be in range 0-31 for %s"
-msgstr "el número debe ser 0 ó 1"
+msgstr "El número de registro tiene que estar en el rango 0-31 para %s"
#: config/nios2/nios2.c:3478
#, gcc-internal-format, gfc-internal-format
msgid "The immediate value must fit into a %d-bit integer for %s"
-msgstr ""
+msgstr "El valor inmediato tiene que caber en un entero de %d bits para %s"
#: config/nios2/nios2.c:3528
#, gcc-internal-format
msgid "The ENI instruction operand must be either 0 or 1"
-msgstr ""
+msgstr "El operando de la instrucción ENI tiene que ser 0 o 1"
#: config/nios2/nios2.c:3556
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Builtin function %s requires the -mvsx option"
+#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires Nios II R%d"
-msgstr "La función interna %s requiere la opción -mvsx"
+msgstr "La función interna %s requiere Nios II R%d"
#: config/nios2/nios2.c:3636
-#, fuzzy, gcc-internal-format
-#| msgid "switch -mcpu=%s conflicts with -march=%s switch"
+#, gcc-internal-format
msgid "switch %<-mcustom-%s%> conflicts with switch %<-mcustom-%s%>"
-msgstr "la opción -mcpu=%s genera un conflicto con la opción -march=%s"
+msgstr "la opción %<-mcustom-%s%> genera un conflicto con la opción %<-mcustom-%s%>"
#: config/nios2/nios2.c:3642 config/nios2/nios2.c:3652
#, gcc-internal-format
msgid "call to %<__builtin_custom_%s%> conflicts with switch %<-mcustom-%s%>"
-msgstr ""
+msgstr "la llamada a %<__builtin_custom_%s%> genera un conflicto con la opción %<-mcustom-%s%>"
#: config/nios2/nios2.c:3758
#, gcc-internal-format
msgid "custom-fpu-cfg option does not support %<no-%>"
-msgstr ""
+msgstr "la opción custom-fpu-cfg no admite %<no-%>"
#: config/nios2/nios2.c:3763
#, gcc-internal-format
msgid "custom-fpu-cfg option requires configuration argument"
-msgstr ""
+msgstr "la opción custom-fpu-cfg requiere argumento de configuración"
#: config/nios2/nios2.c:3792
-#, fuzzy, gcc-internal-format
-#| msgid "%s only accepts 2 arguments"
+#, gcc-internal-format
msgid "%<no-custom-%s%> does not accept arguments"
-msgstr "%s sólo acepta 2 argumentos"
+msgstr "%<no-custom-%s%> no acepta argumentos"
#: config/nios2/nios2.c:3807
#, gcc-internal-format
msgid "%<custom-%s=%> requires argument"
-msgstr ""
+msgstr "%<no-custom-%s%> requiere argumento"
#: config/nios2/nios2.c:3817
#, gcc-internal-format, gfc-internal-format
msgid "`custom-%s=' argument requires numeric digits"
-msgstr ""
+msgstr "el argumento `custom-%s=' requiere dígitos numéricos"
#: config/nios2/nios2.c:3829
#, gcc-internal-format
msgid "%<custom-%s=%> is not recognized as FPU instruction"
-msgstr ""
+msgstr "%<custom-%s=%> no se reconoce como instrucción FPU"
#: config/nios2/nios2.c:3836
-#, fuzzy, gcc-internal-format
-#| msgid "type of %qE is unknown"
+#, gcc-internal-format
msgid "%<%s%> is unknown"
-msgstr "el tipo de %qE es desconocido"
+msgstr "%<%s%> es desconocido"
#: config/nvptx/mkoffload.c:107
-#, fuzzy, gcc-internal-format
-#| msgid "malformed spec function name"
+#, gcc-internal-format
msgid "malformed ptx file"
-msgstr "nombre de la función de especificación malformado"
+msgstr "fichero ptx mal formado"
#: config/nvptx/mkoffload.c:407
-#, fuzzy, gcc-internal-format
-#| msgid "COLLECT_LTO_WRAPPER must be set"
+#, gcc-internal-format
msgid "COLLECT_GCC must be set."
-msgstr "se debe definir COLLECT_LTO_WRAPPER."
+msgstr "se debe definir COLLECT_GCC."
#: config/nvptx/mkoffload.c:488
#, gcc-internal-format
msgid "either -fopenacc or -fopenmp must be set"
-msgstr ""
+msgstr "se debe definir -fopenacc o -fopenmp"
#: config/nvptx/mkoffload.c:552
-#, fuzzy, gcc-internal-format
-#| msgid "%s:cannot open graph file\n"
+#, gcc-internal-format
msgid "cannot open intermediate ptx file"
-msgstr "%s:no se puede abrir el fichero de grafo\n"
+msgstr "no se puede abrir el fichero ptx intermedio"
#: config/nvptx/nvptx.c:159
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Builtin function %s is not supported with the current options"
+#, gcc-internal-format, gfc-internal-format
msgid "option %s is not supported together with -fopenacc"
-msgstr "La función interna %s no se admite con las opciones actuales"
+msgstr "la función %s no se admite conjuntamente con -fopenacc"
#: config/nvptx/nvptx.c:261
#, gcc-internal-format
msgid "static initialization of variable %q+D in %<.shared%> memory is not supported"
-msgstr ""
+msgstr "no se admite la inicialización estática de la variable %q+D en memoria %<.shared%>"
#: config/nvptx/nvptx.c:1941
#, gcc-internal-format
msgid "cannot emit unaligned pointers in ptx assembly"
-msgstr ""
+msgstr "no se pueden emitir punteros desalineados en ensamblador ptx"
#: config/nvptx/nvptx.c:2131
#, gcc-internal-format
msgid "PTX does not support weak declarations (only weak definitions)"
-msgstr ""
+msgstr "PTX no admite declaraciones débiles (solamente definiciones débiles)"
#: config/nvptx/nvptx.c:4283
-#, fuzzy, gcc-internal-format
-#| msgid "%qE attribute ignored on types"
+#, gcc-internal-format
msgid "%qE attribute requires a void return type"
-msgstr "se descarta el atributo %qE en tipos"
+msgstr "el atributo %qE requiere tipo de retorno void"
#: config/nvptx/nvptx.c:4306
-#, fuzzy, gcc-internal-format
-#| msgid "__BELOW100__ attribute not allowed with auto storage class"
+#, gcc-internal-format
msgid "%qE attribute not allowed with auto storage class"
-msgstr "no se permite el atributo __BELOW100__ con una clase de auto almacenamiento"
+msgstr "no se permite el atributo %qE con una clase de auto almacenamiento"
#: config/nvptx/nvptx.c:4674
#, gcc-internal-format, gfc-internal-format
msgid "using vector_length (%d), ignoring %d"
-msgstr ""
+msgstr "se usa vector_length (%d); se hace caso omiso de %d"
#: config/nvptx/nvptx.c:4675
#, gcc-internal-format, gfc-internal-format
msgid "using vector_length (%d), ignoring runtime setting"
-msgstr ""
+msgstr "se usa vector_length (%d); se hace caso omiso de la configuración de tiempo de ejecución"
#: config/nvptx/nvptx.c:4685
#, gcc-internal-format, gfc-internal-format
msgid "using num_workers (%d), ignoring %d"
-msgstr ""
+msgstr "se usa num_workers (%d); se hace caso omiso de %d"
#: config/pa/pa.c:507
#, gcc-internal-format
@@ -29370,84 +29304,75 @@ msgid "alignment (%u) for %s exceeds maximum alignment for global common data.
msgstr "la alineación (%u) para %s excede la alineación máxima para los datos comunes globales. Se usará %u"
#: config/riscv/riscv.c:333
-#, fuzzy, gcc-internal-format
-#| msgid "unknown value %s for -mfpu"
+#, gcc-internal-format
msgid "unknown cpu %qs for -mtune"
-msgstr "valor %s desconocido para -mfpu"
+msgstr "cpu %qs desconocida para -mtune"
#: config/riscv/riscv.c:3765
#, gcc-internal-format
msgid "-mdiv requires -march to subsume the %<M%> extension"
-msgstr ""
+msgstr "-mdiv requiere -march para subsumir la extensión %<M%>"
#: config/riscv/riscv.c:3795
#, gcc-internal-format
msgid "requested ABI requires -march to subsume the %qc extension"
-msgstr ""
+msgstr "la ABI solicitada requiere -march para subsumir la extensión %qc"
#: config/riscv/riscv.c:3800
#, gcc-internal-format, gfc-internal-format
msgid "ABI requires -march=rv%d"
-msgstr ""
+msgstr "ABI requiere -march=rv%d"
#. Address spaces are currently only supported by C.
#: config/rl78/rl78.c:367
-#, fuzzy, gcc-internal-format
-#| msgid "-mmulticore can only be used with BF561"
+#, gcc-internal-format
msgid "-mes0 can only be used with C"
-msgstr "-mmulticore sólo se puede usar con BF561"
+msgstr "-mes0 solo se puede usar con C"
#: config/rl78/rl78.c:370
#, gcc-internal-format
msgid "mduc registers only saved for G13 target"
-msgstr ""
+msgstr "los registros mduc solo se guardan para el objetivo G13"
#: config/rl78/rl78.c:385
-#, fuzzy, gcc-internal-format
-#| msgid "-mmulticore can only be used with BF561"
+#, gcc-internal-format
msgid "-mmul=g13 cannot be used with -mcpu=g10"
-msgstr "-mmulticore sólo se puede usar con BF561"
+msgstr "-mmul=g13 no se puede usar con -mcpu=g10"
#: config/rl78/rl78.c:386
-#, fuzzy, gcc-internal-format
-#| msgid "-mmulticore can only be used with BF561"
+#, gcc-internal-format
msgid "-mmul=g14 cannot be used with -mcpu=g10"
-msgstr "-mmulticore sólo se puede usar con BF561"
+msgstr "-mmul=g14 no se puede usar con -mcpu=g10"
#. The S2 core does not have mul/div instructions.
#: config/rl78/rl78.c:397
-#, fuzzy, gcc-internal-format
-#| msgid "-mmulticore can only be used with BF561"
+#, gcc-internal-format
msgid "-mmul=g14 cannot be used with -mcpu=g13"
-msgstr "-mmulticore sólo se puede usar con BF561"
+msgstr "-mmul=g14 no se puede usar con -mcpu=g13"
#. The G14 core does not have the hardware multiply peripheral used by the
#. G13 core, hence you cannot use G13 multipliy routines on G14 hardware.
#: config/rl78/rl78.c:409
-#, fuzzy, gcc-internal-format
-#| msgid "-mmulticore can only be used with BF561"
+#, gcc-internal-format
msgid "-mmul=g13 cannot be used with -mcpu=g14"
-msgstr "-mmulticore sólo se puede usar con BF561"
+msgstr "-mmul=g13 no se puede usar con -mcpu=g14"
#: config/rl78/rl78.c:804
-#, fuzzy, gcc-internal-format
-#| msgid "%qE attribute only applies to functions"
+#, gcc-internal-format
msgid "naked attribute only applies to functions"
-msgstr "el atributo %qE se aplica solamente a funciones"
+msgstr "atributo desnudo se aplica solamente a funciones"
#: config/rl78/rl78.c:828
-#, fuzzy, gcc-internal-format
-#| msgid "%qE attribute only applies to functions"
+#, gcc-internal-format
msgid "%qE attribute doesn't apply to functions"
-msgstr "el atributo %qE se aplica solamente a funciones"
+msgstr "el atributo %qE no se aplica a funciones"
#. This is unpredictable, as we're truncating off usable address
#. bits.
#: config/rl78/rl78.c:1170
-#, fuzzy, gcc-internal-format
-#| msgid "converting %<false%> to pointer type %qT"
+#, gcc-internal-format
msgid "converting far pointer to near pointer"
-msgstr "se convierte %<false%> al tipo puntero %qT"
+msgstr "se convierte puntero lejano a puntero cercano"
#: config/rs6000/host-darwin.c:59
#, gcc-internal-format
@@ -29511,36 +29436,32 @@ msgstr "basura al final de #pragma longcall"
#: config/rs6000/rs6000-c.c:5575
#, gcc-internal-format
msgid "vec_lvsl is deprecated for little endian; use assignment for unaligned loads and stores"
-msgstr ""
+msgstr "vec_lvsl está obsoleta para little endian; utilize asignación para cargas y almacenajes no alineados"
#: config/rs6000/rs6000-c.c:5579
#, gcc-internal-format
msgid "vec_lvsr is deprecated for little endian; use assignment for unaligned loads and stores"
-msgstr ""
+msgstr "vec_lvsr está obsoleta para little endian; utilize asignación para cargas y almacenajes no alineados"
#: config/rs6000/rs6000-c.c:5589
-#, fuzzy, gcc-internal-format
-#| msgid "vec_extract only accepts 2 arguments"
+#, gcc-internal-format
msgid "vec_mul only accepts 2 arguments"
-msgstr "vec_extract sólo acepta 2 argumentos"
+msgstr "vec_mul sólo acepta 2 argumentos"
#: config/rs6000/rs6000-c.c:5640
-#, fuzzy, gcc-internal-format
-#| msgid "vec_insert only accepts 3 arguments"
+#, gcc-internal-format
msgid "vec_cmpne only accepts 2 arguments"
-msgstr "vec_insert sólo acepta 3 argumentos"
+msgstr "vec_cmpne sólo acepta 2 argumentos"
#: config/rs6000/rs6000-c.c:5710
-#, fuzzy, gcc-internal-format
-#| msgid "vec_insert only accepts 3 arguments"
+#, gcc-internal-format
msgid "vec_adde only accepts 3 arguments"
-msgstr "vec_insert sólo acepta 3 argumentos"
+msgstr "vec_adde sólo acepta 3 argumentos"
#: config/rs6000/rs6000-c.c:5774
-#, fuzzy, gcc-internal-format
-#| msgid "vec_insert only accepts 3 arguments"
+#, gcc-internal-format
msgid "vec_addec only accepts 3 arguments"
-msgstr "vec_insert sólo acepta 3 argumentos"
+msgstr "vec_addec sólo acepta 3 argumentos"
#: config/rs6000/rs6000-c.c:5862
#, gcc-internal-format, gfc-internal-format
@@ -29568,22 +29489,19 @@ msgid "vec_insert only accepts 3 arguments"
msgstr "vec_insert sólo acepta 3 argumentos"
#: config/rs6000/rs6000-c.c:6381
-#, fuzzy, gcc-internal-format
-#| msgid "passing arg %d of %qE discards qualifiers frompointer target type"
+#, gcc-internal-format
msgid "passing arg %d of %qE discards qualifiers from pointer target type"
msgstr "el paso del argumento %d de %qE descarta los calificadores del tipo del destino del puntero"
#: config/rs6000/rs6000-c.c:6435
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "ifunc is not supported in this configuration"
+#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s not supported in this compiler configuration"
-msgstr "ifunc no se admite en esta configuración"
+msgstr "No se admite la función interna %s en esta configuración del compilador"
#: config/rs6000/rs6000-c.c:6443
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "invalid parameter combination for AltiVec intrinsic"
+#, gcc-internal-format, gfc-internal-format
msgid "invalid parameter combination for AltiVec intrinsic %s"
-msgstr "combinación de parámetros no válida para el intrínseco AltiVec"
+msgstr "combinación de parámetros no válida para el intrínseco AltiVec %s"
#: config/rs6000/rs6000.c:3642
#, gcc-internal-format
@@ -29613,27 +29531,27 @@ msgstr "no se admite -malign-power para Darwin de 64-bit; es incompatible con la
#: config/rs6000/rs6000.c:4021
#, gcc-internal-format
msgid "will not generate power9 instructions because assembler lacks power9 support"
-msgstr ""
+msgstr "no generará instrucciones power9 porque el ensamblador no las admite"
#: config/rs6000/rs6000.c:4030
#, gcc-internal-format
msgid "will not generate power8 instructions because assembler lacks power8 support"
-msgstr ""
+msgstr "no generará instrucciones power8 porque el ensamblador no las admite"
#: config/rs6000/rs6000.c:4039
#, gcc-internal-format
msgid "will not generate power7 instructions because assembler lacks power7 support"
-msgstr ""
+msgstr "no generará instrucciones power7 porque el ensamblador no las admite"
#: config/rs6000/rs6000.c:4048
#, gcc-internal-format
msgid "will not generate power6 instructions because assembler lacks power6 support"
-msgstr ""
+msgstr "no generará instrucciones power6 porque el ensamblador no las admite"
#: config/rs6000/rs6000.c:4057
#, gcc-internal-format
msgid "will not generate power5 instructions because assembler lacks power5 support"
-msgstr ""
+msgstr "no generará instrucciones power5 porque el ensamblador no las admite"
#: config/rs6000/rs6000.c:4145
#, gcc-internal-format
@@ -29641,10 +29559,9 @@ msgid "not configured for SPE ABI"
msgstr "no se configuró para ABI SPE"
#: config/rs6000/rs6000.c:4150
-#, fuzzy, gcc-internal-format
-#| msgid "Do not use PowerPC instruction set"
+#, gcc-internal-format
msgid "not configured for SPE instruction set"
-msgstr "No usa el conjunto de instrucciones PowerPC"
+msgstr "no configurado para el conjunto de instrucciones SPE"
#: config/rs6000/rs6000.c:4156
#, gcc-internal-format
@@ -29674,77 +29591,69 @@ msgstr "no se admite -mstring en sistemas little endian"
#. Enforce that none of the ISA_3_0_MASKS_SERVER flags
#. were explicitly cleared.
#: config/rs6000/rs6000.c:4301 config/rs6000/rs6000.c:4312
-#, fuzzy, gcc-internal-format
-#| msgid "-mcmodel incompatible with other toc options"
+#, gcc-internal-format
msgid "-mpower9-minmax incompatible with explicitly disabled options"
-msgstr "-mcmodel es incompatible con otras opciones toc"
+msgstr "-mpower9-minmax es incompatible con las opciones desactivadas explícitamente"
#: config/rs6000/rs6000.c:4304
#, gcc-internal-format
msgid "Power9 target option is incompatible with -mcpu=<xxx> for <xxx> less than power9"
-msgstr ""
+msgstr "la opción del objetivo Power9 es incompatible con -mcpu=<xxx> para <xxx> menor que power9"
#: config/rs6000/rs6000.c:4336
-#, fuzzy, gcc-internal-format
-#| msgid "-mrecip requires -mfused-madd"
+#, gcc-internal-format
msgid "-mcrypto requires -maltivec"
-msgstr "-mrecip requiere -mfused-madd"
+msgstr "-mcrypto requiere -maltivec"
#: config/rs6000/rs6000.c:4343
-#, fuzzy, gcc-internal-format
-#| msgid "--resource requires -o"
+#, gcc-internal-format
msgid "-mdirect-move requires -mvsx"
-msgstr "--resource requiere -o"
+msgstr "-mdirect-move requiere -mvsx"
#: config/rs6000/rs6000.c:4350
#, gcc-internal-format
msgid "-mpower8-vector requires -maltivec"
-msgstr ""
+msgstr "-mpower8-vector requiere -maltivec"
#: config/rs6000/rs6000.c:4358
-#, fuzzy, gcc-internal-format
-#| msgid "--resource requires -o"
+#, gcc-internal-format
msgid "-mpower8-vector requires -mvsx"
-msgstr "--resource requiere -o"
+msgstr "-mpower8-vector requiere -mvsx"
#: config/rs6000/rs6000.c:4377
-#, fuzzy, gcc-internal-format
-#| msgid "--resource requires -o"
+#, gcc-internal-format
msgid "-mvsx-timode requires -mvsx"
-msgstr "--resource requiere -o"
+msgstr "-mvsx-timode requiere -mvsx"
#: config/rs6000/rs6000.c:4384
-#, fuzzy, gcc-internal-format
-#| msgid "-mrecip requires -mfused-madd"
+#, gcc-internal-format
msgid "-mhard-dfp requires -mhard-float"
-msgstr "-mrecip requiere -mfused-madd"
+msgstr "-mhard-dfp requiere -mhard-float"
#: config/rs6000/rs6000.c:4437
-#, fuzzy, gcc-internal-format
-#| msgid "--resource requires -o"
+#, gcc-internal-format
msgid "-mupper-regs-df requires -mvsx"
-msgstr "--resource requiere -o"
+msgstr "-mupper-regs-df requiere -mvsx"
#: config/rs6000/rs6000.c:4444
-#, fuzzy, gcc-internal-format
-#| msgid "--resource requires -o"
+#, gcc-internal-format
msgid "-mupper-regs-di requires -mvsx"
-msgstr "--resource requiere -o"
+msgstr "-mupper-regs-di requiere -mvsx"
#: config/rs6000/rs6000.c:4451
#, gcc-internal-format
msgid "-mupper-regs-sf requires -mpower8-vector"
-msgstr ""
+msgstr "-mupper-regs-sf requiere -mpower8-vector"
#: config/rs6000/rs6000.c:4500
#, gcc-internal-format
msgid "-mpower8-fusion-sign requires -mpower8-fusion"
-msgstr ""
+msgstr "-mpower8-fusion-sign requiere -mpower8-fusion"
#: config/rs6000/rs6000.c:4503
#, gcc-internal-format
msgid "-mtoc-fusion requires -mpower8-fusion"
-msgstr ""
+msgstr "-mtoc-fusion requiere -mpower8-fusion"
#. We prefer to not mention undocumented options in
#. error messages. However, if users have managed to select
@@ -29753,32 +29662,32 @@ msgstr ""
#: config/rs6000/rs6000.c:4520
#, gcc-internal-format
msgid "-mpower9-fusion requires -mpower8-fusion"
-msgstr ""
+msgstr "-mpower9-fusion requiere -mpower8-fusion"
#: config/rs6000/rs6000.c:4573
#, gcc-internal-format
msgid "-mpower9-vector requires -mpower8-vector"
-msgstr ""
+msgstr "-mpower9-vector requiere -mpower8-vector"
#: config/rs6000/rs6000.c:4618
#, gcc-internal-format
msgid "-mpower9-dform requires -mpower9-vector"
-msgstr ""
+msgstr "-mpower9-dform requiere -mpower9-vector"
#: config/rs6000/rs6000.c:4647
#, gcc-internal-format
msgid "-mpower9-dform, -mpower9-dform-vector, -mpower9-dform-scalar require -mdirect-move"
-msgstr ""
+msgstr "-mpower9-dform, -mpower9-dform-vector, -mpower9-dform-scalar requieren -mdirect-move"
#: config/rs6000/rs6000.c:4670
#, gcc-internal-format
msgid "-mpower9-dform requires -mupper-regs-df"
-msgstr ""
+msgstr "-mpower9-dform requiere -mupper-regs-df"
#: config/rs6000/rs6000.c:4677
#, gcc-internal-format
msgid "-mpower9-dform requires -mupper-regs-sf"
-msgstr ""
+msgstr "-mpower9-dform requiere -mupper-regs-sf"
#: config/rs6000/rs6000.c:4697
#, gcc-internal-format
diff --git a/gcc/po/fr.po b/gcc/po/fr.po
index 9ca63d04a4d..a22a8fb000d 100644
--- a/gcc/po/fr.po
+++ b/gcc/po/fr.po
@@ -133,7 +133,7 @@ msgstr ""
"Project-Id-Version: gcc 7.1.0\n"
"Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n"
"POT-Creation-Date: 2017-05-01 22:24+0000\n"
-"PO-Revision-Date: 2017-05-02 18:16+0200\n"
+"PO-Revision-Date: 2017-07-31 21:23+0200\n"
"Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
@@ -18582,7 +18582,7 @@ msgstr "%<_Cilk_spawn%> attendu avant %<_Cilk_sync%>"
#: gimplify.c:12201
#, gcc-internal-format
msgid "gimplification failed"
-msgstr "la gimplification a échouée"
+msgstr "la gimplification a échoué"
#: gimplify.c:12729
#, gcc-internal-format
@@ -18637,7 +18637,7 @@ msgstr "Le nom HSA SSA est défini par l'instruction qui est censée l'utiliser"
#: hsa-gen.c:1189 hsa-gen.c:1202
#, gcc-internal-format
msgid "HSA SSA verification failed"
-msgstr "La vérification HSA SSA a échouée"
+msgstr "La vérification HSA SSA a échoué"
#: hsa-gen.c:1198
#, gcc-internal-format
@@ -18652,7 +18652,7 @@ msgstr "L'instruction HSA utilise un registre qui n'est pas parmi les utilisatio
#: hsa-gen.c:1462
#, gcc-internal-format
msgid "HSA instruction verification failed"
-msgstr "La vérification de l'instruction HSA a échouée"
+msgstr "La vérification de l'instruction HSA a échoué"
#: input.c:1147
#, gcc-internal-format, gfc-internal-format
@@ -59197,7 +59197,7 @@ msgstr "-fwpa et -fltrans sont mutuellement exclusifs"
#: lto/lto-object.c:107
#, gcc-internal-format, gfc-internal-format
msgid "open %s failed: %s"
-msgstr "l'ouverture de %s a échouée: %s"
+msgstr "l'ouverture de %s a échoué: %s"
#: lto/lto-object.c:151 lto/lto-object.c:186 lto/lto-object.c:283
#: lto/lto-object.c:340 lto/lto-object.c:364
@@ -59369,7 +59369,7 @@ msgstr "waitpid a échoué"
#: lto/lto.c:2316
#, gcc-internal-format
msgid "streaming subprocess failed"
-msgstr "la mise en ligne du sous processus a échouée"
+msgstr "la mise en ligne du sous processus a échoué"
#: lto/lto.c:2319
#, gcc-internal-format
diff --git a/gcc/po/gcc.pot b/gcc/po/gcc.pot
index 9fd2a4b4c82..7f103f0883a 100644
--- a/gcc/po/gcc.pot
+++ b/gcc/po/gcc.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n"
-"POT-Creation-Date: 2017-05-01 22:22+0000\n"
+"POT-Creation-Date: 2017-08-04 22:20+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:2661
+#: cfgrtl.c:2669
msgid "flow control insn inside a basic block"
msgstr ""
-#: cfgrtl.c:2893
+#: cfgrtl.c:2901
msgid "wrong insn in the fallthru edge"
msgstr ""
-#: cfgrtl.c:2950
+#: cfgrtl.c:2958
msgid "insn outside basic block"
msgstr ""
-#: cfgrtl.c:2957
+#: cfgrtl.c:2965
msgid "return not followed by barrier"
msgstr ""
@@ -98,8 +98,8 @@ msgstr ""
msgid "%s: some warnings being treated as errors"
msgstr ""
-#: diagnostic.c:310 input.c:191 input.c:1776 c-family/c-opts.c:1358
-#: fortran/cpp.c:576 fortran/error.c:998 fortran/error.c:1018
+#: diagnostic.c:310 input.c:222 input.c:1810 c-family/c-opts.c:1346
+#: fortran/cpp.c:576 fortran/error.c:999 fortran/error.c:1019
msgid "<built-in>"
msgstr ""
@@ -130,12 +130,12 @@ msgstr ""
msgid "compilation terminated.\n"
msgstr ""
-#: diagnostic.c:893
+#: diagnostic.c:958
#, c-format
msgid "%s:%d: confused by earlier errors, bailing out\n"
msgstr ""
-#: diagnostic.c:1413
+#: diagnostic.c:1458
#, c-format
msgid "Internal compiler error: Error reporting routines re-entered.\n"
msgstr ""
@@ -144,40 +144,40 @@ msgstr ""
msgid "negative insn length"
msgstr ""
-#: final.c:3025
+#: final.c:3027
msgid "could not split insn"
msgstr ""
-#: final.c:3450
+#: final.c:3452
msgid "invalid 'asm': "
msgstr ""
-#: final.c:3579
+#: final.c:3581
#, c-format
msgid "nested assembly dialect alternatives"
msgstr ""
-#: final.c:3607 final.c:3619
+#: final.c:3609 final.c:3621
#, c-format
msgid "unterminated assembly dialect alternative"
msgstr ""
-#: final.c:3761
+#: final.c:3763
#, c-format
msgid "operand number missing after %%-letter"
msgstr ""
-#: final.c:3764 final.c:3805
+#: final.c:3766 final.c:3807
#, c-format
msgid "operand number out of range"
msgstr ""
-#: final.c:3822
+#: final.c:3824
#, c-format
msgid "invalid %%-code"
msgstr ""
-#: final.c:3852
+#: final.c:3854
#, c-format
msgid "'%%l' operand isn't a label"
msgstr ""
@@ -188,13 +188,13 @@ msgstr ""
#. TARGET_PRINT_OPERAND must handle them.
#. We can't handle floating point constants;
#. PRINT_OPERAND must handle them.
-#: final.c:3988 config/arc/arc.c:5108 config/i386/i386.c:17180
+#: final.c:3990 config/arc/arc.c:5460 config/i386/i386.c:17894
#: config/pdp11/pdp11.c:1698
#, c-format
msgid "floating constant misused"
msgstr ""
-#: final.c:4046 config/arc/arc.c:5205 config/i386/i386.c:17278
+#: final.c:4048 config/arc/arc.c:5557 config/i386/i386.c:17992
#: config/pdp11/pdp11.c:1739
#, c-format
msgid "invalid expression as operand"
@@ -205,275 +205,275 @@ msgstr ""
msgid "%s\n"
msgstr ""
-#: gcc.c:1714
+#: gcc.c:1717
#, c-format
msgid "Using built-in specs.\n"
msgstr ""
-#: gcc.c:1914
+#: gcc.c:1917
#, c-format
msgid ""
"Setting spec %s to '%s'\n"
"\n"
msgstr ""
-#: gcc.c:2022
+#: gcc.c:2025
#, c-format
msgid "Reading specs from %s\n"
msgstr ""
-#: gcc.c:2149
+#: gcc.c:2152
#, c-format
msgid "could not find specs file %s\n"
msgstr ""
-#: gcc.c:2224
+#: gcc.c:2227
#, c-format
msgid "rename spec %s to %s\n"
msgstr ""
-#: gcc.c:2226
+#: gcc.c:2229
#, c-format
msgid ""
"spec is '%s'\n"
"\n"
msgstr ""
-#: gcc.c:3035
+#: gcc.c:3038
#, c-format
msgid ""
"\n"
"Go ahead? (y or n) "
msgstr ""
-#: gcc.c:3185
+#: gcc.c:3188
#, c-format
msgid "# %s %.2f %.2f\n"
msgstr ""
-#: gcc.c:3401
+#: gcc.c:3404
#, c-format
msgid "Usage: %s [options] file...\n"
msgstr ""
-#: gcc.c:3402
+#: gcc.c:3405
msgid "Options:\n"
msgstr ""
-#: gcc.c:3404
+#: gcc.c:3407
msgid " -pass-exit-codes Exit with highest error code from a phase.\n"
msgstr ""
-#: gcc.c:3405
+#: gcc.c:3408
msgid " --help Display this information.\n"
msgstr ""
-#: gcc.c:3406
+#: gcc.c:3409
msgid ""
" --target-help Display target specific command line options.\n"
msgstr ""
-#: gcc.c:3407
+#: gcc.c:3410
msgid ""
" --help={common|optimizers|params|target|warnings|[^]{joined|separate|"
"undocumented}}[,...].\n"
msgstr ""
-#: gcc.c:3408
+#: gcc.c:3411
msgid ""
" Display specific types of command line options.\n"
msgstr ""
-#: gcc.c:3410
+#: gcc.c:3413
msgid " (Use '-v --help' to display command line options of sub-processes).\n"
msgstr ""
-#: gcc.c:3411
+#: gcc.c:3414
msgid " --version Display compiler version information.\n"
msgstr ""
-#: gcc.c:3412
+#: gcc.c:3415
msgid " -dumpspecs Display all of the built in spec strings.\n"
msgstr ""
-#: gcc.c:3413
+#: gcc.c:3416
msgid " -dumpversion Display the version of the compiler.\n"
msgstr ""
-#: gcc.c:3414
+#: gcc.c:3417
msgid " -dumpmachine Display the compiler's target processor.\n"
msgstr ""
-#: gcc.c:3415
+#: gcc.c:3418
msgid ""
" -print-search-dirs Display the directories in the compiler's search "
"path.\n"
msgstr ""
-#: gcc.c:3416
+#: gcc.c:3419
msgid ""
" -print-libgcc-file-name Display the name of the compiler's companion "
"library.\n"
msgstr ""
-#: gcc.c:3417
+#: gcc.c:3420
msgid " -print-file-name=<lib> Display the full path to library <lib>.\n"
msgstr ""
-#: gcc.c:3418
+#: gcc.c:3421
msgid ""
" -print-prog-name=<prog> Display the full path to compiler component "
"<prog>.\n"
msgstr ""
-#: gcc.c:3419
+#: gcc.c:3422
msgid ""
" -print-multiarch Display the target's normalized GNU triplet, used "
"as\n"
" a component in the library path.\n"
msgstr ""
-#: gcc.c:3422
+#: gcc.c:3425
msgid ""
" -print-multi-directory Display the root directory for versions of "
"libgcc.\n"
msgstr ""
-#: gcc.c:3423
+#: gcc.c:3426
msgid ""
" -print-multi-lib Display the mapping between command line options "
"and\n"
" multiple library search directories.\n"
msgstr ""
-#: gcc.c:3426
+#: gcc.c:3429
msgid ""
" -print-multi-os-directory Display the relative path to OS libraries.\n"
msgstr ""
-#: gcc.c:3427
+#: gcc.c:3430
msgid " -print-sysroot Display the target libraries directory.\n"
msgstr ""
-#: gcc.c:3428
+#: gcc.c:3431
msgid ""
" -print-sysroot-headers-suffix Display the sysroot suffix used to find "
"headers.\n"
msgstr ""
-#: gcc.c:3429
+#: gcc.c:3432
msgid ""
" -Wa,<options> Pass comma-separated <options> on to the "
"assembler.\n"
msgstr ""
-#: gcc.c:3430
+#: gcc.c:3433
msgid ""
" -Wp,<options> Pass comma-separated <options> on to the "
"preprocessor.\n"
msgstr ""
-#: gcc.c:3431
+#: gcc.c:3434
msgid ""
" -Wl,<options> Pass comma-separated <options> on to the linker.\n"
msgstr ""
-#: gcc.c:3432
+#: gcc.c:3435
msgid " -Xassembler <arg> Pass <arg> on to the assembler.\n"
msgstr ""
-#: gcc.c:3433
+#: gcc.c:3436
msgid " -Xpreprocessor <arg> Pass <arg> on to the preprocessor.\n"
msgstr ""
-#: gcc.c:3434
+#: gcc.c:3437
msgid " -Xlinker <arg> Pass <arg> on to the linker.\n"
msgstr ""
-#: gcc.c:3435
+#: gcc.c:3438
msgid " -save-temps Do not delete intermediate files.\n"
msgstr ""
-#: gcc.c:3436
+#: gcc.c:3439
msgid " -save-temps=<arg> Do not delete intermediate files.\n"
msgstr ""
-#: gcc.c:3437
+#: gcc.c:3440
msgid ""
" -no-canonical-prefixes Do not canonicalize paths when building relative\n"
" prefixes to other gcc components.\n"
msgstr ""
-#: gcc.c:3440
+#: gcc.c:3443
msgid " -pipe Use pipes rather than intermediate files.\n"
msgstr ""
-#: gcc.c:3441
+#: gcc.c:3444
msgid " -time Time the execution of each subprocess.\n"
msgstr ""
-#: gcc.c:3442
+#: gcc.c:3445
msgid ""
" -specs=<file> Override built-in specs with the contents of "
"<file>.\n"
msgstr ""
-#: gcc.c:3443
+#: gcc.c:3446
msgid ""
" -std=<standard> Assume that the input sources are for "
"<standard>.\n"
msgstr ""
-#: gcc.c:3444
+#: gcc.c:3447
msgid ""
" --sysroot=<directory> Use <directory> as the root directory for "
"headers\n"
" and libraries.\n"
msgstr ""
-#: gcc.c:3447
+#: gcc.c:3450
msgid ""
" -B <directory> Add <directory> to the compiler's search paths.\n"
msgstr ""
-#: gcc.c:3448
+#: gcc.c:3451
msgid ""
" -v Display the programs invoked by the compiler.\n"
msgstr ""
-#: gcc.c:3449
+#: gcc.c:3452
msgid ""
" -### Like -v but options quoted and commands not "
"executed.\n"
msgstr ""
-#: gcc.c:3450
+#: gcc.c:3453
msgid ""
" -E Preprocess only; do not compile, assemble or "
"link.\n"
msgstr ""
-#: gcc.c:3451
+#: gcc.c:3454
msgid " -S Compile only; do not assemble or link.\n"
msgstr ""
-#: gcc.c:3452
+#: gcc.c:3455
msgid " -c Compile and assemble, but do not link.\n"
msgstr ""
-#: gcc.c:3453
+#: gcc.c:3456
msgid " -o <file> Place the output into <file>.\n"
msgstr ""
-#: gcc.c:3454
+#: gcc.c:3457
msgid " -pie Create a position independent executable.\n"
msgstr ""
-#: gcc.c:3455
+#: gcc.c:3458
msgid " -shared Create a shared library.\n"
msgstr ""
-#: gcc.c:3456
+#: gcc.c:3459
msgid ""
" -x <language> Specify the language of the following input "
"files.\n"
@@ -484,7 +484,7 @@ msgid ""
"extension.\n"
msgstr ""
-#: gcc.c:3463
+#: gcc.c:3466
#, c-format
msgid ""
"\n"
@@ -493,88 +493,88 @@ msgid ""
" other options on to these processes the -W<letter> options must be used.\n"
msgstr ""
-#: gcc.c:5934
+#: gcc.c:5940
#, c-format
msgid "Processing spec (%s), which is '%s'\n"
msgstr ""
-#: gcc.c:6638
+#: gcc.c:6684
#, c-format
msgid "Target: %s\n"
msgstr ""
-#: gcc.c:6639
+#: gcc.c:6685
#, c-format
msgid "Configured with: %s\n"
msgstr ""
-#: gcc.c:6653
+#: gcc.c:6699
#, c-format
msgid "Thread model: %s\n"
msgstr ""
-#: gcc.c:6664
+#: gcc.c:6710
#, c-format
msgid "gcc version %s %s\n"
msgstr ""
-#: gcc.c:6667
+#: gcc.c:6713
#, c-format
msgid "gcc driver version %s %sexecuting gcc version %s\n"
msgstr ""
-#: gcc.c:6740 gcc.c:6952
+#: gcc.c:6786 gcc.c:6998
#, c-format
msgid ""
"The bug is not reproducible, so it is likely a hardware or OS problem.\n"
msgstr ""
-#: gcc.c:6876
+#: gcc.c:6922
#, c-format
msgid ""
"Preprocessed source stored into %s file, please attach this to your "
"bugreport.\n"
msgstr ""
-#: gcc.c:7829
+#: gcc.c:7875
#, c-format
msgid "install: %s%s\n"
msgstr ""
-#: gcc.c:7832
+#: gcc.c:7878
#, c-format
msgid "programs: %s\n"
msgstr ""
-#: gcc.c:7834
+#: gcc.c:7880
#, c-format
msgid "libraries: %s\n"
msgstr ""
-#: gcc.c:7951
+#: gcc.c:7997
#, c-format
msgid ""
"\n"
"For bug reporting instructions, please see:\n"
msgstr ""
-#: gcc.c:7967 gcov-tool.c:528
+#: gcc.c:8013 gcov-tool.c:528
#, c-format
msgid "%s %s%s\n"
msgstr ""
-#: gcc.c:7970 gcov-tool.c:530 gcov.c:718 fortran/gfortranspec.c:280
+#: gcc.c:8016 gcov-tool.c:530 gcov.c:730 fortran/gfortranspec.c:280
msgid "(C)"
msgstr ""
-#: gcc.c:7971 fortran/gfortranspec.c:281
+#: gcc.c:8017 fortran/gfortranspec.c:281
msgid ""
"This is free software; see the source for copying conditions. There is NO\n"
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
"\n"
msgstr ""
-#: gcc.c:8276
+#: gcc.c:8322
#, c-format
msgid ""
"\n"
@@ -583,14 +583,14 @@ msgid ""
"\n"
msgstr ""
-#: gcc.c:8277
+#: gcc.c:8323
#, c-format
msgid ""
"Use \"-Wl,OPTION\" to pass \"OPTION\" to the linker.\n"
"\n"
msgstr ""
-#: gcc.c:9580
+#: gcc.c:9627
#, c-format
msgid ""
"Assembler options\n"
@@ -598,7 +598,7 @@ msgid ""
"\n"
msgstr ""
-#: gcc.c:9581
+#: gcc.c:9628
#, c-format
msgid ""
"Use \"-Wa,OPTION\" to pass \"OPTION\" to the assembler.\n"
@@ -730,7 +730,7 @@ msgid ""
" -v, --version Print version number, then exit\n"
msgstr ""
-#: gcov-tool.c:518 gcov.c:706
+#: gcov-tool.c:518 gcov.c:718
#, c-format
msgid ""
"\n"
@@ -743,7 +743,7 @@ msgstr ""
msgid "Copyright %s 2014-2017 Free Software Foundation, Inc.\n"
msgstr ""
-#: gcov-tool.c:532 gcov.c:720
+#: gcov-tool.c:532 gcov.c:732
#, c-format
msgid ""
"This is free software; see the source for copying conditions.\n"
@@ -752,327 +752,327 @@ msgid ""
"\n"
msgstr ""
-#: gcov.c:684
+#: gcov.c:696
#, c-format
msgid ""
"Usage: gcov [OPTION...] SOURCE|OBJ...\n"
"\n"
msgstr ""
-#: gcov.c:685
+#: gcov.c:697
#, c-format
msgid ""
"Print code coverage information.\n"
"\n"
msgstr ""
-#: gcov.c:686
+#: gcov.c:698
#, c-format
msgid ""
" -a, --all-blocks Show information for every basic block\n"
msgstr ""
-#: gcov.c:687
+#: gcov.c:699
#, c-format
msgid ""
" -b, --branch-probabilities Include branch probabilities in output\n"
msgstr ""
-#: gcov.c:688
+#: gcov.c:700
#, c-format
msgid ""
" -c, --branch-counts Output counts of branches taken\n"
" rather than percentages\n"
msgstr ""
-#: gcov.c:690
+#: gcov.c:702
#, c-format
msgid " -d, --display-progress Display progress information\n"
msgstr ""
-#: gcov.c:691
+#: gcov.c:703
#, c-format
msgid " -f, --function-summaries Output summaries for each function\n"
msgstr ""
-#: gcov.c:692
+#: gcov.c:704
#, c-format
msgid " -h, --help Print this help, then exit\n"
msgstr ""
-#: gcov.c:693
+#: gcov.c:705
#, c-format
msgid ""
" -i, --intermediate-format Output .gcov file in intermediate text "
"format\n"
msgstr ""
-#: gcov.c:694
+#: gcov.c:706
#, c-format
msgid ""
" -l, --long-file-names Use long output file names for included\n"
" source files\n"
msgstr ""
-#: gcov.c:696
+#: gcov.c:708
#, c-format
msgid " -m, --demangled-names Output demangled function names\n"
msgstr ""
-#: gcov.c:697
+#: gcov.c:709
#, c-format
msgid " -n, --no-output Do not create an output file\n"
msgstr ""
-#: gcov.c:698
+#: gcov.c:710
#, c-format
msgid ""
" -o, --object-directory DIR|FILE Search for object files in DIR or called "
"FILE\n"
msgstr ""
-#: gcov.c:699
+#: gcov.c:711
#, c-format
msgid " -p, --preserve-paths Preserve all pathname components\n"
msgstr ""
-#: gcov.c:700
+#: gcov.c:712
#, c-format
msgid " -r, --relative-only Only show data for relative sources\n"
msgstr ""
-#: gcov.c:701
+#: gcov.c:713
#, c-format
msgid " -s, --source-prefix DIR Source prefix to elide\n"
msgstr ""
-#: gcov.c:702
+#: gcov.c:714
#, c-format
msgid ""
" -u, --unconditional-branches Show unconditional branch counts too\n"
msgstr ""
-#: gcov.c:703
+#: gcov.c:715
#, c-format
msgid " -v, --version Print version number, then exit\n"
msgstr ""
-#: gcov.c:704
+#: gcov.c:716
#, c-format
msgid " -w, --verbose Print verbose informations\n"
msgstr ""
-#: gcov.c:705
+#: gcov.c:717
#, c-format
msgid " -x, --hash-filenames Hash long pathnames\n"
msgstr ""
-#: gcov.c:716
+#: gcov.c:728
#, c-format
msgid "gcov %s%s\n"
msgstr ""
-#: gcov.c:987
+#: gcov.c:999
#, c-format
msgid "Creating '%s'\n"
msgstr ""
-#: gcov.c:994
+#: gcov.c:1006
#, c-format
msgid "Error writing output file '%s'\n"
msgstr ""
-#: gcov.c:998
+#: gcov.c:1010
#, c-format
msgid "Could not open output file '%s'\n"
msgstr ""
-#: gcov.c:1003
+#: gcov.c:1015
#, c-format
msgid "Removing '%s'\n"
msgstr ""
-#: gcov.c:1029 gcov.c:1066 gcov.c:2407
+#: gcov.c:1041 gcov.c:1078 gcov.c:2419
#, c-format
msgid "\n"
msgstr ""
-#: gcov.c:1283
+#: gcov.c:1295
#, c-format
msgid "%s:source file is newer than notes file '%s'\n"
msgstr ""
-#: gcov.c:1288
+#: gcov.c:1300
#, c-format
msgid "(the message is displayed only once per source file)\n"
msgstr ""
-#: gcov.c:1311
+#: gcov.c:1323
#, c-format
msgid "%s:cannot open notes file\n"
msgstr ""
-#: gcov.c:1317
+#: gcov.c:1329
#, c-format
msgid "%s:not a gcov notes file\n"
msgstr ""
-#: gcov.c:1330
+#: gcov.c:1342
#, c-format
msgid "%s:version '%.4s', prefer '%.4s'\n"
msgstr ""
-#: gcov.c:1376
+#: gcov.c:1388
#, c-format
msgid "%s:already seen blocks for '%s'\n"
msgstr ""
-#: gcov.c:1490 gcov.c:1613
+#: gcov.c:1502 gcov.c:1625
#, c-format
msgid "%s:corrupted\n"
msgstr ""
-#: gcov.c:1497
+#: gcov.c:1509
#, c-format
msgid "%s:no functions found\n"
msgstr ""
-#: gcov.c:1516
+#: gcov.c:1528
#, c-format
msgid "%s:cannot open data file, assuming not executed\n"
msgstr ""
-#: gcov.c:1523
+#: gcov.c:1535
#, c-format
msgid "%s:not a gcov data file\n"
msgstr ""
-#: gcov.c:1536
+#: gcov.c:1548
#, c-format
msgid "%s:version '%.4s', prefer version '%.4s'\n"
msgstr ""
-#: gcov.c:1542
+#: gcov.c:1554
#, c-format
msgid "%s:stamp mismatch with notes file\n"
msgstr ""
-#: gcov.c:1577
+#: gcov.c:1589
#, c-format
msgid "%s:unknown function '%u'\n"
msgstr ""
-#: gcov.c:1591
+#: gcov.c:1603
#, c-format
msgid "%s:profile mismatch for '%s'\n"
msgstr ""
-#: gcov.c:1612
+#: gcov.c:1624
#, c-format
msgid "%s:overflowed\n"
msgstr ""
-#: gcov.c:1659
+#: gcov.c:1671
#, c-format
msgid "%s:'%s' lacks entry and/or exit blocks\n"
msgstr ""
-#: gcov.c:1664
+#: gcov.c:1676
#, c-format
msgid "%s:'%s' has arcs to entry block\n"
msgstr ""
-#: gcov.c:1672
+#: gcov.c:1684
#, c-format
msgid "%s:'%s' has arcs from exit block\n"
msgstr ""
-#: gcov.c:1881
+#: gcov.c:1893
#, c-format
msgid "%s:graph is unsolvable for '%s'\n"
msgstr ""
-#: gcov.c:1996
+#: gcov.c:2008
#, c-format
msgid "Lines executed:%s of %d\n"
msgstr ""
-#: gcov.c:1999
+#: gcov.c:2011
#, c-format
msgid "No executable lines\n"
msgstr ""
-#: gcov.c:2007
+#: gcov.c:2019
#, c-format
msgid "%s '%s'\n"
msgstr ""
-#: gcov.c:2014
+#: gcov.c:2026
#, c-format
msgid "Branches executed:%s of %d\n"
msgstr ""
-#: gcov.c:2018
+#: gcov.c:2030
#, c-format
msgid "Taken at least once:%s of %d\n"
msgstr ""
-#: gcov.c:2024
+#: gcov.c:2036
#, c-format
msgid "No branches\n"
msgstr ""
-#: gcov.c:2026
+#: gcov.c:2038
#, c-format
msgid "Calls executed:%s of %d\n"
msgstr ""
-#: gcov.c:2030
+#: gcov.c:2042
#, c-format
msgid "No calls\n"
msgstr ""
-#: gcov.c:2300
+#: gcov.c:2312
#, c-format
msgid "%s:no lines for '%s'\n"
msgstr ""
-#: gcov.c:2387
+#: gcov.c:2399
#, c-format
msgid "call %2d returned %s\n"
msgstr ""
-#: gcov.c:2392
+#: gcov.c:2404
#, c-format
msgid "call %2d never executed\n"
msgstr ""
-#: gcov.c:2397
+#: gcov.c:2409
#, c-format
msgid "branch %2d taken %s%s"
msgstr ""
-#: gcov.c:2402
+#: gcov.c:2414
#, c-format
msgid "branch %2d never executed"
msgstr ""
-#: gcov.c:2405
+#: gcov.c:2417
#, c-format
msgid " (BB %d)"
msgstr ""
-#: gcov.c:2412
+#: gcov.c:2424
#, c-format
msgid "unconditional %2d taken %s\n"
msgstr ""
-#: gcov.c:2415
+#: gcov.c:2427
#, c-format
msgid "unconditional %2d never executed\n"
msgstr ""
-#: gcov.c:2485
+#: gcov.c:2497
#, c-format
msgid "Cannot open source file %s\n"
msgstr ""
@@ -1085,12 +1085,12 @@ msgstr ""
msgid "GCSE disabled"
msgstr ""
-#: gimple-ssa-isolate-paths.c:524 c/c-typeck.c:10006
+#: gimple-ssa-isolate-paths.c:539 c/c-typeck.c:10015
#, gcc-internal-format
msgid "function returns address of local variable"
msgstr ""
-#: gimple-ssa-isolate-paths.c:526 gimple-ssa-isolate-paths.c:410
+#: gimple-ssa-isolate-paths.c:541 gimple-ssa-isolate-paths.c:423
#, gcc-internal-format
msgid "function may return address of local variable"
msgstr ""
@@ -1110,17 +1110,17 @@ msgstr ""
msgid "ignoring nonexistent directory \"%s\"\n"
msgstr ""
-#: incpath.c:374
+#: incpath.c:381
#, c-format
msgid "#include \"...\" search starts here:\n"
msgstr ""
-#: incpath.c:378
+#: incpath.c:385
#, c-format
msgid "#include <...> search starts here:\n"
msgstr ""
-#: incpath.c:383
+#: incpath.c:390
#, c-format
msgid "End of search list.\n"
msgstr ""
@@ -1135,34 +1135,34 @@ msgstr ""
msgid "'"
msgstr ""
-#: langhooks.c:366
+#: langhooks.c:372
msgid "At top level:"
msgstr ""
-#: langhooks.c:386 cp/error.c:3376
+#: langhooks.c:392 cp/error.c:3410
#, c-format
msgid "In member function %qs"
msgstr ""
-#: langhooks.c:390 cp/error.c:3379
+#: langhooks.c:396 cp/error.c:3413
#, c-format
msgid "In function %qs"
msgstr ""
-#: langhooks.c:441 cp/error.c:3329
+#: langhooks.c:447 cp/error.c:3363
msgid " inlined from %qs at %r%s:%d:%d%R"
msgstr ""
-#: langhooks.c:446 cp/error.c:3334
+#: langhooks.c:452 cp/error.c:3368
msgid " inlined from %qs at %r%s:%d%R"
msgstr ""
-#: langhooks.c:452 cp/error.c:3340
+#: langhooks.c:458 cp/error.c:3374
#, c-format
msgid " inlined from %qs"
msgstr ""
-#: lra-assigns.c:1476 reload1.c:2078
+#: lra-assigns.c:1475 reload1.c:2078
msgid "this is the insn:"
msgstr ""
@@ -1179,104 +1179,114 @@ msgstr ""
msgid "Uses of this option are diagnosed."
msgstr ""
-#: opts.c:1096
+#: opts.c:1101
#, c-format
msgid "default %d minimum %d maximum %d"
msgstr ""
-#: opts.c:1163
+#: opts.c:1168
#, c-format
msgid "Same as %s. Use the latter option instead."
msgstr ""
-#: opts.c:1171
+#: opts.c:1176
#, c-format
msgid "%s Same as %s."
msgstr ""
-#: opts.c:1242
+#: opts.c:1247
msgid "[default]"
msgstr ""
-#: opts.c:1253
+#: opts.c:1258
msgid "[enabled]"
msgstr ""
-#: opts.c:1253
+#: opts.c:1258
msgid "[disabled]"
msgstr ""
-#: opts.c:1272
+#: opts.c:1286
#, c-format
msgid " No options with the desired characteristics were found\n"
msgstr ""
-#: opts.c:1281
+#: opts.c:1295
#, c-format
msgid ""
" None found. Use --help=%s to show *all* the options supported by the %s "
"front-end.\n"
msgstr ""
-#: opts.c:1287
+#: opts.c:1301
#, c-format
msgid ""
" All options with the desired characteristics have already been displayed\n"
msgstr ""
-#: opts.c:1372
+#: opts.c:1386
msgid "The following options are target specific"
msgstr ""
-#: opts.c:1375
+#: opts.c:1389
msgid "The following options control compiler warning messages"
msgstr ""
-#: opts.c:1378
+#: opts.c:1392
msgid "The following options control optimizations"
msgstr ""
-#: opts.c:1381 opts.c:1420
+#: opts.c:1395 opts.c:1434
msgid "The following options are language-independent"
msgstr ""
-#: opts.c:1384
+#: opts.c:1398
msgid "The --param option recognizes the following as parameters"
msgstr ""
-#: opts.c:1390
+#: opts.c:1404
msgid "The following options are specific to just the language "
msgstr ""
-#: opts.c:1392
+#: opts.c:1406
msgid "The following options are supported by the language "
msgstr ""
-#: opts.c:1403
+#: opts.c:1417
msgid "The following options are not documented"
msgstr ""
-#: opts.c:1405
+#: opts.c:1419
msgid "The following options take separate arguments"
msgstr ""
-#: opts.c:1407
+#: opts.c:1421
msgid "The following options take joined arguments"
msgstr ""
-#: opts.c:1418
+#: opts.c:1432
msgid "The following options are language-related"
msgstr ""
-#: plugin.c:818
+#: passes.c:1793
+#, c-format
+msgid "during %s pass: %s\n"
+msgstr ""
+
+#: passes.c:1798
+#, c-format
+msgid "dump file: %s\n"
+msgstr ""
+
+#: plugin.c:821
msgid "Event"
msgstr ""
-#: plugin.c:818
+#: plugin.c:821
msgid "Plugins"
msgstr ""
-#: plugin.c:850
+#: plugin.c:853
#, c-format
msgid ""
"*** WARNING *** there are active plugins, do not report this as a bug unless "
@@ -1284,16 +1294,16 @@ msgid ""
msgstr ""
#. It's the compiler's fault.
-#: reload1.c:6082
+#: reload1.c:6084
msgid "could not find a spill register"
msgstr ""
#. It's the compiler's fault.
-#: reload1.c:7978
+#: reload1.c:7980
msgid "VOIDmode on an output"
msgstr ""
-#: reload1.c:8738
+#: reload1.c:8740
msgid "failure trying to reload:"
msgstr ""
@@ -1305,16 +1315,16 @@ msgstr ""
msgid "insn does not satisfy its constraints:"
msgstr ""
-#: targhooks.c:1785
+#: targhooks.c:1832
#, c-format
msgid "created and used with differing settings of '%s'"
msgstr ""
-#: targhooks.c:1800
+#: targhooks.c:1847
msgid "created and used with different settings of -fpic"
msgstr ""
-#: targhooks.c:1802
+#: targhooks.c:1849
msgid "created and used with different settings of -fpie"
msgstr ""
@@ -1338,48 +1348,48 @@ msgstr ""
msgid "collect: relinking\n"
msgstr ""
-#: toplev.c:333
+#: toplev.c:335
#, c-format
msgid "unrecoverable error"
msgstr ""
-#: toplev.c:642
+#: toplev.c:644
#, c-format
msgid ""
"%s%s%s %sversion %s (%s)\n"
"%s\tcompiled by GNU C version %s, "
msgstr ""
-#: toplev.c:644
+#: toplev.c:646
#, c-format
msgid "%s%s%s %sversion %s (%s) compiled by CC, "
msgstr ""
-#: toplev.c:648
+#: toplev.c:650
#, c-format
msgid "GMP version %s, MPFR version %s, MPC version %s, isl version %s\n"
msgstr ""
-#: toplev.c:650
+#: toplev.c:652
#, c-format
msgid "%s%swarning: %s header version %s differs from library version %s.\n"
msgstr ""
-#: toplev.c:652
+#: toplev.c:654
#, c-format
msgid ""
"%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"
msgstr ""
-#: toplev.c:824
+#: toplev.c:826
msgid "options passed: "
msgstr ""
-#: toplev.c:852
+#: toplev.c:854
msgid "options enabled: "
msgstr ""
-#: tree-diagnostic.c:293 c/c-decl.c:5373 c/c-typeck.c:7003 cp/error.c:996
+#: tree-diagnostic.c:293 c/c-decl.c:5353 c/c-typeck.c:7008 cp/error.c:1042
#: c-family/c-pretty-print.c:411
#, gcc-internal-format
msgid "<anonymous>"
@@ -2570,473 +2580,479 @@ msgstr ""
#: params.def:1147
#, no-c-format
-msgid "Enable asan globals protection."
+msgid "Enable asan allocas/VLAs protection."
msgstr ""
#: params.def:1152
#, no-c-format
-msgid "Enable asan store operations protection."
+msgid "Enable asan globals protection."
msgstr ""
#: params.def:1157
#, no-c-format
-msgid "Enable asan load operations protection."
+msgid "Enable asan store operations protection."
msgstr ""
#: params.def:1162
#, no-c-format
-msgid "Enable asan builtin functions protection."
+msgid "Enable asan load operations protection."
msgstr ""
#: params.def:1167
#, no-c-format
-msgid "Enable asan detection of use-after-return bugs."
+msgid "Enable asan builtin functions protection."
msgstr ""
#: params.def:1172
#, no-c-format
+msgid "Enable asan detection of use-after-return bugs."
+msgstr ""
+
+#: params.def:1177
+#, no-c-format
msgid ""
"Use callbacks instead of inline code if number of accesses in function "
"becomes greater or equal to this number."
msgstr ""
-#: params.def:1178
+#: params.def:1183
#, no-c-format
msgid ""
"Use direct poisoning/unpoisoning instructions for variables smaller or equal "
"to this number."
msgstr ""
-#: params.def:1184
+#: params.def:1189
#, no-c-format
msgid ""
"Maximum number of nested calls to search for control dependencies during "
"uninitialized variable analysis."
msgstr ""
-#: params.def:1190
+#: params.def:1195
#, no-c-format
msgid ""
"Maximum number of statements to be included into a single static constructor "
"generated by Pointer Bounds Checker."
msgstr ""
-#: params.def:1196
+#: params.def:1201
#, no-c-format
msgid ""
"Scale factor to apply to the number of statements in a threading path when "
"comparing to the number of (scaled) blocks."
msgstr ""
-#: params.def:1201
+#: params.def:1206
#, no-c-format
msgid ""
"Maximum number of arguments a PHI may have before the FSM threader will not "
"try to thread through its block."
msgstr ""
-#: params.def:1206
+#: params.def:1211
#, no-c-format
msgid ""
"Scale factor to apply to the number of blocks in a threading path when "
"comparing to the number of (scaled) statements."
msgstr ""
-#: params.def:1211
+#: params.def:1216
#, no-c-format
msgid ""
"Maximum number of instructions to copy when duplicating blocks on a finite "
"state automaton jump thread path."
msgstr ""
-#: params.def:1216
+#: params.def:1221
#, no-c-format
msgid ""
"Maximum number of basic blocks on a finite state automaton jump thread path."
msgstr ""
-#: params.def:1221
+#: params.def:1226
#, no-c-format
msgid ""
"Maximum number of new jump thread paths to create for a finite state "
"automaton."
msgstr ""
-#: params.def:1226
+#: params.def:1231
#, no-c-format
msgid "Chunk size of omp schedule for loops parallelized by parloops."
msgstr ""
-#: params.def:1231
+#: params.def:1236
#, no-c-format
msgid ""
"Schedule type of omp schedule for loops parallelized by parloops (static, "
"dynamic, guided, auto, runtime)."
msgstr ""
-#: params.def:1238
+#: params.def:1243
#, no-c-format
msgid ""
"Maximum recursion depth allowed when querying a property of an SSA name."
msgstr ""
-#: params.def:1244
+#: params.def:1249
#, no-c-format
msgid ""
"Maximum number of insns in a basic block to consider for RTL if-conversion."
msgstr ""
-#: params.def:1250
+#: params.def:1255
#, no-c-format
msgid ""
"Maximum permissible cost for the sequence that would be generated by the RTL "
"if-conversion pass for a branch that is considered predictable."
msgstr ""
-#: params.def:1257
+#: params.def:1262
#, no-c-format
msgid ""
"Maximum permissible cost for the sequence that would be generated by the RTL "
"if-conversion pass for a branch that is considered unpredictable."
msgstr ""
-#: params.def:1264
+#: params.def:1269
#, no-c-format
msgid "Level of hsa debug stores verbosity"
msgstr ""
-#: params.def:1269
+#: params.def:1274
#, no-c-format
msgid "Maximum number of may-defs visited when devirtualizing speculatively"
msgstr ""
-#: params.def:1274
+#: params.def:1279
#, no-c-format
msgid ""
"Maximum number of assertions to add along the default edge of a switch "
"statement during VRP"
msgstr ""
-#: params.def:1280
+#: params.def:1285
#, no-c-format
msgid "Enable loop epilogue vectorization using smaller vector size."
msgstr ""
-#: c-family/c-format.c:376
+#: c-family/c-format.c:380
msgid "format"
msgstr ""
-#: c-family/c-format.c:377
+#: c-family/c-format.c:381
msgid "field width specifier"
msgstr ""
-#: c-family/c-format.c:378
+#: c-family/c-format.c:382
msgid "field precision specifier"
msgstr ""
-#: c-family/c-format.c:495 c-family/c-format.c:519 config/i386/msformat-c.c:42
+#: c-family/c-format.c:499 c-family/c-format.c:523 config/i386/msformat-c.c:42
msgid "' ' flag"
msgstr ""
-#: c-family/c-format.c:495 c-family/c-format.c:519 config/i386/msformat-c.c:42
+#: c-family/c-format.c:499 c-family/c-format.c:523 config/i386/msformat-c.c:42
msgid "the ' ' printf flag"
msgstr ""
-#: c-family/c-format.c:496 c-family/c-format.c:520 c-family/c-format.c:550
-#: c-family/c-format.c:614 config/i386/msformat-c.c:43
+#: c-family/c-format.c:500 c-family/c-format.c:524 c-family/c-format.c:554
+#: c-family/c-format.c:618 config/i386/msformat-c.c:43
msgid "'+' flag"
msgstr ""
-#: c-family/c-format.c:496 c-family/c-format.c:520 c-family/c-format.c:550
+#: c-family/c-format.c:500 c-family/c-format.c:524 c-family/c-format.c:554
#: config/i386/msformat-c.c:43
msgid "the '+' printf flag"
msgstr ""
-#: c-family/c-format.c:497 c-family/c-format.c:521 c-family/c-format.c:551
-#: c-family/c-format.c:590 config/i386/msformat-c.c:44
+#: c-family/c-format.c:501 c-family/c-format.c:525 c-family/c-format.c:555
+#: c-family/c-format.c:594 config/i386/msformat-c.c:44
#: config/i386/msformat-c.c:79
msgid "'#' flag"
msgstr ""
-#: c-family/c-format.c:497 c-family/c-format.c:521 c-family/c-format.c:551
+#: c-family/c-format.c:501 c-family/c-format.c:525 c-family/c-format.c:555
#: config/i386/msformat-c.c:44
msgid "the '#' printf flag"
msgstr ""
-#: c-family/c-format.c:498 c-family/c-format.c:522 c-family/c-format.c:588
+#: c-family/c-format.c:502 c-family/c-format.c:526 c-family/c-format.c:592
#: config/i386/msformat-c.c:45
msgid "'0' flag"
msgstr ""
-#: c-family/c-format.c:498 c-family/c-format.c:522 config/i386/msformat-c.c:45
+#: c-family/c-format.c:502 c-family/c-format.c:526 config/i386/msformat-c.c:45
msgid "the '0' printf flag"
msgstr ""
-#: c-family/c-format.c:499 c-family/c-format.c:523 c-family/c-format.c:587
-#: c-family/c-format.c:617 config/i386/msformat-c.c:46
+#: c-family/c-format.c:503 c-family/c-format.c:527 c-family/c-format.c:591
+#: c-family/c-format.c:621 config/i386/msformat-c.c:46
msgid "'-' flag"
msgstr ""
-#: c-family/c-format.c:499 c-family/c-format.c:523 config/i386/msformat-c.c:46
+#: c-family/c-format.c:503 c-family/c-format.c:527 config/i386/msformat-c.c:46
msgid "the '-' printf flag"
msgstr ""
-#: c-family/c-format.c:500 c-family/c-format.c:570 config/i386/msformat-c.c:47
+#: c-family/c-format.c:504 c-family/c-format.c:574 config/i386/msformat-c.c:47
#: config/i386/msformat-c.c:67
msgid "''' flag"
msgstr ""
-#: c-family/c-format.c:500 config/i386/msformat-c.c:47
+#: c-family/c-format.c:504 config/i386/msformat-c.c:47
msgid "the ''' printf flag"
msgstr ""
-#: c-family/c-format.c:501 c-family/c-format.c:571
+#: c-family/c-format.c:505 c-family/c-format.c:575
msgid "'I' flag"
msgstr ""
-#: c-family/c-format.c:501
+#: c-family/c-format.c:505
msgid "the 'I' printf flag"
msgstr ""
-#: c-family/c-format.c:502 c-family/c-format.c:524 c-family/c-format.c:568
-#: c-family/c-format.c:591 c-family/c-format.c:618 config/sol2-c.c:43
+#: c-family/c-format.c:506 c-family/c-format.c:528 c-family/c-format.c:572
+#: c-family/c-format.c:595 c-family/c-format.c:622 config/sol2-c.c:43
#: config/i386/msformat-c.c:48 config/i386/msformat-c.c:65
msgid "field width"
msgstr ""
-#: c-family/c-format.c:502 c-family/c-format.c:524 config/sol2-c.c:43
+#: c-family/c-format.c:506 c-family/c-format.c:528 config/sol2-c.c:43
#: config/i386/msformat-c.c:48
msgid "field width in printf format"
msgstr ""
-#: c-family/c-format.c:503 c-family/c-format.c:525 c-family/c-format.c:553
+#: c-family/c-format.c:507 c-family/c-format.c:529 c-family/c-format.c:557
#: config/i386/msformat-c.c:49
msgid "precision"
msgstr ""
-#: c-family/c-format.c:503 c-family/c-format.c:525 c-family/c-format.c:553
+#: c-family/c-format.c:507 c-family/c-format.c:529 c-family/c-format.c:557
#: config/i386/msformat-c.c:49
msgid "precision in printf format"
msgstr ""
-#: c-family/c-format.c:504 c-family/c-format.c:526 c-family/c-format.c:554
-#: c-family/c-format.c:569 c-family/c-format.c:621 config/sol2-c.c:44
+#: c-family/c-format.c:508 c-family/c-format.c:530 c-family/c-format.c:558
+#: c-family/c-format.c:573 c-family/c-format.c:625 config/sol2-c.c:44
#: config/i386/msformat-c.c:50 config/i386/msformat-c.c:66
msgid "length modifier"
msgstr ""
-#: c-family/c-format.c:504 c-family/c-format.c:526 c-family/c-format.c:554
+#: c-family/c-format.c:508 c-family/c-format.c:530 c-family/c-format.c:558
#: config/sol2-c.c:44 config/i386/msformat-c.c:50
msgid "length modifier in printf format"
msgstr ""
-#: c-family/c-format.c:552
+#: c-family/c-format.c:556
msgid "'q' flag"
msgstr ""
-#: c-family/c-format.c:552
+#: c-family/c-format.c:556
msgid "the 'q' diagnostic flag"
msgstr ""
-#: c-family/c-format.c:565 config/i386/msformat-c.c:63
+#: c-family/c-format.c:569 config/i386/msformat-c.c:63
msgid "assignment suppression"
msgstr ""
-#: c-family/c-format.c:565 config/i386/msformat-c.c:63
+#: c-family/c-format.c:569 config/i386/msformat-c.c:63
msgid "the assignment suppression scanf feature"
msgstr ""
-#: c-family/c-format.c:566 config/i386/msformat-c.c:64
+#: c-family/c-format.c:570 config/i386/msformat-c.c:64
msgid "'a' flag"
msgstr ""
-#: c-family/c-format.c:566 config/i386/msformat-c.c:64
+#: c-family/c-format.c:570 config/i386/msformat-c.c:64
msgid "the 'a' scanf flag"
msgstr ""
-#: c-family/c-format.c:567
+#: c-family/c-format.c:571
msgid "'m' flag"
msgstr ""
-#: c-family/c-format.c:567
+#: c-family/c-format.c:571
msgid "the 'm' scanf flag"
msgstr ""
-#: c-family/c-format.c:568 config/i386/msformat-c.c:65
+#: c-family/c-format.c:572 config/i386/msformat-c.c:65
msgid "field width in scanf format"
msgstr ""
-#: c-family/c-format.c:569 config/i386/msformat-c.c:66
+#: c-family/c-format.c:573 config/i386/msformat-c.c:66
msgid "length modifier in scanf format"
msgstr ""
-#: c-family/c-format.c:570 config/i386/msformat-c.c:67
+#: c-family/c-format.c:574 config/i386/msformat-c.c:67
msgid "the ''' scanf flag"
msgstr ""
-#: c-family/c-format.c:571
+#: c-family/c-format.c:575
msgid "the 'I' scanf flag"
msgstr ""
-#: c-family/c-format.c:586
+#: c-family/c-format.c:590
msgid "'_' flag"
msgstr ""
-#: c-family/c-format.c:586
+#: c-family/c-format.c:590
msgid "the '_' strftime flag"
msgstr ""
-#: c-family/c-format.c:587
+#: c-family/c-format.c:591
msgid "the '-' strftime flag"
msgstr ""
-#: c-family/c-format.c:588
+#: c-family/c-format.c:592
msgid "the '0' strftime flag"
msgstr ""
-#: c-family/c-format.c:589 c-family/c-format.c:613
+#: c-family/c-format.c:593 c-family/c-format.c:617
msgid "'^' flag"
msgstr ""
-#: c-family/c-format.c:589
+#: c-family/c-format.c:593
msgid "the '^' strftime flag"
msgstr ""
-#: c-family/c-format.c:590 config/i386/msformat-c.c:79
+#: c-family/c-format.c:594 config/i386/msformat-c.c:79
msgid "the '#' strftime flag"
msgstr ""
-#: c-family/c-format.c:591
+#: c-family/c-format.c:595
msgid "field width in strftime format"
msgstr ""
-#: c-family/c-format.c:592
+#: c-family/c-format.c:596
msgid "'E' modifier"
msgstr ""
-#: c-family/c-format.c:592
+#: c-family/c-format.c:596
msgid "the 'E' strftime modifier"
msgstr ""
-#: c-family/c-format.c:593
+#: c-family/c-format.c:597
msgid "'O' modifier"
msgstr ""
-#: c-family/c-format.c:593
+#: c-family/c-format.c:597
msgid "the 'O' strftime modifier"
msgstr ""
-#: c-family/c-format.c:594
+#: c-family/c-format.c:598
msgid "the 'O' modifier"
msgstr ""
-#: c-family/c-format.c:612
+#: c-family/c-format.c:616
msgid "fill character"
msgstr ""
-#: c-family/c-format.c:612
+#: c-family/c-format.c:616
msgid "fill character in strfmon format"
msgstr ""
-#: c-family/c-format.c:613
+#: c-family/c-format.c:617
msgid "the '^' strfmon flag"
msgstr ""
-#: c-family/c-format.c:614
+#: c-family/c-format.c:618
msgid "the '+' strfmon flag"
msgstr ""
-#: c-family/c-format.c:615
+#: c-family/c-format.c:619
msgid "'(' flag"
msgstr ""
-#: c-family/c-format.c:615
+#: c-family/c-format.c:619
msgid "the '(' strfmon flag"
msgstr ""
-#: c-family/c-format.c:616
+#: c-family/c-format.c:620
msgid "'!' flag"
msgstr ""
-#: c-family/c-format.c:616
+#: c-family/c-format.c:620
msgid "the '!' strfmon flag"
msgstr ""
-#: c-family/c-format.c:617
+#: c-family/c-format.c:621
msgid "the '-' strfmon flag"
msgstr ""
-#: c-family/c-format.c:618
+#: c-family/c-format.c:622
msgid "field width in strfmon format"
msgstr ""
-#: c-family/c-format.c:619
+#: c-family/c-format.c:623
msgid "left precision"
msgstr ""
-#: c-family/c-format.c:619
+#: c-family/c-format.c:623
msgid "left precision in strfmon format"
msgstr ""
-#: c-family/c-format.c:620
+#: c-family/c-format.c:624
msgid "right precision"
msgstr ""
-#: c-family/c-format.c:620
+#: c-family/c-format.c:624
msgid "right precision in strfmon format"
msgstr ""
-#: c-family/c-format.c:621
+#: c-family/c-format.c:625
msgid "length modifier in strfmon format"
msgstr ""
#. Handle deferred options from command-line.
-#: c-family/c-opts.c:1383 fortran/cpp.c:590
+#: c-family/c-opts.c:1371 fortran/cpp.c:590
msgid "<command-line>"
msgstr ""
-#: config/aarch64/aarch64.c:4927 config/arm/arm.c:21832 config/arm/arm.c:21845
-#: config/arm/arm.c:21870 config/nios2/nios2.c:2653
+#: config/aarch64/aarch64.c:5206 config/arm/arm.c:21899 config/arm/arm.c:21912
+#: config/arm/arm.c:21937 config/nios2/nios2.c:2653
#, c-format
msgid "Unsupported operand for code '%c'"
msgstr ""
-#: config/aarch64/aarch64.c:4939 config/aarch64/aarch64.c:4955
-#: config/aarch64/aarch64.c:4968 config/aarch64/aarch64.c:4980
-#: config/aarch64/aarch64.c:4991 config/aarch64/aarch64.c:5014
-#: config/aarch64/aarch64.c:5067 config/aarch64/aarch64.c:5270
+#: config/aarch64/aarch64.c:5217 config/aarch64/aarch64.c:5233
+#: config/aarch64/aarch64.c:5245 config/aarch64/aarch64.c:5256
+#: config/aarch64/aarch64.c:5266 config/aarch64/aarch64.c:5287
+#: config/aarch64/aarch64.c:5336 config/aarch64/aarch64.c:5535
#, c-format
msgid "invalid operand for '%%%c'"
msgstr ""
-#: config/aarch64/aarch64.c:5034 config/aarch64/aarch64.c:5047
-#: config/aarch64/aarch64.c:5057
+#: config/aarch64/aarch64.c:5306 config/aarch64/aarch64.c:5318
+#: config/aarch64/aarch64.c:5327
#, c-format
msgid "incompatible floating point / vector register operand for '%%%c'"
msgstr ""
-#: config/aarch64/aarch64.c:5103 config/arm/arm.c:22377
+#: config/aarch64/aarch64.c:5368 config/arm/arm.c:22444
#, c-format
msgid "missing operand"
msgstr ""
-#: config/aarch64/aarch64.c:5165
+#: config/aarch64/aarch64.c:5432
#, c-format
msgid "invalid constant"
msgstr ""
-#: config/aarch64/aarch64.c:5168
+#: config/aarch64/aarch64.c:5435
#, c-format
msgid "invalid operand"
msgstr ""
-#: config/aarch64/aarch64.c:5281
+#: config/aarch64/aarch64.c:5546
#, c-format
msgid "invalid operand prefix '%%%c'"
msgstr ""
-#: config/alpha/alpha.c:5092 config/i386/i386.c:18406
-#: config/rs6000/rs6000.c:23938 config/sparc/sparc.c:8854
+#: config/alpha/alpha.c:5092 config/i386/i386.c:19120
+#: config/powerpcspe/powerpcspe.c:24217 config/rs6000/rs6000.c:21601
+#: config/sparc/sparc.c:8997
#, c-format
msgid "'%%&' used without any local dynamic TLS references"
msgstr ""
@@ -3052,18 +3068,20 @@ msgid "invalid %%r value"
msgstr ""
#: config/alpha/alpha.c:5190 config/ia64/ia64.c:5442
-#: config/rs6000/rs6000.c:23618 config/xtensa/xtensa.c:2363
+#: config/powerpcspe/powerpcspe.c:23897 config/rs6000/rs6000.c:21309
+#: config/xtensa/xtensa.c:2371
#, c-format
msgid "invalid %%R value"
msgstr ""
-#: config/alpha/alpha.c:5196 config/rs6000/rs6000.c:23538
-#: config/xtensa/xtensa.c:2330
+#: config/alpha/alpha.c:5196 config/powerpcspe/powerpcspe.c:23817
+#: config/rs6000/rs6000.c:21229 config/xtensa/xtensa.c:2338
#, c-format
msgid "invalid %%N value"
msgstr ""
-#: config/alpha/alpha.c:5204 config/rs6000/rs6000.c:23566
+#: config/alpha/alpha.c:5204 config/powerpcspe/powerpcspe.c:23845
+#: config/rs6000/rs6000.c:21257
#, c-format
msgid "invalid %%P value"
msgstr ""
@@ -3073,7 +3091,7 @@ msgstr ""
msgid "invalid %%h value"
msgstr ""
-#: config/alpha/alpha.c:5220 config/xtensa/xtensa.c:2356
+#: config/alpha/alpha.c:5220 config/xtensa/xtensa.c:2364
#, c-format
msgid "invalid %%L value"
msgstr ""
@@ -3094,7 +3112,7 @@ msgid "invalid %%U value"
msgstr ""
#: config/alpha/alpha.c:5290 config/alpha/alpha.c:5301
-#: config/rs6000/rs6000.c:23626
+#: config/powerpcspe/powerpcspe.c:23905 config/rs6000/rs6000.c:21317
#, c-format
msgid "invalid %%s value"
msgstr ""
@@ -3104,7 +3122,8 @@ msgstr ""
msgid "invalid %%C value"
msgstr ""
-#: config/alpha/alpha.c:5349 config/rs6000/rs6000.c:23402
+#: config/alpha/alpha.c:5349 config/powerpcspe/powerpcspe.c:23681
+#: config/rs6000/rs6000.c:21093
#, c-format
msgid "invalid %%E value"
msgstr ""
@@ -3115,7 +3134,8 @@ msgid "unknown relocation unspec"
msgstr ""
#: config/alpha/alpha.c:5383 config/cr16/cr16.c:1534
-#: config/rs6000/rs6000.c:23943 config/spu/spu.c:1447
+#: config/powerpcspe/powerpcspe.c:24222 config/rs6000/rs6000.c:21606
+#: config/spu/spu.c:1447
#, c-format
msgid "invalid %%xn code"
msgstr ""
@@ -3125,92 +3145,101 @@ msgstr ""
msgid "invalid operand address"
msgstr ""
-#: config/arc/arc.c:3145
+#: config/arc/arc.c:3538
#, c-format
msgid "invalid operand to %%Z code"
msgstr ""
-#: config/arc/arc.c:3153
+#: config/arc/arc.c:3546
#, c-format
msgid "invalid operand to %%z code"
msgstr ""
-#: config/arc/arc.c:3161
+#: config/arc/arc.c:3554
+#, c-format
+msgid "invalid operands to %%c code"
+msgstr ""
+
+#: config/arc/arc.c:3562
#, c-format
msgid "invalid operand to %%M code"
msgstr ""
-#: config/arc/arc.c:3169 config/m32r/m32r.c:2083
+#: config/arc/arc.c:3570 config/m32r/m32r.c:2083
#, c-format
msgid "invalid operand to %%p code"
msgstr ""
-#: config/arc/arc.c:3180 config/m32r/m32r.c:2076
+#: config/arc/arc.c:3581 config/m32r/m32r.c:2076
#, c-format
msgid "invalid operand to %%s code"
msgstr ""
-#: config/arc/arc.c:3328 config/m32r/m32r.c:2109
+#: config/arc/arc.c:3729 config/m32r/m32r.c:2109
#, c-format
msgid "invalid operand to %%R code"
msgstr ""
-#: config/arc/arc.c:3365 config/m32r/m32r.c:2132
+#: config/arc/arc.c:3766 config/m32r/m32r.c:2132
#, c-format
msgid "invalid operand to %%H/%%L code"
msgstr ""
-#: config/arc/arc.c:3413 config/m32r/m32r.c:2203
+#: config/arc/arc.c:3814 config/m32r/m32r.c:2203
#, c-format
msgid "invalid operand to %%U code"
msgstr ""
-#: config/arc/arc.c:3424
+#: config/arc/arc.c:3825
#, c-format
msgid "invalid operand to %%V code"
msgstr ""
-#: config/arc/arc.c:3481
+#: config/arc/arc.c:3882
#, c-format
msgid "invalid operand to %%O code"
msgstr ""
#. Unknown flag.
#. Undocumented flag.
-#: config/arc/arc.c:3507 config/epiphany/epiphany.c:1289
-#: config/m32r/m32r.c:2230 config/nds32/nds32.c:2292 config/sparc/sparc.c:9133
+#: config/arc/arc.c:3908 config/epiphany/epiphany.c:1289
+#: config/m32r/m32r.c:2230 config/nds32/nds32.c:2292 config/sparc/sparc.c:9276
#, c-format
msgid "invalid operand output code"
msgstr ""
-#: config/arc/arc.c:5193
+#: config/arc/arc.c:5545
#, c-format
msgid "invalid UNSPEC as operand: %d"
msgstr ""
-#: config/arm/arm.c:18841 config/arm/arm.c:18866 config/arm/arm.c:18876
-#: config/arm/arm.c:18885 config/arm/arm.c:18894
+#: config/arc/arc.c:5840 config/cris/cris.c:2550
+msgid "unrecognized supposed constant"
+msgstr ""
+
+#: config/arm/arm.c:18900 config/arm/arm.c:18925 config/arm/arm.c:18935
+#: config/arm/arm.c:18944 config/arm/arm.c:18953
#, c-format
msgid "invalid shift operand"
msgstr ""
-#: config/arm/arm.c:21708 config/arm/arm.c:21726
+#: config/arm/arm.c:21775 config/arm/arm.c:21793
#, c-format
msgid "predicated Thumb instruction"
msgstr ""
-#: config/arm/arm.c:21714
+#: config/arm/arm.c:21781
#, c-format
msgid "predicated instruction in conditional sequence"
msgstr ""
-#: config/arm/arm.c:21947 config/arm/arm.c:21969 config/arm/arm.c:21979
-#: config/arm/arm.c:21989 config/arm/arm.c:21999 config/arm/arm.c:22038
-#: config/arm/arm.c:22056 config/arm/arm.c:22081 config/arm/arm.c:22096
-#: config/arm/arm.c:22123 config/arm/arm.c:22130 config/arm/arm.c:22148
-#: config/arm/arm.c:22155 config/arm/arm.c:22163 config/arm/arm.c:22184
-#: config/arm/arm.c:22191 config/arm/arm.c:22324 config/arm/arm.c:22331
-#: config/arm/arm.c:22358 config/arm/arm.c:22365 config/bfin/bfin.c:1437
+#: config/arm/arm.c:22014 config/arm/arm.c:22036 config/arm/arm.c:22046
+#: config/arm/arm.c:22056 config/arm/arm.c:22066 config/arm/arm.c:22105
+#: config/arm/arm.c:22123 config/arm/arm.c:22148 config/arm/arm.c:22163
+#: config/arm/arm.c:22190 config/arm/arm.c:22197 config/arm/arm.c:22215
+#: config/arm/arm.c:22222 config/arm/arm.c:22230 config/arm/arm.c:22251
+#: config/arm/arm.c:22258 config/arm/arm.c:22391 config/arm/arm.c:22398
+#: config/arm/arm.c:22425 config/arm/arm.c:22432 config/bfin/bfin.c:1437
#: config/bfin/bfin.c:1444 config/bfin/bfin.c:1451 config/bfin/bfin.c:1458
#: config/bfin/bfin.c:1467 config/bfin/bfin.c:1474 config/bfin/bfin.c:1481
#: config/bfin/bfin.c:1488
@@ -3218,101 +3247,101 @@ msgstr ""
msgid "invalid operand for code '%c'"
msgstr ""
-#: config/arm/arm.c:22051
+#: config/arm/arm.c:22118
#, c-format
msgid "instruction never executed"
msgstr ""
#. Former Maverick support, removed after GCC-4.7.
-#: config/arm/arm.c:22072
+#: config/arm/arm.c:22139
#, c-format
msgid "obsolete Maverick format code '%c'"
msgstr ""
-#: config/avr/avr.c:2439
+#: config/avr/avr.c:2665
#, c-format
msgid "address operand requires constraint for X, Y, or Z register"
msgstr ""
-#: config/avr/avr.c:2620
+#: config/avr/avr.c:2846
msgid "operands to %T/%t must be reg + const_int:"
msgstr ""
-#: config/avr/avr.c:2670 config/avr/avr.c:2737
+#: config/avr/avr.c:2896 config/avr/avr.c:2963
msgid "bad address, not an I/O address:"
msgstr ""
-#: config/avr/avr.c:2679
+#: config/avr/avr.c:2905
msgid "bad address, not a constant:"
msgstr ""
-#: config/avr/avr.c:2697 config/avr/avr.c:2704
+#: config/avr/avr.c:2923 config/avr/avr.c:2930
msgid "bad address, not (reg+disp):"
msgstr ""
-#: config/avr/avr.c:2711
+#: config/avr/avr.c:2937
msgid "bad address, not post_inc or pre_dec:"
msgstr ""
-#: config/avr/avr.c:2723
+#: config/avr/avr.c:2949
msgid "internal compiler error. Bad address:"
msgstr ""
-#: config/avr/avr.c:2756
+#: config/avr/avr.c:2982
#, c-format
msgid "Unsupported code '%c' for fixed-point:"
msgstr ""
-#: config/avr/avr.c:2764
+#: config/avr/avr.c:2990
msgid "internal compiler error. Unknown mode:"
msgstr ""
-#: config/avr/avr.c:3788 config/avr/avr.c:4732 config/avr/avr.c:5179
+#: config/avr/avr.c:4037 config/avr/avr.c:4981 config/avr/avr.c:5428
msgid "invalid insn:"
msgstr ""
-#: config/avr/avr.c:3842 config/avr/avr.c:3954 config/avr/avr.c:4012
-#: config/avr/avr.c:4064 config/avr/avr.c:4083 config/avr/avr.c:4275
-#: config/avr/avr.c:4583 config/avr/avr.c:4868 config/avr/avr.c:5072
-#: config/avr/avr.c:5236 config/avr/avr.c:5330 config/avr/avr.c:5529
+#: config/avr/avr.c:4091 config/avr/avr.c:4203 config/avr/avr.c:4261
+#: config/avr/avr.c:4313 config/avr/avr.c:4332 config/avr/avr.c:4524
+#: config/avr/avr.c:4832 config/avr/avr.c:5117 config/avr/avr.c:5321
+#: config/avr/avr.c:5485 config/avr/avr.c:5578 config/avr/avr.c:5777
msgid "incorrect insn:"
msgstr ""
-#: config/avr/avr.c:4099 config/avr/avr.c:4374 config/avr/avr.c:4654
-#: config/avr/avr.c:4940 config/avr/avr.c:5118 config/avr/avr.c:5386
-#: config/avr/avr.c:5587
+#: config/avr/avr.c:4348 config/avr/avr.c:4623 config/avr/avr.c:4903
+#: config/avr/avr.c:5189 config/avr/avr.c:5367 config/avr/avr.c:5634
+#: config/avr/avr.c:5835
msgid "unknown move insn:"
msgstr ""
-#: config/avr/avr.c:6046
+#: config/avr/avr.c:6294
msgid "bad shift insn:"
msgstr ""
-#: config/avr/avr.c:6154 config/avr/avr.c:6635 config/avr/avr.c:7050
+#: config/avr/avr.c:6402 config/avr/avr.c:6883 config/avr/avr.c:7298
msgid "internal compiler error. Incorrect shift:"
msgstr ""
-#: config/avr/avr.c:8456
+#: config/avr/avr.c:8704
msgid "unsupported fixed-point conversion"
msgstr ""
-#: config/avr/avr.c:9803
+#: config/avr/avr.c:10059
msgid "variable"
msgstr ""
-#: config/avr/avr.c:9808
+#: config/avr/avr.c:10064
msgid "function parameter"
msgstr ""
-#: config/avr/avr.c:9813
+#: config/avr/avr.c:10069
msgid "structure field"
msgstr ""
-#: config/avr/avr.c:9819
+#: config/avr/avr.c:10075
msgid "return type of function"
msgstr ""
-#: config/avr/avr.c:9824
+#: config/avr/avr.c:10080
msgid "pointer"
msgstr ""
@@ -3334,8 +3363,8 @@ msgid "invalid const_double operand"
msgstr ""
#: config/cris/cris.c:604 config/ft32/ft32.c:106 config/moxie/moxie.c:104
-#: final.c:3455 final.c:3457 fold-const.c:268 gcc.c:5268 gcc.c:5282
-#: rtl-error.c:101 toplev.c:337 tree-vrp.c:7882 cp/typeck.c:6167
+#: final.c:3457 final.c:3459 fold-const.c:265 gcc.c:5274 gcc.c:5288
+#: rtl-error.c:101 toplev.c:339 tree-vrp.c:7614 cp/typeck.c:6220
#: lto/lto-object.c:184 lto/lto-object.c:281 lto/lto-object.c:338
#: lto/lto-object.c:362
#, gcc-internal-format, gfc-internal-format
@@ -3414,10 +3443,6 @@ msgstr ""
msgid "unrecognized address"
msgstr ""
-#: config/cris/cris.c:2550
-msgid "unrecognized supposed constant"
-msgstr ""
-
#: config/cris/cris.c:2949 config/cris/cris.c:3007
msgid "unexpected side-effects in address"
msgstr ""
@@ -3491,158 +3516,158 @@ msgstr ""
msgid "bad insn to frv_print_operand_memory_reference:"
msgstr ""
-#: config/frv/frv.c:2691
+#: config/frv/frv.c:2690
#, c-format
msgid "bad condition code"
msgstr ""
-#: config/frv/frv.c:2765
+#: config/frv/frv.c:2764
msgid "bad insn in frv_print_operand, bad const_double"
msgstr ""
-#: config/frv/frv.c:2826
+#: config/frv/frv.c:2825
msgid "bad insn to frv_print_operand, 'e' modifier:"
msgstr ""
-#: config/frv/frv.c:2834
+#: config/frv/frv.c:2833
msgid "bad insn to frv_print_operand, 'F' modifier:"
msgstr ""
-#: config/frv/frv.c:2850
+#: config/frv/frv.c:2849
msgid "bad insn to frv_print_operand, 'f' modifier:"
msgstr ""
-#: config/frv/frv.c:2864
+#: config/frv/frv.c:2863
msgid "bad insn to frv_print_operand, 'g' modifier:"
msgstr ""
-#: config/frv/frv.c:2912
+#: config/frv/frv.c:2911
msgid "bad insn to frv_print_operand, 'L' modifier:"
msgstr ""
-#: config/frv/frv.c:2925
+#: config/frv/frv.c:2924
msgid "bad insn to frv_print_operand, 'M/N' modifier:"
msgstr ""
-#: config/frv/frv.c:2946
+#: config/frv/frv.c:2945
msgid "bad insn to frv_print_operand, 'O' modifier:"
msgstr ""
-#: config/frv/frv.c:2964
+#: config/frv/frv.c:2963
msgid "bad insn to frv_print_operand, P modifier:"
msgstr ""
-#: config/frv/frv.c:2984
+#: config/frv/frv.c:2983
msgid "bad insn in frv_print_operand, z case"
msgstr ""
-#: config/frv/frv.c:3015
+#: config/frv/frv.c:3014
msgid "bad insn in frv_print_operand, 0 case"
msgstr ""
-#: config/frv/frv.c:3020
+#: config/frv/frv.c:3019
msgid "frv_print_operand: unknown code"
msgstr ""
-#: config/frv/frv.c:4424
+#: config/frv/frv.c:4423
msgid "bad output_move_single operand"
msgstr ""
-#: config/frv/frv.c:4551
+#: config/frv/frv.c:4550
msgid "bad output_move_double operand"
msgstr ""
-#: config/frv/frv.c:4693
+#: config/frv/frv.c:4692
msgid "bad output_condmove_single operand"
msgstr ""
-#: config/i386/i386.c:17272
+#: config/i386/i386.c:17986
#, c-format
msgid "invalid UNSPEC as operand"
msgstr ""
-#: config/i386/i386.c:17782
+#: config/i386/i386.c:18496
#, c-format
msgid "invalid use of register '%s'"
msgstr ""
-#: config/i386/i386.c:17787
+#: config/i386/i386.c:18501
#, c-format
msgid "invalid use of asm flag output"
msgstr ""
-#: config/i386/i386.c:18009
+#: config/i386/i386.c:18723
#, c-format
msgid "invalid operand size for operand code 'O'"
msgstr ""
-#: config/i386/i386.c:18044
+#: config/i386/i386.c:18758
#, c-format
msgid "invalid operand size for operand code 'z'"
msgstr ""
-#: config/i386/i386.c:18113
+#: config/i386/i386.c:18827
#, c-format
msgid "invalid operand type used with operand code 'Z'"
msgstr ""
-#: config/i386/i386.c:18118
+#: config/i386/i386.c:18832
#, c-format
msgid "invalid operand size for operand code 'Z'"
msgstr ""
-#: config/i386/i386.c:18194
+#: config/i386/i386.c:18908
#, c-format
msgid "operand is not a condition code, invalid operand code 'Y'"
msgstr ""
-#: config/i386/i386.c:18273
+#: config/i386/i386.c:18987
#, c-format
msgid "operand is not a condition code, invalid operand code 'D'"
msgstr ""
-#: config/i386/i386.c:18291
+#: config/i386/i386.c:19005
#, c-format
msgid "operand is not a condition code, invalid operand code '%c'"
msgstr ""
-#: config/i386/i386.c:18304
+#: config/i386/i386.c:19018
#, c-format
msgid ""
"operand is not an offsettable memory reference, invalid operand code 'H'"
msgstr ""
-#: config/i386/i386.c:18319
+#: config/i386/i386.c:19033
#, c-format
msgid "operand is not an integer, invalid operand code 'K'"
msgstr ""
-#: config/i386/i386.c:18347
+#: config/i386/i386.c:19061
#, c-format
msgid "operand is not a specific integer, invalid operand code 'r'"
msgstr ""
-#: config/i386/i386.c:18365
+#: config/i386/i386.c:19079
#, c-format
msgid "operand is not an integer, invalid operand code 'R'"
msgstr ""
-#: config/i386/i386.c:18388
+#: config/i386/i386.c:19102
#, c-format
msgid "operand is not a specific integer, invalid operand code 'R'"
msgstr ""
-#: config/i386/i386.c:18484
+#: config/i386/i386.c:19199
#, c-format
msgid "invalid operand code '%c'"
msgstr ""
-#: config/i386/i386.c:18546
+#: config/i386/i386.c:19261
#, c-format
msgid "invalid constraints for operand"
msgstr ""
-#: config/i386/i386.c:29047
+#: config/i386/i386.c:29786
msgid "unknown insn mode"
msgstr ""
@@ -3656,30 +3681,31 @@ msgstr ""
msgid "invalid %%G mode"
msgstr ""
-#: config/ia64/ia64.c:5540
+#: config/ia64/ia64.c:5541
#, c-format
msgid "ia64_print_operand: unknown code"
msgstr ""
-#: config/ia64/ia64.c:11143
+#: config/ia64/ia64.c:11144
msgid "invalid conversion from %<__fpreg%>"
msgstr ""
-#: config/ia64/ia64.c:11146
+#: config/ia64/ia64.c:11147
msgid "invalid conversion to %<__fpreg%>"
msgstr ""
-#: config/ia64/ia64.c:11159 config/ia64/ia64.c:11170
+#: config/ia64/ia64.c:11160 config/ia64/ia64.c:11171
msgid "invalid operation on %<__fpreg%>"
msgstr ""
-#: config/iq2000/iq2000.c:3145 config/tilegx/tilegx.c:5316
-#: config/tilepro/tilepro.c:4705
+#: config/iq2000/iq2000.c:3145 config/tilegx/tilegx.c:5315
+#: config/tilepro/tilepro.c:4704
#, c-format
msgid "invalid %%P operand"
msgstr ""
-#: config/iq2000/iq2000.c:3153 config/rs6000/rs6000.c:23556
+#: config/iq2000/iq2000.c:3153 config/powerpcspe/powerpcspe.c:23835
+#: config/rs6000/rs6000.c:21247
#, c-format
msgid "invalid %%p value"
msgstr ""
@@ -3732,7 +3758,8 @@ msgstr ""
msgid "post-increment address is not a register"
msgstr ""
-#: config/m32r/m32r.c:2333 config/m32r/m32r.c:2348 config/rs6000/rs6000.c:35600
+#: config/m32r/m32r.c:2333 config/m32r/m32r.c:2348
+#: config/powerpcspe/powerpcspe.c:35977 config/rs6000/rs6000.c:32810
msgid "bad address"
msgstr ""
@@ -3765,7 +3792,7 @@ msgid "insn contains an invalid address !"
msgstr ""
#: config/microblaze/microblaze.c:2309 config/microblaze/microblaze.c:2528
-#: config/xtensa/xtensa.c:2460
+#: config/xtensa/xtensa.c:2468
msgid "invalid address"
msgstr ""
@@ -3784,413 +3811,416 @@ msgstr ""
#: config/mips/mips.c:9027 config/mips/mips.c:9030 config/mips/mips.c:9042
#: config/mips/mips.c:9045 config/mips/mips.c:9105 config/mips/mips.c:9112
#: config/mips/mips.c:9133 config/mips/mips.c:9148 config/mips/mips.c:9167
-#: config/mips/mips.c:9176 config/riscv/riscv.c:2805 config/riscv/riscv.c:2811
-#: config/riscv/riscv.c:2820
+#: config/mips/mips.c:9176 config/riscv/riscv.c:2758 config/riscv/riscv.c:2764
+#: config/riscv/riscv.c:2773
#, c-format
msgid "invalid use of '%%%c'"
msgstr ""
-#: config/mmix/mmix.c:1551 config/mmix/mmix.c:1681
+#: config/mmix/mmix.c:1552 config/mmix/mmix.c:1682
msgid "MMIX Internal: Expected a CONST_INT, not this"
msgstr ""
-#: config/mmix/mmix.c:1630
+#: config/mmix/mmix.c:1631
msgid "MMIX Internal: Bad value for 'm', not a CONST_INT"
msgstr ""
-#: config/mmix/mmix.c:1649
+#: config/mmix/mmix.c:1650
msgid "MMIX Internal: Expected a register, not this"
msgstr ""
-#: config/mmix/mmix.c:1659
+#: config/mmix/mmix.c:1660
msgid "MMIX Internal: Expected a constant, not this"
msgstr ""
#. We need the original here.
-#: config/mmix/mmix.c:1743
+#: config/mmix/mmix.c:1744
msgid "MMIX Internal: Cannot decode this operand"
msgstr ""
-#: config/mmix/mmix.c:1799
+#: config/mmix/mmix.c:1800
msgid "MMIX Internal: This is not a recognized address"
msgstr ""
-#: config/mmix/mmix.c:2675
+#: config/mmix/mmix.c:2676
msgid "MMIX Internal: Trying to output invalidly reversed condition:"
msgstr ""
-#: config/mmix/mmix.c:2682
+#: config/mmix/mmix.c:2683
msgid "MMIX Internal: What's the CC of this?"
msgstr ""
-#: config/mmix/mmix.c:2686
+#: config/mmix/mmix.c:2687
msgid "MMIX Internal: What is the CC of this?"
msgstr ""
-#: config/mmix/mmix.c:2728
+#: config/mmix/mmix.c:2729
msgid "MMIX Internal: This is not a constant:"
msgstr ""
-#: config/msp430/msp430.c:3630
+#: config/msp430/msp430.c:3660
#, c-format
msgid "invalid operand prefix"
msgstr ""
-#: config/msp430/msp430.c:3664
+#: config/msp430/msp430.c:3694
#, c-format
msgid "invalid zero extract"
msgstr ""
-#: config/rl78/rl78.c:1887 config/rl78/rl78.c:1973
-#, c-format
-msgid "q/Q modifiers invalid for symbol references"
-msgstr ""
-
-#: config/rs6000/host-darwin.c:94
+#: config/powerpcspe/host-darwin.c:94 config/rs6000/host-darwin.c:94
#, c-format
msgid "Out of stack space.\n"
msgstr ""
-#: config/rs6000/host-darwin.c:115
+#: config/powerpcspe/host-darwin.c:115 config/rs6000/host-darwin.c:115
#, c-format
msgid "Try running '%s' in the shell to raise its limit.\n"
msgstr ""
-#: config/rs6000/rs6000.c:4223
+#: config/powerpcspe/powerpcspe.c:4313 config/rs6000/rs6000.c:4181
msgid "-maltivec=le not allowed for big-endian targets"
msgstr ""
-#: config/rs6000/rs6000.c:4235
+#: config/powerpcspe/powerpcspe.c:4325 config/rs6000/rs6000.c:4192
msgid "-mvsx requires hardware floating point"
msgstr ""
-#: config/rs6000/rs6000.c:4243
+#: config/powerpcspe/powerpcspe.c:4333 config/rs6000/rs6000.c:4200
msgid "-mvsx and -mpaired are incompatible"
msgstr ""
-#: config/rs6000/rs6000.c:4245
+#: config/powerpcspe/powerpcspe.c:4335 config/rs6000/rs6000.c:4202
msgid "-mvsx needs indexed addressing"
msgstr ""
-#: config/rs6000/rs6000.c:4250
+#: config/powerpcspe/powerpcspe.c:4340 config/rs6000/rs6000.c:4207
msgid "-mvsx and -mno-altivec are incompatible"
msgstr ""
-#: config/rs6000/rs6000.c:4252
+#: config/powerpcspe/powerpcspe.c:4342 config/rs6000/rs6000.c:4209
msgid "-mno-altivec disables vsx"
msgstr ""
-#: config/rs6000/rs6000.c:4460
+#: config/powerpcspe/powerpcspe.c:4550 config/rs6000/rs6000.c:4342
msgid "-mquad-memory requires 64-bit mode"
msgstr ""
-#: config/rs6000/rs6000.c:4463
+#: config/powerpcspe/powerpcspe.c:4553 config/rs6000/rs6000.c:4345
msgid "-mquad-memory-atomic requires 64-bit mode"
msgstr ""
-#: config/rs6000/rs6000.c:4475
+#: config/powerpcspe/powerpcspe.c:4565 config/rs6000/rs6000.c:4357
msgid "-mquad-memory is not available in little endian mode"
msgstr ""
-#: config/rs6000/rs6000.c:4547
+#: config/powerpcspe/powerpcspe.c:4637 config/rs6000/rs6000.c:4429
msgid "-mtoc-fusion requires 64-bit"
msgstr ""
-#: config/rs6000/rs6000.c:4554
+#: config/powerpcspe/powerpcspe.c:4644 config/rs6000/rs6000.c:4436
msgid "-mtoc-fusion requires medium/large code model"
msgstr ""
-#: config/rs6000/rs6000.c:11245
+#: config/powerpcspe/powerpcspe.c:11374 config/rs6000/rs6000.c:10911
msgid "bad move"
msgstr ""
-#: config/rs6000/rs6000.c:23199
+#: config/powerpcspe/powerpcspe.c:23478 config/rs6000/rs6000.c:20890
msgid "Bad 128-bit move"
msgstr ""
-#: config/rs6000/rs6000.c:23390
+#: config/powerpcspe/powerpcspe.c:23669 config/rs6000/rs6000.c:21081
#, c-format
msgid "invalid %%e value"
msgstr ""
-#: config/rs6000/rs6000.c:23411
+#: config/powerpcspe/powerpcspe.c:23690 config/rs6000/rs6000.c:21102
#, c-format
msgid "invalid %%f value"
msgstr ""
-#: config/rs6000/rs6000.c:23420
+#: config/powerpcspe/powerpcspe.c:23699 config/rs6000/rs6000.c:21111
#, c-format
msgid "invalid %%F value"
msgstr ""
-#: config/rs6000/rs6000.c:23429
+#: config/powerpcspe/powerpcspe.c:23708 config/rs6000/rs6000.c:21120
#, c-format
msgid "invalid %%G value"
msgstr ""
-#: config/rs6000/rs6000.c:23464
+#: config/powerpcspe/powerpcspe.c:23743 config/rs6000/rs6000.c:21155
#, c-format
msgid "invalid %%j code"
msgstr ""
-#: config/rs6000/rs6000.c:23474
+#: config/powerpcspe/powerpcspe.c:23753 config/rs6000/rs6000.c:21165
#, c-format
msgid "invalid %%J code"
msgstr ""
-#: config/rs6000/rs6000.c:23484
+#: config/powerpcspe/powerpcspe.c:23763 config/rs6000/rs6000.c:21175
#, c-format
msgid "invalid %%k value"
msgstr ""
-#: config/rs6000/rs6000.c:23499 config/xtensa/xtensa.c:2349
+#: config/powerpcspe/powerpcspe.c:23778 config/rs6000/rs6000.c:21190
+#: config/xtensa/xtensa.c:2357
#, c-format
msgid "invalid %%K value"
msgstr ""
-#: config/rs6000/rs6000.c:23546
+#: config/powerpcspe/powerpcspe.c:23825 config/rs6000/rs6000.c:21237
#, c-format
msgid "invalid %%O value"
msgstr ""
-#: config/rs6000/rs6000.c:23593
+#: config/powerpcspe/powerpcspe.c:23872 config/rs6000/rs6000.c:21284
#, c-format
msgid "invalid %%q value"
msgstr ""
-#: config/rs6000/rs6000.c:23646
+#: config/powerpcspe/powerpcspe.c:23925 config/rs6000/rs6000.c:21337
#, c-format
msgid "invalid %%T value"
msgstr ""
-#: config/rs6000/rs6000.c:23658
+#: config/powerpcspe/powerpcspe.c:23937 config/rs6000/rs6000.c:21349
#, c-format
msgid "invalid %%u value"
msgstr ""
-#: config/rs6000/rs6000.c:23672 config/xtensa/xtensa.c:2319
+#: config/powerpcspe/powerpcspe.c:23951 config/rs6000/rs6000.c:21363
+#: config/xtensa/xtensa.c:2327
#, c-format
msgid "invalid %%v value"
msgstr ""
-#: config/rs6000/rs6000.c:23739 config/xtensa/xtensa.c:2370
+#: config/powerpcspe/powerpcspe.c:24018 config/rs6000/rs6000.c:21430
+#: config/xtensa/xtensa.c:2378
#, c-format
msgid "invalid %%x value"
msgstr ""
-#: config/rs6000/rs6000.c:23887
+#: config/powerpcspe/powerpcspe.c:24166 config/rs6000/rs6000.c:21550
#, c-format
msgid "invalid %%y value, try using the 'Z' constraint"
msgstr ""
-#: config/rs6000/rs6000.c:24603
+#: config/powerpcspe/powerpcspe.c:24882 config/rs6000/rs6000.c:22087
msgid "__float128 and __ibm128 cannot be used in the same expression"
msgstr ""
-#: config/rs6000/rs6000.c:24609
+#: config/powerpcspe/powerpcspe.c:24888 config/rs6000/rs6000.c:22093
msgid "__ibm128 and long double cannot be used in the same expression"
msgstr ""
-#: config/rs6000/rs6000.c:24615
+#: config/powerpcspe/powerpcspe.c:24894 config/rs6000/rs6000.c:22099
msgid "__float128 and long double cannot be used in the same expression"
msgstr ""
-#: config/rs6000/rs6000.c:38903
+#: config/powerpcspe/powerpcspe.c:39280 config/rs6000/rs6000.c:36020
msgid "AltiVec argument passed to unprototyped function"
msgstr ""
-#: config/rs6000/rs6000.c:40709
+#: config/powerpcspe/powerpcspe.c:41086 config/rs6000/rs6000.c:38213
msgid "Could not generate addis value for fusion"
msgstr ""
-#: config/rs6000/rs6000.c:40781
+#: config/powerpcspe/powerpcspe.c:41158 config/rs6000/rs6000.c:38285
msgid "Unable to generate load/store offset for fusion"
msgstr ""
-#: config/rs6000/rs6000.c:40885
+#: config/powerpcspe/powerpcspe.c:41262 config/rs6000/rs6000.c:38389
msgid "Bad GPR fusion"
msgstr ""
-#: config/rs6000/rs6000.c:41103
+#: config/powerpcspe/powerpcspe.c:41480 config/rs6000/rs6000.c:38607
msgid "emit_fusion_p9_load, bad reg #1"
msgstr ""
-#: config/rs6000/rs6000.c:41149
+#: config/powerpcspe/powerpcspe.c:41526 config/rs6000/rs6000.c:38653
msgid "emit_fusion_p9_load, bad reg #2"
msgstr ""
-#: config/rs6000/rs6000.c:41152
+#: config/powerpcspe/powerpcspe.c:41529 config/rs6000/rs6000.c:38656
msgid "emit_fusion_p9_load not MEM"
msgstr ""
-#: config/rs6000/rs6000.c:41190
+#: config/powerpcspe/powerpcspe.c:41567 config/rs6000/rs6000.c:38694
msgid "emit_fusion_p9_store, bad reg #1"
msgstr ""
-#: config/rs6000/rs6000.c:41236
+#: config/powerpcspe/powerpcspe.c:41613 config/rs6000/rs6000.c:38740
msgid "emit_fusion_p9_store, bad reg #2"
msgstr ""
-#: config/rs6000/rs6000.c:41239
+#: config/powerpcspe/powerpcspe.c:41616 config/rs6000/rs6000.c:38743
msgid "emit_fusion_p9_store not MEM"
msgstr ""
-#: config/s390/s390.c:7482
+#: config/rl78/rl78.c:1887 config/rl78/rl78.c:1973
+#, c-format
+msgid "q/Q modifiers invalid for symbol references"
+msgstr ""
+
+#: config/s390/s390.c:7566
#, c-format
msgid "symbolic memory references are only supported on z10 or later"
msgstr ""
-#: config/s390/s390.c:7493
+#: config/s390/s390.c:7577
#, c-format
msgid "cannot decompose address"
msgstr ""
-#: config/s390/s390.c:7562
+#: config/s390/s390.c:7646
#, c-format
msgid "invalid comparison operator for 'E' output modifier"
msgstr ""
-#: config/s390/s390.c:7585
+#: config/s390/s390.c:7669
#, c-format
msgid "invalid reference for 'J' output modifier"
msgstr ""
-#: config/s390/s390.c:7603
+#: config/s390/s390.c:7687
#, c-format
msgid "invalid address for 'O' output modifier"
msgstr ""
-#: config/s390/s390.c:7625
+#: config/s390/s390.c:7709
#, c-format
msgid "invalid address for 'R' output modifier"
msgstr ""
-#: config/s390/s390.c:7643
+#: config/s390/s390.c:7727
#, c-format
msgid "memory reference expected for 'S' output modifier"
msgstr ""
-#: config/s390/s390.c:7653
+#: config/s390/s390.c:7737
#, c-format
msgid "invalid address for 'S' output modifier"
msgstr ""
-#: config/s390/s390.c:7674
+#: config/s390/s390.c:7758
#, c-format
msgid "register or memory expression expected for 'N' output modifier"
msgstr ""
-#: config/s390/s390.c:7685
+#: config/s390/s390.c:7769
#, c-format
msgid "register or memory expression expected for 'M' output modifier"
msgstr ""
-#: config/s390/s390.c:7771 config/s390/s390.c:7792
+#: config/s390/s390.c:7855 config/s390/s390.c:7876
#, c-format
msgid "invalid constant for output modifier '%c'"
msgstr ""
-#: config/s390/s390.c:7789
+#: config/s390/s390.c:7873
#, c-format
msgid "invalid constant - try using an output modifier"
msgstr ""
-#: config/s390/s390.c:7826
+#: config/s390/s390.c:7910
#, c-format
msgid "invalid constant vector for output modifier '%c'"
msgstr ""
-#: config/s390/s390.c:7833
+#: config/s390/s390.c:7917
#, c-format
msgid "invalid expression - try using an output modifier"
msgstr ""
-#: config/s390/s390.c:7836
+#: config/s390/s390.c:7920
#, c-format
msgid "invalid expression for output modifier '%c'"
msgstr ""
-#: config/s390/s390.c:11703
+#: config/s390/s390.c:11782
msgid "vector argument passed to unprototyped function"
msgstr ""
-#: config/s390/s390.c:15522
+#: config/s390/s390.c:15604
msgid "types differ in signedness"
msgstr ""
-#: config/s390/s390.c:15532
+#: config/s390/s390.c:15614
msgid "binary operator does not support two vector bool operands"
msgstr ""
-#: config/s390/s390.c:15535
+#: config/s390/s390.c:15617
msgid "binary operator does not support vector bool operand"
msgstr ""
-#: config/s390/s390.c:15543
+#: config/s390/s390.c:15625
msgid ""
"binary operator does not support mixing vector bool with floating point "
"vector operands"
msgstr ""
-#: config/sh/sh.c:1185
+#: config/sh/sh.c:1187
#, c-format
msgid "invalid operand to %%R"
msgstr ""
-#: config/sh/sh.c:1212
+#: config/sh/sh.c:1214
#, c-format
msgid "invalid operand to %%S"
msgstr ""
-#: config/sh/sh.c:8632
+#: config/sh/sh.c:8640
msgid "created and used with different architectures / ABIs"
msgstr ""
-#: config/sh/sh.c:8634
+#: config/sh/sh.c:8642
msgid "created and used with different ABIs"
msgstr ""
-#: config/sh/sh.c:8636
+#: config/sh/sh.c:8644
msgid "created and used with different endianness"
msgstr ""
-#: config/sparc/sparc.c:8863 config/sparc/sparc.c:8869
+#: config/sparc/sparc.c:9006 config/sparc/sparc.c:9012
#, c-format
msgid "invalid %%Y operand"
msgstr ""
-#: config/sparc/sparc.c:8956
+#: config/sparc/sparc.c:9099
#, c-format
msgid "invalid %%A operand"
msgstr ""
-#: config/sparc/sparc.c:8976
+#: config/sparc/sparc.c:9119
#, c-format
msgid "invalid %%B operand"
msgstr ""
-#: config/sparc/sparc.c:9056 config/tilegx/tilegx.c:5103
-#: config/tilepro/tilepro.c:4512
+#: config/sparc/sparc.c:9199 config/tilegx/tilegx.c:5102
+#: config/tilepro/tilepro.c:4511
#, c-format
msgid "invalid %%C operand"
msgstr ""
-#: config/sparc/sparc.c:9088 config/tilegx/tilegx.c:5136
+#: config/sparc/sparc.c:9231 config/tilegx/tilegx.c:5135
#, c-format
msgid "invalid %%D operand"
msgstr ""
-#: config/sparc/sparc.c:9107
+#: config/sparc/sparc.c:9250
#, c-format
msgid "invalid %%f operand"
msgstr ""
-#: config/sparc/sparc.c:9119
+#: config/sparc/sparc.c:9262
#, c-format
msgid "invalid %%s operand"
msgstr ""
-#: config/sparc/sparc.c:9164
+#: config/sparc/sparc.c:9307
#, c-format
msgid "floating-point constant not a valid immediate operand"
msgstr ""
@@ -4215,87 +4245,87 @@ msgstr ""
msgid "xstormy16_print_operand: unknown code"
msgstr ""
-#: config/tilegx/tilegx.c:5088 config/tilepro/tilepro.c:4497
+#: config/tilegx/tilegx.c:5087 config/tilepro/tilepro.c:4496
#, c-format
msgid "invalid %%c operand"
msgstr ""
-#: config/tilegx/tilegx.c:5119
+#: config/tilegx/tilegx.c:5118
#, c-format
msgid "invalid %%d operand"
msgstr ""
-#: config/tilegx/tilegx.c:5216
+#: config/tilegx/tilegx.c:5215
#, c-format
msgid "invalid %%H specifier"
msgstr ""
-#: config/tilegx/tilegx.c:5258 config/tilepro/tilepro.c:4526
+#: config/tilegx/tilegx.c:5257 config/tilepro/tilepro.c:4525
#, c-format
msgid "invalid %%h operand"
msgstr ""
-#: config/tilegx/tilegx.c:5270 config/tilepro/tilepro.c:4590
+#: config/tilegx/tilegx.c:5269 config/tilepro/tilepro.c:4589
#, c-format
msgid "invalid %%I operand"
msgstr ""
-#: config/tilegx/tilegx.c:5282 config/tilepro/tilepro.c:4602
+#: config/tilegx/tilegx.c:5281 config/tilepro/tilepro.c:4601
#, c-format
msgid "invalid %%i operand"
msgstr ""
-#: config/tilegx/tilegx.c:5303 config/tilepro/tilepro.c:4623
+#: config/tilegx/tilegx.c:5302 config/tilepro/tilepro.c:4622
#, c-format
msgid "invalid %%j operand"
msgstr ""
-#: config/tilegx/tilegx.c:5334
+#: config/tilegx/tilegx.c:5333
#, c-format
msgid "invalid %%%c operand"
msgstr ""
-#: config/tilegx/tilegx.c:5349 config/tilepro/tilepro.c:4737
+#: config/tilegx/tilegx.c:5348 config/tilepro/tilepro.c:4736
#, c-format
msgid "invalid %%N operand"
msgstr ""
-#: config/tilegx/tilegx.c:5393
+#: config/tilegx/tilegx.c:5392
#, c-format
msgid "invalid operand for 'r' specifier"
msgstr ""
-#: config/tilegx/tilegx.c:5417 config/tilepro/tilepro.c:4818
+#: config/tilegx/tilegx.c:5416 config/tilepro/tilepro.c:4817
#, c-format
msgid "unable to print out operand yet; code == %d (%c)"
msgstr ""
-#: config/tilepro/tilepro.c:4562
+#: config/tilepro/tilepro.c:4561
#, c-format
msgid "invalid %%H operand"
msgstr ""
-#: config/tilepro/tilepro.c:4662
+#: config/tilepro/tilepro.c:4661
#, c-format
msgid "invalid %%L operand"
msgstr ""
-#: config/tilepro/tilepro.c:4722
+#: config/tilepro/tilepro.c:4721
#, c-format
msgid "invalid %%M operand"
msgstr ""
-#: config/tilepro/tilepro.c:4765
+#: config/tilepro/tilepro.c:4764
#, c-format
msgid "invalid %%t operand"
msgstr ""
-#: config/tilepro/tilepro.c:4772
+#: config/tilepro/tilepro.c:4771
#, c-format
msgid "invalid %%t operand '"
msgstr ""
-#: config/tilepro/tilepro.c:4793
+#: config/tilepro/tilepro.c:4792
#, c-format
msgid "invalid %%r operand"
msgstr ""
@@ -4352,555 +4382,548 @@ msgstr ""
msgid "bad test"
msgstr ""
-#: config/xtensa/xtensa.c:2307
+#: config/xtensa/xtensa.c:2315
#, c-format
msgid "invalid %%D value"
msgstr ""
-#: config/xtensa/xtensa.c:2344
+#: config/xtensa/xtensa.c:2352
msgid "invalid mask"
msgstr ""
-#: config/xtensa/xtensa.c:2377
+#: config/xtensa/xtensa.c:2385
#, c-format
msgid "invalid %%d value"
msgstr ""
-#: config/xtensa/xtensa.c:2396 config/xtensa/xtensa.c:2406
+#: config/xtensa/xtensa.c:2404 config/xtensa/xtensa.c:2414
#, c-format
msgid "invalid %%t/%%b value"
msgstr ""
-#: config/xtensa/xtensa.c:2485
+#: config/xtensa/xtensa.c:2493
msgid "no register in address"
msgstr ""
-#: config/xtensa/xtensa.c:2493
+#: config/xtensa/xtensa.c:2501
msgid "address offset not a constant"
msgstr ""
-#: c/c-objc-common.c:160
+#: c/c-objc-common.c:161
msgid "aka"
msgstr ""
-#: c/c-objc-common.c:187
+#: c/c-objc-common.c:188
msgid "({anonymous})"
msgstr ""
-#: c/c-parser.c:2170 c/c-parser.c:2184 c/c-parser.c:4811 c/c-parser.c:5265
-#: c/c-parser.c:5412 c/c-parser.c:5837 c/c-parser.c:6006 c/c-parser.c:6037
-#: c/c-parser.c:6221 c/c-parser.c:8975 c/c-parser.c:9010 c/c-parser.c:9041
-#: c/c-parser.c:9088 c/c-parser.c:9269 c/c-parser.c:10050 c/c-parser.c:10120
-#: c/c-parser.c:10163 c/c-parser.c:14756 c/c-parser.c:14780 c/c-parser.c:14798
-#: c/c-parser.c:15017 c/c-parser.c:15060 c/gimple-parser.c:149
-#: c/gimple-parser.c:189 c/gimple-parser.c:198 c/gimple-parser.c:227
-#: c/gimple-parser.c:1320 c/gimple-parser.c:1344 c/gimple-parser.c:1424
-#: c/gimple-parser.c:1451 c/c-parser.c:2990 c/c-parser.c:9262
-#: c/gimple-parser.c:1228 c/gimple-parser.c:1267 cp/parser.c:27275
-#: cp/parser.c:27853
+#: c/c-parser.c:2172 c/c-parser.c:2186 c/c-parser.c:4813 c/c-parser.c:5269
+#: c/c-parser.c:5416 c/c-parser.c:5871 c/c-parser.c:6040 c/c-parser.c:6071
+#: c/c-parser.c:6261 c/c-parser.c:9034 c/c-parser.c:9069 c/c-parser.c:9100
+#: c/c-parser.c:9147 c/c-parser.c:9328 c/c-parser.c:10109 c/c-parser.c:10179
+#: c/c-parser.c:10222 c/c-parser.c:14746 c/c-parser.c:14770 c/c-parser.c:14788
+#: c/c-parser.c:15007 c/c-parser.c:15050 c/gimple-parser.c:148
+#: c/gimple-parser.c:188 c/gimple-parser.c:197 c/gimple-parser.c:226
+#: c/gimple-parser.c:1358 c/gimple-parser.c:1387 c/gimple-parser.c:1467
+#: c/gimple-parser.c:1494 c/c-parser.c:2992 c/c-parser.c:9321
+#: c/gimple-parser.c:1261 c/gimple-parser.c:1300 cp/parser.c:27441
+#: cp/parser.c:28019
#, gcc-internal-format
msgid "expected %<;%>"
msgstr ""
#. Look for the two `(' tokens.
-#: c/c-parser.c:2211 c/c-parser.c:2923 c/c-parser.c:3225 c/c-parser.c:3292
-#: c/c-parser.c:3954 c/c-parser.c:4144 c/c-parser.c:4149 c/c-parser.c:5455
-#: c/c-parser.c:5709 c/c-parser.c:5922 c/c-parser.c:6157 c/c-parser.c:6280
-#: c/c-parser.c:7342 c/c-parser.c:7766 c/c-parser.c:7807 c/c-parser.c:7942
-#: c/c-parser.c:8136 c/c-parser.c:8153 c/c-parser.c:8179 c/c-parser.c:9560
-#: c/c-parser.c:9632 c/c-parser.c:10682 c/c-parser.c:10877 c/c-parser.c:11017
-#: c/c-parser.c:11072 c/c-parser.c:11169 c/c-parser.c:11349 c/c-parser.c:11394
-#: c/c-parser.c:11439 c/c-parser.c:11484 c/c-parser.c:11529 c/c-parser.c:11575
-#: c/c-parser.c:11612 c/c-parser.c:11680 c/c-parser.c:11932 c/c-parser.c:12073
-#: c/c-parser.c:12199 c/c-parser.c:12364 c/c-parser.c:12468 c/c-parser.c:12512
-#: c/c-parser.c:12560 c/c-parser.c:12606 c/c-parser.c:12674 c/c-parser.c:12712
-#: c/c-parser.c:12841 c/c-parser.c:12923 c/c-parser.c:13031 c/c-parser.c:13068
-#: c/c-parser.c:13118 c/c-parser.c:13176 c/c-parser.c:14964 c/c-parser.c:16923
-#: c/c-parser.c:17136 c/c-parser.c:17578 c/c-parser.c:17636 c/c-parser.c:18062
-#: c/gimple-parser.c:364 c/gimple-parser.c:783 c/gimple-parser.c:835
-#: c/gimple-parser.c:861 c/gimple-parser.c:1148 c/gimple-parser.c:1289
-#: c/gimple-parser.c:1378 c/c-parser.c:11148 cp/parser.c:24985
-#: cp/parser.c:27856
+#: c/c-parser.c:2213 c/c-parser.c:2925 c/c-parser.c:3227 c/c-parser.c:3294
+#: c/c-parser.c:3956 c/c-parser.c:4146 c/c-parser.c:4151 c/c-parser.c:5459
+#: c/c-parser.c:5731 c/c-parser.c:5956 c/c-parser.c:6197 c/c-parser.c:6320
+#: c/c-parser.c:7411 c/c-parser.c:7836 c/c-parser.c:7877 c/c-parser.c:8012
+#: c/c-parser.c:8206 c/c-parser.c:8223 c/c-parser.c:8249 c/c-parser.c:9619
+#: c/c-parser.c:9691 c/c-parser.c:10741 c/c-parser.c:10936 c/c-parser.c:11076
+#: c/c-parser.c:11131 c/c-parser.c:11234 c/c-parser.c:11414 c/c-parser.c:11459
+#: c/c-parser.c:11504 c/c-parser.c:11549 c/c-parser.c:11595 c/c-parser.c:11632
+#: c/c-parser.c:11704 c/c-parser.c:11958 c/c-parser.c:12099 c/c-parser.c:12225
+#: c/c-parser.c:12449 c/c-parser.c:12493 c/c-parser.c:12541 c/c-parser.c:12587
+#: c/c-parser.c:12655 c/c-parser.c:12693 c/c-parser.c:12822 c/c-parser.c:12904
+#: c/c-parser.c:13012 c/c-parser.c:13049 c/c-parser.c:13099 c/c-parser.c:13157
+#: c/c-parser.c:14954 c/c-parser.c:16913 c/c-parser.c:17126 c/c-parser.c:17568
+#: c/c-parser.c:17626 c/c-parser.c:18052 c/gimple-parser.c:363
+#: c/gimple-parser.c:794 c/gimple-parser.c:856 c/gimple-parser.c:894
+#: c/gimple-parser.c:1181 c/gimple-parser.c:1322 c/gimple-parser.c:1421
+#: c/c-parser.c:11213 cp/parser.c:25149 cp/parser.c:28022
#, gcc-internal-format
msgid "expected %<(%>"
msgstr ""
-#: c/c-parser.c:2217 c/c-parser.c:7369 c/c-parser.c:7774 c/c-parser.c:7815
-#: c/c-parser.c:7953 c/c-parser.c:11937 cp/parser.c:27273 cp/parser.c:27871
+#: c/c-parser.c:2219 c/c-parser.c:7438 c/c-parser.c:7844 c/c-parser.c:7885
+#: c/c-parser.c:8023 c/c-parser.c:11963 cp/parser.c:27439 cp/parser.c:28037
#, gcc-internal-format
msgid "expected %<,%>"
msgstr ""
-#: c/c-parser.c:2238 c/c-parser.c:2602 c/c-parser.c:2938 c/c-parser.c:3266
-#: c/c-parser.c:3303 c/c-parser.c:3519 c/c-parser.c:3706 c/c-parser.c:3768
-#: c/c-parser.c:3820 c/c-parser.c:3961 c/c-parser.c:4244 c/c-parser.c:4260
-#: c/c-parser.c:4269 c/c-parser.c:5458 c/c-parser.c:5724 c/c-parser.c:6069
-#: c/c-parser.c:6215 c/c-parser.c:6288 c/c-parser.c:6870 c/c-parser.c:7100
-#: c/c-parser.c:7183 c/c-parser.c:7283 c/c-parser.c:7484 c/c-parser.c:7686
-#: c/c-parser.c:7705 c/c-parser.c:7729 c/c-parser.c:7784 c/c-parser.c:7893
-#: c/c-parser.c:7968 c/c-parser.c:8145 c/c-parser.c:8170 c/c-parser.c:8194
-#: c/c-parser.c:8421 c/c-parser.c:8818 c/c-parser.c:9354 c/c-parser.c:9375
-#: c/c-parser.c:9583 c/c-parser.c:9638 c/c-parser.c:10022 c/c-parser.c:10719
-#: c/c-parser.c:10880 c/c-parser.c:11020 c/c-parser.c:11106 c/c-parser.c:11250
-#: c/c-parser.c:11357 c/c-parser.c:11402 c/c-parser.c:11447 c/c-parser.c:11492
-#: c/c-parser.c:11537 c/c-parser.c:11583 c/c-parser.c:11640 c/c-parser.c:11647
-#: c/c-parser.c:11688 c/c-parser.c:11844 c/c-parser.c:11902 c/c-parser.c:11957
-#: c/c-parser.c:12019 c/c-parser.c:12171 c/c-parser.c:12310 c/c-parser.c:12372
-#: c/c-parser.c:12476 c/c-parser.c:12520 c/c-parser.c:12587 c/c-parser.c:12629
-#: c/c-parser.c:12661 c/c-parser.c:12691 c/c-parser.c:12729 c/c-parser.c:12871
-#: c/c-parser.c:12889 c/c-parser.c:12895 c/c-parser.c:12979 c/c-parser.c:12990
-#: c/c-parser.c:13010 c/c-parser.c:13020 c/c-parser.c:13039 c/c-parser.c:13075
-#: c/c-parser.c:13089 c/c-parser.c:13137 c/c-parser.c:13145 c/c-parser.c:13180
-#: c/c-parser.c:14184 c/c-parser.c:14840 c/c-parser.c:15025 c/c-parser.c:15071
-#: c/c-parser.c:17115 c/c-parser.c:17193 c/c-parser.c:17614 c/c-parser.c:17698
-#: c/c-parser.c:18071 c/gimple-parser.c:296 c/gimple-parser.c:393
-#: c/gimple-parser.c:793 c/gimple-parser.c:815 c/gimple-parser.c:842
-#: c/gimple-parser.c:865 c/gimple-parser.c:988 c/gimple-parser.c:1159
-#: c/gimple-parser.c:1170 c/gimple-parser.c:1292 c/gimple-parser.c:1381
-#: cp/parser.c:25018 cp/parser.c:27901
+#: c/c-parser.c:2240 c/c-parser.c:2604 c/c-parser.c:2940 c/c-parser.c:3268
+#: c/c-parser.c:3305 c/c-parser.c:3521 c/c-parser.c:3708 c/c-parser.c:3770
+#: c/c-parser.c:3822 c/c-parser.c:3963 c/c-parser.c:4246 c/c-parser.c:4262
+#: c/c-parser.c:4271 c/c-parser.c:5462 c/c-parser.c:5746 c/c-parser.c:6103
+#: c/c-parser.c:6255 c/c-parser.c:6328 c/c-parser.c:6939 c/c-parser.c:7169
+#: c/c-parser.c:7252 c/c-parser.c:7352 c/c-parser.c:7553 c/c-parser.c:7755
+#: c/c-parser.c:7774 c/c-parser.c:7799 c/c-parser.c:7854 c/c-parser.c:7963
+#: c/c-parser.c:8038 c/c-parser.c:8215 c/c-parser.c:8240 c/c-parser.c:8264
+#: c/c-parser.c:8491 c/c-parser.c:8877 c/c-parser.c:9413 c/c-parser.c:9434
+#: c/c-parser.c:9642 c/c-parser.c:9697 c/c-parser.c:10081 c/c-parser.c:10778
+#: c/c-parser.c:10939 c/c-parser.c:11079 c/c-parser.c:11171 c/c-parser.c:11315
+#: c/c-parser.c:11422 c/c-parser.c:11467 c/c-parser.c:11512 c/c-parser.c:11557
+#: c/c-parser.c:11603 c/c-parser.c:11660 c/c-parser.c:11667 c/c-parser.c:11713
+#: c/c-parser.c:11870 c/c-parser.c:11928 c/c-parser.c:11983 c/c-parser.c:12045
+#: c/c-parser.c:12197 c/c-parser.c:12336 c/c-parser.c:12457 c/c-parser.c:12501
+#: c/c-parser.c:12568 c/c-parser.c:12610 c/c-parser.c:12642 c/c-parser.c:12672
+#: c/c-parser.c:12710 c/c-parser.c:12852 c/c-parser.c:12870 c/c-parser.c:12876
+#: c/c-parser.c:12960 c/c-parser.c:12971 c/c-parser.c:12991 c/c-parser.c:13001
+#: c/c-parser.c:13020 c/c-parser.c:13056 c/c-parser.c:13070 c/c-parser.c:13118
+#: c/c-parser.c:13126 c/c-parser.c:13161 c/c-parser.c:14174 c/c-parser.c:14830
+#: c/c-parser.c:15015 c/c-parser.c:15061 c/c-parser.c:17105 c/c-parser.c:17183
+#: c/c-parser.c:17604 c/c-parser.c:17688 c/c-parser.c:18061
+#: c/gimple-parser.c:295 c/gimple-parser.c:392 c/gimple-parser.c:804
+#: c/gimple-parser.c:820 c/gimple-parser.c:836 c/gimple-parser.c:863
+#: c/gimple-parser.c:898 c/gimple-parser.c:1021 c/gimple-parser.c:1192
+#: c/gimple-parser.c:1203 c/gimple-parser.c:1325 c/gimple-parser.c:1424
+#: cp/parser.c:25182 cp/parser.c:28067
#, gcc-internal-format
msgid "expected %<)%>"
msgstr ""
-#: c/c-parser.c:3624 c/c-parser.c:4578 c/c-parser.c:4614 c/c-parser.c:6272
-#: c/c-parser.c:7884 c/c-parser.c:8242 c/c-parser.c:8395 c/c-parser.c:10834
-#: c/c-parser.c:17974 c/c-parser.c:17976 c/c-parser.c:18315
-#: c/gimple-parser.c:965 cp/parser.c:7118 cp/parser.c:27865
+#: c/c-parser.c:3626 c/c-parser.c:4580 c/c-parser.c:4616 c/c-parser.c:6312
+#: c/c-parser.c:7954 c/c-parser.c:8312 c/c-parser.c:8465 c/c-parser.c:10893
+#: c/c-parser.c:17964 c/c-parser.c:17966 c/c-parser.c:18305
+#: c/gimple-parser.c:998 cp/parser.c:7157 cp/parser.c:28031
#, gcc-internal-format
msgid "expected %<]%>"
msgstr ""
-#: c/c-parser.c:3801
+#: c/c-parser.c:3803
msgid "expected %<;%>, %<,%> or %<)%>"
msgstr ""
-#: c/c-parser.c:4434 c/c-parser.c:14781 c/gimple-parser.c:1493
-#: cp/parser.c:27859 cp/parser.c:29786
+#: c/c-parser.c:4436 c/c-parser.c:14771 c/gimple-parser.c:1536
+#: cp/parser.c:28025 cp/parser.c:29952
#, gcc-internal-format
msgid "expected %<}%>"
msgstr ""
-#: c/c-parser.c:4748 c/c-parser.c:9603 c/c-parser.c:15507 c/c-parser.c:18341
-#: c/gimple-parser.c:142 c/gimple-parser.c:1384 c/c-parser.c:2803
-#: c/c-parser.c:3011 c/c-parser.c:9157 cp/parser.c:17807 cp/parser.c:27862
+#: c/c-parser.c:4750 c/c-parser.c:9662 c/c-parser.c:15497 c/c-parser.c:18331
+#: c/gimple-parser.c:141 c/gimple-parser.c:1427 c/c-parser.c:2805
+#: c/c-parser.c:3013 c/c-parser.c:9216 cp/parser.c:17986 cp/parser.c:28028
#, gcc-internal-format
msgid "expected %<{%>"
msgstr ""
-#: c/c-parser.c:4988 c/c-parser.c:4997 c/c-parser.c:6524 c/c-parser.c:7418
-#: c/c-parser.c:9368 c/c-parser.c:9752 c/c-parser.c:9813 c/c-parser.c:10817
-#: c/c-parser.c:11626 c/c-parser.c:11761 c/c-parser.c:12130 c/c-parser.c:12222
-#: c/c-parser.c:12875 c/c-parser.c:16980 c/c-parser.c:17039
-#: c/gimple-parser.c:1432 c/gimple-parser.c:1459 c/c-parser.c:6179
-#: c/c-parser.c:11242 cp/parser.c:27895 cp/parser.c:28997 cp/parser.c:31659
+#: c/c-parser.c:4990 c/c-parser.c:4999 c/c-parser.c:6564 c/c-parser.c:7487
+#: c/c-parser.c:9427 c/c-parser.c:9811 c/c-parser.c:9872 c/c-parser.c:10876
+#: c/c-parser.c:11646 c/c-parser.c:11787 c/c-parser.c:12156 c/c-parser.c:12248
+#: c/c-parser.c:12856 c/c-parser.c:16970 c/c-parser.c:17029
+#: c/gimple-parser.c:1475 c/gimple-parser.c:1502 c/c-parser.c:6219
+#: c/c-parser.c:11307 cp/parser.c:28061 cp/parser.c:29163 cp/parser.c:31832
#, gcc-internal-format
msgid "expected %<:%>"
msgstr ""
-#: c/c-parser.c:5286 cp/semantics.c:613
+#: c/c-parser.c:5290 cp/semantics.c:616
msgid "Cilk array notation cannot be used as a computed goto expression"
msgstr ""
-#: c/c-parser.c:5345
+#: c/c-parser.c:5349
msgid "Cilk array notation cannot be used for a throw expression"
msgstr ""
-#: c/c-parser.c:5720 cp/semantics.c:1144
+#: c/c-parser.c:5742 cp/semantics.c:1151
msgid "Cilk array notation cannot be used as a condition for switch statement"
msgstr ""
-#: c/c-parser.c:5771 cp/semantics.c:799
+#: c/c-parser.c:5799 cp/semantics.c:806
msgid "Cilk array notation cannot be used as a condition for while statement"
msgstr ""
-#: c/c-parser.c:5823 cp/parser.c:27789
+#: c/c-parser.c:5857 cp/parser.c:27955
#, gcc-internal-format
msgid "expected %<while%>"
msgstr ""
-#: c/c-parser.c:5830 cp/semantics.c:858
+#: c/c-parser.c:5864 cp/semantics.c:865
msgid ""
"Cilk array notation cannot be used as a condition for a do-while statement"
msgstr ""
-#: c/c-parser.c:6033 cp/semantics.c:977
+#: c/c-parser.c:6067 cp/semantics.c:984
msgid "Cilk array notation cannot be used in a condition for a for-loop"
msgstr ""
-#: c/c-parser.c:7635
+#: c/c-parser.c:7704
msgid "expected %<.%>"
msgstr ""
-#: c/c-parser.c:8828 c/c-parser.c:8860 c/c-parser.c:9100 cp/parser.c:29571
-#: cp/parser.c:29645
+#: c/c-parser.c:8887 c/c-parser.c:8919 c/c-parser.c:9159 cp/parser.c:29737
+#: cp/parser.c:29811
#, gcc-internal-format
msgid "expected %<@end%>"
msgstr ""
-#: c/c-parser.c:9517 c/gimple-parser.c:778 cp/parser.c:27880
+#: c/c-parser.c:9576 c/gimple-parser.c:789 cp/parser.c:28046
#, gcc-internal-format
msgid "expected %<>%>"
msgstr ""
-#: c/c-parser.c:12314 c/c-parser.c:13093 cp/parser.c:27904
+#: c/c-parser.c:12340 c/c-parser.c:13074 cp/parser.c:28070
#, gcc-internal-format
msgid "expected %<,%> or %<)%>"
msgstr ""
#. All following cases are statements with LHS.
-#: c/c-parser.c:14493 c/c-parser.c:14537 c/c-parser.c:14765 c/c-parser.c:15006
-#: c/c-parser.c:17177 c/c-parser.c:17800 c/gimple-parser.c:287
-#: c/c-parser.c:4637 cp/parser.c:27883
+#: c/c-parser.c:14483 c/c-parser.c:14527 c/c-parser.c:14755 c/c-parser.c:14996
+#: c/c-parser.c:17167 c/c-parser.c:17790 c/gimple-parser.c:286
+#: c/c-parser.c:4639 cp/parser.c:28049
#, gcc-internal-format
msgid "expected %<=%>"
msgstr ""
-#: c/c-parser.c:15550 c/c-parser.c:15540 cp/parser.c:35066
+#: c/c-parser.c:15540 c/c-parser.c:15530 cp/parser.c:35239
#, gcc-internal-format
msgid "expected %<#pragma omp section%> or %<}%>"
msgstr ""
-#: c/c-parser.c:17962 c/c-parser.c:10769 cp/parser.c:27868 cp/parser.c:30928
+#: c/c-parser.c:17952 c/c-parser.c:10828 cp/parser.c:28034 cp/parser.c:31094
#, gcc-internal-format
msgid "expected %<[%>"
msgstr ""
-#: c/c-typeck.c:7593
+#: c/c-typeck.c:7598
msgid "(anonymous)"
msgstr ""
-#: c/gimple-parser.c:767 cp/parser.c:15458 cp/parser.c:27877
+#: c/gimple-parser.c:778 cp/parser.c:15632 cp/parser.c:28043
#, gcc-internal-format
msgid "expected %<<%>"
msgstr ""
-#: c/gimple-parser.c:1428 c/gimple-parser.c:1455 c/gimple-parser.c:1483
+#: c/gimple-parser.c:1471 c/gimple-parser.c:1498 c/gimple-parser.c:1526
+#: c/gimple-parser.c:1352 c/gimple-parser.c:1381
+#, gcc-internal-format
msgid "expected label"
msgstr ""
-#: cp/call.c:9927
+#: cp/call.c:10340
msgid "candidate 1:"
msgstr ""
-#: cp/call.c:9928
+#: cp/call.c:10341
msgid "candidate 2:"
msgstr ""
-#: cp/decl2.c:704
-msgid "candidates are: %+#D"
-msgstr ""
-
-#: cp/decl2.c:706
-msgid "candidate is: %+#D"
-msgstr ""
-
-#: cp/error.c:321
+#: cp/error.c:365
msgid "<missing>"
msgstr ""
-#: cp/error.c:419
+#: cp/error.c:463
msgid "<brace-enclosed initializer list>"
msgstr ""
-#: cp/error.c:421
+#: cp/error.c:465
msgid "<unresolved overloaded function type>"
msgstr ""
-#: cp/error.c:583
+#: cp/error.c:627
msgid "<type error>"
msgstr ""
-#: cp/error.c:684 objc/objc-act.c:6180 cp/cxx-pretty-print.c:161
+#: cp/error.c:728 objc/objc-act.c:6180 cp/cxx-pretty-print.c:153
#, gcc-internal-format
msgid "<unnamed>"
msgstr ""
-#: cp/error.c:686
+#: cp/error.c:730
#, c-format
msgid "<unnamed %s>"
msgstr ""
#. A lambda's "type" is essentially its signature.
-#: cp/error.c:691
+#: cp/error.c:735
msgid "<lambda"
msgstr ""
-#: cp/error.c:821
+#: cp/error.c:865
msgid "<typeprefixerror>"
msgstr ""
-#: cp/error.c:950
+#: cp/error.c:994
#, c-format
msgid "(static initializers for %s)"
msgstr ""
-#: cp/error.c:952
+#: cp/error.c:996
#, c-format
msgid "(static destructors for %s)"
msgstr ""
-#: cp/error.c:1097
+#: cp/error.c:1040
+msgid "<structured bindings>"
+msgstr ""
+
+#: cp/error.c:1143
msgid "vtable for "
msgstr ""
-#: cp/error.c:1121
+#: cp/error.c:1167
msgid "<return value> "
msgstr ""
-#: cp/error.c:1136
+#: cp/error.c:1182
msgid "{anonymous}"
msgstr ""
-#: cp/error.c:1138
+#: cp/error.c:1184
msgid "(anonymous namespace)"
msgstr ""
-#: cp/error.c:1245
+#: cp/error.c:1287
msgid "<template arguments error>"
msgstr ""
-#: cp/error.c:1267
+#: cp/error.c:1309
msgid "<enumerator>"
msgstr ""
-#: cp/error.c:1318
+#: cp/error.c:1360
msgid "<declaration error>"
msgstr ""
-#: cp/error.c:1868 cp/error.c:1888
+#: cp/error.c:1910 cp/error.c:1930
msgid "<template parameter error>"
msgstr ""
-#: cp/error.c:2018
+#: cp/error.c:2060
msgid "<statement>"
msgstr ""
-#: cp/error.c:2046 cp/error.c:3100 c-family/c-pretty-print.c:2168
+#: cp/error.c:2088 cp/error.c:3138 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:2064
+#: cp/error.c:2106
msgid "<throw-expression>"
msgstr ""
-#: cp/error.c:2166
+#: cp/error.c:2207
msgid "<ubsan routine call>"
msgstr ""
-#: cp/error.c:2624
+#: cp/error.c:2663
msgid "<unparsed>"
msgstr ""
-#: cp/error.c:2779
+#: cp/error.c:2817
msgid "<lambda>"
msgstr ""
-#: cp/error.c:2822
+#: cp/error.c:2860
msgid "*this"
msgstr ""
-#: cp/error.c:2836
+#: cp/error.c:2874
msgid "<expression error>"
msgstr ""
-#: cp/error.c:2851
+#: cp/error.c:2889
msgid "<unknown operator>"
msgstr ""
-#: cp/error.c:3139
-msgid " {enum}"
-msgstr ""
-
-#: cp/error.c:3148
+#: cp/error.c:3182
msgid "{unknown}"
msgstr ""
-#: cp/error.c:3260
+#: cp/error.c:3294
msgid "At global scope:"
msgstr ""
-#: cp/error.c:3366
+#: cp/error.c:3400
#, c-format
msgid "In static member function %qs"
msgstr ""
-#: cp/error.c:3368
+#: cp/error.c:3402
#, c-format
msgid "In copy constructor %qs"
msgstr ""
-#: cp/error.c:3370
+#: cp/error.c:3404
#, c-format
msgid "In constructor %qs"
msgstr ""
-#: cp/error.c:3372
+#: cp/error.c:3406
#, c-format
msgid "In destructor %qs"
msgstr ""
-#: cp/error.c:3374
+#: cp/error.c:3408
msgid "In lambda function"
msgstr ""
-#: cp/error.c:3394
+#: cp/error.c:3428
#, c-format
msgid "%s: In substitution of %qS:\n"
msgstr ""
-#: cp/error.c:3395
+#: cp/error.c:3429
msgid "%s: In instantiation of %q#D:\n"
msgstr ""
-#: cp/error.c:3420
+#: cp/error.c:3454
msgid "%r%s:%d:%d:%R "
msgstr ""
-#: cp/error.c:3423
+#: cp/error.c:3457
msgid "%r%s:%d:%R "
msgstr ""
-#: cp/error.c:3431
+#: cp/error.c:3465
#, c-format
msgid "recursively required by substitution of %qS\n"
msgstr ""
-#: cp/error.c:3432
+#: cp/error.c:3466
#, c-format
msgid "required by substitution of %qS\n"
msgstr ""
-#: cp/error.c:3437
+#: cp/error.c:3471
msgid "recursively required from %q#D\n"
msgstr ""
-#: cp/error.c:3438
+#: cp/error.c:3472
msgid "required from %q#D\n"
msgstr ""
-#: cp/error.c:3445
+#: cp/error.c:3479
msgid "recursively required from here\n"
msgstr ""
-#: cp/error.c:3446
+#: cp/error.c:3480
msgid "required from here\n"
msgstr ""
-#: cp/error.c:3498
+#: cp/error.c:3532
msgid ""
"%r%s:%d:%d:%R [ skipping %d instantiation contexts, use -ftemplate-"
"backtrace-limit=0 to disable ]\n"
msgstr ""
-#: cp/error.c:3504
+#: cp/error.c:3538
msgid ""
"%r%s:%d:%R [ skipping %d instantiation contexts, use -ftemplate-backtrace-"
"limit=0 to disable ]\n"
msgstr ""
-#: cp/error.c:3558
+#: cp/error.c:3592
msgid "%r%s:%d:%d:%R in constexpr expansion of %qs"
msgstr ""
-#: cp/error.c:3562
+#: cp/error.c:3596
msgid "%r%s:%d:%R in constexpr expansion of %qs"
msgstr ""
-#: cp/pt.c:1950 cp/semantics.c:5250
+#: cp/pt.c:1929 cp/semantics.c:5296
msgid "candidates are:"
msgstr ""
-#: cp/pt.c:21893
+#: cp/pt.c:1931 cp/pt.c:21973
msgid "candidate is:"
msgid_plural "candidates are:"
msgstr[0] ""
msgstr[1] ""
-#: cp/rtti.c:546
+#: cp/rtti.c:576
msgid "target is not pointer or reference to class"
msgstr ""
-#: cp/rtti.c:551
+#: cp/rtti.c:581
msgid "target is not pointer or reference to complete type"
msgstr ""
-#: cp/rtti.c:557
+#: cp/rtti.c:587
msgid "target is not pointer or reference"
msgstr ""
-#: cp/rtti.c:573
+#: cp/rtti.c:603
msgid "source is not a pointer"
msgstr ""
-#: cp/rtti.c:578
+#: cp/rtti.c:608
msgid "source is not a pointer to class"
msgstr ""
-#: cp/rtti.c:583
+#: cp/rtti.c:613
msgid "source is a pointer to incomplete type"
msgstr ""
-#: cp/rtti.c:598
+#: cp/rtti.c:628
msgid "source is not of class type"
msgstr ""
-#: cp/rtti.c:603
+#: cp/rtti.c:633
msgid "source is of incomplete class type"
msgstr ""
-#: cp/rtti.c:612
+#: cp/rtti.c:642
msgid "conversion casts away constness"
msgstr ""
-#: cp/rtti.c:768
+#: cp/rtti.c:798
msgid "source type is not polymorphic"
msgstr ""
-#: cp/typeck.c:5897 c/c-typeck.c:4222
+#: cp/typeck.c:5950 c/c-typeck.c:4227
#, gcc-internal-format
msgid "wrong type argument to unary minus"
msgstr ""
-#: cp/typeck.c:5898 c/c-typeck.c:4209
+#: cp/typeck.c:5951 c/c-typeck.c:4214
#, gcc-internal-format
msgid "wrong type argument to unary plus"
msgstr ""
-#: cp/typeck.c:5925 c/c-typeck.c:4264
+#: cp/typeck.c:5978 c/c-typeck.c:4269
#, gcc-internal-format
msgid "wrong type argument to bit-complement"
msgstr ""
-#: cp/typeck.c:5941 c/c-typeck.c:4272
+#: cp/typeck.c:5994 c/c-typeck.c:4277
#, gcc-internal-format
msgid "wrong type argument to abs"
msgstr ""
-#: cp/typeck.c:5953 c/c-typeck.c:4284
+#: cp/typeck.c:6006 c/c-typeck.c:4289
#, gcc-internal-format
msgid "wrong type argument to conjugation"
msgstr ""
-#: cp/typeck.c:5971
+#: cp/typeck.c:6024
msgid "in argument to unary !"
msgstr ""
-#: cp/typeck.c:6017
+#: cp/typeck.c:6070
msgid "no pre-increment operator for type"
msgstr ""
-#: cp/typeck.c:6019
+#: cp/typeck.c:6072
msgid "no post-increment operator for type"
msgstr ""
-#: cp/typeck.c:6021
+#: cp/typeck.c:6074
msgid "no pre-decrement operator for type"
msgstr ""
-#: cp/typeck.c:6023
+#: cp/typeck.c:6076
msgid "no post-decrement operator for type"
msgstr ""
@@ -5051,13 +5074,13 @@ msgstr ""
msgid "%s tag"
msgstr ""
-#: fortran/io.c:3227
+#: fortran/io.c:3251
msgid "internal unit in WRITE"
msgstr ""
#. For INQUIRE, all tags except FILE, ID and UNIT are variable definition
#. contexts. Thus, use an extended RESOLVE_TAG macro for that.
-#: fortran/io.c:4494
+#: fortran/io.c:4551
#, c-format
msgid "%s tag with INQUIRE"
msgstr ""
@@ -5366,30 +5389,30 @@ msgstr ""
msgid "Different CHARACTER lengths (%ld/%ld) in array constructor"
msgstr ""
-#: fortran/trans-array.c:5587
+#: fortran/trans-array.c:5590
msgid "Integer overflow when calculating the amount of memory to allocate"
msgstr ""
-#: fortran/trans-decl.c:5683
+#: fortran/trans-decl.c:5684
#, c-format
msgid ""
"Actual string length does not match the declared one for dummy argument "
"'%s' (%ld/%ld)"
msgstr ""
-#: fortran/trans-decl.c:5691
+#: fortran/trans-decl.c:5692
#, c-format
msgid ""
"Actual string length is shorter than the declared one for dummy argument "
"'%s' (%ld/%ld)"
msgstr ""
-#: fortran/trans-expr.c:8627
+#: fortran/trans-expr.c:8628
#, c-format
msgid "Target of rank remapping is too small (%ld < %ld)"
msgstr ""
-#: fortran/trans-expr.c:9993
+#: fortran/trans-expr.c:9994
msgid "Assignment of scalar to unallocated array"
msgstr ""
@@ -5419,20 +5442,20 @@ msgstr ""
msgid "Assigned label is not a target label"
msgstr ""
-#: fortran/trans-stmt.c:1123
+#: fortran/trans-stmt.c:1127
#, c-format
msgid "Invalid image number %d in SYNC IMAGES"
msgstr ""
-#: fortran/trans-stmt.c:1938
+#: fortran/trans-stmt.c:1942
msgid "Loop iterates infinitely"
msgstr ""
-#: fortran/trans-stmt.c:1958 fortran/trans-stmt.c:2214
+#: fortran/trans-stmt.c:1962 fortran/trans-stmt.c:2218
msgid "Loop variable has been modified"
msgstr ""
-#: fortran/trans-stmt.c:2067
+#: fortran/trans-stmt.c:2071
msgid "DO step value is zero"
msgstr ""
@@ -5517,59 +5540,59 @@ msgstr ""
msgid "error"
msgstr ""
-#: go/go-backend.c:159
+#: go/go-backend.c:165
msgid "lseek failed while reading export data"
msgstr ""
-#: go/go-backend.c:166
+#: go/go-backend.c:172
msgid "memory allocation failed while reading export data"
msgstr ""
-#: go/go-backend.c:174
+#: go/go-backend.c:180
msgid "read failed while reading export data"
msgstr ""
-#: go/go-backend.c:180
+#: go/go-backend.c:186
msgid "short read while reading export data"
msgstr ""
-#: gcc.c:748 gcc.c:752 gcc.c:807
+#: gcc.c:754 gcc.c:758 gcc.c:813
msgid "-gz is not supported in this configuration"
msgstr ""
-#: gcc.c:758 gcc.c:818
+#: gcc.c:764 gcc.c:824
msgid "-gz=zlib is not supported in this configuration"
msgstr ""
-#: gcc.c:964
+#: gcc.c:970
msgid "-fuse-linker-plugin is not supported in this configuration"
msgstr ""
-#: gcc.c:979
+#: gcc.c:985
msgid "cannot specify -static with -fsanitize=address"
msgstr ""
-#: gcc.c:981
+#: gcc.c:987
msgid "cannot specify -static with -fsanitize=thread"
msgstr ""
-#: gcc.c:1003
+#: gcc.c:1009
msgid "-fvtable-verify=std is not supported in this configuration"
msgstr ""
-#: gcc.c:1005
+#: gcc.c:1011
msgid "-fvtable-verify=preinit is not supported in this configuration"
msgstr ""
-#: gcc.c:1135 ada/gcc-interface/lang-specs.h:33
+#: gcc.c:1141 ada/gcc-interface/lang-specs.h:33
msgid "-pg and -fomit-frame-pointer are incompatible"
msgstr ""
-#: gcc.c:1314
+#: gcc.c:1317
msgid "GNU C no longer supports -traditional without -E"
msgstr ""
-#: gcc.c:1323
+#: gcc.c:1326
msgid "-E or -x required when input is from standard input"
msgstr ""
@@ -5611,7 +5634,8 @@ msgstr ""
#: 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:736 config/sparc/freebsd.h:45
+#: config/powerpcspe/sysv4.h:736 config/rs6000/sysv4.h:736
+#: config/sparc/freebsd.h:45
msgid "consider using '-pg' instead of '-p' with gprof(1)"
msgstr ""
@@ -5627,11 +5651,11 @@ msgstr ""
msgid "does not support multilib"
msgstr ""
-#: config/sol2.h:385
+#: config/sol2.h:390
msgid "-pie is not supported in this configuration"
msgstr ""
-#: config/vxworks.h:70
+#: config/vxworks.h:118
msgid "-Xbind-now and -Xbind-lazy are incompatible"
msgstr ""
@@ -5651,7 +5675,7 @@ msgstr ""
msgid "-mbig-endian and -mlittle-endian may not be used together"
msgstr ""
-#: config/avr/specs.h:70
+#: config/avr/specs.h:71
msgid "shared is not supported"
msgstr ""
@@ -5702,11 +5726,11 @@ msgstr ""
msgid " profiling support are only provided in archive format"
msgstr ""
-#: config/rs6000/darwin.h:95
+#: config/powerpcspe/darwin.h:95 config/rs6000/darwin.h:95
msgid " conflicting code gen style switches are used"
msgstr ""
-#: config/rs6000/freebsd64.h:171
+#: config/powerpcspe/freebsd64.h:171 config/rs6000/freebsd64.h:171
msgid "consider using `-pg' instead of `-p' with gprof(1)"
msgstr ""
@@ -5732,7 +5756,7 @@ 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
+#: config/sparc/sol2.h:237 config/sparc/sol2.h:243
msgid "may not use both -m32 and -m64"
msgstr ""
@@ -5949,315 +5973,319 @@ msgid "Use the Cray Pointer extension."
msgstr ""
#: fortran/lang.opt:421
-msgid "Ignore 'D' in column one in fixed form."
+msgid "Generate C prototypes from BIND(C) declarations."
msgstr ""
#: fortran/lang.opt:425
-msgid "Treat lines with 'D' in column one as comments."
+msgid "Ignore 'D' in column one in fixed form."
msgstr ""
#: fortran/lang.opt:429
-msgid "Enable all DEC language extensions."
+msgid "Treat lines with 'D' in column one as comments."
msgstr ""
#: fortran/lang.opt:433
-msgid "Enable kind-specific variants of integer intrinsic functions."
+msgid "Enable all DEC language extensions."
msgstr ""
#: fortran/lang.opt:437
-msgid "Enable legacy math intrinsics for compatibility."
+msgid "Enable kind-specific variants of integer intrinsic functions."
msgstr ""
#: fortran/lang.opt:441
-msgid "Enable support for DEC STRUCTURE/RECORD."
+msgid "Enable legacy math intrinsics for compatibility."
msgstr ""
#: fortran/lang.opt:445
-msgid "Enable DEC-style STATIC and AUTOMATIC attributes."
+msgid "Enable support for DEC STRUCTURE/RECORD."
msgstr ""
#: fortran/lang.opt:449
-msgid "Set the default double precision kind to an 8 byte wide type."
+msgid "Enable DEC-style STATIC and AUTOMATIC attributes."
msgstr ""
#: fortran/lang.opt:453
-msgid "Set the default integer kind to an 8 byte wide type."
+msgid "Set the default double precision kind to an 8 byte wide type."
msgstr ""
#: fortran/lang.opt:457
-msgid "Set the default real kind to an 8 byte wide type."
+msgid "Set the default integer kind to an 8 byte wide type."
msgstr ""
#: fortran/lang.opt:461
+msgid "Set the default real kind to an 8 byte wide type."
+msgstr ""
+
+#: fortran/lang.opt:465
msgid "Allow dollar signs in entity names."
msgstr ""
-#: fortran/lang.opt:465 config/alpha/alpha.opt:31 common.opt:758 common.opt:956
-#: common.opt:960 common.opt:964 common.opt:968 common.opt:1495 common.opt:1551
-#: common.opt:1652 common.opt:1656 common.opt:1886 common.opt:2048
-#: common.opt:2718
+#: fortran/lang.opt:469 config/alpha/alpha.opt:31 common.opt:765 common.opt:967
+#: common.opt:971 common.opt:975 common.opt:979 common.opt:1506 common.opt:1562
+#: common.opt:1663 common.opt:1667 common.opt:1897 common.opt:2067
+#: common.opt:2738
msgid "Does nothing. Preserved for backward compatibility."
msgstr ""
-#: fortran/lang.opt:469
+#: fortran/lang.opt:473
msgid "Display the code tree after parsing."
msgstr ""
-#: fortran/lang.opt:473
+#: fortran/lang.opt:477
msgid "Display the code tree after front end optimization."
msgstr ""
-#: fortran/lang.opt:477
+#: fortran/lang.opt:481
msgid "Display the code tree after parsing; deprecated option."
msgstr ""
-#: fortran/lang.opt:481
+#: fortran/lang.opt:485
msgid ""
"Specify that an external BLAS library should be used for matmul calls on "
"large-size arrays."
msgstr ""
-#: fortran/lang.opt:485
+#: fortran/lang.opt:489
msgid "Use f2c calling convention."
msgstr ""
-#: fortran/lang.opt:489
+#: fortran/lang.opt:493
msgid "Assume that the source file is fixed form."
msgstr ""
-#: fortran/lang.opt:493
+#: fortran/lang.opt:497
msgid "Force creation of temporary to test infrequently-executed forall code."
msgstr ""
-#: fortran/lang.opt:497
+#: fortran/lang.opt:501
msgid "Interpret any INTEGER(4) as an INTEGER(8)."
msgstr ""
-#: fortran/lang.opt:501 fortran/lang.opt:505
+#: fortran/lang.opt:505 fortran/lang.opt:509
msgid "Specify where to find the compiled intrinsic modules."
msgstr ""
-#: fortran/lang.opt:509
+#: fortran/lang.opt:513
msgid "Allow arbitrary character line width in fixed mode."
msgstr ""
-#: fortran/lang.opt:513
+#: fortran/lang.opt:517
msgid "-ffixed-line-length-<n>\tUse n as character line width in fixed mode."
msgstr ""
-#: fortran/lang.opt:517
+#: fortran/lang.opt:521
msgid "-ffpe-trap=[...]\tStop on following floating point exceptions."
msgstr ""
-#: fortran/lang.opt:521
+#: fortran/lang.opt:525
msgid "-ffpe-summary=[...]\tPrint summary of floating point exceptions."
msgstr ""
-#: fortran/lang.opt:525
+#: fortran/lang.opt:529
msgid "Assume that the source file is free form."
msgstr ""
-#: fortran/lang.opt:529
+#: fortran/lang.opt:533
msgid "Allow arbitrary character line width in free mode."
msgstr ""
-#: fortran/lang.opt:533
+#: fortran/lang.opt:537
msgid "-ffree-line-length-<n>\tUse n as character line width in free mode."
msgstr ""
-#: fortran/lang.opt:537
+#: fortran/lang.opt:541
msgid "Enable front end optimization."
msgstr ""
-#: fortran/lang.opt:541
+#: fortran/lang.opt:545
msgid ""
"Specify that no implicit typing is allowed, unless overridden by explicit "
"IMPLICIT statements."
msgstr ""
-#: fortran/lang.opt:545
+#: fortran/lang.opt:549
msgid ""
"-finit-character=<n>\tInitialize local character variables to ASCII value n."
msgstr ""
-#: fortran/lang.opt:549
+#: fortran/lang.opt:553
msgid ""
"Initialize components of derived type variables according to other init "
"flags."
msgstr ""
-#: fortran/lang.opt:553
+#: fortran/lang.opt:557
msgid "-finit-integer=<n>\tInitialize local integer variables to n."
msgstr ""
-#: fortran/lang.opt:557
+#: fortran/lang.opt:561
msgid "Initialize local variables to zero (from g77)."
msgstr ""
-#: fortran/lang.opt:561
+#: fortran/lang.opt:565
msgid "-finit-logical=<true|false>\tInitialize local logical variables."
msgstr ""
-#: fortran/lang.opt:565
+#: fortran/lang.opt:569
msgid "-finit-real=<zero|snan|nan|inf|-inf>\tInitialize local real variables."
msgstr ""
-#: fortran/lang.opt:568
+#: fortran/lang.opt:572
#, c-format
msgid "Unrecognized option to floating-point init value: %qs"
msgstr ""
-#: fortran/lang.opt:587
+#: fortran/lang.opt:591
msgid ""
"-finline-matmul-limit=<n>\tSpecify the size of the largest matrix for which "
"matmul will be inlined."
msgstr ""
-#: fortran/lang.opt:591
+#: fortran/lang.opt:595
msgid ""
"-fmax-array-constructor=<n>\tMaximum number of objects in an array "
"constructor."
msgstr ""
-#: fortran/lang.opt:595
+#: fortran/lang.opt:599
msgid "-fmax-identifier-length=<n>\tMaximum identifier length."
msgstr ""
-#: fortran/lang.opt:599
+#: fortran/lang.opt:603
msgid "-fmax-subrecord-length=<n>\tMaximum length for subrecords."
msgstr ""
-#: fortran/lang.opt:603
+#: fortran/lang.opt:607
msgid ""
"-fmax-stack-var-size=<n>\tSize in bytes of the largest array that will be "
"put on the stack."
msgstr ""
-#: fortran/lang.opt:607
+#: fortran/lang.opt:611
msgid "Put all local arrays on stack."
msgstr ""
-#: fortran/lang.opt:611
+#: fortran/lang.opt:615
msgid "Set default accessibility of module entities to PRIVATE."
msgstr ""
-#: fortran/lang.opt:631
+#: fortran/lang.opt:635
msgid "Try to lay out derived types as compactly as possible."
msgstr ""
-#: fortran/lang.opt:639
+#: fortran/lang.opt:643
msgid "Protect parentheses in expressions."
msgstr ""
-#: fortran/lang.opt:643
+#: fortran/lang.opt:647
msgid "Enable range checking during compilation."
msgstr ""
-#: fortran/lang.opt:647
+#: fortran/lang.opt:651
msgid "Interpret any REAL(4) as a REAL(8)."
msgstr ""
-#: fortran/lang.opt:651
+#: fortran/lang.opt:655
msgid "Interpret any REAL(4) as a REAL(10)."
msgstr ""
-#: fortran/lang.opt:655
+#: fortran/lang.opt:659
msgid "Interpret any REAL(4) as a REAL(16)."
msgstr ""
-#: fortran/lang.opt:659
+#: fortran/lang.opt:663
msgid "Interpret any REAL(8) as a REAL(4)."
msgstr ""
-#: fortran/lang.opt:663
+#: fortran/lang.opt:667
msgid "Interpret any REAL(8) as a REAL(10)."
msgstr ""
-#: fortran/lang.opt:667
+#: fortran/lang.opt:671
msgid "Interpret any REAL(8) as a REAL(16)."
msgstr ""
-#: fortran/lang.opt:671
+#: fortran/lang.opt:675
msgid "Reallocate the LHS in assignments."
msgstr ""
-#: fortran/lang.opt:675
+#: fortran/lang.opt:679
msgid "Use a 4-byte record marker for unformatted files."
msgstr ""
-#: fortran/lang.opt:679
+#: fortran/lang.opt:683
msgid "Use an 8-byte record marker for unformatted files."
msgstr ""
-#: fortran/lang.opt:683
+#: fortran/lang.opt:687
msgid "Allocate local variables on the stack to allow indirect recursion."
msgstr ""
-#: fortran/lang.opt:687
+#: fortran/lang.opt:691
msgid "Copy array sections into a contiguous block on procedure entry."
msgstr ""
-#: fortran/lang.opt:691
+#: fortran/lang.opt:695
msgid ""
"-fcoarray=<none|single|lib>\tSpecify which coarray parallelization should be "
"used."
msgstr ""
-#: fortran/lang.opt:694
+#: fortran/lang.opt:698
#, c-format
msgid "Unrecognized option: %qs"
msgstr ""
-#: fortran/lang.opt:707
+#: fortran/lang.opt:711
msgid "-fcheck=[...]\tSpecify which runtime checks are to be performed."
msgstr ""
-#: fortran/lang.opt:711
+#: fortran/lang.opt:715
msgid "Append a second underscore if the name already contains an underscore."
msgstr ""
-#: fortran/lang.opt:719
+#: fortran/lang.opt:723
msgid "Apply negative sign to zero values."
msgstr ""
-#: fortran/lang.opt:723
+#: fortran/lang.opt:727
msgid "Append underscores to externally visible names."
msgstr ""
-#: fortran/lang.opt:727 c-family/c.opt:1315 c-family/c.opt:1343
-#: c-family/c.opt:1581 config/pa/pa.opt:42 config/pa/pa.opt:70 common.opt:1121
-#: common.opt:1371 common.opt:1616 common.opt:1739 common.opt:2101
-#: common.opt:2137 common.opt:2230 common.opt:2234 common.opt:2334
-#: common.opt:2425 common.opt:2433 common.opt:2441 common.opt:2449
-#: common.opt:2550 common.opt:2602 common.opt:2681
+#: fortran/lang.opt:731 c-family/c.opt:1335 c-family/c.opt:1363
+#: c-family/c.opt:1609 config/pa/pa.opt:42 config/pa/pa.opt:70 common.opt:1132
+#: common.opt:1382 common.opt:1627 common.opt:1750 common.opt:2120
+#: common.opt:2156 common.opt:2249 common.opt:2253 common.opt:2353
+#: common.opt:2444 common.opt:2452 common.opt:2460 common.opt:2468
+#: common.opt:2569 common.opt:2621 common.opt:2701
msgid "Does nothing. Preserved for backward compatibility."
msgstr ""
-#: fortran/lang.opt:767
+#: fortran/lang.opt:771
msgid "Statically link the GNU Fortran helper library (libgfortran)."
msgstr ""
-#: fortran/lang.opt:771
+#: fortran/lang.opt:775
msgid "Conform to the ISO Fortran 2003 standard."
msgstr ""
-#: fortran/lang.opt:775
+#: fortran/lang.opt:779
msgid "Conform to the ISO Fortran 2008 standard."
msgstr ""
-#: fortran/lang.opt:779
+#: fortran/lang.opt:783
msgid "Conform to the ISO Fortran 2008 standard including TS 29113."
msgstr ""
-#: fortran/lang.opt:783
+#: fortran/lang.opt:787
msgid "Conform to the ISO Fortran 95 standard."
msgstr ""
-#: fortran/lang.opt:787
+#: fortran/lang.opt:791
msgid "Conform to nothing in particular."
msgstr ""
-#: fortran/lang.opt:791
+#: fortran/lang.opt:795
msgid "Accept extensions to support legacy code."
msgstr ""
@@ -6274,15 +6302,15 @@ msgstr ""
#: c-family/c.opt:70 c-family/c.opt:73 c-family/c.opt:76 c-family/c.opt:79
#: c-family/c.opt:175 c-family/c.opt:178 c-family/c.opt:220 c-family/c.opt:224
-#: c-family/c.opt:236 c-family/c.opt:1802 c-family/c.opt:1810 brig/lang.opt:39
-#: config/darwin.opt:56 common.opt:332 common.opt:335 common.opt:2941
+#: c-family/c.opt:236 c-family/c.opt:1830 c-family/c.opt:1838 brig/lang.opt:39
+#: config/darwin.opt:56 common.opt:339 common.opt:342 common.opt:2961
#, c-format
msgid "missing filename after %qs"
msgstr ""
#: c-family/c.opt:85 c-family/c.opt:88 c-family/c.opt:91 c-family/c.opt:94
-#: c-family/c.opt:200 c-family/c.opt:212 c-family/c.opt:1798
-#: c-family/c.opt:1818 c-family/c.opt:1822 c-family/c.opt:1826
+#: c-family/c.opt:200 c-family/c.opt:212 c-family/c.opt:1826
+#: c-family/c.opt:1846 c-family/c.opt:1850 c-family/c.opt:1854
#, c-format
msgid "missing path after %qs"
msgstr ""
@@ -6501,1484 +6529,1512 @@ msgstr ""
msgid "Warn about casts which discard qualifiers."
msgstr ""
-#: c-family/c.opt:393
+#: c-family/c.opt:393 c-family/c.opt:397
+msgid "Warn about catch handlers of non-reference type."
+msgstr ""
+
+#: c-family/c.opt:401
msgid "Warn about subscripts whose type is \"char\"."
msgstr ""
-#: c-family/c.opt:397
+#: c-family/c.opt:405
msgid "Warn about memory access errors found by Pointer Bounds Checker."
msgstr ""
-#: c-family/c.opt:401
+#: c-family/c.opt:409
msgid "Warn about variables that might be changed by \"longjmp\" or \"vfork\"."
msgstr ""
-#: c-family/c.opt:405
+#: c-family/c.opt:413
msgid ""
"Warn about possibly nested block comments, and C++ comments spanning more "
"than one physical line."
msgstr ""
-#: c-family/c.opt:409
+#: c-family/c.opt:417
msgid "Synonym for -Wcomment."
msgstr ""
-#: c-family/c.opt:413
+#: c-family/c.opt:421
msgid "Warn for conditionally-supported constructs."
msgstr ""
-#: c-family/c.opt:417
+#: c-family/c.opt:425
msgid "Warn for implicit type conversions that may change a value."
msgstr ""
-#: c-family/c.opt:421
+#: c-family/c.opt:429
msgid "Warn for converting NULL from/to a non-pointer type."
msgstr ""
-#: c-family/c.opt:429
+#: c-family/c.opt:437
msgid "Warn when all constructors and destructors are private."
msgstr ""
-#: c-family/c.opt:433
+#: c-family/c.opt:441
msgid "Warn about dangling else."
msgstr ""
-#: c-family/c.opt:437
+#: c-family/c.opt:445
msgid "Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage."
msgstr ""
-#: c-family/c.opt:441
+#: c-family/c.opt:449
msgid "Warn when a declaration is found after a statement."
msgstr ""
-#: c-family/c.opt:445
+#: c-family/c.opt:453
msgid "Warn when deleting a pointer to incomplete type."
msgstr ""
-#: c-family/c.opt:449
+#: c-family/c.opt:457
msgid "Warn about deleting polymorphic objects with non-virtual destructors."
msgstr ""
-#: c-family/c.opt:453
+#: c-family/c.opt:461
msgid "Warn if a deprecated compiler feature, class, method, or field is used."
msgstr ""
-#: c-family/c.opt:457
+#: c-family/c.opt:465
msgid ""
"Warn about positional initialization of structs requiring designated "
"initializers."
msgstr ""
-#: c-family/c.opt:461
+#: c-family/c.opt:469
msgid "Warn if qualifiers on arrays which are pointer targets are discarded."
msgstr ""
-#: c-family/c.opt:465
+#: c-family/c.opt:473
msgid "Warn if type qualifiers on pointers are discarded."
msgstr ""
-#: c-family/c.opt:469
+#: c-family/c.opt:477
msgid "Warn about compile-time integer division by zero."
msgstr ""
-#: c-family/c.opt:473
+#: c-family/c.opt:481
msgid "Warn about duplicated branches in if-else statements."
msgstr ""
-#: c-family/c.opt:477
+#: c-family/c.opt:485
msgid "Warn about duplicated conditions in an if-else-if chain."
msgstr ""
-#: c-family/c.opt:481
+#: c-family/c.opt:489
msgid "Warn about violations of Effective C++ style rules."
msgstr ""
-#: c-family/c.opt:485
+#: c-family/c.opt:493
msgid "Warn about an empty body in an if or else statement."
msgstr ""
-#: c-family/c.opt:489
+#: c-family/c.opt:497
msgid "Warn about stray tokens after #else and #endif."
msgstr ""
-#: c-family/c.opt:493
+#: c-family/c.opt:501
msgid "Warn about comparison of different enum types."
msgstr ""
-#: c-family/c.opt:501
+#: c-family/c.opt:509
msgid ""
"This switch is deprecated; use -Werror=implicit-function-declaration instead."
msgstr ""
-#: c-family/c.opt:509
+#: c-family/c.opt:517
msgid "Warn about semicolon after in-class function definition."
msgstr ""
-#: c-family/c.opt:513
+#: c-family/c.opt:521
msgid ""
"Warn for implicit type conversions that cause loss of floating point "
"precision."
msgstr ""
-#: c-family/c.opt:517
+#: c-family/c.opt:525
msgid "Warn if testing floating point numbers for equality."
msgstr ""
-#: c-family/c.opt:521 c-family/c.opt:563
+#: c-family/c.opt:529 c-family/c.opt:571
msgid "Warn about printf/scanf/strftime/strfmon format string anomalies."
msgstr ""
-#: c-family/c.opt:525
+#: c-family/c.opt:533
msgid "Warn about format strings that contain NUL bytes."
msgstr ""
-#: c-family/c.opt:529
+#: c-family/c.opt:537
msgid "Warn if passing too many arguments to a function for its format string."
msgstr ""
-#: c-family/c.opt:533
+#: c-family/c.opt:541
msgid "Warn about format strings that are not literals."
msgstr ""
-#: c-family/c.opt:537
+#: c-family/c.opt:545
msgid ""
"Warn about function calls with format strings that write past the end of the "
"destination region. Same as -Wformat-overflow=1."
msgstr ""
-#: c-family/c.opt:542
+#: c-family/c.opt:550
msgid "Warn about possible security problems with format functions."
msgstr ""
-#: c-family/c.opt:546
+#: c-family/c.opt:554
msgid "Warn about sign differences with format functions."
msgstr ""
-#: c-family/c.opt:550
+#: c-family/c.opt:558
msgid ""
"Warn about calls to snprintf and similar functions that truncate output. "
"Same as -Wformat-truncation=1."
msgstr ""
-#: c-family/c.opt:555
+#: c-family/c.opt:563
msgid "Warn about strftime formats yielding 2-digit years."
msgstr ""
-#: c-family/c.opt:559
+#: c-family/c.opt:567
msgid "Warn about zero-length formats."
msgstr ""
-#: c-family/c.opt:567
+#: c-family/c.opt:575
msgid ""
"Warn about function calls with format strings that write past the end of the "
"destination region."
msgstr ""
-#: c-family/c.opt:572
+#: c-family/c.opt:580
msgid ""
"Warn about calls to snprintf and similar functions that truncate output."
msgstr ""
-#: c-family/c.opt:576
+#: c-family/c.opt:584
msgid "Warn whenever type qualifiers are ignored."
msgstr ""
-#: c-family/c.opt:580
+#: c-family/c.opt:588
msgid "Warn whenever attributes are ignored."
msgstr ""
-#: c-family/c.opt:584
+#: c-family/c.opt:592
msgid ""
"Warn when there is a conversion between pointers that have incompatible "
"types."
msgstr ""
-#: c-family/c.opt:588
+#: c-family/c.opt:596
msgid "Warn about variables which are initialized to themselves."
msgstr ""
-#: c-family/c.opt:592
+#: c-family/c.opt:600
msgid "Warn about implicit declarations."
msgstr ""
-#: c-family/c.opt:600
+#: c-family/c.opt:608
msgid "Warn about implicit conversions from \"float\" to \"double\"."
msgstr ""
-#: c-family/c.opt:604
+#: c-family/c.opt:612
msgid "Warn if \"defined\" is used outside #if."
msgstr ""
-#: c-family/c.opt:608
+#: c-family/c.opt:616
msgid "Warn about implicit function declarations."
msgstr ""
-#: c-family/c.opt:612
+#: c-family/c.opt:620
msgid "Warn when a declaration does not specify a type."
msgstr ""
-#: c-family/c.opt:619
+#: c-family/c.opt:627
msgid ""
"Warn about C++11 inheriting constructors when the base has a variadic "
"constructor."
msgstr ""
-#: c-family/c.opt:623
+#: c-family/c.opt:631
msgid ""
"Warn about incompatible integer to pointer and pointer to integer "
"conversions."
msgstr ""
-#: c-family/c.opt:627
+#: c-family/c.opt:635
msgid "Warn for suspicious integer expressions in boolean context."
msgstr ""
-#: c-family/c.opt:631
+#: c-family/c.opt:639
msgid ""
"Warn when there is a cast to a pointer from an integer of a different size."
msgstr ""
-#: c-family/c.opt:635
+#: c-family/c.opt:643
msgid "Warn about invalid uses of the \"offsetof\" macro."
msgstr ""
-#: c-family/c.opt:639
+#: c-family/c.opt:647
msgid "Warn about PCH files that are found but not used."
msgstr ""
-#: c-family/c.opt:643
+#: c-family/c.opt:651
msgid "Warn when a jump misses a variable initialization."
msgstr ""
-#: c-family/c.opt:647
+#: c-family/c.opt:655
msgid ""
"Warn when a string or character literal is followed by a ud-suffix which "
"does not begin with an underscore."
msgstr ""
-#: c-family/c.opt:651
+#: c-family/c.opt:659
msgid ""
"Warn when a logical operator is suspiciously always evaluating to true or "
"false."
msgstr ""
-#: c-family/c.opt:655
+#: c-family/c.opt:663
msgid ""
"Warn when logical not is used on the left hand side operand of a comparison."
msgstr ""
-#: c-family/c.opt:659
+#: c-family/c.opt:667
msgid "Do not warn about using \"long long\" when -pedantic."
msgstr ""
-#: c-family/c.opt:663
+#: c-family/c.opt:671
msgid "Warn about suspicious declarations of \"main\"."
msgstr ""
-#: c-family/c.opt:671
+#: c-family/c.opt:679
msgid ""
"Warn about suspicious calls to memset where the third argument is constant "
"literal zero and the second is not."
msgstr ""
-#: c-family/c.opt:675
+#: c-family/c.opt:683
msgid ""
"Warn about suspicious calls to memset where the third argument contains the "
"number of elements not multiplied by the element size."
msgstr ""
-#: c-family/c.opt:679
+#: c-family/c.opt:687
msgid ""
"Warn when the indentation of the code does not reflect the block structure."
msgstr ""
-#: c-family/c.opt:683
+#: c-family/c.opt:691
msgid "Warn about possibly missing braces around initializers."
msgstr ""
-#: c-family/c.opt:687
+#: c-family/c.opt:695
msgid "Warn about global functions without previous declarations."
msgstr ""
-#: c-family/c.opt:691
+#: c-family/c.opt:699
msgid "Warn about missing fields in struct initializers."
msgstr ""
-#: c-family/c.opt:695
+#: c-family/c.opt:703
+msgid ""
+"Warn about unsafe macros expanding to multiple statements used as a body of "
+"a clause such as if, else, while, switch, or for."
+msgstr ""
+
+#: c-family/c.opt:707
msgid "Warn on direct multiple inheritance."
msgstr ""
-#: c-family/c.opt:699
+#: c-family/c.opt:711
msgid "Warn on namespace definition."
msgstr ""
-#: c-family/c.opt:703
+#: c-family/c.opt:715
msgid "Warn about missing sized deallocation functions."
msgstr ""
-#: c-family/c.opt:707
+#: c-family/c.opt:719
+msgid ""
+"Warn about suspicious divisions of two sizeof expressions that don't work "
+"correctly with pointers."
+msgstr ""
+
+#: c-family/c.opt:723
msgid ""
"Warn about suspicious length parameters to certain string functions if the "
"argument uses sizeof."
msgstr ""
-#: c-family/c.opt:711
+#: c-family/c.opt:727
msgid "Warn when sizeof is applied on a parameter declared as an array."
msgstr ""
-#: c-family/c.opt:715
+#: c-family/c.opt:731
msgid ""
"Warn about buffer overflow in string manipulation functions like memcpy and "
"strcpy."
msgstr ""
-#: c-family/c.opt:720
+#: c-family/c.opt:736
msgid ""
"Under the control of Object Size type, warn about buffer overflow in string "
"manipulation functions like memcpy and strcpy."
msgstr ""
-#: c-family/c.opt:725
+#: c-family/c.opt:741
msgid "Warn about functions which might be candidates for format attributes."
msgstr ""
-#: c-family/c.opt:729
+#: c-family/c.opt:745
msgid ""
"Suggest that the override keyword be used when the declaration of a virtual "
"function overrides another."
msgstr ""
-#: c-family/c.opt:734
+#: c-family/c.opt:750
msgid "Warn about enumerated switches, with no default, missing a case."
msgstr ""
-#: c-family/c.opt:738
+#: c-family/c.opt:754
msgid "Warn about enumerated switches missing a \"default:\" statement."
msgstr ""
-#: c-family/c.opt:742
+#: c-family/c.opt:758
msgid "Warn about all enumerated switches missing a specific case."
msgstr ""
-#: c-family/c.opt:746
+#: c-family/c.opt:762
msgid "Warn about switches with boolean controlling expression."
msgstr ""
-#: c-family/c.opt:750
+#: c-family/c.opt:766
msgid "Warn on primary template declaration."
msgstr ""
-#: c-family/c.opt:758
+#: c-family/c.opt:774
msgid "Warn about user-specified include directories that do not exist."
msgstr ""
-#: c-family/c.opt:762
+#: c-family/c.opt:778
msgid ""
"Warn about function parameters declared without a type specifier in K&R-"
"style functions."
msgstr ""
-#: c-family/c.opt:766
+#: c-family/c.opt:782
msgid "Warn about global functions without prototypes."
msgstr ""
-#: c-family/c.opt:769 c-family/c.opt:1178 c-family/c.opt:1185
-#: c-family/c.opt:1369 c-family/c.opt:1388 c-family/c.opt:1411
-#: c-family/c.opt:1417 c-family/c.opt:1424 c-family/c.opt:1452
-#: c-family/c.opt:1463 c-family/c.opt:1466 c-family/c.opt:1469
-#: c-family/c.opt:1472 c-family/c.opt:1475 c-family/c.opt:1516
-#: c-family/c.opt:1651 c-family/c.opt:1678 c-family/c.opt:1718
-#: c-family/c.opt:1749 c-family/c.opt:1753 c-family/c.opt:1769
-#: config/ia64/ia64.opt:167 config/ia64/ia64.opt:170 c-family/c-opts.c:433
+#: c-family/c.opt:785 c-family/c.opt:1198 c-family/c.opt:1205
+#: c-family/c.opt:1397 c-family/c.opt:1416 c-family/c.opt:1439
+#: c-family/c.opt:1445 c-family/c.opt:1452 c-family/c.opt:1480
+#: c-family/c.opt:1491 c-family/c.opt:1494 c-family/c.opt:1497
+#: c-family/c.opt:1500 c-family/c.opt:1503 c-family/c.opt:1544
+#: c-family/c.opt:1679 c-family/c.opt:1706 c-family/c.opt:1746
+#: c-family/c.opt:1777 c-family/c.opt:1781 c-family/c.opt:1797
+#: config/ia64/ia64.opt:167 config/ia64/ia64.opt:170 c-family/c-opts.c:431
#, gcc-internal-format
msgid "switch %qs is no longer supported"
msgstr ""
-#: c-family/c.opt:773
+#: c-family/c.opt:789
msgid "Warn about use of multi-character character constants."
msgstr ""
-#: c-family/c.opt:777
+#: c-family/c.opt:793
msgid ""
"Warn about narrowing conversions within { } that are ill-formed in C++11."
msgstr ""
-#: c-family/c.opt:781
+#: c-family/c.opt:797
msgid "Warn about \"extern\" declarations not at file scope."
msgstr ""
-#: c-family/c.opt:785
+#: c-family/c.opt:801
msgid ""
"Warn when a noexcept expression evaluates to false even though the "
"expression can't actually throw."
msgstr ""
-#: c-family/c.opt:789
+#: c-family/c.opt:805
msgid ""
"Warn if C++1z noexcept function type will change the mangled name of a "
"symbol."
msgstr ""
-#: c-family/c.opt:793
+#: c-family/c.opt:809
msgid ""
"Warn when non-templatized friend functions are declared within a template."
msgstr ""
-#: c-family/c.opt:797
+#: c-family/c.opt:813
+msgid "Warn for unsafe raw memory writes to objects of class types."
+msgstr ""
+
+#: c-family/c.opt:817
msgid "Warn about non-virtual destructors."
msgstr ""
-#: c-family/c.opt:801
+#: c-family/c.opt:821
msgid ""
"Warn about NULL being passed to argument slots marked as requiring non-NULL."
msgstr ""
-#: c-family/c.opt:817
+#: c-family/c.opt:837
msgid ""
"-Wnormalized=[none|id|nfc|nfkc]\tWarn about non-normalized Unicode strings."
msgstr ""
-#: c-family/c.opt:824
+#: c-family/c.opt:844
msgid "argument %qs to %<-Wnormalized%> not recognized"
msgstr ""
-#: c-family/c.opt:840
+#: c-family/c.opt:860
msgid "Warn if a C-style cast is used in a program."
msgstr ""
-#: c-family/c.opt:844
+#: c-family/c.opt:864
msgid "Warn for obsolescent usage in a declaration."
msgstr ""
-#: c-family/c.opt:848
+#: c-family/c.opt:868
msgid "Warn if an old-style parameter definition is used."
msgstr ""
-#: c-family/c.opt:852
+#: c-family/c.opt:872
msgid "Warn if a simd directive is overridden by the vectorizer cost model."
msgstr ""
-#: c-family/c.opt:856
+#: c-family/c.opt:876
msgid ""
"Warn if a string is longer than the maximum portable length specified by the "
"standard."
msgstr ""
-#: c-family/c.opt:860
+#: c-family/c.opt:880
msgid "Warn about overloaded virtual function names."
msgstr ""
-#: c-family/c.opt:864
+#: c-family/c.opt:884
msgid "Warn about overriding initializers without side effects."
msgstr ""
-#: c-family/c.opt:868
+#: c-family/c.opt:888
msgid "Warn about overriding initializers with side effects."
msgstr ""
-#: c-family/c.opt:872
+#: c-family/c.opt:892
msgid "Warn about packed bit-fields whose offset changed in GCC 4.4."
msgstr ""
-#: c-family/c.opt:876
+#: c-family/c.opt:896
msgid "Warn about possibly missing parentheses."
msgstr ""
-#: c-family/c.opt:884
+#: c-family/c.opt:904
msgid "Warn when converting the type of pointers to member functions."
msgstr ""
-#: c-family/c.opt:888
+#: c-family/c.opt:908
msgid "Warn about function pointer arithmetic."
msgstr ""
-#: c-family/c.opt:892
+#: c-family/c.opt:912
msgid "Warn when a pointer differs in signedness in an assignment."
msgstr ""
-#: c-family/c.opt:896
+#: c-family/c.opt:916
msgid "Warn when a pointer is compared with a zero character constant."
msgstr ""
-#: c-family/c.opt:900
+#: c-family/c.opt:920
msgid "Warn when a pointer is cast to an integer of a different size."
msgstr ""
-#: c-family/c.opt:904
+#: c-family/c.opt:924
msgid "Warn about misuses of pragmas."
msgstr ""
-#: c-family/c.opt:908
+#: c-family/c.opt:928
msgid ""
"Warn if a property for an Objective-C object has no assign semantics "
"specified."
msgstr ""
-#: c-family/c.opt:912
+#: c-family/c.opt:932
msgid "Warn if inherited methods are unimplemented."
msgstr ""
-#: c-family/c.opt:916 c-family/c.opt:920
+#: c-family/c.opt:936 c-family/c.opt:940
msgid "Warn for placement new expressions with undefined behavior."
msgstr ""
-#: c-family/c.opt:924
+#: c-family/c.opt:944
msgid "Warn about multiple declarations of the same object."
msgstr ""
-#: c-family/c.opt:928
+#: c-family/c.opt:948
msgid "Warn about uses of register storage specifier."
msgstr ""
-#: c-family/c.opt:932
+#: c-family/c.opt:952
msgid "Warn when the compiler reorders code."
msgstr ""
-#: c-family/c.opt:936
+#: c-family/c.opt:956
msgid ""
"Warn whenever a function's return type defaults to \"int\" (C), or about "
"inconsistent return types (C++)."
msgstr ""
-#: c-family/c.opt:940
+#: c-family/c.opt:960
msgid "Warn on suspicious constructs involving reverse scalar storage order."
msgstr ""
-#: c-family/c.opt:944
+#: c-family/c.opt:964
msgid "Warn if a selector has multiple methods."
msgstr ""
-#: c-family/c.opt:948
+#: c-family/c.opt:968
msgid "Warn about possible violations of sequence point rules."
msgstr ""
-#: c-family/c.opt:952
+#: c-family/c.opt:972
msgid "Warn if a local declaration hides an instance variable."
msgstr ""
-#: c-family/c.opt:956 c-family/c.opt:960
+#: c-family/c.opt:976 c-family/c.opt:980
msgid "Warn if left shift of a signed value overflows."
msgstr ""
-#: c-family/c.opt:964
+#: c-family/c.opt:984
msgid "Warn if shift count is negative."
msgstr ""
-#: c-family/c.opt:968
+#: c-family/c.opt:988
msgid "Warn if shift count >= width of type."
msgstr ""
-#: c-family/c.opt:972
+#: c-family/c.opt:992
msgid "Warn if left shifting a negative value."
msgstr ""
-#: c-family/c.opt:976
+#: c-family/c.opt:996
msgid "Warn about signed-unsigned comparisons."
msgstr ""
-#: c-family/c.opt:984
+#: c-family/c.opt:1004
msgid ""
"Warn for implicit type conversions between signed and unsigned integers."
msgstr ""
-#: c-family/c.opt:988
+#: c-family/c.opt:1008
msgid "Warn when overload promotes from unsigned to signed."
msgstr ""
-#: c-family/c.opt:992
+#: c-family/c.opt:1012
msgid "Warn about uncasted NULL used as sentinel."
msgstr ""
-#: c-family/c.opt:996
+#: c-family/c.opt:1016
msgid "Warn about unprototyped function declarations."
msgstr ""
-#: c-family/c.opt:1008
+#: c-family/c.opt:1028
msgid "Warn if type signatures of candidate methods do not match exactly."
msgstr ""
-#: c-family/c.opt:1012
+#: c-family/c.opt:1032
msgid ""
"Warn when __sync_fetch_and_nand and __sync_nand_and_fetch built-in functions "
"are used."
msgstr ""
-#: c-family/c.opt:1016
+#: c-family/c.opt:1036
msgid "Deprecated. This switch has no effect."
msgstr ""
-#: c-family/c.opt:1024
+#: c-family/c.opt:1044
msgid "Warn if a comparison always evaluates to true or false."
msgstr ""
-#: c-family/c.opt:1028
+#: c-family/c.opt:1048
msgid "Warn if a throw expression will always result in a call to terminate()."
msgstr ""
-#: c-family/c.opt:1032
+#: c-family/c.opt:1052
msgid "Warn about features not present in traditional C."
msgstr ""
-#: c-family/c.opt:1036
+#: c-family/c.opt:1056
msgid ""
"Warn of prototypes causing type conversions different from what would happen "
"in the absence of prototype."
msgstr ""
-#: c-family/c.opt:1040
+#: c-family/c.opt:1060
msgid ""
"Warn if trigraphs are encountered that might affect the meaning of the "
"program."
msgstr ""
-#: c-family/c.opt:1044
+#: c-family/c.opt:1064
msgid "Warn about @selector()s without previously declared methods."
msgstr ""
-#: c-family/c.opt:1048
+#: c-family/c.opt:1068
msgid "Warn if an undefined macro is used in an #if directive."
msgstr ""
-#: c-family/c.opt:1060
+#: c-family/c.opt:1080
msgid "Warn about unrecognized pragmas."
msgstr ""
-#: c-family/c.opt:1064
+#: c-family/c.opt:1084
msgid "Warn about unsuffixed float constants."
msgstr ""
-#: c-family/c.opt:1072
+#: c-family/c.opt:1092
msgid "Warn when typedefs locally defined in a function are not used."
msgstr ""
-#: c-family/c.opt:1076
+#: c-family/c.opt:1096
msgid "Warn about macros defined in the main file that are not used."
msgstr ""
-#: c-family/c.opt:1080
+#: c-family/c.opt:1100
msgid ""
"Warn if a caller of a function, marked with attribute warn_unused_result, "
"does not use its return value."
msgstr ""
-#: c-family/c.opt:1088 c-family/c.opt:1092
+#: c-family/c.opt:1108 c-family/c.opt:1112
msgid "Warn when a const variable is unused."
msgstr ""
-#: c-family/c.opt:1096
+#: c-family/c.opt:1116
msgid "Warn about using variadic macros."
msgstr ""
-#: c-family/c.opt:1100
+#: c-family/c.opt:1120
msgid ""
"Warn about questionable usage of the macros used to retrieve variable "
"arguments."
msgstr ""
-#: c-family/c.opt:1104
+#: c-family/c.opt:1124
msgid "Warn if a variable length array is used."
msgstr ""
-#: c-family/c.opt:1108
+#: c-family/c.opt:1128
msgid ""
"-Wvla-larger-than=<number>\tWarn on unbounded uses of variable-length "
"arrays, and on bounded uses of variable-length arrays whose bound can be "
"larger than <number> bytes."
msgstr ""
-#: c-family/c.opt:1114
+#: c-family/c.opt:1134
msgid "Warn when a register variable is declared volatile."
msgstr ""
-#: c-family/c.opt:1118
+#: c-family/c.opt:1138
msgid "Warn on direct virtual inheritance."
msgstr ""
-#: c-family/c.opt:1122
+#: c-family/c.opt:1142
msgid "Warn if a virtual base has a non-trivial move assignment operator."
msgstr ""
-#: c-family/c.opt:1126
+#: c-family/c.opt:1146
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."
msgstr ""
-#: c-family/c.opt:1130
+#: c-family/c.opt:1150
msgid "Warn when a literal '0' is used as null pointer."
msgstr ""
-#: c-family/c.opt:1134
+#: c-family/c.opt:1154
msgid "Warn about useless casts."
msgstr ""
-#: c-family/c.opt:1138
+#: c-family/c.opt:1158
msgid ""
"Warn if a class type has a base or a field whose type uses the anonymous "
"namespace or depends on a type with no linkage."
msgstr ""
-#: c-family/c.opt:1142
+#: c-family/c.opt:1162
msgid ""
"Warn when a declaration has duplicate const, volatile, restrict or _Atomic "
"specifier."
msgstr ""
-#: c-family/c.opt:1146
+#: c-family/c.opt:1166
msgid ""
"Warn when an argument passed to a restrict-qualified parameter aliases with "
"another argument."
msgstr ""
-#: c-family/c.opt:1151
+#: c-family/c.opt:1171
msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)."
msgstr ""
-#: c-family/c.opt:1159
+#: c-family/c.opt:1179
msgid ""
"The version of the C++ ABI used for -Wabi warnings and link compatibility "
"aliases."
msgstr ""
-#: c-family/c.opt:1163
+#: c-family/c.opt:1183
msgid "Enforce class member access control semantics."
msgstr ""
-#: c-family/c.opt:1167
+#: c-family/c.opt:1187
msgid "-fada-spec-parent=unit Dump Ada specs as child units of given parent."
msgstr ""
-#: c-family/c.opt:1171
+#: c-family/c.opt:1191
msgid "Support C++17 allocation of over-aligned types."
msgstr ""
-#: c-family/c.opt:1175
+#: c-family/c.opt:1195
msgid ""
"-faligned-new=<N> Use C++17 over-aligned type allocation for alignments "
"greater than N."
msgstr ""
-#: c-family/c.opt:1182
+#: c-family/c.opt:1202
msgid "Allow variadic functions without named parameter."
msgstr ""
-#: c-family/c.opt:1186 c-family/c.opt:1425 c-family/c.opt:1750
-#: c-family/c.opt:1754 c-family/c.opt:1770
+#: c-family/c.opt:1206 c-family/c.opt:1453 c-family/c.opt:1778
+#: c-family/c.opt:1782 c-family/c.opt:1798
msgid "No longer supported."
msgstr ""
-#: c-family/c.opt:1190
+#: c-family/c.opt:1210
msgid "Recognize the \"asm\" keyword."
msgstr ""
-#: c-family/c.opt:1198
+#: c-family/c.opt:1218
msgid "Recognize built-in functions."
msgstr ""
-#: c-family/c.opt:1205
+#: c-family/c.opt:1225
msgid "Where shorter, use canonicalized paths to systems headers."
msgstr ""
-#: c-family/c.opt:1209
+#: c-family/c.opt:1229
msgid ""
"Add Pointer Bounds Checker instrumentation. fchkp-* flags are used to "
"control instrumentation. Currently available for C, C++ and ObjC."
msgstr ""
-#: c-family/c.opt:1214
+#: c-family/c.opt:1234
msgid "Generate pointer bounds checks for variables with incomplete type."
msgstr ""
-#: c-family/c.opt:1218
+#: c-family/c.opt:1238
msgid ""
"Use zero bounds for all incoming arguments in 'main' function. It helps "
"when instrumented binaries are used with legacy libs."
msgstr ""
-#: c-family/c.opt:1223
+#: c-family/c.opt:1243
msgid ""
"Forces Pointer Bounds Checker to use narrowed bounds for address of the "
"first field in the structure. By default pointer to the first field has the "
"same bounds as pointer to the whole structure."
msgstr ""
-#: c-family/c.opt:1229
+#: c-family/c.opt:1249
msgid ""
"Control how Pointer Bounds Checker handle pointers to object fields. When "
"narrowing is on, field bounds are used. Otherwise full object bounds are "
"used."
msgstr ""
-#: c-family/c.opt:1234
+#: c-family/c.opt:1254
msgid ""
"Forces Pointer Bounds Checker to use bounds of the innermost arrays in case "
"of nested static arrays access. By default outermost array is used."
msgstr ""
-#: c-family/c.opt:1239
+#: c-family/c.opt:1259
msgid ""
"Forces Pointer Bounds Checker to treat all trailing arrays in structures as "
"possibly flexible. By default only arrays fields with zero length or that "
"are marked with attribute bnd_variable_size are treated as flexible."
msgstr ""
-#: c-family/c.opt:1245
+#: c-family/c.opt:1265
msgid ""
"Allow Pointer Bounds Checker optimizations. By default allowed on "
"optimization levels >0."
msgstr ""
-#: c-family/c.opt:1250
+#: c-family/c.opt:1270
msgid ""
"Allow to use *_nobnd versions of string functions by Pointer Bounds Checker."
msgstr ""
-#: c-family/c.opt:1254
+#: c-family/c.opt:1274
msgid ""
"Allow to use *_nochk versions of string functions by Pointer Bounds Checker."
msgstr ""
-#: c-family/c.opt:1258
+#: c-family/c.opt:1278
msgid ""
"Use statically initialized variable for vars bounds instead of generating "
"them each time it is required."
msgstr ""
-#: c-family/c.opt:1263
+#: c-family/c.opt:1283
msgid ""
"Use statically initialized variable for constant bounds instead of "
"generating them each time it is required."
msgstr ""
-#: c-family/c.opt:1268
+#: c-family/c.opt:1288
msgid ""
"With this option zero size obtained dynamically for objects with incomplete "
"type will be treated as infinite."
msgstr ""
-#: c-family/c.opt:1273
+#: c-family/c.opt:1293
msgid "Generate checks for all read accesses to memory."
msgstr ""
-#: c-family/c.opt:1277
+#: c-family/c.opt:1297
msgid "Generate checks for all write accesses to memory."
msgstr ""
-#: c-family/c.opt:1281
+#: c-family/c.opt:1301
msgid "Generate bounds stores for pointer writes."
msgstr ""
-#: c-family/c.opt:1285
+#: c-family/c.opt:1305
msgid "Generate bounds passing for calls."
msgstr ""
-#: c-family/c.opt:1289
+#: c-family/c.opt:1309
msgid "Instrument only functions marked with bnd_instrument attribute."
msgstr ""
-#: c-family/c.opt:1293
+#: c-family/c.opt:1313
msgid "Transform instrumented builtin calls into calls to wrappers."
msgstr ""
-#: c-family/c.opt:1303
+#: c-family/c.opt:1323
msgid "Enable Cilk Plus."
msgstr ""
-#: c-family/c.opt:1307
+#: c-family/c.opt:1327
msgid "Enable support for C++ concepts."
msgstr ""
-#: c-family/c.opt:1311
+#: c-family/c.opt:1331
msgid "Allow the arguments of the '?' operator to have different types."
msgstr ""
-#: c-family/c.opt:1318
+#: c-family/c.opt:1338
#, c-format
msgid "no class name specified with %qs"
msgstr ""
-#: c-family/c.opt:1319
+#: c-family/c.opt:1339
msgid "-fconst-string-class=<name>\tUse class <name> for constant strings."
msgstr ""
-#: c-family/c.opt:1323
+#: c-family/c.opt:1343
msgid "-fconstexpr-depth=<number>\tSpecify maximum constexpr recursion depth."
msgstr ""
-#: c-family/c.opt:1327
+#: c-family/c.opt:1347
msgid ""
"-fconstexpr-loop-limit=<number>\tSpecify maximum constexpr loop iteration "
"count."
msgstr ""
-#: c-family/c.opt:1331
+#: c-family/c.opt:1351
msgid "Emit debug annotations during preprocessing."
msgstr ""
-#: c-family/c.opt:1335
+#: c-family/c.opt:1355
msgid ""
"-fdeduce-init-list\tenable deduction of std::initializer_list for a template "
"type parameter from a brace-enclosed initializer-list."
msgstr ""
-#: c-family/c.opt:1339
+#: c-family/c.opt:1359
msgid "Factor complex constructors and destructors to favor space over speed."
msgstr ""
-#: c-family/c.opt:1347
+#: c-family/c.opt:1367
+msgid "Print hierarchical comparisons when template types are mismatched."
+msgstr ""
+
+#: c-family/c.opt:1371
msgid "Preprocess directives only."
msgstr ""
-#: c-family/c.opt:1351
+#: c-family/c.opt:1375
msgid "Permit '$' as an identifier character."
msgstr ""
-#: c-family/c.opt:1355
+#: c-family/c.opt:1379
msgid "Write all declarations as Ada code transitively."
msgstr ""
-#: c-family/c.opt:1359
+#: c-family/c.opt:1383
msgid "Write all declarations as Ada code for the given file only."
msgstr ""
-#: c-family/c.opt:1366
+#: c-family/c.opt:1390
+msgid "-fno-elide-type Do not elide common elements in template comparisons."
+msgstr ""
+
+#: c-family/c.opt:1394
msgid "Generate code to check exception specifications."
msgstr ""
-#: c-family/c.opt:1373
+#: c-family/c.opt:1401
msgid ""
"-fexec-charset=<cset>\tConvert all strings and character constants to "
"character set <cset>."
msgstr ""
-#: c-family/c.opt:1377
+#: c-family/c.opt:1405
msgid "Permit universal character names (\\u and \\U) in identifiers."
msgstr ""
-#: c-family/c.opt:1381
+#: c-family/c.opt:1409
msgid ""
"-finput-charset=<cset>\tSpecify the default character set for source files."
msgstr ""
-#: c-family/c.opt:1385
+#: c-family/c.opt:1413
msgid ""
"Support dynamic initialization of thread-local variables in a different "
"translation unit."
msgstr ""
-#: c-family/c.opt:1392
+#: c-family/c.opt:1420
msgid "Scope of for-init-statement variables is local to the loop."
msgstr ""
-#: c-family/c.opt:1396
+#: c-family/c.opt:1424
msgid "Do not assume that standard C libraries and \"main\" exist."
msgstr ""
-#: c-family/c.opt:1400
+#: c-family/c.opt:1428
msgid "Recognize GNU-defined keywords."
msgstr ""
-#: c-family/c.opt:1404
+#: c-family/c.opt:1432
msgid "Generate code for GNU runtime environment."
msgstr ""
-#: c-family/c.opt:1408
+#: c-family/c.opt:1436
msgid "Use traditional GNU semantics for inline functions."
msgstr ""
-#: c-family/c.opt:1414
+#: c-family/c.opt:1442
msgid ""
"-fhandle-exceptions has been renamed -fexceptions (and is now on by default)"
msgstr ""
-#: c-family/c.opt:1421
+#: c-family/c.opt:1449
msgid "Assume normal C execution environment."
msgstr ""
-#: c-family/c.opt:1429
+#: c-family/c.opt:1457
msgid "Export functions even if they can be inlined."
msgstr ""
-#: c-family/c.opt:1433
+#: c-family/c.opt:1461
msgid "Emit implicit instantiations of inline templates."
msgstr ""
-#: c-family/c.opt:1437
+#: c-family/c.opt:1465
msgid "Emit implicit instantiations of templates."
msgstr ""
-#: c-family/c.opt:1441
+#: c-family/c.opt:1469
msgid "Implement C++17 inheriting constructor semantics."
msgstr ""
-#: c-family/c.opt:1445
+#: c-family/c.opt:1473
msgid "Inject friend functions into enclosing namespace."
msgstr ""
-#: c-family/c.opt:1449
+#: c-family/c.opt:1477
msgid "Don't emit dllexported inline functions unless needed."
msgstr ""
-#: c-family/c.opt:1456
+#: c-family/c.opt:1484
msgid ""
"Allow implicit conversions between vectors with differing numbers of "
"subparts and/or differing element types."
msgstr ""
-#: c-family/c.opt:1460
+#: c-family/c.opt:1488
msgid "Don't warn about uses of Microsoft extensions."
msgstr ""
-#: c-family/c.opt:1479
+#: c-family/c.opt:1507
msgid ""
"Implement resolution of DR 150 for matching of template template arguments."
msgstr ""
-#: c-family/c.opt:1483
+#: c-family/c.opt:1511
msgid "Generate code for NeXT (Apple Mac OS X) runtime environment."
msgstr ""
-#: c-family/c.opt:1487
+#: c-family/c.opt:1515
msgid "Assume that receivers of Objective-C messages may be nil."
msgstr ""
-#: c-family/c.opt:1491
+#: c-family/c.opt:1519
msgid ""
"Allow access to instance variables as if they were local declarations within "
"instance method implementations."
msgstr ""
-#: c-family/c.opt:1495
+#: c-family/c.opt:1523
msgid ""
"-fvisibility=[private|protected|public|package]\tSet the default symbol "
"visibility."
msgstr ""
-#: c-family/c.opt:1498
+#: c-family/c.opt:1526
#, c-format
msgid "unrecognized ivar visibility value %qs"
msgstr ""
-#: c-family/c.opt:1520
+#: c-family/c.opt:1548
msgid ""
"Treat a throw() exception specification as noexcept to improve code size."
msgstr ""
-#: c-family/c.opt:1524
+#: c-family/c.opt:1552
msgid ""
"Specify which ABI to use for Objective-C family code and meta-data "
"generation."
msgstr ""
-#: c-family/c.opt:1530
+#: c-family/c.opt:1558
msgid ""
"Generate special Objective-C methods to initialize/destroy non-POD C++ "
"ivars, if needed."
msgstr ""
-#: c-family/c.opt:1534
+#: c-family/c.opt:1562
msgid "Allow fast jumps to the message dispatcher."
msgstr ""
-#: c-family/c.opt:1540
+#: c-family/c.opt:1568
msgid "Enable Objective-C exception and synchronization syntax."
msgstr ""
-#: c-family/c.opt:1544
+#: c-family/c.opt:1572
msgid "Enable garbage collection (GC) in Objective-C/Objective-C++ programs."
msgstr ""
-#: c-family/c.opt:1548
+#: c-family/c.opt:1576
msgid ""
"Enable inline checks for nil receivers with the NeXT runtime and ABI version "
"2."
msgstr ""
-#: c-family/c.opt:1553
+#: c-family/c.opt:1581
msgid "Enable Objective-C setjmp exception handling runtime."
msgstr ""
-#: c-family/c.opt:1557
+#: c-family/c.opt:1585
msgid "Conform to the Objective-C 1.0 language as implemented in GCC 4.0."
msgstr ""
-#: c-family/c.opt:1561
+#: c-family/c.opt:1589
msgid "Enable OpenACC."
msgstr ""
-#: c-family/c.opt:1565
+#: c-family/c.opt:1593
msgid "Specify default OpenACC compute dimensions."
msgstr ""
-#: c-family/c.opt:1569
+#: c-family/c.opt:1597
msgid "Enable OpenMP (implies -frecursive in Fortran)."
msgstr ""
-#: c-family/c.opt:1573
+#: c-family/c.opt:1601
msgid "Enable OpenMP's SIMD directives."
msgstr ""
-#: c-family/c.opt:1577
+#: c-family/c.opt:1605
msgid "Recognize C++ keywords like \"compl\" and \"xor\"."
msgstr ""
-#: c-family/c.opt:1588
+#: c-family/c.opt:1616
msgid "Look for and use PCH files even when preprocessing."
msgstr ""
-#: c-family/c.opt:1592
+#: c-family/c.opt:1620
msgid "Downgrade conformance errors to warnings."
msgstr ""
-#: c-family/c.opt:1596
+#: c-family/c.opt:1624
msgid "Enable Plan 9 language extensions."
msgstr ""
-#: c-family/c.opt:1600
+#: c-family/c.opt:1628
msgid "Treat the input file as already preprocessed."
msgstr ""
-#: c-family/c.opt:1608
+#: c-family/c.opt:1636
msgid ""
"-ftrack-macro-expansion=<0|1|2> Track locations of tokens coming from macro "
"expansion and display them in error messages."
msgstr ""
-#: c-family/c.opt:1612
+#: c-family/c.opt:1640
msgid ""
"-fno-pretty-templates Do not pretty-print template specializations as the "
"template signature followed by the arguments."
msgstr ""
-#: c-family/c.opt:1616
+#: c-family/c.opt:1644
msgid "Treat known sprintf return values as constants."
msgstr ""
-#: c-family/c.opt:1620
+#: c-family/c.opt:1648
msgid ""
"Used in Fix-and-Continue mode to indicate that object files may be swapped "
"in at runtime."
msgstr ""
-#: c-family/c.opt:1624
+#: c-family/c.opt:1652
msgid "Enable automatic template instantiation."
msgstr ""
-#: c-family/c.opt:1628
+#: c-family/c.opt:1656
msgid "Generate run time type descriptor information."
msgstr ""
-#: c-family/c.opt:1632 ada/gcc-interface/lang.opt:77
+#: c-family/c.opt:1660 ada/gcc-interface/lang.opt:77
msgid "Use the narrowest integer type possible for enumeration types."
msgstr ""
-#: c-family/c.opt:1636
+#: c-family/c.opt:1664
msgid "Force the underlying type for \"wchar_t\" to be \"unsigned short\"."
msgstr ""
-#: c-family/c.opt:1640
+#: c-family/c.opt:1668
msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed."
msgstr ""
-#: c-family/c.opt:1644 ada/gcc-interface/lang.opt:81
+#: c-family/c.opt:1672 ada/gcc-interface/lang.opt:81
msgid "Make \"char\" signed by default."
msgstr ""
-#: c-family/c.opt:1648
+#: c-family/c.opt:1676
msgid "Enable C++14 sized deallocation support."
msgstr ""
-#: c-family/c.opt:1655
+#: c-family/c.opt:1683
msgid ""
"-fsso-struct=[big-endian|little-endian|native]\tSet the default scalar "
"storage order."
msgstr ""
-#: c-family/c.opt:1658
+#: c-family/c.opt:1686
#, c-format
msgid "unrecognized scalar storage order value %qs"
msgstr ""
-#: c-family/c.opt:1671
+#: c-family/c.opt:1699
msgid "Display statistics accumulated during compilation."
msgstr ""
-#: c-family/c.opt:1675
+#: c-family/c.opt:1703
msgid ""
"Assume that values of enumeration type are always within the minimum range "
"of that type."
msgstr ""
-#: c-family/c.opt:1682 c-family/c.opt:1687
+#: c-family/c.opt:1710 c-family/c.opt:1715
msgid ""
"Follow the C++17 evaluation order requirements for assignment expressions, "
"shift, member function calls, etc."
msgstr ""
-#: c-family/c.opt:1704
+#: c-family/c.opt:1732
msgid "-ftabstop=<number>\tDistance between tab stops for column reporting."
msgstr ""
-#: c-family/c.opt:1708
+#: c-family/c.opt:1736
msgid ""
"Set the maximum number of template instantiation notes for a single warning "
"or error."
msgstr ""
-#: c-family/c.opt:1715
+#: c-family/c.opt:1743
msgid ""
"-ftemplate-depth=<number>\tSpecify maximum template instantiation depth."
msgstr ""
-#: c-family/c.opt:1722
+#: c-family/c.opt:1750
msgid ""
"-fno-threadsafe-statics\tDo not generate thread-safe code for initializing "
"local statics."
msgstr ""
-#: c-family/c.opt:1726
+#: c-family/c.opt:1754
msgid ""
"When \"signed\" or \"unsigned\" is not given make the bitfield unsigned."
msgstr ""
-#: c-family/c.opt:1730
+#: c-family/c.opt:1758
msgid "Make \"char\" unsigned by default."
msgstr ""
-#: c-family/c.opt:1734
+#: c-family/c.opt:1762
msgid "Use __cxa_atexit to register destructors."
msgstr ""
-#: c-family/c.opt:1738
+#: c-family/c.opt:1766
msgid "Use __cxa_get_exception_ptr in exception handling."
msgstr ""
-#: c-family/c.opt:1742
+#: c-family/c.opt:1770
msgid "Marks all inlined functions and methods as having hidden visibility."
msgstr ""
-#: c-family/c.opt:1746
+#: c-family/c.opt:1774
msgid "Changes visibility to match Microsoft Visual Studio by default."
msgstr ""
-#: c-family/c.opt:1758
+#: c-family/c.opt:1786
msgid "Emit common-like symbols as weak symbols."
msgstr ""
-#: c-family/c.opt:1762
+#: c-family/c.opt:1790
msgid ""
"-fwide-exec-charset=<cset>\tConvert all wide strings and character constants "
"to character set <cset>."
msgstr ""
-#: c-family/c.opt:1766
+#: c-family/c.opt:1794
msgid "Generate a #line directive pointing at the current working directory."
msgstr ""
-#: c-family/c.opt:1774
+#: c-family/c.opt:1802
msgid ""
"Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode."
msgstr ""
-#: c-family/c.opt:1778
+#: c-family/c.opt:1806
msgid "Dump declarations to a .decl file."
msgstr ""
-#: c-family/c.opt:1782
+#: c-family/c.opt:1810
msgid ""
"-femit-struct-debug-baseonly\tAggressive reduced debug info for structs."
msgstr ""
-#: c-family/c.opt:1786
+#: c-family/c.opt:1814
msgid ""
"-femit-struct-debug-reduced\tConservative reduced debug info for structs."
msgstr ""
-#: c-family/c.opt:1790
+#: c-family/c.opt:1818
msgid ""
"-femit-struct-debug-detailed=<spec-list>\tDetailed reduced debug info for "
"structs."
msgstr ""
-#: c-family/c.opt:1794
+#: c-family/c.opt:1822
msgid ""
"Interpret imaginary, fixed-point, or other gnu number suffix as the "
"corresponding number literal rather than a user-defined number literal."
msgstr ""
-#: c-family/c.opt:1799
+#: c-family/c.opt:1827
msgid "-idirafter <dir>\tAdd <dir> to the end of the system include path."
msgstr ""
-#: c-family/c.opt:1803
+#: c-family/c.opt:1831
msgid "-imacros <file>\tAccept definition of macros in <file>."
msgstr ""
-#: c-family/c.opt:1807
+#: c-family/c.opt:1835
msgid "-imultilib <dir>\tSet <dir> to be the multilib include subdirectory."
msgstr ""
-#: c-family/c.opt:1811
+#: c-family/c.opt:1839
msgid "-include <file>\tInclude the contents of <file> before other files."
msgstr ""
-#: c-family/c.opt:1815
+#: c-family/c.opt:1843
msgid "-iprefix <path>\tSpecify <path> as a prefix for next two options."
msgstr ""
-#: c-family/c.opt:1819
+#: c-family/c.opt:1847
msgid "-isysroot <dir>\tSet <dir> to be the system root directory."
msgstr ""
-#: c-family/c.opt:1823
+#: c-family/c.opt:1851
msgid "-isystem <dir>\tAdd <dir> to the start of the system include path."
msgstr ""
-#: c-family/c.opt:1827
+#: c-family/c.opt:1855
msgid "-iquote <dir>\tAdd <dir> to the end of the quote include path."
msgstr ""
-#: c-family/c.opt:1831
+#: c-family/c.opt:1859
msgid "-iwithprefix <dir>\tAdd <dir> to the end of the system include path."
msgstr ""
-#: c-family/c.opt:1835
+#: c-family/c.opt:1863
msgid ""
"-iwithprefixbefore <dir>\tAdd <dir> to the end of the main include path."
msgstr ""
-#: c-family/c.opt:1845
+#: c-family/c.opt:1873
msgid ""
"Do not search standard system include directories (those specified with -"
"isystem will still be used)."
msgstr ""
-#: c-family/c.opt:1849
+#: c-family/c.opt:1877
msgid "Do not search standard system include directories for C++."
msgstr ""
-#: c-family/c.opt:1861
+#: c-family/c.opt:1889
msgid "Generate C header of platform-specific features."
msgstr ""
-#: c-family/c.opt:1865
+#: c-family/c.opt:1893
msgid "Remap file names when including files."
msgstr ""
-#: c-family/c.opt:1869 c-family/c.opt:1873
+#: c-family/c.opt:1897 c-family/c.opt:1901
msgid ""
"Conform to the ISO 1998 C++ standard revised by the 2003 technical "
"corrigendum."
msgstr ""
-#: c-family/c.opt:1877
+#: c-family/c.opt:1905
msgid "Conform to the ISO 2011 C++ standard."
msgstr ""
-#: c-family/c.opt:1881
+#: c-family/c.opt:1909
msgid "Deprecated in favor of -std=c++11."
msgstr ""
-#: c-family/c.opt:1885
+#: c-family/c.opt:1913
msgid "Deprecated in favor of -std=c++14."
msgstr ""
-#: c-family/c.opt:1889
+#: c-family/c.opt:1917
msgid "Conform to the ISO 2014 C++ standard."
msgstr ""
-#: c-family/c.opt:1893
+#: c-family/c.opt:1921
msgid ""
"Conform to the ISO 2017(?) C++ draft standard (experimental and incomplete "
"support)."
msgstr ""
-#: c-family/c.opt:1900 c-family/c.opt:1997
+#: c-family/c.opt:1928 c-family/c.opt:2025
msgid "Conform to the ISO 2011 C standard."
msgstr ""
-#: c-family/c.opt:1904
+#: c-family/c.opt:1932
msgid "Deprecated in favor of -std=c11."
msgstr ""
-#: c-family/c.opt:1908 c-family/c.opt:1912 c-family/c.opt:1981
+#: c-family/c.opt:1936 c-family/c.opt:1940 c-family/c.opt:2009
msgid "Conform to the ISO 1990 C standard."
msgstr ""
-#: c-family/c.opt:1916 c-family/c.opt:1989
+#: c-family/c.opt:1944 c-family/c.opt:2017
msgid "Conform to the ISO 1999 C standard."
msgstr ""
-#: c-family/c.opt:1920
+#: c-family/c.opt:1948
msgid "Deprecated in favor of -std=c99."
msgstr ""
-#: c-family/c.opt:1924 c-family/c.opt:1929
+#: c-family/c.opt:1952 c-family/c.opt:1957
msgid ""
"Conform to the ISO 1998 C++ standard revised by the 2003 technical "
"corrigendum with GNU extensions."
msgstr ""
-#: c-family/c.opt:1934
+#: c-family/c.opt:1962
msgid "Conform to the ISO 2011 C++ standard with GNU extensions."
msgstr ""
-#: c-family/c.opt:1938
+#: c-family/c.opt:1966
msgid "Deprecated in favor of -std=gnu++11."
msgstr ""
-#: c-family/c.opt:1942
+#: c-family/c.opt:1970
msgid "Deprecated in favor of -std=gnu++14."
msgstr ""
-#: c-family/c.opt:1946
+#: c-family/c.opt:1974
msgid "Conform to the ISO 2014 C++ standard with GNU extensions."
msgstr ""
-#: c-family/c.opt:1950
+#: c-family/c.opt:1978
msgid ""
"Conform to the ISO 201z(7?) C++ draft standard with GNU extensions "
"(experimental and incomplete support)."
msgstr ""
-#: c-family/c.opt:1957
+#: c-family/c.opt:1985
msgid "Conform to the ISO 2011 C standard with GNU extensions."
msgstr ""
-#: c-family/c.opt:1961
+#: c-family/c.opt:1989
msgid "Deprecated in favor of -std=gnu11."
msgstr ""
-#: c-family/c.opt:1965 c-family/c.opt:1969
+#: c-family/c.opt:1993 c-family/c.opt:1997
msgid "Conform to the ISO 1990 C standard with GNU extensions."
msgstr ""
-#: c-family/c.opt:1973
+#: c-family/c.opt:2001
msgid "Conform to the ISO 1999 C standard with GNU extensions."
msgstr ""
-#: c-family/c.opt:1977
+#: c-family/c.opt:2005
msgid "Deprecated in favor of -std=gnu99."
msgstr ""
-#: c-family/c.opt:1985
+#: c-family/c.opt:2013
msgid "Conform to the ISO 1990 C standard as amended in 1994."
msgstr ""
-#: c-family/c.opt:1993
+#: c-family/c.opt:2021
msgid "Deprecated in favor of -std=iso9899:1999."
msgstr ""
-#: c-family/c.opt:2004
+#: c-family/c.opt:2032
msgid "Enable traditional preprocessing."
msgstr ""
-#: c-family/c.opt:2008
+#: c-family/c.opt:2036
msgid "-trigraphs\tSupport ISO C trigraphs."
msgstr ""
-#: c-family/c.opt:2012
+#: c-family/c.opt:2040
msgid "Do not predefine system-specific and GCC-specific macros."
msgstr ""
@@ -8257,7 +8313,7 @@ msgstr ""
msgid "Use simulator runtime."
msgstr ""
-#: config/bfin/bfin.opt:44 config/arm/arm.opt:102
+#: config/bfin/bfin.opt:44 config/arm/arm.opt:111
msgid "Specify the name of the target CPU."
msgstr ""
@@ -8425,7 +8481,7 @@ msgstr ""
msgid "Align variables on a 32-bit boundary."
msgstr ""
-#: config/m68k/m68k.opt:103 config/arm/arm.opt:77 config/nios2/nios2.opt:570
+#: config/m68k/m68k.opt:103 config/arm/arm.opt:86 config/nios2/nios2.opt:570
#: config/nds32/nds32.opt:66 config/c6x/c6x.opt:67
msgid "Specify the name of the target architecture."
msgstr ""
@@ -8558,13 +8614,18 @@ msgstr ""
msgid "Specify the code model."
msgstr ""
-#: config/riscv/riscv.opt:89 config/i386/i386.opt:283
+#: config/riscv/riscv.opt:89
+msgid "Do not generate unaligned memory accesses."
+msgstr ""
+
+#: config/riscv/riscv.opt:93 config/i386/i386.opt:283
+#: config/powerpcspe/aix64.opt:36 config/powerpcspe/linux64.opt:32
#: config/rs6000/aix64.opt:36 config/rs6000/linux64.opt:32
#: config/tilegx/tilegx.opt:57
msgid "Known code models (for use with the -mcmodel= option):"
msgstr ""
-#: config/riscv/riscv.opt:99
+#: config/riscv/riscv.opt:103
msgid "Use %reloc() operators, rather than assembly macros, to load addresses."
msgstr ""
@@ -8659,12 +8720,12 @@ msgstr ""
msgid "The code model option names for -mcmodel:"
msgstr ""
-#: config/aarch64/aarch64.opt:65 config/arm/arm.opt:90
+#: config/aarch64/aarch64.opt:65 config/arm/arm.opt:99
#: config/microblaze/microblaze.opt:60
msgid "Assume target CPU is configured as big endian."
msgstr ""
-#: config/aarch64/aarch64.opt:69 config/i386/i386.opt:929
+#: config/aarch64/aarch64.opt:69 config/i386/i386.opt:933
msgid "Generate code which uses only the general registers."
msgstr ""
@@ -8676,7 +8737,7 @@ msgstr ""
msgid "Workaround for ARM Cortex-A53 Erratum number 843419."
msgstr ""
-#: config/aarch64/aarch64.opt:81 config/arm/arm.opt:155
+#: config/aarch64/aarch64.opt:81 config/arm/arm.opt:164
#: config/microblaze/microblaze.opt:64
msgid "Assume target CPU is configured as little endian."
msgstr ""
@@ -8872,13 +8933,13 @@ msgstr ""
msgid "Specify range of registers to make fixed."
msgstr ""
-#: config/ia64/ia64.opt:118 config/rs6000/sysv4.opt:32
-#: config/alpha/alpha.opt:130
+#: config/ia64/ia64.opt:118 config/powerpcspe/sysv4.opt:32
+#: config/rs6000/sysv4.opt:32 config/alpha/alpha.opt:130
msgid "Specify bit size of immediate TLS offsets."
msgstr ""
#: config/ia64/ia64.opt:122 config/spu/spu.opt:84 config/i386/i386.opt:510
-#: config/s390/s390.opt:197 config/sparc/sparc.opt:138
+#: config/s390/s390.opt:200 config/sparc/sparc.opt:146
#: config/visium/visium.opt:49
msgid "Schedule code for given CPU."
msgstr ""
@@ -9120,7 +9181,7 @@ msgstr ""
msgid "target the software simulator."
msgstr ""
-#: config/ft32/ft32.opt:27 config/s390/s390.opt:228 config/mips/mips.opt:389
+#: config/ft32/ft32.opt:27 config/s390/s390.opt:231 config/mips/mips.opt:389
msgid "Use LRA instead of reload."
msgstr ""
@@ -9220,8 +9281,8 @@ msgstr ""
msgid "Use 64 bit float."
msgstr ""
-#: config/pdp11/pdp11.opt:67 config/rs6000/rs6000.opt:177
-#: config/frv/frv.opt:158
+#: config/pdp11/pdp11.opt:67 config/powerpcspe/powerpcspe.opt:177
+#: config/rs6000/rs6000.opt:177 config/frv/frv.opt:158
msgid "Use hardware floating point."
msgstr ""
@@ -9233,7 +9294,8 @@ msgstr ""
msgid "Use 32 bit int."
msgstr ""
-#: config/pdp11/pdp11.opt:79 config/rs6000/rs6000.opt:173
+#: config/pdp11/pdp11.opt:79 config/powerpcspe/powerpcspe.opt:173
+#: config/rs6000/rs6000.opt:173
msgid "Do not use hardware floating point."
msgstr ""
@@ -9342,12 +9404,12 @@ msgstr ""
msgid "Use 80-bit long double."
msgstr ""
-#: config/i386/i386.opt:204 config/s390/s390.opt:157
+#: config/i386/i386.opt:204 config/s390/s390.opt:160
#: config/sparc/long-double-switch.opt:27 config/alpha/alpha.opt:102
msgid "Use 64-bit long double."
msgstr ""
-#: config/i386/i386.opt:208 config/s390/s390.opt:153
+#: config/i386/i386.opt:208 config/s390/s390.opt:156
#: config/sparc/long-double-switch.opt:23 config/alpha/alpha.opt:98
msgid "Use 128-bit long double."
msgstr ""
@@ -9393,7 +9455,7 @@ msgid "Known assembler dialects (for use with the -masm= option):"
msgstr ""
#: config/i386/i386.opt:271
-msgid "Branches are this expensive (1-5, arbitrary units)."
+msgid "Branches are this expensive (arbitrary units)."
msgstr ""
#: config/i386/i386.opt:275
@@ -9559,422 +9621,430 @@ msgstr ""
msgid "Known ABIs (for use with the -mabi= option):"
msgstr ""
-#: config/i386/i386.opt:543 config/rs6000/rs6000.opt:189
+#: config/i386/i386.opt:543
+msgid ""
+"Use libgcc stubs to save and restore registers clobbered by 64-bit Microsoft "
+"to System V ABI calls."
+msgstr ""
+
+#: config/i386/i386.opt:547 config/powerpcspe/powerpcspe.opt:189
+#: config/rs6000/rs6000.opt:189
msgid "Vector library ABI to use."
msgstr ""
-#: config/i386/i386.opt:547
+#: config/i386/i386.opt:551
msgid ""
"Known vectorization library ABIs (for use with the -mveclibabi= option):"
msgstr ""
-#: config/i386/i386.opt:557
+#: config/i386/i386.opt:561
msgid "Return 8-byte vectors in memory."
msgstr ""
-#: config/i386/i386.opt:561
+#: config/i386/i386.opt:565
msgid "Generate reciprocals instead of divss and sqrtss."
msgstr ""
-#: config/i386/i386.opt:565
+#: config/i386/i386.opt:569
msgid "Control generation of reciprocal estimates."
msgstr ""
-#: config/i386/i386.opt:569
+#: config/i386/i386.opt:573
msgid "Generate cld instruction in the function prologue."
msgstr ""
-#: config/i386/i386.opt:573
+#: config/i386/i386.opt:577
msgid ""
"Generate vzeroupper instruction before a transfer of control flow out of the "
"function."
msgstr ""
-#: config/i386/i386.opt:578
+#: config/i386/i386.opt:582
msgid ""
"Disable Scalar to Vector optimization pass transforming 64-bit integer "
"computations into a vector ones."
msgstr ""
-#: config/i386/i386.opt:583
+#: config/i386/i386.opt:587
msgid ""
"Do dispatch scheduling if processor is bdver1, bdver2, bdver3, bdver4 or "
"znver1 and Haifa scheduling is selected."
msgstr ""
-#: config/i386/i386.opt:588
+#: config/i386/i386.opt:592
msgid ""
"Use 128-bit AVX instructions instead of 256-bit AVX instructions in the auto-"
"vectorizer."
msgstr ""
-#: config/i386/i386.opt:594
+#: config/i386/i386.opt:598
msgid "Generate 32bit i386 code."
msgstr ""
-#: config/i386/i386.opt:598
+#: config/i386/i386.opt:602
msgid "Generate 64bit x86-64 code."
msgstr ""
-#: config/i386/i386.opt:602
+#: config/i386/i386.opt:606
msgid "Generate 32bit x86-64 code."
msgstr ""
-#: config/i386/i386.opt:606
+#: config/i386/i386.opt:610
msgid "Generate 16bit i386 code."
msgstr ""
-#: config/i386/i386.opt:610
+#: config/i386/i386.opt:614
msgid "Support MMX built-in functions."
msgstr ""
-#: config/i386/i386.opt:614
+#: config/i386/i386.opt:618
msgid "Support 3DNow! built-in functions."
msgstr ""
-#: config/i386/i386.opt:618
+#: config/i386/i386.opt:622
msgid "Support Athlon 3Dnow! built-in functions."
msgstr ""
-#: config/i386/i386.opt:622
+#: config/i386/i386.opt:626
msgid "Support MMX and SSE built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:626
+#: config/i386/i386.opt:630
msgid "Support MMX, SSE and SSE2 built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:630
+#: config/i386/i386.opt:634
msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:634
+#: config/i386/i386.opt:638
msgid ""
"Support MMX, SSE, SSE2, SSE3 and SSSE3 built-in functions and code "
"generation."
msgstr ""
-#: config/i386/i386.opt:638
+#: config/i386/i386.opt:642
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1 built-in functions and code "
"generation."
msgstr ""
-#: config/i386/i386.opt:642 config/i386/i386.opt:646
+#: config/i386/i386.opt:646 config/i386/i386.opt:650
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 and SSE4.2 built-in functions "
"and code generation."
msgstr ""
-#: config/i386/i386.opt:650
+#: config/i386/i386.opt:654
msgid ""
"Do not support SSE4.1 and SSE4.2 built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:653
+#: config/i386/i386.opt:657
msgid "%<-msse5%> was removed"
msgstr ""
-#: config/i386/i386.opt:658
+#: config/i386/i386.opt:662
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in "
"functions and code generation."
msgstr ""
-#: config/i386/i386.opt:662
+#: config/i386/i386.opt:666
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and AVX2 built-in "
"functions and code generation."
msgstr ""
-#: config/i386/i386.opt:666
+#: config/i386/i386.opt:670
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F "
"built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:670
+#: config/i386/i386.opt:674
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F "
"and AVX512PF built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:674
+#: config/i386/i386.opt:678
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F "
"and AVX512ER built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:678
+#: config/i386/i386.opt:682
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F "
"and AVX512CD built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:682
+#: config/i386/i386.opt:686
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F "
"and AVX512DQ built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:686
+#: config/i386/i386.opt:690
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F "
"and AVX512BW built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:690
+#: config/i386/i386.opt:694
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F "
"and AVX512VL built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:694
+#: config/i386/i386.opt:698
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F "
"and AVX512IFMA built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:698
+#: config/i386/i386.opt:702
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F "
"and AVX512VBMI built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:702
+#: config/i386/i386.opt:706
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F and "
"AVX5124FMAPS built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:706
+#: config/i386/i386.opt:710
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F and "
"AVX5124VNNIW built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:710
+#: config/i386/i386.opt:714
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F and "
"AVX512VPOPCNTDQ built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:714
+#: config/i386/i386.opt:718
msgid ""
"Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in "
"functions and code generation."
msgstr ""
-#: config/i386/i386.opt:718
+#: config/i386/i386.opt:722
msgid ""
"Support MMX, SSE, SSE2, SSE3 and SSE4A built-in functions and code "
"generation."
msgstr ""
-#: config/i386/i386.opt:722
+#: config/i386/i386.opt:726
msgid "Support FMA4 built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:726
+#: config/i386/i386.opt:730
msgid "Support XOP built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:730
+#: config/i386/i386.opt:734
msgid "Support LWP built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:734
+#: config/i386/i386.opt:738
msgid ""
"Support code generation of Advanced Bit Manipulation (ABM) instructions."
msgstr ""
-#: config/i386/i386.opt:738
+#: config/i386/i386.opt:742
msgid "Support code generation of popcnt instruction."
msgstr ""
-#: config/i386/i386.opt:742
+#: config/i386/i386.opt:746
msgid "Support SGX built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:746
+#: config/i386/i386.opt:750
msgid "Support RDPID built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:750
+#: config/i386/i386.opt:754
msgid "Support BMI built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:754
+#: config/i386/i386.opt:758
msgid "Support BMI2 built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:758
+#: config/i386/i386.opt:762
msgid "Support LZCNT built-in function and code generation."
msgstr ""
-#: config/i386/i386.opt:762
+#: config/i386/i386.opt:766
msgid "Support Hardware Lock Elision prefixes."
msgstr ""
-#: config/i386/i386.opt:766
+#: config/i386/i386.opt:770
msgid "Support RDSEED instruction."
msgstr ""
-#: config/i386/i386.opt:770
+#: config/i386/i386.opt:774
msgid "Support PREFETCHW instruction."
msgstr ""
-#: config/i386/i386.opt:774
+#: config/i386/i386.opt:778
msgid "Support flag-preserving add-carry instructions."
msgstr ""
-#: config/i386/i386.opt:778
+#: config/i386/i386.opt:782
msgid "Support CLFLUSHOPT instructions."
msgstr ""
-#: config/i386/i386.opt:782
+#: config/i386/i386.opt:786
msgid "Support CLWB instruction."
msgstr ""
-#: config/i386/i386.opt:785
+#: config/i386/i386.opt:789
msgid "%<-mpcommit%> was deprecated"
msgstr ""
-#: config/i386/i386.opt:790
+#: config/i386/i386.opt:794
msgid "Support FXSAVE and FXRSTOR instructions."
msgstr ""
-#: config/i386/i386.opt:794
+#: config/i386/i386.opt:798
msgid "Support XSAVE and XRSTOR instructions."
msgstr ""
-#: config/i386/i386.opt:798
+#: config/i386/i386.opt:802
msgid "Support XSAVEOPT instruction."
msgstr ""
-#: config/i386/i386.opt:802
+#: config/i386/i386.opt:806
msgid "Support XSAVEC instructions."
msgstr ""
-#: config/i386/i386.opt:806
+#: config/i386/i386.opt:810
msgid "Support XSAVES and XRSTORS instructions."
msgstr ""
-#: config/i386/i386.opt:810
+#: config/i386/i386.opt:814
msgid "Support TBM built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:814
+#: config/i386/i386.opt:818
msgid "Support code generation of cmpxchg16b instruction."
msgstr ""
-#: config/i386/i386.opt:818
+#: config/i386/i386.opt:822
msgid "Support code generation of sahf instruction in 64bit x86-64 code."
msgstr ""
-#: config/i386/i386.opt:822
+#: config/i386/i386.opt:826
msgid "Support code generation of movbe instruction."
msgstr ""
-#: config/i386/i386.opt:826
+#: config/i386/i386.opt:830
msgid "Support code generation of crc32 instruction."
msgstr ""
-#: config/i386/i386.opt:830
+#: config/i386/i386.opt:834
msgid "Support AES built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:834
+#: config/i386/i386.opt:838
msgid "Support SHA1 and SHA256 built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:838
+#: config/i386/i386.opt:842
msgid "Support PCLMUL built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:842
+#: config/i386/i386.opt:846
msgid "Encode SSE instructions with VEX prefix."
msgstr ""
-#: config/i386/i386.opt:846
+#: config/i386/i386.opt:850
msgid "Support FSGSBASE built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:850
+#: config/i386/i386.opt:854
msgid "Support RDRND built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:854
+#: config/i386/i386.opt:858
msgid "Support F16C built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:858
+#: config/i386/i386.opt:862
msgid "Support PREFETCHWT1 built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:862
+#: config/i386/i386.opt:866
msgid "Emit profiling counter call at function entry before prologue."
msgstr ""
-#: config/i386/i386.opt:866
+#: config/i386/i386.opt:870
msgid "Generate __mcount_loc section with all mcount or __fentry__ calls."
msgstr ""
-#: config/i386/i386.opt:870
+#: config/i386/i386.opt:874
msgid ""
"Generate mcount/__fentry__ calls as nops. To activate they need to be "
"patched in."
msgstr ""
-#: config/i386/i386.opt:875
+#: config/i386/i386.opt:879
msgid "Skip setting up RAX register when passing variable arguments."
msgstr ""
-#: config/i386/i386.opt:879
+#: config/i386/i386.opt:883
msgid ""
"Expand 32bit/64bit integer divide into 8bit unsigned integer divide with run-"
"time check."
msgstr ""
-#: config/i386/i386.opt:883
+#: config/i386/i386.opt:887
msgid "Split 32-byte AVX unaligned load."
msgstr ""
-#: config/i386/i386.opt:887
+#: config/i386/i386.opt:891
msgid "Split 32-byte AVX unaligned store."
msgstr ""
-#: config/i386/i386.opt:891
+#: config/i386/i386.opt:895
msgid "Support RTM built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:895
+#: config/i386/i386.opt:899
msgid "Support MPX code generation."
msgstr ""
-#: config/i386/i386.opt:899
+#: config/i386/i386.opt:903
msgid "Support MWAITX and MONITORX built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:903
+#: config/i386/i386.opt:907
msgid "Support CLZERO built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:907
+#: config/i386/i386.opt:911
msgid "Support PKU built-in functions and code generation."
msgstr ""
-#: config/i386/i386.opt:911 config/rs6000/rs6000.opt:678
+#: config/i386/i386.opt:915 config/powerpcspe/powerpcspe.opt:678
+#: config/rs6000/rs6000.opt:611
msgid "Use given stack-protector guard."
msgstr ""
-#: config/i386/i386.opt:915
+#: config/i386/i386.opt:919
msgid ""
"Known stack protector guard (for use with the -mstack-protector-guard= "
"option):"
msgstr ""
-#: config/i386/i386.opt:925
+#: config/i386/i386.opt:929
msgid "Attempt to avoid generating instruction sequences containing ret bytes."
msgstr ""
@@ -10184,1337 +10254,1383 @@ msgstr ""
msgid "Support alignments of up to 64-bits."
msgstr ""
-#: config/g.opt:27
-msgid ""
-"-G<number>\tPut global and static data smaller than <number> bytes into a "
-"special section (on some targets)."
+#: config/powerpcspe/darwin.opt:38 config/powerpcspe/sysv4.opt:141
+#: config/rs6000/darwin.opt:38 config/rs6000/sysv4.opt:141
+msgid "Generate 64-bit code."
msgstr ""
-#: config/lynx.opt:23
-msgid "Support legacy multi-threading."
+#: config/powerpcspe/darwin.opt:42 config/powerpcspe/sysv4.opt:145
+#: config/rs6000/darwin.opt:42 config/rs6000/sysv4.opt:145
+msgid "Generate 32-bit code."
msgstr ""
-#: config/lynx.opt:27
-msgid "Use shared libraries."
+#: config/powerpcspe/powerpcspe-tables.opt:24
+#: config/rs6000/rs6000-tables.opt:24
+msgid "Known CPUs (for use with the -mcpu= and -mtune= options):"
msgstr ""
-#: config/lynx.opt:31
-msgid "Support multi-threading."
+#: config/powerpcspe/powerpcspe.opt:109 config/rs6000/rs6000.opt:109
+msgid "Use PowerPC-64 instruction set."
msgstr ""
-#: config/nvptx/nvptx.opt:22
-msgid "Generate code for a 32-bit ABI."
+#: config/powerpcspe/powerpcspe.opt:113 config/rs6000/rs6000.opt:113
+msgid "Use PowerPC General Purpose group optional instructions."
msgstr ""
-#: config/nvptx/nvptx.opt:26
-msgid "Generate code for a 64-bit ABI."
+#: config/powerpcspe/powerpcspe.opt:117 config/rs6000/rs6000.opt:117
+msgid "Use PowerPC Graphics group optional instructions."
msgstr ""
-#: config/nvptx/nvptx.opt:30
-msgid "Link in code for a __main kernel."
+#: config/powerpcspe/powerpcspe.opt:121 config/rs6000/rs6000.opt:121
+msgid "Use PowerPC V2.01 single field mfcr instruction."
msgstr ""
-#: config/nvptx/nvptx.opt:34
-msgid "Optimize partition neutering."
+#: config/powerpcspe/powerpcspe.opt:125 config/rs6000/rs6000.opt:125
+msgid "Use PowerPC V2.02 popcntb instruction."
msgstr ""
-#: config/nvptx/nvptx.opt:38
-msgid "Use custom stacks instead of local memory for automatic storage."
+#: config/powerpcspe/powerpcspe.opt:129 config/rs6000/rs6000.opt:129
+msgid "Use PowerPC V2.02 floating point rounding instructions."
msgstr ""
-#: config/nvptx/nvptx.opt:42
+#: config/powerpcspe/powerpcspe.opt:133 config/rs6000/rs6000.opt:133
+msgid "Use PowerPC V2.05 compare bytes instruction."
+msgstr ""
+
+#: config/powerpcspe/powerpcspe.opt:137 config/rs6000/rs6000.opt:137
msgid ""
-"Specify size of .local memory used for stack when the exact amount is not "
-"known."
+"Use extended PowerPC V2.05 move floating point to/from GPR instructions."
msgstr ""
-#: config/nvptx/nvptx.opt:46
-msgid "Generate code that can keep local state uniform across all lanes."
+#: config/powerpcspe/powerpcspe.opt:141 config/rs6000/rs6000.opt:141
+msgid "Use AltiVec instructions."
msgstr ""
-#: config/nvptx/nvptx.opt:50
-msgid ""
-"Generate code for OpenMP offloading: enables -msoft-stack and -muniform-simt."
+#: config/powerpcspe/powerpcspe.opt:145 config/rs6000/rs6000.opt:145
+msgid "Generate AltiVec instructions using little-endian element order."
msgstr ""
-#: config/vxworks.opt:36
-msgid "Assume the VxWorks RTP environment."
+#: config/powerpcspe/powerpcspe.opt:149 config/rs6000/rs6000.opt:149
+msgid "Generate AltiVec instructions using big-endian element order."
msgstr ""
-#: config/vxworks.opt:43
-msgid "Assume the VxWorks vThreads environment."
+#: config/powerpcspe/powerpcspe.opt:153 config/rs6000/rs6000.opt:153
+msgid "Use decimal floating point instructions."
msgstr ""
-#: config/cr16/cr16.opt:23
-msgid "-msim Use simulator runtime."
+#: config/powerpcspe/powerpcspe.opt:157 config/rs6000/rs6000.opt:157
+msgid "Use 4xx half-word multiply instructions."
msgstr ""
-#: config/cr16/cr16.opt:27
-msgid "Generate SBIT, CBIT instructions."
+#: config/powerpcspe/powerpcspe.opt:161 config/rs6000/rs6000.opt:161
+msgid "Use 4xx string-search dlmzb instruction."
msgstr ""
-#: config/cr16/cr16.opt:31
-msgid "Support multiply accumulate instructions."
+#: config/powerpcspe/powerpcspe.opt:165 config/rs6000/rs6000.opt:165
+msgid "Generate load/store multiple instructions."
msgstr ""
-#: config/cr16/cr16.opt:38
-msgid "Treat data references as near, far or medium. medium is default."
+#: config/powerpcspe/powerpcspe.opt:169 config/rs6000/rs6000.opt:169
+msgid "Generate string instructions for block moves."
msgstr ""
-#: config/cr16/cr16.opt:42
-msgid "Generate code for CR16C architecture."
+#: config/powerpcspe/powerpcspe.opt:181 config/rs6000/rs6000.opt:181
+msgid "Use PowerPC V2.06 popcntd instruction."
msgstr ""
-#: config/cr16/cr16.opt:46
-msgid "Generate code for CR16C+ architecture (Default)."
+#: config/powerpcspe/powerpcspe.opt:185 config/rs6000/rs6000.opt:185
+msgid ""
+"Under -ffast-math, generate a FRIZ instruction for (double)(long long) "
+"conversions."
msgstr ""
-#: config/cr16/cr16.opt:50
-msgid "Treat integers as 32-bit."
+#: config/powerpcspe/powerpcspe.opt:193 config/rs6000/rs6000.opt:193
+msgid "Use vector/scalar (VSX) instructions."
msgstr ""
-#: config/avr/avr.opt:23
-msgid "Use subroutines for function prologues and epilogues."
+#: config/powerpcspe/powerpcspe.opt:240 config/rs6000/rs6000.opt:237
+msgid "Do not generate load/store with update instructions."
msgstr ""
-#: config/avr/avr.opt:26
-#, c-format
-msgid "missing device or architecture after %qs"
+#: config/powerpcspe/powerpcspe.opt:244 config/rs6000/rs6000.opt:241
+msgid "Generate load/store with update instructions."
msgstr ""
-#: config/avr/avr.opt:27
-msgid "-mmcu=MCU\tSelect the target MCU."
+#: config/powerpcspe/powerpcspe.opt:248 config/arm/arm.opt:188
+#: config/rs6000/rs6000.opt:245
+msgid "Do not load the PIC register in function prologues."
msgstr ""
-#: config/avr/avr.opt:31
-msgid "Set the number of 64 KiB flash segments."
+#: config/powerpcspe/powerpcspe.opt:252 config/rs6000/rs6000.opt:249
+msgid "Avoid generation of indexed load/store instructions when possible."
msgstr ""
-#: config/avr/avr.opt:35
-msgid "Indicate presence of a processor erratum."
+#: config/powerpcspe/powerpcspe.opt:256 config/rs6000/rs6000.opt:253
+msgid "Mark __tls_get_addr calls with argument info."
msgstr ""
-#: config/avr/avr.opt:39
-msgid "Enable Read-Modify-Write (RMW) instructions support/use."
+#: config/powerpcspe/powerpcspe.opt:263 config/rs6000/rs6000.opt:260
+msgid "Schedule the start and end of the procedure."
msgstr ""
-#: config/avr/avr.opt:49
-msgid "Use an 8-bit 'int' type."
+#: config/powerpcspe/powerpcspe.opt:267 config/rs6000/rs6000.opt:264
+msgid "Return all structures in memory (AIX default)."
msgstr ""
-#: config/avr/avr.opt:53
-msgid "Change the stack pointer without disabling interrupts."
+#: config/powerpcspe/powerpcspe.opt:271 config/rs6000/rs6000.opt:268
+msgid "Return small structures in registers (SVR4 default)."
msgstr ""
-#: config/avr/avr.opt:57
+#: config/powerpcspe/powerpcspe.opt:275 config/rs6000/rs6000.opt:272
+msgid "Conform more closely to IBM XLC semantics."
+msgstr ""
+
+#: config/powerpcspe/powerpcspe.opt:279 config/powerpcspe/powerpcspe.opt:283
+#: config/rs6000/rs6000.opt:276 config/rs6000/rs6000.opt:280
msgid ""
-"Set the branch costs for conditional branch instructions. Reasonable values "
-"are small, non-negative integers. The default branch cost is 0."
+"Generate software reciprocal divide and square root for better throughput."
msgstr ""
-#: config/avr/avr.opt:67
-msgid "Change only the low 8 bits of the stack pointer."
+#: config/powerpcspe/powerpcspe.opt:287 config/rs6000/rs6000.opt:284
+msgid "Assume that the reciprocal estimate instructions provide more accuracy."
msgstr ""
-#: config/avr/avr.opt:71
-msgid "Relax branches."
+#: config/powerpcspe/powerpcspe.opt:291 config/rs6000/rs6000.opt:288
+msgid "Do not place floating point constants in TOC."
msgstr ""
-#: config/avr/avr.opt:75
-msgid ""
-"Make the linker relaxation machine assume that a program counter wrap-around "
-"occurs."
+#: config/powerpcspe/powerpcspe.opt:295 config/rs6000/rs6000.opt:292
+msgid "Place floating point constants in TOC."
msgstr ""
-#: config/avr/avr.opt:79
-msgid ""
-"Accumulate outgoing function arguments and acquire/release the needed stack "
-"space for outgoing function arguments in function prologue/epilogue. "
-"Without this option, outgoing arguments are pushed before calling a function "
-"and popped afterwards. This option can lead to reduced code size for "
-"functions that call many functions that get their arguments on the stack "
-"like, for example printf."
+#: config/powerpcspe/powerpcspe.opt:299 config/rs6000/rs6000.opt:296
+msgid "Do not place symbol+offset constants in TOC."
msgstr ""
-#: config/avr/avr.opt:83
-msgid ""
-"When accessing RAM, use X as imposed by the hardware, i.e. just use pre-"
-"decrement, post-increment and indirect addressing with the X register. "
-"Without this option, the compiler may assume that there is an addressing "
-"mode X+const similar to Y+const and Z+const and emit instructions to emulate "
-"such an addressing mode for X."
+#: config/powerpcspe/powerpcspe.opt:303 config/rs6000/rs6000.opt:300
+msgid "Place symbol+offset constants in TOC."
msgstr ""
-#: config/avr/avr.opt:88
-msgid ""
-"The device has no SPH special function register. This option will be "
-"overridden by the compiler driver with the correct setting if presence/"
-"absence of SPH can be deduced from -mmcu=MCU."
+#: config/powerpcspe/powerpcspe.opt:314 config/rs6000/rs6000.opt:311
+msgid "Use only one TOC entry per procedure."
msgstr ""
-#: config/avr/avr.opt:92
-msgid "Warn if the address space of an address is changed."
+#: config/powerpcspe/powerpcspe.opt:318 config/rs6000/rs6000.opt:315
+msgid "Put everything in the regular TOC."
msgstr ""
-#: config/avr/avr.opt:96
+#: config/powerpcspe/powerpcspe.opt:322 config/rs6000/rs6000.opt:319
+msgid "Generate VRSAVE instructions when generating AltiVec code."
+msgstr ""
+
+#: config/powerpcspe/powerpcspe.opt:326 config/rs6000/rs6000.opt:323
+msgid "Deprecated option. Use -mno-vrsave instead."
+msgstr ""
+
+#: config/powerpcspe/powerpcspe.opt:330 config/rs6000/rs6000.opt:327
+msgid "Deprecated option. Use -mvrsave instead."
+msgstr ""
+
+#: config/powerpcspe/powerpcspe.opt:334 config/rs6000/rs6000.opt:331
msgid ""
-"Warn if the ISR is misspelled, i.e. without __vector prefix. Enabled by "
-"default."
+"Specify how many bytes should be moved inline before calling out to memcpy/"
+"memmove."
msgstr ""
-#: config/avr/avr.opt:100
+#: config/powerpcspe/powerpcspe.opt:338 config/rs6000/rs6000.opt:335
msgid ""
-"Allow to use truncation instead of rounding towards zero for fractional "
-"fixed-point types."
+"Specify the maximum number pairs of load instructions that should be "
+"generated inline for the compare. If the number needed exceeds the limit, a "
+"call to memcmp will be generated instead."
msgstr ""
-#: config/avr/avr.opt:104
+#: config/powerpcspe/powerpcspe.opt:342 config/rs6000/rs6000.opt:339
msgid ""
-"Assume that all data in static storage can be accessed by LDS / STS. This "
-"option is only useful for reduced Tiny devices."
+"Specify the maximum number pairs of load instructions that should be "
+"generated inline for the compare. If the number needed exceeds the limit, a "
+"call to strncmp will be generated instead."
msgstr ""
-#: config/avr/avr.opt:108
-msgid "Do not link against the device-specific library lib<MCU>.a."
+#: config/powerpcspe/powerpcspe.opt:346 config/rs6000/rs6000.opt:343
+msgid "Generate isel instructions."
msgstr ""
-#: config/m32r/m32r.opt:34
-msgid "Compile for the m32rx."
+#: config/powerpcspe/powerpcspe.opt:350 config/rs6000/rs6000.opt:347
+msgid "Deprecated option. Use -mno-isel instead."
msgstr ""
-#: config/m32r/m32r.opt:38
-msgid "Compile for the m32r2."
+#: config/powerpcspe/powerpcspe.opt:354 config/rs6000/rs6000.opt:351
+msgid "Deprecated option. Use -misel instead."
msgstr ""
-#: config/m32r/m32r.opt:42
-msgid "Compile for the m32r."
+#: config/powerpcspe/powerpcspe.opt:358
+msgid "Generate SPE SIMD instructions on E500."
msgstr ""
-#: config/m32r/m32r.opt:46
-msgid "Align all loops to 32 byte boundary."
+#: config/powerpcspe/powerpcspe.opt:362 config/rs6000/rs6000.opt:355
+msgid "Generate PPC750CL paired-single instructions."
msgstr ""
-#: config/m32r/m32r.opt:50
-msgid "Prefer branches over conditional execution."
+#: config/powerpcspe/powerpcspe.opt:366
+msgid "Deprecated option. Use -mno-spe instead."
msgstr ""
-#: config/m32r/m32r.opt:54
-msgid "Give branches their default cost."
+#: config/powerpcspe/powerpcspe.opt:370
+msgid "Deprecated option. Use -mspe instead."
msgstr ""
-#: config/m32r/m32r.opt:58
-msgid "Display compile time statistics."
+#: config/powerpcspe/powerpcspe.opt:374 config/rs6000/rs6000.opt:359
+msgid "-mdebug=\tEnable debug output."
msgstr ""
-#: config/m32r/m32r.opt:62
-msgid "Specify cache flush function."
+#: config/powerpcspe/powerpcspe.opt:378 config/rs6000/rs6000.opt:363
+msgid "Use the AltiVec ABI extensions."
msgstr ""
-#: config/m32r/m32r.opt:66
-msgid "Specify cache flush trap number."
+#: config/powerpcspe/powerpcspe.opt:382 config/rs6000/rs6000.opt:367
+msgid "Do not use the AltiVec ABI extensions."
msgstr ""
-#: config/m32r/m32r.opt:70
-msgid "Only issue one instruction per cycle."
+#: config/powerpcspe/powerpcspe.opt:386
+msgid "Use the SPE ABI extensions."
msgstr ""
-#: config/m32r/m32r.opt:74
-msgid "Allow two instructions to be issued per cycle."
+#: config/powerpcspe/powerpcspe.opt:390
+msgid "Do not use the SPE ABI extensions."
msgstr ""
-#: config/m32r/m32r.opt:78
-msgid "Code size: small, medium or large."
+#: config/powerpcspe/powerpcspe.opt:394 config/rs6000/rs6000.opt:371
+msgid "Use the ELFv1 ABI."
msgstr ""
-#: config/m32r/m32r.opt:94
-msgid "Don't call any cache flush functions."
+#: config/powerpcspe/powerpcspe.opt:398 config/rs6000/rs6000.opt:375
+msgid "Use the ELFv2 ABI."
msgstr ""
-#: config/m32r/m32r.opt:98
-msgid "Don't call any cache flush trap."
+#: config/powerpcspe/powerpcspe.opt:405 config/rs6000/rs6000.opt:382
+msgid "using darwin64 ABI"
msgstr ""
-#: config/m32r/m32r.opt:105
-msgid "Small data area: none, sdata, use."
+#: config/powerpcspe/powerpcspe.opt:408 config/rs6000/rs6000.opt:385
+msgid "using old darwin ABI"
msgstr ""
-#: config/s390/tpf.opt:23
-msgid "Enable TPF-OS tracing code."
+#: config/powerpcspe/powerpcspe.opt:411 config/rs6000/rs6000.opt:388
+msgid "using IEEE extended precision long double"
msgstr ""
-#: config/s390/tpf.opt:27
-msgid "Specify main object for TPF-OS."
+#: config/powerpcspe/powerpcspe.opt:414 config/rs6000/rs6000.opt:391
+msgid "using IBM extended precision long double"
msgstr ""
-#: config/s390/s390.opt:48
-msgid "31 bit ABI."
+#: config/powerpcspe/powerpcspe.opt:418 config/rs6000/rs6000.opt:395
+msgid "-mcpu=\tUse features of and schedule code for given CPU."
msgstr ""
-#: config/s390/s390.opt:52
-msgid "64 bit ABI."
+#: config/powerpcspe/powerpcspe.opt:422 config/rs6000/rs6000.opt:399
+msgid "-mtune=\tSchedule code for given CPU."
msgstr ""
-#: config/s390/s390.opt:123
-msgid "Maintain backchain pointer."
+#: config/powerpcspe/powerpcspe.opt:426 config/rs6000/rs6000.opt:403
+msgid "-mtraceback=\tSelect full, part, or no traceback table."
msgstr ""
-#: config/s390/s390.opt:127
-msgid "Additional debug prints."
+#: config/powerpcspe/powerpcspe.opt:442 config/rs6000/rs6000.opt:419
+msgid "Avoid all range limits on call instructions."
msgstr ""
-#: config/s390/s390.opt:131
-msgid "ESA/390 architecture."
+#: config/powerpcspe/powerpcspe.opt:446
+msgid "Generate Cell microcode."
msgstr ""
-#: config/s390/s390.opt:135
-msgid "Enable decimal floating point hardware support."
+#: config/powerpcspe/powerpcspe.opt:450
+msgid "Warn when a Cell microcoded instruction is emitted."
msgstr ""
-#: config/s390/s390.opt:139
-msgid "Enable hardware floating point."
+#: config/powerpcspe/powerpcspe.opt:454 config/rs6000/rs6000.opt:427
+msgid "Warn about deprecated 'vector long ...' AltiVec type usage."
msgstr ""
-#: config/s390/s390.opt:143
-msgid ""
-"Takes two non-negative integer numbers separated by a comma. Prepend the "
-"function label with the number of two-byte Nop instructions indicated by the "
-"first. Append Nop instructions covering the number of halfwords indicated "
-"by the second after the label. Nop instructions of the largest possible "
-"size are used (six, four or two bytes), beginning with the largest possible "
-"size. Using 0 for both values disables hotpatching."
+#: config/powerpcspe/powerpcspe.opt:458
+msgid "-mfloat-gprs=\tSelect GPR floating point method."
msgstr ""
-#: config/s390/s390.opt:161
-msgid "Use hardware transactional execution instructions."
+#: config/powerpcspe/powerpcspe.opt:462
+msgid "Valid arguments to -mfloat-gprs=:"
msgstr ""
-#: config/s390/s390.opt:165
-msgid "Use hardware vector facility instructions and enable the vector ABI."
+#: config/powerpcspe/powerpcspe.opt:478 config/rs6000/rs6000.opt:431
+msgid "-mlong-double-<n>\tSpecify size of long double (64 or 128 bits)."
msgstr ""
-#: config/s390/s390.opt:169
-msgid "Use packed stack layout."
+#: config/powerpcspe/powerpcspe.opt:482 config/sparc/sparc.opt:62
+msgid "Enable Local Register Allocation."
msgstr ""
-#: config/s390/s390.opt:173
-msgid "Use bras for executable < 64k."
+#: config/powerpcspe/powerpcspe.opt:486 config/rs6000/rs6000.opt:439
+msgid "Determine which dependences between insns are considered costly."
msgstr ""
-#: config/s390/s390.opt:177
-msgid "Disable hardware floating point."
+#: config/powerpcspe/powerpcspe.opt:490 config/rs6000/rs6000.opt:443
+msgid "Specify which post scheduling nop insertion scheme to apply."
msgstr ""
-#: config/s390/s390.opt:181
-msgid ""
-"Set the max. number of bytes which has to be left to stack size before a "
-"trap instruction is triggered."
+#: config/powerpcspe/powerpcspe.opt:494 config/rs6000/rs6000.opt:447
+msgid "Specify alignment of structure fields default/natural."
msgstr ""
-#: config/s390/s390.opt:185
-msgid "Switches off the -mstack-guard= option."
+#: config/powerpcspe/powerpcspe.opt:498 config/rs6000/rs6000.opt:451
+msgid "Valid arguments to -malign-:"
msgstr ""
-#: config/s390/s390.opt:189
-msgid ""
-"Emit extra code in the function prologue in order to trap if the stack size "
-"exceeds the given limit."
+#: config/powerpcspe/powerpcspe.opt:508 config/rs6000/rs6000.opt:461
+msgid "Specify scheduling priority for dispatch slot restricted insns."
msgstr ""
-#: config/s390/s390.opt:193
-msgid "Switches off the -mstack-size= option."
+#: config/powerpcspe/powerpcspe.opt:512 config/rs6000/rs6000.opt:465
+msgid "Single-precision floating point unit."
msgstr ""
-#: config/s390/s390.opt:201
-msgid "Use the mvcle instruction for block moves."
+#: config/powerpcspe/powerpcspe.opt:516 config/rs6000/rs6000.opt:469
+msgid "Double-precision floating point unit."
msgstr ""
-#: config/s390/s390.opt:205
-msgid ""
-"Enable the z vector language extension providing the context-sensitive "
-"vector macro and enable the Altivec-style builtins in vecintrin.h."
+#: config/powerpcspe/powerpcspe.opt:520 config/rs6000/rs6000.opt:473
+msgid "Floating point unit does not support divide & sqrt."
msgstr ""
-#: config/s390/s390.opt:210
-msgid "Warn if a function uses alloca or creates an array with dynamic size."
+#: config/powerpcspe/powerpcspe.opt:524 config/rs6000/rs6000.opt:477
+msgid "-mfpu=\tSpecify FP (sp, dp, sp-lite, dp-lite) (implies -mxilinx-fpu)."
msgstr ""
-#: config/s390/s390.opt:214
-msgid "Warn if a single function's framesize exceeds the given framesize."
+#: config/powerpcspe/powerpcspe.opt:546 config/rs6000/rs6000.opt:499
+msgid "Specify Xilinx FPU."
msgstr ""
-#: config/s390/s390.opt:218
-msgid "z/Architecture."
+#: config/powerpcspe/powerpcspe.opt:550 config/rs6000/rs6000.opt:503
+msgid "Use r11 to hold the static link in calls to functions via pointers."
msgstr ""
-#: config/s390/s390.opt:222
-msgid ""
-"Set the branch costs for conditional branch instructions. Reasonable values "
-"are small, non-negative integers. The default branch cost is 1."
+#: config/powerpcspe/powerpcspe.opt:554 config/rs6000/rs6000.opt:507
+msgid "Save the TOC in the prologue for indirect calls rather than inline."
msgstr ""
-#: config/rl78/rl78.opt:27 config/rx/rx.opt:87
-msgid "Use the simulator runtime."
+#: config/powerpcspe/powerpcspe.opt:558 config/rs6000/rs6000.opt:511
+msgid "Allow 128-bit integers in VSX registers."
msgstr ""
-#: config/rl78/rl78.opt:31
+#: config/powerpcspe/powerpcspe.opt:562 config/rs6000/rs6000.opt:515
msgid ""
-"Selects the type of hardware multiplication and division to use (none/g13/"
-"g14)."
+"Fuse certain integer operations together for better performance on power8."
msgstr ""
-#: config/rl78/rl78.opt:50
-msgid "Use all registers, reserving none for interrupt handlers."
+#: config/powerpcspe/powerpcspe.opt:566 config/rs6000/rs6000.opt:519
+msgid "Allow sign extension in fusion operations."
msgstr ""
-#: config/rl78/rl78.opt:54
-msgid "Enable assembler and linker relaxation. Enabled by default at -Os."
+#: config/powerpcspe/powerpcspe.opt:570 config/rs6000/rs6000.opt:523
+msgid "Use vector and scalar instructions added in ISA 2.07."
msgstr ""
-#: config/rl78/rl78.opt:58
-msgid ""
-"Selects the type of RL78 core being targeted (g10/g13/g14). The default is "
-"the G14. If set, also selects the hardware multiply support to be used."
+#: config/powerpcspe/powerpcspe.opt:574 config/rs6000/rs6000.opt:527
+msgid "Use ISA 2.07 Category:Vector.AES and Category:Vector.SHA2 instructions."
msgstr ""
-#: config/rl78/rl78.opt:77
-msgid "Alias for -mcpu=g10."
+#: config/powerpcspe/powerpcspe.opt:578 config/rs6000/rs6000.opt:531
+msgid "Use ISA 2.07 direct move between GPR & VSX register instructions."
msgstr ""
-#: config/rl78/rl78.opt:81
-msgid "Alias for -mcpu=g13."
+#: config/powerpcspe/powerpcspe.opt:582 config/rs6000/rs6000.opt:535
+msgid "Use ISA 2.07 transactional memory (HTM) instructions."
msgstr ""
-#: config/rl78/rl78.opt:85 config/rl78/rl78.opt:89
-msgid "Alias for -mcpu=g14."
+#: config/powerpcspe/powerpcspe.opt:586 config/rs6000/rs6000.opt:539
+msgid "Generate the quad word memory instructions (lq/stq)."
msgstr ""
-#: config/rl78/rl78.opt:93
+#: config/powerpcspe/powerpcspe.opt:590 config/rs6000/rs6000.opt:543
+msgid "Generate the quad word memory atomic instructions (lqarx/stqcx)."
+msgstr ""
+
+#: config/powerpcspe/powerpcspe.opt:594 config/rs6000/rs6000.opt:547
msgid ""
-"Assume ES is zero throughout program execution, use ES: for read-only data."
+"Generate aggregate parameter passing code with at most 64-bit alignment."
msgstr ""
-#: config/rl78/rl78.opt:97
-msgid "Stores the MDUC registers in interrupt handlers for G13 target."
+#: config/powerpcspe/powerpcspe.opt:598
+msgid "Allow double variables in upper registers with -mcpu=power7 or -mvsx."
msgstr ""
-#: config/stormy16/stormy16.opt:24
-msgid "Provide libraries for the simulator."
+#: config/powerpcspe/powerpcspe.opt:602
+msgid ""
+"Allow float variables in upper registers with -mcpu=power8 or -mpower8-"
+"vector."
msgstr ""
-#: config/arm/arm-tables.opt:25
-msgid "Known ARM CPUs (for use with the -mcpu= and -mtune= options):"
+#: config/powerpcspe/powerpcspe.opt:606
+msgid "Allow float/double variables in upper registers if cpu allows it."
msgstr ""
-#: config/arm/arm-tables.opt:359
-msgid "Known ARM architectures (for use with the -march= option):"
+#: config/powerpcspe/powerpcspe.opt:610
+msgid ""
+"Allow 64-bit integer variables in upper registers with -mcpu=power7 or -mvsx."
msgstr ""
-#: config/arm/arm-tables.opt:471
-msgid "Known ARM FPUs (for use with the -mfpu= option):"
+#: config/powerpcspe/powerpcspe.opt:614 config/rs6000/rs6000.opt:551
+msgid "Analyze and remove doubleword swaps from VSX computations."
msgstr ""
-#: config/arm/arm.opt:26
-msgid "TLS dialect to use:"
+#: config/powerpcspe/powerpcspe.opt:618 config/rs6000/rs6000.opt:555
+msgid "Fuse certain operations together for better performance on power9."
msgstr ""
-#: config/arm/arm.opt:36
-msgid "Specify an ABI."
+#: config/powerpcspe/powerpcspe.opt:622 config/rs6000/rs6000.opt:559
+msgid "Use certain scalar instructions added in ISA 3.0."
msgstr ""
-#: config/arm/arm.opt:40
-msgid "Known ARM ABIs (for use with the -mabi= option):"
+#: config/powerpcspe/powerpcspe.opt:626 config/rs6000/rs6000.opt:563
+msgid "Use vector instructions added in ISA 3.0."
msgstr ""
-#: config/arm/arm.opt:59
-msgid "Generate a call to abort if a noreturn function returns."
+#: config/powerpcspe/powerpcspe.opt:630 config/rs6000/rs6000.opt:567
+msgid "Use scalar register+offset memory instructions added in ISA 3.0."
msgstr ""
-#: config/arm/arm.opt:66
-msgid "Generate APCS conformant stack frames."
+#: config/powerpcspe/powerpcspe.opt:634 config/rs6000/rs6000.opt:571
+msgid "Use vector register+offset memory instructions added in ISA 3.0."
msgstr ""
-#: config/arm/arm.opt:70
-msgid "Generate re-entrant, PIC code."
+#: config/powerpcspe/powerpcspe.opt:638 config/rs6000/rs6000.opt:575
+msgid "Use register+offset memory instructions added in ISA 3.0."
msgstr ""
-#: config/arm/arm.opt:86
-msgid "Generate code in 32 bit ARM state."
+#: config/powerpcspe/powerpcspe.opt:642 config/rs6000/rs6000.opt:579
+msgid "Use the new min/max instructions defined in ISA 3.0."
msgstr ""
-#: config/arm/arm.opt:94
-msgid "Thumb: Assume non-static functions may be called from ARM code."
+#: config/powerpcspe/powerpcspe.opt:646 config/rs6000/rs6000.opt:583
+msgid ""
+"Fuse medium/large code model toc references with the memory instruction."
msgstr ""
-#: config/arm/arm.opt:98
-msgid "Thumb: Assume function pointers may go to non-Thumb aware code."
+#: config/powerpcspe/powerpcspe.opt:650 config/rs6000/rs6000.opt:587
+msgid "Generate the integer modulo instructions."
msgstr ""
-#: config/arm/arm.opt:106
-msgid "Specify if floating point hardware should be used."
+#: config/powerpcspe/powerpcspe.opt:658 config/rs6000/rs6000.opt:595
+msgid "Allow the IEEE 128-bit types without requiring the __float128 keyword."
msgstr ""
-#: config/arm/arm.opt:110
-msgid ""
-"Specify that the compiler should target secure code as per ARMv8-M Security "
-"Extensions."
+#: config/powerpcspe/powerpcspe.opt:662 config/rs6000/rs6000.opt:599
+msgid "Enable IEEE 128-bit floating point via the __float128 keyword."
msgstr ""
-#: config/arm/arm.opt:114
-msgid "Known floating-point ABIs (for use with the -mfloat-abi= option):"
+#: config/powerpcspe/powerpcspe.opt:666 config/rs6000/rs6000.opt:603
+msgid "Enable using IEEE 128-bit floating point instructions."
msgstr ""
-#: config/arm/arm.opt:127
-msgid "Switch ARM/Thumb modes on alternating functions for compiler testing."
+#: config/powerpcspe/powerpcspe.opt:670 config/rs6000/rs6000.opt:607
+msgid "Enable default conversions between __float128 & long double."
msgstr ""
-#: config/arm/arm.opt:131
-msgid "Specify the __fp16 floating-point format."
+#: config/powerpcspe/powerpcspe.opt:674
+msgid "Enable small integers to be in VSX registers."
msgstr ""
-#: config/arm/arm.opt:135
-msgid "Known __fp16 formats (for use with the -mfp16-format= option):"
+#: config/powerpcspe/powerpcspe.opt:682 config/rs6000/rs6000.opt:615
+msgid "Valid arguments to -mstack-protector-guard=:"
msgstr ""
-#: config/arm/arm.opt:148
-msgid "Specify the name of the target floating point hardware/format."
+#: config/powerpcspe/powerpcspe.opt:692 config/rs6000/rs6000.opt:625
+msgid "Use the given base register for addressing the stack-protector guard."
msgstr ""
-#: config/arm/arm.opt:159
-msgid "Generate call insns as indirect calls, if necessary."
+#: config/powerpcspe/powerpcspe.opt:699 config/rs6000/rs6000.opt:632
+msgid "Use the given offset for addressing the stack-protector guard."
msgstr ""
-#: config/arm/arm.opt:163
-msgid "Assume data segments are relative to text segment."
+#: config/powerpcspe/476.opt:24 config/rs6000/476.opt:24
+msgid ""
+"Preserve the PowerPC 476's link stack by matching up a blr with the bcl/bl "
+"insns used for GOT accesses."
msgstr ""
-#: config/arm/arm.opt:167
-msgid "Specify the register to be used for PIC addressing."
+#: config/powerpcspe/aix64.opt:24 config/rs6000/aix64.opt:24
+msgid "Compile for 64-bit pointers."
msgstr ""
-#: config/arm/arm.opt:171
-msgid "Store function names in object code."
+#: config/powerpcspe/aix64.opt:28 config/rs6000/aix64.opt:28
+msgid "Compile for 32-bit pointers."
msgstr ""
-#: config/arm/arm.opt:175
-msgid "Permit scheduling of a function's prologue sequence."
+#: config/powerpcspe/aix64.opt:32 config/powerpcspe/linux64.opt:28
+#: config/rs6000/aix64.opt:32 config/rs6000/linux64.opt:28
+msgid "Select code model."
msgstr ""
-#: config/arm/arm.opt:179 config/rs6000/rs6000.opt:248
-msgid "Do not load the PIC register in function prologues."
+#: config/powerpcspe/aix64.opt:49 config/rs6000/aix64.opt:49
+msgid "Support message passing with the Parallel Environment."
msgstr ""
-#: config/arm/arm.opt:186
-msgid "Specify the minimum bit alignment of structures."
+#: config/powerpcspe/linux64.opt:24 config/rs6000/linux64.opt:24
+msgid "Call mcount for profiling before a function prologue."
msgstr ""
-#: config/arm/arm.opt:190
-msgid "Generate code for Thumb state."
+#: config/powerpcspe/sysv4.opt:24 config/rs6000/sysv4.opt:24
+msgid "Select ABI calling convention."
msgstr ""
-#: config/arm/arm.opt:194
-msgid "Support calls between Thumb and ARM instruction sets."
+#: config/powerpcspe/sysv4.opt:28 config/rs6000/sysv4.opt:28
+#: config/c6x/c6x.opt:42
+msgid "Select method for sdata handling."
msgstr ""
-#: config/arm/arm.opt:198
-msgid "Specify thread local storage scheme."
+#: config/powerpcspe/sysv4.opt:48 config/rs6000/sysv4.opt:48
+msgid "Align to the base type of the bit-field."
msgstr ""
-#: config/arm/arm.opt:202
-msgid "Specify how to access the thread pointer."
+#: config/powerpcspe/sysv4.opt:52 config/rs6000/sysv4.opt:52
+msgid ""
+"Align to the base type of the bit-field. Don't assume that unaligned "
+"accesses are handled by the system."
msgstr ""
-#: config/arm/arm.opt:206
-msgid "Valid arguments to -mtp=:"
+#: config/powerpcspe/sysv4.opt:57 config/powerpcspe/sysv4.opt:61
+#: config/rs6000/sysv4.opt:57 config/rs6000/sysv4.opt:61
+msgid "Produce code relocatable at runtime."
msgstr ""
-#: config/arm/arm.opt:219
-msgid "Thumb: Generate (non-leaf) stack frames even if not needed."
+#: config/powerpcspe/sysv4.opt:65 config/powerpcspe/sysv4.opt:69
+#: config/rs6000/sysv4.opt:65 config/rs6000/sysv4.opt:69
+msgid "Produce little endian code."
msgstr ""
-#: config/arm/arm.opt:223
-msgid "Thumb: Generate (leaf) stack frames even if not needed."
+#: config/powerpcspe/sysv4.opt:73 config/powerpcspe/sysv4.opt:77
+#: config/rs6000/sysv4.opt:73 config/rs6000/sysv4.opt:77
+msgid "Produce big endian code."
msgstr ""
-#: config/arm/arm.opt:227 config/mn10300/mn10300.opt:42
-msgid "Tune code for the given processor."
+#: config/powerpcspe/sysv4.opt:82 config/powerpcspe/sysv4.opt:86
+#: config/powerpcspe/sysv4.opt:95 config/powerpcspe/sysv4.opt:137
+#: config/powerpcspe/sysv4.opt:149 config/rs6000/sysv4.opt:82
+#: config/rs6000/sysv4.opt:86 config/rs6000/sysv4.opt:95
+#: config/rs6000/sysv4.opt:137 config/rs6000/sysv4.opt:149
+msgid "no description yet."
msgstr ""
-#: config/arm/arm.opt:231
-msgid ""
-"Print CPU tuning information as comment in assembler file. This is an "
-"option used only for regression testing of the compiler and not intended for "
-"ordinary use in compiling code."
+#: config/powerpcspe/sysv4.opt:90 config/rs6000/sysv4.opt:90
+msgid "Assume all variable arg functions are prototyped."
msgstr ""
-#: config/arm/arm.opt:242
-msgid ""
-"Use Neon quad-word (rather than double-word) registers for vectorization."
+#: config/powerpcspe/sysv4.opt:99 config/rs6000/sysv4.opt:99
+msgid "Use EABI."
msgstr ""
-#: config/arm/arm.opt:246
-msgid ""
-"Use Neon double-word (rather than quad-word) registers for vectorization."
+#: config/powerpcspe/sysv4.opt:103 config/rs6000/sysv4.opt:103
+msgid "Allow bit-fields to cross word boundaries."
msgstr ""
-#: config/arm/arm.opt:250
-msgid "Only generate absolute relocations on word sized values."
+#: config/powerpcspe/sysv4.opt:107 config/rs6000/sysv4.opt:107
+msgid "Use alternate register names."
msgstr ""
-#: config/arm/arm.opt:254
-msgid "Generate IT blocks appropriate for ARMv8."
+#: config/powerpcspe/sysv4.opt:113 config/rs6000/sysv4.opt:113
+msgid "Use default method for sdata handling."
msgstr ""
-#: config/arm/arm.opt:258
-msgid ""
-"Avoid overlapping destination and address registers on LDRD instructions "
-"that may trigger Cortex-M3 errata."
+#: config/powerpcspe/sysv4.opt:117 config/rs6000/sysv4.opt:117
+msgid "Link with libsim.a, libc.a and sim-crt0.o."
msgstr ""
-#: config/arm/arm.opt:263 config/arc/arc.opt:488
-msgid "Enable unaligned word and halfword accesses to packed data."
+#: config/powerpcspe/sysv4.opt:121 config/rs6000/sysv4.opt:121
+msgid "Link with libads.a, libc.a and crt0.o."
msgstr ""
-#: config/arm/arm.opt:267
-msgid "Use Neon to perform 64-bits operations rather than core registers."
+#: config/powerpcspe/sysv4.opt:125 config/rs6000/sysv4.opt:125
+msgid "Link with libyk.a, libc.a and crt0.o."
msgstr ""
-#: config/arm/arm.opt:271
-msgid "Assume loading data from flash is slower than fetching instructions."
+#: config/powerpcspe/sysv4.opt:129 config/rs6000/sysv4.opt:129
+msgid "Link with libmvme.a, libc.a and crt0.o."
msgstr ""
-#: config/arm/arm.opt:275
-msgid "Assume unified syntax for inline assembly code."
+#: config/powerpcspe/sysv4.opt:133 config/rs6000/sysv4.opt:133
+msgid "Set the PPC_EMB bit in the ELF flags header."
msgstr ""
-#: config/arm/arm.opt:279
-msgid "Do not allow constant data to be placed in code sections."
+#: config/powerpcspe/sysv4.opt:153 config/rs6000/sysv4.opt:153
+msgid "Generate code to use a non-exec PLT and GOT."
msgstr ""
-#: config/sparc/sparc.opt:30 config/sparc/sparc.opt:34
-#: config/visium/visium.opt:37
-msgid "Use hardware FP."
+#: config/powerpcspe/sysv4.opt:157 config/rs6000/sysv4.opt:157
+msgid "Generate code for old exec BSS PLT."
msgstr ""
-#: config/sparc/sparc.opt:38 config/visium/visium.opt:41
-msgid "Do not use hardware FP."
+#: config/powerpcspe/sysv4.opt:161 config/rs6000/sysv4.opt:161
+msgid "Emit .gnu_attribute tags."
msgstr ""
-#: config/sparc/sparc.opt:42
-msgid "Use flat register window model."
+#: config/g.opt:27
+msgid ""
+"-G<number>\tPut global and static data smaller than <number> bytes into a "
+"special section (on some targets)."
msgstr ""
-#: config/sparc/sparc.opt:46
-msgid "Assume possible double misalignment."
+#: config/lynx.opt:23
+msgid "Support legacy multi-threading."
msgstr ""
-#: config/sparc/sparc.opt:50
-msgid "Use ABI reserved registers."
+#: config/lynx.opt:27
+msgid "Use shared libraries."
msgstr ""
-#: config/sparc/sparc.opt:54
-msgid "Use hardware quad FP instructions."
+#: config/lynx.opt:31
+msgid "Support multi-threading."
msgstr ""
-#: config/sparc/sparc.opt:58
-msgid "Do not use hardware quad fp instructions."
+#: config/nvptx/nvptx.opt:22
+msgid "Generate code for a 32-bit ABI."
msgstr ""
-#: config/sparc/sparc.opt:62 config/rs6000/rs6000.opt:482
-msgid "Enable Local Register Allocation."
+#: config/nvptx/nvptx.opt:26
+msgid "Generate code for a 64-bit ABI."
msgstr ""
-#: config/sparc/sparc.opt:66
-msgid "Compile for V8+ ABI."
+#: config/nvptx/nvptx.opt:30
+msgid "Link in code for a __main kernel."
msgstr ""
-#: config/sparc/sparc.opt:70
-msgid "Use UltraSPARC Visual Instruction Set version 1.0 extensions."
+#: config/nvptx/nvptx.opt:34
+msgid "Optimize partition neutering."
msgstr ""
-#: config/sparc/sparc.opt:74
-msgid "Use UltraSPARC Visual Instruction Set version 2.0 extensions."
+#: config/nvptx/nvptx.opt:38
+msgid "Use custom stacks instead of local memory for automatic storage."
msgstr ""
-#: config/sparc/sparc.opt:78
-msgid "Use UltraSPARC Visual Instruction Set version 3.0 extensions."
+#: config/nvptx/nvptx.opt:42
+msgid ""
+"Specify size of .local memory used for stack when the exact amount is not "
+"known."
msgstr ""
-#: config/sparc/sparc.opt:82
-msgid "Use UltraSPARC Visual Instruction Set version 4.0 extensions."
+#: config/nvptx/nvptx.opt:46
+msgid "Generate code that can keep local state uniform across all lanes."
msgstr ""
-#: config/sparc/sparc.opt:86
-msgid "Use UltraSPARC Compare-and-Branch extensions."
+#: config/nvptx/nvptx.opt:50
+msgid ""
+"Generate code for OpenMP offloading: enables -msoft-stack and -muniform-simt."
msgstr ""
-#: config/sparc/sparc.opt:90
-msgid "Use UltraSPARC Fused Multiply-Add extensions."
+#: config/vxworks.opt:36
+msgid "Assume the VxWorks RTP environment."
msgstr ""
-#: config/sparc/sparc.opt:94
-msgid "Use UltraSPARC Population-Count instruction."
+#: config/vxworks.opt:43
+msgid "Assume the VxWorks vThreads environment."
msgstr ""
-#: config/sparc/sparc.opt:98
-msgid "Use UltraSPARC Subtract-Extended-with-Carry instruction."
+#: config/cr16/cr16.opt:23
+msgid "-msim Use simulator runtime."
msgstr ""
-#: config/sparc/sparc.opt:102
-msgid "Pointers are 64-bit."
+#: config/cr16/cr16.opt:27
+msgid "Generate SBIT, CBIT instructions."
msgstr ""
-#: config/sparc/sparc.opt:106
-msgid "Pointers are 32-bit."
+#: config/cr16/cr16.opt:31
+msgid "Support multiply accumulate instructions."
msgstr ""
-#: config/sparc/sparc.opt:110
-msgid "Use 64-bit ABI."
+#: config/cr16/cr16.opt:38
+msgid "Treat data references as near, far or medium. medium is default."
msgstr ""
-#: config/sparc/sparc.opt:114
-msgid "Use 32-bit ABI."
+#: config/cr16/cr16.opt:42
+msgid "Generate code for CR16C architecture."
msgstr ""
-#: config/sparc/sparc.opt:118
-msgid "Use stack bias."
+#: config/cr16/cr16.opt:46
+msgid "Generate code for CR16C+ architecture (Default)."
msgstr ""
-#: config/sparc/sparc.opt:122
-msgid "Use structs on stronger alignment for double-word copies."
+#: config/cr16/cr16.opt:50
+msgid "Treat integers as 32-bit."
msgstr ""
-#: config/sparc/sparc.opt:126
-msgid "Optimize tail call instructions in assembler and linker."
+#: config/avr/avr.opt:23
+msgid "Use subroutines for function prologues and epilogues."
msgstr ""
-#: config/sparc/sparc.opt:130
-msgid "Do not generate code that can only run in supervisor mode (default)."
+#: config/avr/avr.opt:26
+#, c-format
+msgid "missing device or architecture after %qs"
msgstr ""
-#: config/sparc/sparc.opt:134 config/visium/visium.opt:45
-msgid "Use features of and schedule code for given CPU."
+#: config/avr/avr.opt:27
+msgid "-mmcu=MCU\tSelect the target MCU."
msgstr ""
-#: config/sparc/sparc.opt:214
-msgid "Use given SPARC-V9 code model."
+#: config/avr/avr.opt:31
+msgid ""
+"Allow usage of __gcc_isr pseudo instructions in ISR prologues and epilogues."
msgstr ""
-#: config/sparc/sparc.opt:218
-msgid "Enable debug output."
+#: config/avr/avr.opt:35
+msgid "Set the number of 64 KiB flash segments."
msgstr ""
-#: config/sparc/sparc.opt:222
-msgid "Enable strict 32-bit psABI struct return checking."
+#: config/avr/avr.opt:39
+msgid "Indicate presence of a processor erratum."
msgstr ""
-#: config/sparc/sparc.opt:226
-msgid ""
-"Enable workaround for single erratum of AT697F processor (corresponding to "
-"erratum #13 of AT697E processor)."
+#: config/avr/avr.opt:43
+msgid "Enable Read-Modify-Write (RMW) instructions support/use."
msgstr ""
-#: config/sparc/sparc.opt:231
-msgid "Enable workarounds for the errata of the UT699 processor."
+#: config/avr/avr.opt:53
+msgid "Use RJMP / RCALL even though CALL / JMP are available."
msgstr ""
-#: config/sparc/sparc.opt:260
-msgid "Specify the memory model in effect for the program."
+#: config/avr/avr.opt:57
+msgid "Use an 8-bit 'int' type."
msgstr ""
-#: config/rs6000/darwin.opt:38 config/rs6000/sysv4.opt:141
-msgid "Generate 64-bit code."
+#: config/avr/avr.opt:61
+msgid "Change the stack pointer without disabling interrupts."
msgstr ""
-#: config/rs6000/darwin.opt:42 config/rs6000/sysv4.opt:145
-msgid "Generate 32-bit code."
+#: config/avr/avr.opt:65
+msgid ""
+"Set the branch costs for conditional branch instructions. Reasonable values "
+"are small, non-negative integers. The default branch cost is 0."
msgstr ""
-#: config/rs6000/rs6000-tables.opt:24
-msgid "Known CPUs (for use with the -mcpu= and -mtune= options):"
+#: config/avr/avr.opt:75
+msgid "Change only the low 8 bits of the stack pointer."
+msgstr ""
+
+#: config/avr/avr.opt:79
+msgid "Relax branches."
msgstr ""
-#: config/rs6000/476.opt:24
+#: config/avr/avr.opt:83
msgid ""
-"Preserve the PowerPC 476's link stack by matching up a blr with the bcl/bl "
-"insns used for GOT accesses."
+"Make the linker relaxation machine assume that a program counter wrap-around "
+"occurs."
msgstr ""
-#: config/rs6000/aix64.opt:24
-msgid "Compile for 64-bit pointers."
+#: config/avr/avr.opt:87
+msgid ""
+"Accumulate outgoing function arguments and acquire/release the needed stack "
+"space for outgoing function arguments in function prologue/epilogue. "
+"Without this option, outgoing arguments are pushed before calling a function "
+"and popped afterwards. This option can lead to reduced code size for "
+"functions that call many functions that get their arguments on the stack "
+"like, for example printf."
msgstr ""
-#: config/rs6000/aix64.opt:28
-msgid "Compile for 32-bit pointers."
+#: config/avr/avr.opt:91
+msgid ""
+"When accessing RAM, use X as imposed by the hardware, i.e. just use pre-"
+"decrement, post-increment and indirect addressing with the X register. "
+"Without this option, the compiler may assume that there is an addressing "
+"mode X+const similar to Y+const and Z+const and emit instructions to emulate "
+"such an addressing mode for X."
msgstr ""
-#: config/rs6000/aix64.opt:32 config/rs6000/linux64.opt:28
-msgid "Select code model."
+#: config/avr/avr.opt:96
+msgid ""
+"The device has no SPH special function register. This option will be "
+"overridden by the compiler driver with the correct setting if presence/"
+"absence of SPH can be deduced from -mmcu=MCU."
msgstr ""
-#: config/rs6000/aix64.opt:49
-msgid "Support message passing with the Parallel Environment."
+#: config/avr/avr.opt:100
+msgid "Warn if the address space of an address is changed."
msgstr ""
-#: config/rs6000/linux64.opt:24
-msgid "Call mcount for profiling before a function prologue."
+#: config/avr/avr.opt:104
+msgid ""
+"Warn if the ISR is misspelled, i.e. without __vector prefix. Enabled by "
+"default."
msgstr ""
-#: config/rs6000/rs6000.opt:109
-msgid "Use PowerPC-64 instruction set."
+#: config/avr/avr.opt:108
+msgid ""
+"Allow to use truncation instead of rounding towards zero for fractional "
+"fixed-point types."
msgstr ""
-#: config/rs6000/rs6000.opt:113
-msgid "Use PowerPC General Purpose group optional instructions."
+#: config/avr/avr.opt:112
+msgid ""
+"Assume that all data in static storage can be accessed by LDS / STS. This "
+"option is only useful for reduced Tiny devices."
msgstr ""
-#: config/rs6000/rs6000.opt:117
-msgid "Use PowerPC Graphics group optional instructions."
+#: config/avr/avr.opt:116
+msgid "Do not link against the device-specific library lib<MCU>.a."
msgstr ""
-#: config/rs6000/rs6000.opt:121
-msgid "Use PowerPC V2.01 single field mfcr instruction."
+#: config/m32r/m32r.opt:34
+msgid "Compile for the m32rx."
msgstr ""
-#: config/rs6000/rs6000.opt:125
-msgid "Use PowerPC V2.02 popcntb instruction."
+#: config/m32r/m32r.opt:38
+msgid "Compile for the m32r2."
msgstr ""
-#: config/rs6000/rs6000.opt:129
-msgid "Use PowerPC V2.02 floating point rounding instructions."
+#: config/m32r/m32r.opt:42
+msgid "Compile for the m32r."
msgstr ""
-#: config/rs6000/rs6000.opt:133
-msgid "Use PowerPC V2.05 compare bytes instruction."
+#: config/m32r/m32r.opt:46
+msgid "Align all loops to 32 byte boundary."
msgstr ""
-#: config/rs6000/rs6000.opt:137
-msgid ""
-"Use extended PowerPC V2.05 move floating point to/from GPR instructions."
+#: config/m32r/m32r.opt:50
+msgid "Prefer branches over conditional execution."
msgstr ""
-#: config/rs6000/rs6000.opt:141
-msgid "Use AltiVec instructions."
+#: config/m32r/m32r.opt:54
+msgid "Give branches their default cost."
msgstr ""
-#: config/rs6000/rs6000.opt:145
-msgid "Generate AltiVec instructions using little-endian element order."
+#: config/m32r/m32r.opt:58
+msgid "Display compile time statistics."
msgstr ""
-#: config/rs6000/rs6000.opt:149
-msgid "Generate AltiVec instructions using big-endian element order."
+#: config/m32r/m32r.opt:62
+msgid "Specify cache flush function."
msgstr ""
-#: config/rs6000/rs6000.opt:153
-msgid "Use decimal floating point instructions."
+#: config/m32r/m32r.opt:66
+msgid "Specify cache flush trap number."
msgstr ""
-#: config/rs6000/rs6000.opt:157
-msgid "Use 4xx half-word multiply instructions."
+#: config/m32r/m32r.opt:70
+msgid "Only issue one instruction per cycle."
msgstr ""
-#: config/rs6000/rs6000.opt:161
-msgid "Use 4xx string-search dlmzb instruction."
+#: config/m32r/m32r.opt:74
+msgid "Allow two instructions to be issued per cycle."
msgstr ""
-#: config/rs6000/rs6000.opt:165
-msgid "Generate load/store multiple instructions."
+#: config/m32r/m32r.opt:78
+msgid "Code size: small, medium or large."
msgstr ""
-#: config/rs6000/rs6000.opt:169
-msgid "Generate string instructions for block moves."
+#: config/m32r/m32r.opt:94
+msgid "Don't call any cache flush functions."
msgstr ""
-#: config/rs6000/rs6000.opt:181
-msgid "Use PowerPC V2.06 popcntd instruction."
+#: config/m32r/m32r.opt:98
+msgid "Don't call any cache flush trap."
msgstr ""
-#: config/rs6000/rs6000.opt:185
-msgid ""
-"Under -ffast-math, generate a FRIZ instruction for (double)(long long) "
-"conversions."
+#: config/m32r/m32r.opt:105
+msgid "Small data area: none, sdata, use."
msgstr ""
-#: config/rs6000/rs6000.opt:193
-msgid "Use vector/scalar (VSX) instructions."
+#: config/s390/tpf.opt:23
+msgid "Enable TPF-OS tracing code."
msgstr ""
-#: config/rs6000/rs6000.opt:240
-msgid "Do not generate load/store with update instructions."
+#: config/s390/tpf.opt:27
+msgid "Specify main object for TPF-OS."
msgstr ""
-#: config/rs6000/rs6000.opt:244
-msgid "Generate load/store with update instructions."
+#: config/s390/s390.opt:48
+msgid "31 bit ABI."
msgstr ""
-#: config/rs6000/rs6000.opt:252
-msgid "Avoid generation of indexed load/store instructions when possible."
+#: config/s390/s390.opt:52
+msgid "64 bit ABI."
msgstr ""
-#: config/rs6000/rs6000.opt:256
-msgid "Mark __tls_get_addr calls with argument info."
+#: config/s390/s390.opt:126
+msgid "Maintain backchain pointer."
msgstr ""
-#: config/rs6000/rs6000.opt:263
-msgid "Schedule the start and end of the procedure."
+#: config/s390/s390.opt:130
+msgid "Additional debug prints."
msgstr ""
-#: config/rs6000/rs6000.opt:267
-msgid "Return all structures in memory (AIX default)."
+#: config/s390/s390.opt:134
+msgid "ESA/390 architecture."
msgstr ""
-#: config/rs6000/rs6000.opt:271
-msgid "Return small structures in registers (SVR4 default)."
+#: config/s390/s390.opt:138
+msgid "Enable decimal floating point hardware support."
msgstr ""
-#: config/rs6000/rs6000.opt:275
-msgid "Conform more closely to IBM XLC semantics."
+#: config/s390/s390.opt:142
+msgid "Enable hardware floating point."
msgstr ""
-#: config/rs6000/rs6000.opt:279 config/rs6000/rs6000.opt:283
+#: config/s390/s390.opt:146
msgid ""
-"Generate software reciprocal divide and square root for better throughput."
+"Takes two non-negative integer numbers separated by a comma. Prepend the "
+"function label with the number of two-byte Nop instructions indicated by the "
+"first. Append Nop instructions covering the number of halfwords indicated "
+"by the second after the label. Nop instructions of the largest possible "
+"size are used (six, four or two bytes), beginning with the largest possible "
+"size. Using 0 for both values disables hotpatching."
msgstr ""
-#: config/rs6000/rs6000.opt:287
-msgid "Assume that the reciprocal estimate instructions provide more accuracy."
+#: config/s390/s390.opt:164
+msgid "Use hardware transactional execution instructions."
msgstr ""
-#: config/rs6000/rs6000.opt:291
-msgid "Do not place floating point constants in TOC."
+#: config/s390/s390.opt:168
+msgid "Use hardware vector facility instructions and enable the vector ABI."
msgstr ""
-#: config/rs6000/rs6000.opt:295
-msgid "Place floating point constants in TOC."
+#: config/s390/s390.opt:172
+msgid "Use packed stack layout."
msgstr ""
-#: config/rs6000/rs6000.opt:299
-msgid "Do not place symbol+offset constants in TOC."
+#: config/s390/s390.opt:176
+msgid "Use bras for executable < 64k."
msgstr ""
-#: config/rs6000/rs6000.opt:303
-msgid "Place symbol+offset constants in TOC."
+#: config/s390/s390.opt:180
+msgid "Disable hardware floating point."
msgstr ""
-#: config/rs6000/rs6000.opt:314
-msgid "Use only one TOC entry per procedure."
+#: config/s390/s390.opt:184
+msgid ""
+"Set the max. number of bytes which has to be left to stack size before a "
+"trap instruction is triggered."
msgstr ""
-#: config/rs6000/rs6000.opt:318
-msgid "Put everything in the regular TOC."
+#: config/s390/s390.opt:188
+msgid "Switches off the -mstack-guard= option."
msgstr ""
-#: config/rs6000/rs6000.opt:322
-msgid "Generate VRSAVE instructions when generating AltiVec code."
+#: config/s390/s390.opt:192
+msgid ""
+"Emit extra code in the function prologue in order to trap if the stack size "
+"exceeds the given limit."
msgstr ""
-#: config/rs6000/rs6000.opt:326
-msgid "Deprecated option. Use -mno-vrsave instead."
+#: config/s390/s390.opt:196
+msgid "Switches off the -mstack-size= option."
msgstr ""
-#: config/rs6000/rs6000.opt:330
-msgid "Deprecated option. Use -mvrsave instead."
+#: config/s390/s390.opt:204
+msgid "Use the mvcle instruction for block moves."
msgstr ""
-#: config/rs6000/rs6000.opt:334
+#: config/s390/s390.opt:208
msgid ""
-"Specify how many bytes should be moved inline before calling out to memcpy/"
-"memmove."
+"Enable the z vector language extension providing the context-sensitive "
+"vector macro and enable the Altivec-style builtins in vecintrin.h."
msgstr ""
-#: config/rs6000/rs6000.opt:338
-msgid ""
-"Specify the maximum number pairs of load instructions that should be "
-"generated inline for the compare. If the number needed exceeds the limit, a "
-"call to memcmp will be generated instead."
+#: config/s390/s390.opt:213
+msgid "Warn if a function uses alloca or creates an array with dynamic size."
msgstr ""
-#: config/rs6000/rs6000.opt:342
-msgid ""
-"Specify the maximum number pairs of load instructions that should be "
-"generated inline for the compare. If the number needed exceeds the limit, a "
-"call to strncmp will be generated instead."
+#: config/s390/s390.opt:217
+msgid "Warn if a single function's framesize exceeds the given framesize."
msgstr ""
-#: config/rs6000/rs6000.opt:346
-msgid "Generate isel instructions."
+#: config/s390/s390.opt:221
+msgid "z/Architecture."
msgstr ""
-#: config/rs6000/rs6000.opt:350
-msgid "Deprecated option. Use -mno-isel instead."
+#: config/s390/s390.opt:225
+msgid ""
+"Set the branch costs for conditional branch instructions. Reasonable values "
+"are small, non-negative integers. The default branch cost is 1."
msgstr ""
-#: config/rs6000/rs6000.opt:354
-msgid "Deprecated option. Use -misel instead."
+#: config/s390/s390.opt:235 config/arm/arm.opt:172
+msgid "Assume data segments are relative to text segment."
msgstr ""
-#: config/rs6000/rs6000.opt:358
-msgid "Generate SPE SIMD instructions on E500."
+#: config/rl78/rl78.opt:27 config/rx/rx.opt:87
+msgid "Use the simulator runtime."
msgstr ""
-#: config/rs6000/rs6000.opt:362
-msgid "Generate PPC750CL paired-single instructions."
+#: config/rl78/rl78.opt:31
+msgid ""
+"Selects the type of hardware multiplication and division to use (none/g13/"
+"g14)."
msgstr ""
-#: config/rs6000/rs6000.opt:366
-msgid "Deprecated option. Use -mno-spe instead."
+#: config/rl78/rl78.opt:50
+msgid "Use all registers, reserving none for interrupt handlers."
msgstr ""
-#: config/rs6000/rs6000.opt:370
-msgid "Deprecated option. Use -mspe instead."
+#: config/rl78/rl78.opt:54
+msgid "Enable assembler and linker relaxation. Enabled by default at -Os."
msgstr ""
-#: config/rs6000/rs6000.opt:374
-msgid "-mdebug=\tEnable debug output."
+#: config/rl78/rl78.opt:58
+msgid ""
+"Selects the type of RL78 core being targeted (g10/g13/g14). The default is "
+"the G14. If set, also selects the hardware multiply support to be used."
msgstr ""
-#: config/rs6000/rs6000.opt:378
-msgid "Use the AltiVec ABI extensions."
+#: config/rl78/rl78.opt:77
+msgid "Alias for -mcpu=g10."
msgstr ""
-#: config/rs6000/rs6000.opt:382
-msgid "Do not use the AltiVec ABI extensions."
+#: config/rl78/rl78.opt:81
+msgid "Alias for -mcpu=g13."
msgstr ""
-#: config/rs6000/rs6000.opt:386
-msgid "Use the SPE ABI extensions."
+#: config/rl78/rl78.opt:85 config/rl78/rl78.opt:89
+msgid "Alias for -mcpu=g14."
msgstr ""
-#: config/rs6000/rs6000.opt:390
-msgid "Do not use the SPE ABI extensions."
+#: config/rl78/rl78.opt:93
+msgid ""
+"Assume ES is zero throughout program execution, use ES: for read-only data."
msgstr ""
-#: config/rs6000/rs6000.opt:394
-msgid "Use the ELFv1 ABI."
+#: config/rl78/rl78.opt:97
+msgid "Stores the MDUC registers in interrupt handlers for G13 target."
msgstr ""
-#: config/rs6000/rs6000.opt:398
-msgid "Use the ELFv2 ABI."
+#: config/stormy16/stormy16.opt:24
+msgid "Provide libraries for the simulator."
msgstr ""
-#: config/rs6000/rs6000.opt:405
-msgid "using darwin64 ABI"
+#: config/arm/arm-tables.opt:25
+msgid "Known ARM CPUs (for use with the -mcpu= and -mtune= options):"
msgstr ""
-#: config/rs6000/rs6000.opt:408
-msgid "using old darwin ABI"
+#: config/arm/arm-tables.opt:365
+msgid "Known ARM architectures (for use with the -march= option):"
msgstr ""
-#: config/rs6000/rs6000.opt:411
-msgid "using IEEE extended precision long double"
+#: config/arm/arm-tables.opt:471
+msgid "Known ARM FPUs (for use with the -mfpu= option):"
msgstr ""
-#: config/rs6000/rs6000.opt:414
-msgid "using IBM extended precision long double"
+#: config/arm/arm.opt:35
+msgid "TLS dialect to use:"
msgstr ""
-#: config/rs6000/rs6000.opt:418
-msgid "-mcpu=\tUse features of and schedule code for given CPU."
+#: config/arm/arm.opt:45
+msgid "Specify an ABI."
msgstr ""
-#: config/rs6000/rs6000.opt:422
-msgid "-mtune=\tSchedule code for given CPU."
+#: config/arm/arm.opt:49
+msgid "Known ARM ABIs (for use with the -mabi= option):"
msgstr ""
-#: config/rs6000/rs6000.opt:426
-msgid "-mtraceback=\tSelect full, part, or no traceback table."
+#: config/arm/arm.opt:68
+msgid "Generate a call to abort if a noreturn function returns."
msgstr ""
-#: config/rs6000/rs6000.opt:442
-msgid "Avoid all range limits on call instructions."
+#: config/arm/arm.opt:75
+msgid "Generate APCS conformant stack frames."
msgstr ""
-#: config/rs6000/rs6000.opt:446
-msgid "Generate Cell microcode."
+#: config/arm/arm.opt:79
+msgid "Generate re-entrant, PIC code."
msgstr ""
-#: config/rs6000/rs6000.opt:450
-msgid "Warn when a Cell microcoded instruction is emitted."
+#: config/arm/arm.opt:95
+msgid "Generate code in 32 bit ARM state."
msgstr ""
-#: config/rs6000/rs6000.opt:454
-msgid "Warn about deprecated 'vector long ...' AltiVec type usage."
+#: config/arm/arm.opt:103
+msgid "Thumb: Assume non-static functions may be called from ARM code."
msgstr ""
-#: config/rs6000/rs6000.opt:458
-msgid "-mfloat-gprs=\tSelect GPR floating point method."
+#: config/arm/arm.opt:107
+msgid "Thumb: Assume function pointers may go to non-Thumb aware code."
msgstr ""
-#: config/rs6000/rs6000.opt:462
-msgid "Valid arguments to -mfloat-gprs=:"
+#: config/arm/arm.opt:115
+msgid "Specify if floating point hardware should be used."
msgstr ""
-#: config/rs6000/rs6000.opt:478
-msgid "-mlong-double-<n>\tSpecify size of long double (64 or 128 bits)."
+#: config/arm/arm.opt:119
+msgid ""
+"Specify that the compiler should target secure code as per ARMv8-M Security "
+"Extensions."
msgstr ""
-#: config/rs6000/rs6000.opt:486
-msgid "Determine which dependences between insns are considered costly."
+#: config/arm/arm.opt:123
+msgid "Known floating-point ABIs (for use with the -mfloat-abi= option):"
msgstr ""
-#: config/rs6000/rs6000.opt:490
-msgid "Specify which post scheduling nop insertion scheme to apply."
+#: config/arm/arm.opt:136
+msgid "Switch ARM/Thumb modes on alternating functions for compiler testing."
msgstr ""
-#: config/rs6000/rs6000.opt:494
-msgid "Specify alignment of structure fields default/natural."
+#: config/arm/arm.opt:140
+msgid "Specify the __fp16 floating-point format."
msgstr ""
-#: config/rs6000/rs6000.opt:498
-msgid "Valid arguments to -malign-:"
+#: config/arm/arm.opt:144
+msgid "Known __fp16 formats (for use with the -mfp16-format= option):"
msgstr ""
-#: config/rs6000/rs6000.opt:508
-msgid "Specify scheduling priority for dispatch slot restricted insns."
+#: config/arm/arm.opt:157
+msgid "Specify the name of the target floating point hardware/format."
msgstr ""
-#: config/rs6000/rs6000.opt:512
-msgid "Single-precision floating point unit."
+#: config/arm/arm.opt:168
+msgid "Generate call insns as indirect calls, if necessary."
msgstr ""
-#: config/rs6000/rs6000.opt:516
-msgid "Double-precision floating point unit."
+#: config/arm/arm.opt:176
+msgid "Specify the register to be used for PIC addressing."
msgstr ""
-#: config/rs6000/rs6000.opt:520
-msgid "Floating point unit does not support divide & sqrt."
+#: config/arm/arm.opt:180
+msgid "Store function names in object code."
msgstr ""
-#: config/rs6000/rs6000.opt:524
-msgid "-mfpu=\tSpecify FP (sp, dp, sp-lite, dp-lite) (implies -mxilinx-fpu)."
+#: config/arm/arm.opt:184
+msgid "Permit scheduling of a function's prologue sequence."
msgstr ""
-#: config/rs6000/rs6000.opt:546
-msgid "Specify Xilinx FPU."
+#: config/arm/arm.opt:195
+msgid "Specify the minimum bit alignment of structures. (Deprecated)."
msgstr ""
-#: config/rs6000/rs6000.opt:550
-msgid "Use r11 to hold the static link in calls to functions via pointers."
+#: config/arm/arm.opt:199
+msgid "Generate code for Thumb state."
msgstr ""
-#: config/rs6000/rs6000.opt:554
-msgid "Save the TOC in the prologue for indirect calls rather than inline."
+#: config/arm/arm.opt:203
+msgid "Support calls between Thumb and ARM instruction sets."
msgstr ""
-#: config/rs6000/rs6000.opt:558
-msgid "Allow 128-bit integers in VSX registers."
+#: config/arm/arm.opt:207
+msgid "Specify thread local storage scheme."
msgstr ""
-#: config/rs6000/rs6000.opt:562
-msgid ""
-"Fuse certain integer operations together for better performance on power8."
+#: config/arm/arm.opt:211
+msgid "Specify how to access the thread pointer."
msgstr ""
-#: config/rs6000/rs6000.opt:566
-msgid "Allow sign extension in fusion operations."
+#: config/arm/arm.opt:215
+msgid "Valid arguments to -mtp=:"
msgstr ""
-#: config/rs6000/rs6000.opt:570
-msgid "Use vector and scalar instructions added in ISA 2.07."
+#: config/arm/arm.opt:228
+msgid "Thumb: Generate (non-leaf) stack frames even if not needed."
msgstr ""
-#: config/rs6000/rs6000.opt:574
-msgid "Use ISA 2.07 Category:Vector.AES and Category:Vector.SHA2 instructions."
+#: config/arm/arm.opt:232
+msgid "Thumb: Generate (leaf) stack frames even if not needed."
msgstr ""
-#: config/rs6000/rs6000.opt:578
-msgid "Use ISA 2.07 direct move between GPR & VSX register instructions."
+#: config/arm/arm.opt:236 config/mn10300/mn10300.opt:42
+msgid "Tune code for the given processor."
msgstr ""
-#: config/rs6000/rs6000.opt:582
-msgid "Use ISA 2.07 transactional memory (HTM) instructions."
+#: config/arm/arm.opt:240
+msgid ""
+"Print CPU tuning information as comment in assembler file. This is an "
+"option used only for regression testing of the compiler and not intended for "
+"ordinary use in compiling code."
msgstr ""
-#: config/rs6000/rs6000.opt:586
-msgid "Generate the quad word memory instructions (lq/stq)."
+#: config/arm/arm.opt:251
+msgid ""
+"Use Neon quad-word (rather than double-word) registers for vectorization."
msgstr ""
-#: config/rs6000/rs6000.opt:590
-msgid "Generate the quad word memory atomic instructions (lqarx/stqcx)."
+#: config/arm/arm.opt:255
+msgid ""
+"Use Neon double-word (rather than quad-word) registers for vectorization."
msgstr ""
-#: config/rs6000/rs6000.opt:594
-msgid ""
-"Generate aggregate parameter passing code with at most 64-bit alignment."
+#: config/arm/arm.opt:259
+msgid "Only generate absolute relocations on word sized values."
msgstr ""
-#: config/rs6000/rs6000.opt:598
-msgid "Allow double variables in upper registers with -mcpu=power7 or -mvsx."
+#: config/arm/arm.opt:263
+msgid "Generate IT blocks appropriate for ARMv8."
msgstr ""
-#: config/rs6000/rs6000.opt:602
+#: config/arm/arm.opt:267
msgid ""
-"Allow float variables in upper registers with -mcpu=power8 or -mpower8-"
-"vector."
+"Avoid overlapping destination and address registers on LDRD instructions "
+"that may trigger Cortex-M3 errata."
msgstr ""
-#: config/rs6000/rs6000.opt:606
-msgid "Allow float/double variables in upper registers if cpu allows it."
+#: config/arm/arm.opt:272 config/arc/arc.opt:488
+msgid "Enable unaligned word and halfword accesses to packed data."
msgstr ""
-#: config/rs6000/rs6000.opt:610
-msgid ""
-"Allow 64-bit integer variables in upper registers with -mcpu=power7 or -mvsx."
+#: config/arm/arm.opt:276
+msgid "Use Neon to perform 64-bits operations rather than core registers."
msgstr ""
-#: config/rs6000/rs6000.opt:614
-msgid "Analyze and remove doubleword swaps from VSX computations."
+#: config/arm/arm.opt:280
+msgid "Assume loading data from flash is slower than fetching instructions."
msgstr ""
-#: config/rs6000/rs6000.opt:618
-msgid "Fuse certain operations together for better performance on power9."
+#: config/arm/arm.opt:284
+msgid "Assume unified syntax for inline assembly code."
msgstr ""
-#: config/rs6000/rs6000.opt:622
-msgid "Use certain scalar instructions added in ISA 3.0."
+#: config/arm/arm.opt:288
+msgid "Do not allow constant data to be placed in code sections."
msgstr ""
-#: config/rs6000/rs6000.opt:626
-msgid "Use vector instructions added in ISA 3.0."
+#: config/arm/arm.opt:292
+msgid "When linking for big-endian targets, generate a BE8 format image."
msgstr ""
-#: config/rs6000/rs6000.opt:630
-msgid "Use scalar register+offset memory instructions added in ISA 3.0."
+#: config/arm/arm.opt:296
+msgid ""
+"When linking for big-endian targets, generate a legacy BE32 format image."
msgstr ""
-#: config/rs6000/rs6000.opt:634
-msgid "Use vector register+offset memory instructions added in ISA 3.0."
+#: config/sparc/sparc.opt:30 config/sparc/sparc.opt:34
+#: config/visium/visium.opt:37
+msgid "Use hardware FP."
msgstr ""
-#: config/rs6000/rs6000.opt:638
-msgid "Use register+offset memory instructions added in ISA 3.0."
+#: config/sparc/sparc.opt:38 config/visium/visium.opt:41
+msgid "Do not use hardware FP."
msgstr ""
-#: config/rs6000/rs6000.opt:642
-msgid "Use the new min/max instructions defined in ISA 3.0."
+#: config/sparc/sparc.opt:42
+msgid "Use flat register window model."
msgstr ""
-#: config/rs6000/rs6000.opt:646
-msgid ""
-"Fuse medium/large code model toc references with the memory instruction."
+#: config/sparc/sparc.opt:46
+msgid "Assume possible double misalignment."
msgstr ""
-#: config/rs6000/rs6000.opt:650
-msgid "Generate the integer modulo instructions."
+#: config/sparc/sparc.opt:50
+msgid "Use ABI reserved registers."
msgstr ""
-#: config/rs6000/rs6000.opt:658
-msgid "Allow the IEEE 128-bit types without requiring the __float128 keyword."
+#: config/sparc/sparc.opt:54
+msgid "Use hardware quad FP instructions."
msgstr ""
-#: config/rs6000/rs6000.opt:662
-msgid "Enable IEEE 128-bit floating point via the __float128 keyword."
+#: config/sparc/sparc.opt:58
+msgid "Do not use hardware quad fp instructions."
msgstr ""
-#: config/rs6000/rs6000.opt:666
-msgid "Enable using IEEE 128-bit floating point instructions."
+#: config/sparc/sparc.opt:66
+msgid "Compile for V8+ ABI."
msgstr ""
-#: config/rs6000/rs6000.opt:670
-msgid "Enable default conversions between __float128 & long double."
+#: config/sparc/sparc.opt:70
+msgid "Use UltraSPARC Visual Instruction Set version 1.0 extensions."
msgstr ""
-#: config/rs6000/rs6000.opt:674
-msgid "Enable small integers to be in VSX registers."
+#: config/sparc/sparc.opt:74
+msgid "Use UltraSPARC Visual Instruction Set version 2.0 extensions."
msgstr ""
-#: config/rs6000/rs6000.opt:682
-msgid "Valid arguments to -mstack-protector-guard=:"
+#: config/sparc/sparc.opt:78
+msgid "Use UltraSPARC Visual Instruction Set version 3.0 extensions."
msgstr ""
-#: config/rs6000/rs6000.opt:692
-msgid "Use the given base register for addressing the stack-protector guard."
+#: config/sparc/sparc.opt:82
+msgid "Use UltraSPARC Visual Instruction Set version 4.0 extensions."
msgstr ""
-#: config/rs6000/rs6000.opt:699
-msgid "Use the given offset for addressing the stack-protector guard."
+#: config/sparc/sparc.opt:86
+msgid "Use additional VIS instructions introduced in OSA2017."
msgstr ""
-#: config/rs6000/sysv4.opt:24
-msgid "Select ABI calling convention."
+#: config/sparc/sparc.opt:90
+msgid "Use UltraSPARC Compare-and-Branch extensions."
msgstr ""
-#: config/rs6000/sysv4.opt:28 config/c6x/c6x.opt:42
-msgid "Select method for sdata handling."
+#: config/sparc/sparc.opt:94
+msgid "Use UltraSPARC Fused Multiply-Add extensions."
msgstr ""
-#: config/rs6000/sysv4.opt:48
-msgid "Align to the base type of the bit-field."
+#: config/sparc/sparc.opt:98
+msgid "Use Floating-point Multiply Single to Double (FsMULd) instruction."
msgstr ""
-#: config/rs6000/sysv4.opt:52
-msgid ""
-"Align to the base type of the bit-field. Don't assume that unaligned "
-"accesses are handled by the system."
+#: config/sparc/sparc.opt:102
+msgid "Use UltraSPARC Population-Count instruction."
msgstr ""
-#: config/rs6000/sysv4.opt:57 config/rs6000/sysv4.opt:61
-msgid "Produce code relocatable at runtime."
+#: config/sparc/sparc.opt:106
+msgid "Use UltraSPARC Subtract-Extended-with-Carry instruction."
msgstr ""
-#: config/rs6000/sysv4.opt:65 config/rs6000/sysv4.opt:69
-msgid "Produce little endian code."
+#: config/sparc/sparc.opt:110
+msgid "Pointers are 64-bit."
msgstr ""
-#: config/rs6000/sysv4.opt:73 config/rs6000/sysv4.opt:77
-msgid "Produce big endian code."
+#: config/sparc/sparc.opt:114
+msgid "Pointers are 32-bit."
msgstr ""
-#: config/rs6000/sysv4.opt:82 config/rs6000/sysv4.opt:86
-#: config/rs6000/sysv4.opt:95 config/rs6000/sysv4.opt:137
-#: config/rs6000/sysv4.opt:149
-msgid "no description yet."
+#: config/sparc/sparc.opt:118
+msgid "Use 64-bit ABI."
msgstr ""
-#: config/rs6000/sysv4.opt:90
-msgid "Assume all variable arg functions are prototyped."
+#: config/sparc/sparc.opt:122
+msgid "Use 32-bit ABI."
msgstr ""
-#: config/rs6000/sysv4.opt:99
-msgid "Use EABI."
+#: config/sparc/sparc.opt:126
+msgid "Use stack bias."
msgstr ""
-#: config/rs6000/sysv4.opt:103
-msgid "Allow bit-fields to cross word boundaries."
+#: config/sparc/sparc.opt:130
+msgid "Use structs on stronger alignment for double-word copies."
msgstr ""
-#: config/rs6000/sysv4.opt:107
-msgid "Use alternate register names."
+#: config/sparc/sparc.opt:134
+msgid "Optimize tail call instructions in assembler and linker."
msgstr ""
-#: config/rs6000/sysv4.opt:113
-msgid "Use default method for sdata handling."
+#: config/sparc/sparc.opt:138
+msgid "Do not generate code that can only run in supervisor mode (default)."
msgstr ""
-#: config/rs6000/sysv4.opt:117
-msgid "Link with libsim.a, libc.a and sim-crt0.o."
+#: config/sparc/sparc.opt:142 config/visium/visium.opt:45
+msgid "Use features of and schedule code for given CPU."
msgstr ""
-#: config/rs6000/sysv4.opt:121
-msgid "Link with libads.a, libc.a and crt0.o."
+#: config/sparc/sparc.opt:225
+msgid "Use given SPARC-V9 code model."
msgstr ""
-#: config/rs6000/sysv4.opt:125
-msgid "Link with libyk.a, libc.a and crt0.o."
+#: config/sparc/sparc.opt:229
+msgid "Enable debug output."
msgstr ""
-#: config/rs6000/sysv4.opt:129
-msgid "Link with libmvme.a, libc.a and crt0.o."
+#: config/sparc/sparc.opt:233
+msgid "Enable strict 32-bit psABI struct return checking."
msgstr ""
-#: config/rs6000/sysv4.opt:133
-msgid "Set the PPC_EMB bit in the ELF flags header."
+#: config/sparc/sparc.opt:237
+msgid ""
+"Enable workaround for single erratum of AT697F processor (corresponding to "
+"erratum #13 of AT697E processor)."
msgstr ""
-#: config/rs6000/sysv4.opt:153
-msgid "Generate code to use a non-exec PLT and GOT."
+#: config/sparc/sparc.opt:242
+msgid "Enable workarounds for the errata of the UT699 processor."
msgstr ""
-#: config/rs6000/sysv4.opt:157
-msgid "Generate code for old exec BSS PLT."
+#: config/sparc/sparc.opt:246
+msgid "Enable workarounds for the errata of the UT699E/UT700 processor."
msgstr ""
-#: config/rs6000/sysv4.opt:161
-msgid "Emit .gnu_attribute tags."
+#: config/sparc/sparc.opt:250
+msgid "Enable workarounds for the errata of the GR712RC processor."
+msgstr ""
+
+#: config/sparc/sparc.opt:283
+msgid "Specify the memory model in effect for the program."
msgstr ""
#: config/alpha/alpha.opt:27
@@ -13534,9 +13650,9 @@ msgstr ""
msgid "Generate mul64 and mulu64 instructions."
msgstr ""
-#: config/arc/arc.opt:169 config/arc/arc.opt:338 config/arc/arc.opt:342
-#: config/arc/arc.opt:346 config/arc/arc.opt:350 config/arc/arc.opt:353
-#: config/arc/arc.opt:356 config/arc/arc.opt:373
+#: config/arc/arc.opt:169 config/arc/arc.opt:331 config/arc/arc.opt:338
+#: config/arc/arc.opt:342 config/arc/arc.opt:346 config/arc/arc.opt:350
+#: config/arc/arc.opt:353 config/arc/arc.opt:356 config/arc/arc.opt:373
#, c-format
msgid "%qs is deprecated"
msgstr ""
@@ -13787,6 +13903,18 @@ msgstr ""
msgid "Enable use of NPS400 xld/xst extension."
msgstr ""
+#: config/arc/arc.opt:492
+msgid ""
+"Specifies the registers that the processor saves on an interrupt entry and "
+"exit."
+msgstr ""
+
+#: config/arc/arc.opt:496
+msgid ""
+"Specifies the number of registers replicated in second register bank on "
+"entry to fast interrupt."
+msgstr ""
+
#: lto/lang.opt:28
#, c-format
msgid "unknown linker output %qs"
@@ -13817,2091 +13945,2099 @@ msgstr ""
msgid "The resolution file."
msgstr ""
-#: common.opt:231
+#: common.opt:238
msgid ""
"Enable coverage-guided fuzzing code instrumentation. Inserts call to "
"__sanitizer_cov_trace_pc into every basic block."
msgstr ""
-#: common.opt:298
+#: common.opt:305
msgid "Display this information."
msgstr ""
-#: common.opt:302
+#: common.opt:309
msgid ""
"--help=<class>\tDisplay descriptions of a specific class of options. "
"<class> is one or more of optimizers, target, warnings, undocumented, params."
msgstr ""
-#: common.opt:420
+#: common.opt:427
msgid "Alias for --help=target."
msgstr ""
-#: common.opt:445
+#: common.opt:452
msgid ""
"--param <param>=<value>\tSet parameter <param> to value. See below for a "
"complete list of parameters."
msgstr ""
-#: common.opt:473
+#: common.opt:480
msgid "-O<number>\tSet optimization level to <number>."
msgstr ""
-#: common.opt:477
+#: common.opt:484
msgid "Optimize for space rather than speed."
msgstr ""
-#: common.opt:481
+#: common.opt:488
msgid "Optimize for speed disregarding exact standards compliance."
msgstr ""
-#: common.opt:485
+#: common.opt:492
msgid "Optimize for debugging experience rather than speed or size."
msgstr ""
-#: common.opt:525
+#: common.opt:532
msgid "This switch is deprecated; use -Wextra instead."
msgstr ""
-#: common.opt:538
+#: common.opt:545
msgid "Warn about returning structures, unions or arrays."
msgstr ""
-#: common.opt:542
+#: common.opt:549
msgid ""
"Warn if a loop with constant number of iterations triggers undefined "
"behavior."
msgstr ""
-#: common.opt:546 common.opt:550
+#: common.opt:553 common.opt:557
msgid "Warn if an array is accessed out of bounds."
msgstr ""
-#: common.opt:554
+#: common.opt:561
msgid "Warn about inappropriate attribute usage."
msgstr ""
-#: common.opt:558
+#: common.opt:565
msgid "Warn about pointer casts which increase alignment."
msgstr ""
-#: common.opt:562
+#: common.opt:569
msgid "Warn when a #warning directive is encountered."
msgstr ""
-#: common.opt:566
+#: common.opt:573
msgid "Warn about uses of __attribute__((deprecated)) declarations."
msgstr ""
-#: common.opt:570
+#: common.opt:577
msgid "Warn when an optimization pass is disabled."
msgstr ""
-#: common.opt:574
+#: common.opt:581
msgid "Treat all warnings as errors."
msgstr ""
-#: common.opt:578
+#: common.opt:585
msgid "Treat specified warning as error."
msgstr ""
-#: common.opt:582
+#: common.opt:589
msgid "Print extra (possibly unwanted) warnings."
msgstr ""
-#: common.opt:586
+#: common.opt:593
msgid "Exit on the first error occurred."
msgstr ""
-#: common.opt:590
+#: common.opt:597
msgid ""
"-Wframe-larger-than=<number>\tWarn if a function's stack frame requires more "
"than <number> bytes."
msgstr ""
-#: common.opt:594
+#: common.opt:601
msgid "Warn when attempting to free a non-heap object."
msgstr ""
-#: common.opt:598
+#: common.opt:605
msgid "Warn when a function cannot be expanded to HSAIL."
msgstr ""
-#: common.opt:605
+#: common.opt:612
msgid "Warn when a switch case falls through."
msgstr ""
-#: common.opt:609
+#: common.opt:616
msgid "Warn when an inlined function cannot be inlined."
msgstr ""
-#: common.opt:613
+#: common.opt:620
msgid ""
"Warn when an atomic memory model parameter is known to be outside the valid "
"range."
msgstr ""
-#: common.opt:620
+#: common.opt:627
msgid ""
"-Wlarger-than=<number>\tWarn if an object is larger than <number> bytes."
msgstr ""
-#: common.opt:624
+#: common.opt:631
msgid "Warn if comparing pointer parameter with nonnull attribute with NULL."
msgstr ""
-#: common.opt:628
+#: common.opt:635
msgid ""
"Warn if dereferencing a NULL pointer may lead to erroneous or undefined "
"behavior."
msgstr ""
-#: common.opt:632
+#: common.opt:639
msgid "Warn if the loop cannot be optimized due to nontrivial assumptions."
msgstr ""
-#: common.opt:639
+#: common.opt:646
msgid ""
"Warn about some C++ One Definition Rule violations during link time "
"optimization."
msgstr ""
-#: common.opt:643
+#: common.opt:650
msgid "Warn about overflow in arithmetic expressions."
msgstr ""
-#: common.opt:647
+#: common.opt:654
msgid ""
"During link time optimization warn about mismatched types of global "
"declarations."
msgstr ""
-#: common.opt:651
+#: common.opt:658
msgid "Warn when the packed attribute has no effect on struct layout."
msgstr ""
-#: common.opt:655
+#: common.opt:662
msgid "Warn when padding is required to align structure members."
msgstr ""
-#: common.opt:659
+#: common.opt:666
msgid "Issue warnings needed for strict compliance to the standard."
msgstr ""
-#: common.opt:663
+#: common.opt:670
msgid ""
"Warn about returning a pointer/reference to a local or temporary variable."
msgstr ""
-#: common.opt:667
+#: common.opt:674
msgid "Warn when one variable shadows another. Same as -Wshadow=global."
msgstr ""
-#: common.opt:671
+#: common.opt:678
msgid "Warn when one variable shadows another (globally)."
msgstr ""
-#: common.opt:675
+#: common.opt:682
msgid ""
"Warn when one local variable shadows another local variable or parameter."
msgstr ""
-#: common.opt:682
+#: common.opt:689
msgid ""
"Warn when one local variable shadows another local variable or parameter of "
"compatible type."
msgstr ""
-#: common.opt:689
+#: common.opt:696
msgid "Warn when not issuing stack smashing protection for some reason."
msgstr ""
-#: common.opt:693
+#: common.opt:700
msgid ""
"-Wstack-usage=<number>\tWarn if stack usage might be larger than specified "
"amount."
msgstr ""
-#: common.opt:697 common.opt:701
+#: common.opt:704 common.opt:708
msgid "Warn about code which might break strict aliasing rules."
msgstr ""
-#: common.opt:705 common.opt:709
+#: common.opt:712 common.opt:716
msgid "Warn about optimizations that assume that signed overflow is undefined."
msgstr ""
-#: common.opt:713
+#: common.opt:720
msgid ""
"Warn about functions which might be candidates for __attribute__((const))."
msgstr ""
-#: common.opt:717
+#: common.opt:724
msgid ""
"Warn about functions which might be candidates for __attribute__((pure))."
msgstr ""
-#: common.opt:721
+#: common.opt:728
msgid ""
"Warn about functions which might be candidates for __attribute__((noreturn))."
msgstr ""
-#: common.opt:725
+#: common.opt:732
msgid ""
"Warn about C++ polymorphic types where adding final keyword would improve "
"code quality."
msgstr ""
-#: common.opt:729
+#: common.opt:736
msgid ""
"Warn about C++ virtual methods where adding final keyword would improve code "
"quality."
msgstr ""
-#: common.opt:733
+#: common.opt:740
msgid ""
"Warn about statements between switch's controlling expression and the first "
"case."
msgstr ""
-#: common.opt:738
+#: common.opt:745
msgid "Do not suppress warnings from system headers."
msgstr ""
-#: common.opt:742
+#: common.opt:749
msgid "Warn whenever a trampoline is generated."
msgstr ""
-#: common.opt:746
+#: common.opt:753
msgid ""
"Warn if a comparison is always true or always false due to the limited range "
"of the data type."
msgstr ""
-#: common.opt:750
+#: common.opt:757
msgid "Warn about uninitialized automatic variables."
msgstr ""
-#: common.opt:754
+#: common.opt:761
msgid "Warn about maybe uninitialized automatic variables."
msgstr ""
-#: common.opt:762
+#: common.opt:769
msgid "Enable all -Wunused- warnings."
msgstr ""
-#: common.opt:766
+#: common.opt:773
msgid "Warn when a function parameter is only set, otherwise unused."
msgstr ""
-#: common.opt:770
+#: common.opt:777
msgid "Warn when a variable is only set, otherwise unused."
msgstr ""
-#: common.opt:774
+#: common.opt:781
msgid "Warn when a function is unused."
msgstr ""
-#: common.opt:778
+#: common.opt:785
msgid "Warn when a label is unused."
msgstr ""
-#: common.opt:782
+#: common.opt:789
msgid "Warn when a function parameter is unused."
msgstr ""
-#: common.opt:786
+#: common.opt:793
msgid "Warn when an expression value is unused."
msgstr ""
-#: common.opt:790
+#: common.opt:797
msgid "Warn when a variable is unused."
msgstr ""
-#: common.opt:794
+#: common.opt:801
msgid "Warn in case profiles in -fprofile-use do not match."
msgstr ""
-#: common.opt:798
+#: common.opt:805
msgid "Warn when a vector operation is compiled outside the SIMD."
msgstr ""
-#: common.opt:814
+#: common.opt:821
msgid "-aux-info <file>\tEmit declaration information into <file>."
msgstr ""
-#: common.opt:833
+#: common.opt:840
msgid "-d<letters>\tEnable dumps from specific passes of the compiler."
msgstr ""
-#: common.opt:837
+#: common.opt:844
msgid "-dumpbase <file>\tSet the file basename to be used for dumps."
msgstr ""
-#: common.opt:841
+#: common.opt:848
msgid "-dumpdir <dir>\tSet the directory name to be used for dumps."
msgstr ""
-#: common.opt:917
+#: common.opt:928
msgid "The version of the C++ ABI in use."
msgstr ""
-#: common.opt:921
+#: common.opt:932
msgid "Aggressively optimize loops using language constraints."
msgstr ""
-#: common.opt:925
+#: common.opt:936
msgid "Align the start of functions."
msgstr ""
-#: common.opt:935
+#: common.opt:946
msgid "Align labels which are only reached by jumping."
msgstr ""
-#: common.opt:942
+#: common.opt:953
msgid "Align all labels."
msgstr ""
-#: common.opt:949
+#: common.opt:960
msgid "Align the start of loops."
msgstr ""
-#: common.opt:972
+#: common.opt:983
msgid "Select what to sanitize."
msgstr ""
-#: common.opt:976
+#: common.opt:987
msgid "-fasan-shadow-offset=<number>\tUse custom shadow memory offset."
msgstr ""
-#: common.opt:980
+#: common.opt:991
msgid ""
"-fsanitize-sections=<sec1,sec2,...>\tSanitize global variables in user-"
"defined sections."
msgstr ""
-#: common.opt:985
+#: common.opt:996
msgid "After diagnosing undefined behavior attempt to continue execution."
msgstr ""
-#: common.opt:989
+#: common.opt:1000
msgid "This switch is deprecated; use -fsanitize-recover= instead."
msgstr ""
-#: common.opt:996
+#: common.opt:1007
msgid ""
"Use trap instead of a library function for undefined behavior sanitization."
msgstr ""
-#: common.opt:1000
+#: common.opt:1011
msgid "Generate unwind tables that are exact at each instruction boundary."
msgstr ""
-#: common.opt:1004
+#: common.opt:1015
msgid "Generate auto-inc/dec instructions."
msgstr ""
-#: common.opt:1008
+#: common.opt:1019
msgid ""
"Use sample profile information for call graph node weights. The default "
"profile file is fbdata.afdo in 'pwd'."
msgstr ""
-#: common.opt:1013
+#: common.opt:1024
msgid ""
"Use sample profile information for call graph node weights. The profile file "
"is specified in the argument."
msgstr ""
-#: common.opt:1022
+#: common.opt:1033
msgid "Generate code to check bounds before indexing arrays."
msgstr ""
-#: common.opt:1026
+#: common.opt:1037
msgid "Replace add, compare, branch with branch on count register."
msgstr ""
-#: common.opt:1030
+#: common.opt:1041
msgid "Use profiling information for branch probabilities."
msgstr ""
-#: common.opt:1034
+#: common.opt:1045
msgid ""
"Perform branch target load optimization before prologue / epilogue threading."
msgstr ""
-#: common.opt:1038
+#: common.opt:1049
msgid ""
"Perform branch target load optimization after prologue / epilogue threading."
msgstr ""
-#: common.opt:1042
+#: common.opt:1053
msgid ""
"Restrict target load migration not to re-use registers in any basic block."
msgstr ""
-#: common.opt:1046
+#: common.opt:1057
msgid ""
"-fcall-saved-<register>\tMark <register> as being preserved across functions."
msgstr ""
-#: common.opt:1050
+#: common.opt:1061
msgid ""
"-fcall-used-<register>\tMark <register> as being corrupted by function calls."
msgstr ""
-#: common.opt:1057
+#: common.opt:1068
msgid "Save registers around function calls."
msgstr ""
-#: common.opt:1061
+#: common.opt:1072
msgid "This switch is deprecated; do not use."
msgstr ""
-#: common.opt:1065
+#: common.opt:1076
msgid "Check the return value of new in C++."
msgstr ""
-#: common.opt:1069 common.opt:1073
+#: common.opt:1080 common.opt:1084
msgid "Perform internal consistency checkings."
msgstr ""
-#: common.opt:1077
+#: common.opt:1088
msgid "Enable code hoisting."
msgstr ""
-#: common.opt:1081
+#: common.opt:1092
msgid ""
"Looks for opportunities to reduce stack adjustments and stack references."
msgstr ""
-#: common.opt:1085
+#: common.opt:1096
msgid "Do not put uninitialized globals in the common section."
msgstr ""
-#: common.opt:1093
+#: common.opt:1104
msgid ""
"-fcompare-debug[=<opts>]\tCompile with and without e.g. -gtoggle, and "
"compare the final-insns dump."
msgstr ""
-#: common.opt:1097
+#: common.opt:1108
msgid "Run only the second compilation of -fcompare-debug."
msgstr ""
-#: common.opt:1101
+#: common.opt:1112
msgid "Perform comparison elimination after register allocation has finished."
msgstr ""
-#: common.opt:1105
+#: common.opt:1116
msgid "Do not perform optimizations increasing noticeably stack usage."
msgstr ""
-#: common.opt:1109
+#: common.opt:1120
msgid "Perform a register copy-propagation optimization pass."
msgstr ""
-#: common.opt:1113
+#: common.opt:1124
msgid "Perform cross-jumping optimization."
msgstr ""
-#: common.opt:1117
+#: common.opt:1128
msgid "When running CSE, follow jumps to their targets."
msgstr ""
-#: common.opt:1125
+#: common.opt:1136
msgid "Omit range reduction step when performing complex division."
msgstr ""
-#: common.opt:1129
+#: common.opt:1140
msgid "Complex multiplication and division follow Fortran rules."
msgstr ""
-#: common.opt:1133
+#: common.opt:1144
msgid "Place data items into their own section."
msgstr ""
-#: common.opt:1137
+#: common.opt:1148
msgid "List all available debugging counters with their limits and counts."
msgstr ""
-#: common.opt:1141
+#: common.opt:1152
msgid ""
"-fdbg-cnt=<counter>:<limit>[,<counter>:<limit>,...]\tSet the debug counter "
"limit."
msgstr ""
-#: common.opt:1145
+#: common.opt:1156
msgid "Map one directory name to another in debug information."
msgstr ""
-#: common.opt:1149
+#: common.opt:1160
msgid "Output .debug_types section when using DWARF v4 debuginfo."
msgstr ""
-#: common.opt:1155
+#: common.opt:1166
msgid "Defer popping functions args from stack until later."
msgstr ""
-#: common.opt:1159
+#: common.opt:1170
msgid "Attempt to fill delay slots of branch instructions."
msgstr ""
-#: common.opt:1163
+#: common.opt:1174
msgid "Delete dead instructions that may throw exceptions."
msgstr ""
-#: common.opt:1167
+#: common.opt:1178
msgid "Delete useless null pointer checks."
msgstr ""
-#: common.opt:1171
+#: common.opt:1182
msgid ""
"Stream extra data to support more aggressive devirtualization in LTO local "
"transformation mode."
msgstr ""
-#: common.opt:1175
+#: common.opt:1186
msgid "Perform speculative devirtualization."
msgstr ""
-#: common.opt:1179
+#: common.opt:1190
msgid "Try to convert virtual calls to direct ones."
msgstr ""
-#: common.opt:1183
+#: common.opt:1194
msgid ""
"-fdiagnostics-show-location=[once|every-line]\tHow often to emit source "
"location at the beginning of line-wrapped diagnostics."
msgstr ""
-#: common.opt:1200
+#: common.opt:1211
msgid "Show the source line with a caret indicating the column."
msgstr ""
-#: common.opt:1208
+#: common.opt:1219
msgid "-fdiagnostics-color=[never|always|auto]\tColorize diagnostics."
msgstr ""
-#: common.opt:1228
-msgid "Print fixit hints in machine-readable form."
+#: common.opt:1239
+msgid "Print fix-it hints in machine-readable form."
msgstr ""
-#: common.opt:1232
+#: common.opt:1243
msgid "Print fix-it hints to stderr in unified diff format."
msgstr ""
-#: common.opt:1236
+#: common.opt:1247
msgid ""
"Amend appropriate diagnostic messages with the command line option that "
"controls them."
msgstr ""
-#: common.opt:1240
+#: common.opt:1251
msgid ""
"-fdisable-[tree|rtl|ipa]-<pass>=range1+range2 disables an optimization pass."
msgstr ""
-#: common.opt:1244
+#: common.opt:1255
msgid ""
"-fenable-[tree|rtl|ipa]-<pass>=range1+range2 enables an optimization pass."
msgstr ""
-#: common.opt:1248
+#: common.opt:1259
msgid "-fdump-<type>\tDump various compiler internals to a file."
msgstr ""
-#: common.opt:1255
+#: common.opt:1266
msgid ""
"-fdump-final-insns=filename\tDump to filename the insns at the end of "
"translation."
msgstr ""
-#: common.opt:1259
+#: common.opt:1270
msgid "-fdump-go-spec=filename\tWrite all declarations to file as Go code."
msgstr ""
-#: common.opt:1263
+#: common.opt:1274
msgid "Suppress output of addresses in debugging dumps."
msgstr ""
-#: common.opt:1267
+#: common.opt:1278
msgid ""
"Collect and dump debug information into temporary file if ICE in C/C++ "
"compiler occurred."
msgstr ""
-#: common.opt:1272
+#: common.opt:1283
msgid ""
"Dump detailed information on GCC's internal representation of source code "
"locations."
msgstr ""
-#: common.opt:1276
+#: common.opt:1287
msgid "Dump optimization passes."
msgstr ""
-#: common.opt:1280
+#: common.opt:1291
msgid ""
"Suppress output of instruction numbers, line number notes and addresses in "
"debugging dumps."
msgstr ""
-#: common.opt:1284
+#: common.opt:1295
msgid "Suppress output of previous and next insn numbers in debugging dumps."
msgstr ""
-#: common.opt:1288
+#: common.opt:1299
msgid "Enable CFI tables via GAS assembler directives."
msgstr ""
-#: common.opt:1292
+#: common.opt:1303
msgid "Perform early inlining."
msgstr ""
-#: common.opt:1296
+#: common.opt:1307
msgid "Perform DWARF duplicate elimination."
msgstr ""
-#: common.opt:1300
+#: common.opt:1311
msgid "Perform interprocedural reduction of aggregates."
msgstr ""
-#: common.opt:1304
+#: common.opt:1315
msgid "Perform unused symbol elimination in debug info."
msgstr ""
-#: common.opt:1308
+#: common.opt:1319
msgid "Perform unused type elimination in debug info."
msgstr ""
-#: common.opt:1312
+#: common.opt:1323
msgid "Do not suppress C++ class debug information."
msgstr ""
-#: common.opt:1316
+#: common.opt:1327
msgid "Enable exception handling."
msgstr ""
-#: common.opt:1320
+#: common.opt:1331
msgid "Perform a number of minor, expensive optimizations."
msgstr ""
-#: common.opt:1324
+#: common.opt:1335
msgid ""
"-fexcess-precision=[fast|standard]\tSpecify handling of excess floating-"
"point precision."
msgstr ""
-#: common.opt:1327
+#: common.opt:1338
#, c-format
msgid "unknown excess precision style %qs"
msgstr ""
-#: common.opt:1339
+#: common.opt:1350
msgid ""
"-fpermitted-flt-eval-methods=[c11|ts-18661]\tSpecify which values of "
"FLT_EVAL_METHOD are permitted."
msgstr ""
-#: common.opt:1342
+#: common.opt:1353
#, c-format
msgid ""
"unknown specification for the set of FLT_EVAL_METHOD values to permit %qs"
msgstr ""
-#: common.opt:1355
+#: common.opt:1366
msgid ""
"Output lto objects containing both the intermediate language and binary "
"output."
msgstr ""
-#: common.opt:1359
+#: common.opt:1370
msgid "Assume no NaNs or infinities are generated."
msgstr ""
-#: common.opt:1363
+#: common.opt:1374
msgid ""
"-ffixed-<register>\tMark <register> as being unavailable to the compiler."
msgstr ""
-#: common.opt:1367
+#: common.opt:1378
msgid "Don't allocate floats and doubles in extended-precision registers."
msgstr ""
-#: common.opt:1375
+#: common.opt:1386
msgid "Perform a forward propagation pass on RTL."
msgstr ""
-#: common.opt:1379
+#: common.opt:1390
msgid ""
"-ffp-contract=[off|on|fast]\tPerform floating-point expression contraction."
msgstr ""
-#: common.opt:1382
+#: common.opt:1393
#, c-format
msgid "unknown floating point contraction style %qs"
msgstr ""
-#: common.opt:1396
+#: common.opt:1407
msgid ""
"Allow built-in functions ceil, floor, round, trunc to raise \"inexact\" "
"exceptions."
msgstr ""
-#: common.opt:1403
+#: common.opt:1414
msgid "Allow function addresses to be held in registers."
msgstr ""
-#: common.opt:1407
+#: common.opt:1418
msgid "Place each function into its own section."
msgstr ""
-#: common.opt:1411
+#: common.opt:1422
msgid "Perform global common subexpression elimination."
msgstr ""
-#: common.opt:1415
+#: common.opt:1426
msgid ""
"Perform enhanced load motion during global common subexpression elimination."
msgstr ""
-#: common.opt:1419
+#: common.opt:1430
msgid "Perform store motion after global common subexpression elimination."
msgstr ""
-#: common.opt:1423
+#: common.opt:1434
msgid ""
"Perform redundant load after store elimination in global common "
"subexpression elimination."
msgstr ""
-#: common.opt:1428
+#: common.opt:1439
msgid ""
"Perform global common subexpression elimination after register allocation "
"has finished."
msgstr ""
-#: common.opt:1445
+#: common.opt:1456
msgid ""
"-fgnat-encodings=[all|gdb|minimal]\tSelect the balance between GNAT "
"encodings and standard DWARF emitted in the debug information"
msgstr ""
-#: common.opt:1450
+#: common.opt:1461
msgid "Enable in and out of Graphite representation."
msgstr ""
-#: common.opt:1454
+#: common.opt:1465
msgid "Enable Graphite Identity transformation."
msgstr ""
-#: common.opt:1458
+#: common.opt:1469
msgid ""
"Enable hoisting adjacent loads to encourage generating conditional move "
"instructions."
msgstr ""
-#: common.opt:1467
+#: common.opt:1478
msgid "Mark all loops as parallel."
msgstr ""
-#: common.opt:1471 common.opt:1475 common.opt:1479 common.opt:1483
-#: common.opt:2514
+#: common.opt:1482 common.opt:1486 common.opt:1490 common.opt:1494
+#: common.opt:2533
msgid "Enable loop nest transforms. Same as -floop-nest-optimize."
msgstr ""
-#: common.opt:1487
+#: common.opt:1498
msgid "Enable support for GNU transactional memory."
msgstr ""
-#: common.opt:1491
+#: common.opt:1502
msgid "Use STB_GNU_UNIQUE if supported by the assembler."
msgstr ""
-#: common.opt:1499
+#: common.opt:1510
msgid "Enable the loop nest optimizer."
msgstr ""
-#: common.opt:1503
+#: common.opt:1514
msgid "Force bitfield accesses to match their type width."
msgstr ""
-#: common.opt:1507
+#: common.opt:1518
msgid "Merge adjacent stores."
msgstr ""
-#: common.opt:1511
+#: common.opt:1522
msgid "Enable guessing of branch probabilities."
msgstr ""
-#: common.opt:1519
+#: common.opt:1530
msgid "Process #ident directives."
msgstr ""
-#: common.opt:1523
+#: common.opt:1534
msgid "Perform conversion of conditional jumps to branchless equivalents."
msgstr ""
-#: common.opt:1527
+#: common.opt:1538
msgid "Perform conversion of conditional jumps to conditional execution."
msgstr ""
-#: common.opt:1531
+#: common.opt:1542
msgid ""
"-fstack-reuse=[all|named_vars|none]\tSet stack reuse level for local "
"variables."
msgstr ""
-#: common.opt:1534
+#: common.opt:1545
#, c-format
msgid "unknown Stack Reuse Level %qs"
msgstr ""
-#: common.opt:1547
+#: common.opt:1558
msgid "Convert conditional jumps in innermost loops to branchless equivalents."
msgstr ""
-#: common.opt:1559
+#: common.opt:1570
msgid "Do not generate .size directives."
msgstr ""
-#: common.opt:1563
+#: common.opt:1574
msgid "Perform indirect inlining."
msgstr ""
-#: common.opt:1569
+#: common.opt:1580
msgid ""
"Enable inlining of function declared \"inline\", disabling disables all "
"inlining."
msgstr ""
-#: common.opt:1573
+#: common.opt:1584
msgid ""
"Integrate functions into their callers when code size is known not to grow."
msgstr ""
-#: common.opt:1577
+#: common.opt:1588
msgid ""
"Integrate functions not declared \"inline\" into their callers when "
"profitable."
msgstr ""
-#: common.opt:1581
+#: common.opt:1592
msgid "Integrate functions only required by their single caller."
msgstr ""
-#: common.opt:1588
+#: common.opt:1599
msgid ""
"-finline-limit=<number>\tLimit the size of inlined functions to <number>."
msgstr ""
-#: common.opt:1592
+#: common.opt:1603
msgid ""
"Inline __atomic operations when a lock free instruction sequence is "
"available."
msgstr ""
-#: common.opt:1596
+#: common.opt:1607
msgid "Instrument function entry and exit with profiling calls."
msgstr ""
-#: common.opt:1600
+#: common.opt:1611
msgid ""
"-finstrument-functions-exclude-function-list=name,... Do not instrument "
"listed functions."
msgstr ""
-#: common.opt:1604
+#: common.opt:1615
msgid ""
"-finstrument-functions-exclude-file-list=filename,... Do not instrument "
"functions listed in files."
msgstr ""
-#: common.opt:1608
+#: common.opt:1619
msgid "Perform interprocedural constant propagation."
msgstr ""
-#: common.opt:1612
+#: common.opt:1623
msgid "Perform cloning to make Interprocedural constant propagation stronger."
msgstr ""
-#: common.opt:1620
+#: common.opt:1631
msgid "Perform interprocedural bitwise constant propagation."
msgstr ""
-#: common.opt:1624
+#: common.opt:1635
msgid "Perform interprocedural profile propagation."
msgstr ""
-#: common.opt:1628
+#: common.opt:1639
msgid "Perform interprocedural points-to analysis."
msgstr ""
-#: common.opt:1632
+#: common.opt:1643
msgid "Discover pure and const functions."
msgstr ""
-#: common.opt:1636
+#: common.opt:1647
msgid "Perform Identical Code Folding for functions and read-only variables."
msgstr ""
-#: common.opt:1640
+#: common.opt:1651
msgid "Perform Identical Code Folding for functions."
msgstr ""
-#: common.opt:1644
+#: common.opt:1655
msgid "Perform Identical Code Folding for variables."
msgstr ""
-#: common.opt:1648
+#: common.opt:1659
msgid "Discover readonly and non addressable static variables."
msgstr ""
-#: common.opt:1660
+#: common.opt:1671
msgid "Perform IPA Value Range Propagation."
msgstr ""
-#: common.opt:1664
+#: common.opt:1675
msgid "-fira-algorithm=[CB|priority]\tSet the used IRA algorithm."
msgstr ""
-#: common.opt:1667
+#: common.opt:1678
#, c-format
msgid "unknown IRA algorithm %qs"
msgstr ""
-#: common.opt:1677
+#: common.opt:1688
msgid "-fira-region=[one|all|mixed]\tSet regions for IRA."
msgstr ""
-#: common.opt:1680
+#: common.opt:1691
#, c-format
msgid "unknown IRA region %qs"
msgstr ""
-#: common.opt:1693
+#: common.opt:1704
msgid "Use IRA based register pressure calculation in RTL hoist optimizations."
msgstr ""
-#: common.opt:1698
+#: common.opt:1709
msgid "Use IRA based register pressure calculation in RTL loop optimizations."
msgstr ""
-#: common.opt:1703
+#: common.opt:1714
msgid "Share slots for saving different hard registers."
msgstr ""
-#: common.opt:1707
+#: common.opt:1718
msgid "Share stack slots for spilled pseudo-registers."
msgstr ""
-#: common.opt:1711
+#: common.opt:1722
msgid "-fira-verbose=<number>\tControl IRA's level of diagnostic messages."
msgstr ""
-#: common.opt:1715
+#: common.opt:1726
msgid "Optimize induction variables on trees."
msgstr ""
-#: common.opt:1719
+#: common.opt:1730
msgid "Use jump tables for sufficiently large switch statements."
msgstr ""
-#: common.opt:1723
+#: common.opt:1734
msgid "Generate code for functions even if they are fully inlined."
msgstr ""
-#: common.opt:1727
+#: common.opt:1738
msgid "Generate code for static functions even if they are never called."
msgstr ""
-#: common.opt:1731
+#: common.opt:1742
msgid "Emit static const variables even if they are not used."
msgstr ""
-#: common.opt:1735
+#: common.opt:1746
msgid "Give external symbols a leading underscore."
msgstr ""
-#: common.opt:1743
+#: common.opt:1754
msgid "Do CFG-sensitive rematerialization in LRA."
msgstr ""
-#: common.opt:1747
+#: common.opt:1758
msgid "Enable link-time optimization."
msgstr ""
-#: common.opt:1751
+#: common.opt:1762
msgid "Link-time optimization with number of parallel jobs or jobserver."
msgstr ""
-#: common.opt:1754
+#: common.opt:1765
#, c-format
msgid "unknown LTO partitioning model %qs"
msgstr ""
-#: common.opt:1773
+#: common.opt:1784
msgid "Specify the algorithm to partition symbols and vars at linktime."
msgstr ""
-#: common.opt:1778
+#: common.opt:1789
msgid ""
"-flto-compression-level=<number>\tUse zlib compression level <number> for IL."
msgstr ""
-#: common.opt:1782
+#: common.opt:1793
msgid "Merge C++ types using One Definition Rule."
msgstr ""
-#: common.opt:1786
+#: common.opt:1797
msgid "Report various link-time optimization statistics."
msgstr ""
-#: common.opt:1790
+#: common.opt:1801
msgid "Report various link-time optimization statistics for WPA only."
msgstr ""
-#: common.opt:1794
+#: common.opt:1805
msgid "Set errno after built-in math functions."
msgstr ""
-#: common.opt:1798
+#: common.opt:1809
msgid "-fmax-errors=<number>\tMaximum number of errors to report."
msgstr ""
-#: common.opt:1802
+#: common.opt:1813
msgid "Report on permanent memory allocation."
msgstr ""
-#: common.opt:1806
+#: common.opt:1817
msgid "Report on permanent memory allocation in WPA only."
msgstr ""
-#: common.opt:1813
+#: common.opt:1824
msgid "Attempt to merge identical constants and constant variables."
msgstr ""
-#: common.opt:1817
+#: common.opt:1828
msgid "Attempt to merge identical constants across compilation units."
msgstr ""
-#: common.opt:1821
+#: common.opt:1832
msgid "Attempt to merge identical debug strings across compilation units."
msgstr ""
-#: common.opt:1825
+#: common.opt:1836
msgid ""
"-fmessage-length=<number>\tLimit diagnostics to <number> characters per "
"line. 0 suppresses line-wrapping."
msgstr ""
-#: common.opt:1829
+#: common.opt:1840
msgid "Perform SMS based modulo scheduling before the first scheduling pass."
msgstr ""
-#: common.opt:1833
+#: common.opt:1844
msgid "Perform SMS based modulo scheduling with register moves allowed."
msgstr ""
-#: common.opt:1837
+#: common.opt:1848
msgid "Move loop invariant computations out of loops."
msgstr ""
-#: common.opt:1841
+#: common.opt:1852
msgid "Use the RTL dead code elimination pass."
msgstr ""
-#: common.opt:1845
+#: common.opt:1856
msgid "Use the RTL dead store elimination pass."
msgstr ""
-#: common.opt:1849
+#: common.opt:1860
msgid ""
"Enable/Disable the traditional scheduling in loops that already passed "
"modulo scheduling."
msgstr ""
-#: common.opt:1853
+#: common.opt:1864
msgid "Support synchronous non-call exceptions."
msgstr ""
-#: common.opt:1856
+#: common.opt:1867
#, c-format
msgid "options or targets missing after %qs"
msgstr ""
-#: common.opt:1857
+#: common.opt:1868
msgid ""
"-foffload=<targets>=<options> Specify offloading targets and options for "
"them."
msgstr ""
-#: common.opt:1861
+#: common.opt:1872
msgid ""
"-foffload-abi=[lp64|ilp32] Set the ABI to use in an offload compiler."
msgstr ""
-#: common.opt:1864
+#: common.opt:1875
#, c-format
msgid "unknown offload ABI %qs"
msgstr ""
-#: common.opt:1874
+#: common.opt:1885
msgid "When possible do not generate stack frames."
msgstr ""
-#: common.opt:1878
+#: common.opt:1889
msgid "Enable all optimization info dumps on stderr."
msgstr ""
-#: common.opt:1882
+#: common.opt:1893
msgid "-fopt-info[-<type>=filename]\tDump compiler optimization details."
msgstr ""
-#: common.opt:1890
+#: common.opt:1901
msgid "Optimize sibling and tail recursive calls."
msgstr ""
-#: common.opt:1894
+#: common.opt:1905
msgid "Perform partial inlining."
msgstr ""
-#: common.opt:1898 common.opt:1902
+#: common.opt:1909 common.opt:1913
msgid "Report on memory allocation before interprocedural optimization."
msgstr ""
-#: common.opt:1906
+#: common.opt:1917
msgid "Pack structure members together without holes."
msgstr ""
-#: common.opt:1910
+#: common.opt:1921
msgid "-fpack-struct=<number>\tSet initial maximum structure member alignment."
msgstr ""
-#: common.opt:1914
+#: common.opt:1925
msgid "Return small aggregates in memory, not registers."
msgstr ""
-#: common.opt:1918
+#: common.opt:1929
msgid "Perform loop peeling."
msgstr ""
-#: common.opt:1922
+#: common.opt:1933
msgid "Enable machine specific peephole optimizations."
msgstr ""
-#: common.opt:1926
+#: common.opt:1937
msgid "Enable an RTL peephole pass before sched2."
msgstr ""
-#: common.opt:1930
+#: common.opt:1941
msgid "Generate position-independent code if possible (large mode)."
msgstr ""
-#: common.opt:1934
+#: common.opt:1945
msgid ""
"Generate position-independent code for executables if possible (large mode)."
msgstr ""
-#: common.opt:1938
+#: common.opt:1949
msgid "Generate position-independent code if possible (small mode)."
msgstr ""
-#: common.opt:1942
+#: common.opt:1953
msgid ""
"Generate position-independent code for executables if possible (small mode)."
msgstr ""
-#: common.opt:1946
+#: common.opt:1957
msgid ""
"Use PLT for PIC calls (-fno-plt: load the address from GOT at call site)."
msgstr ""
-#: common.opt:1950
+#: common.opt:1961
msgid "Specify a plugin to load."
msgstr ""
-#: common.opt:1954
+#: common.opt:1965
msgid ""
"-fplugin-arg-<name>-<key>[=<value>]\tSpecify argument <key>=<value> for "
"plugin <name>."
msgstr ""
-#: common.opt:1958
+#: common.opt:1969
msgid "Run predictive commoning optimization."
msgstr ""
-#: common.opt:1962
+#: common.opt:1973
msgid "Generate prefetch instructions, if available, for arrays in loops."
msgstr ""
-#: common.opt:1966
+#: common.opt:1977
msgid "Enable basic program profiling code."
msgstr ""
-#: common.opt:1970
+#: common.opt:1981
+msgid "Generate absolute source path names for gcov."
+msgstr ""
+
+#: common.opt:1985
msgid "Insert arc-based program profiling code."
msgstr ""
-#: common.opt:1974
+#: common.opt:1989
msgid ""
"Set the top-level directory for storing the profile data. The default is "
"'pwd'."
msgstr ""
-#: common.opt:1979
+#: common.opt:1994
msgid "Enable correction of flow inconsistent profile data input."
msgstr ""
-#: common.opt:1983
+#: common.opt:1998
msgid ""
"-fprofile-update=[single|atomic|prefer-atomic]\tSet the profile update "
"method."
msgstr ""
-#: common.opt:1986
+#: common.opt:2001
#, c-format
msgid "unknown profile update method %qs"
msgstr ""
-#: common.opt:1999
+#: common.opt:2014
msgid ""
"Enable common options for generating profile info for profile feedback "
"directed optimizations."
msgstr ""
-#: common.opt:2003
+#: common.opt:2018
msgid ""
"Enable common options for generating profile info for profile feedback "
"directed optimizations, and set -fprofile-dir=."
msgstr ""
-#: common.opt:2007
+#: common.opt:2022
msgid ""
"Enable common options for performing profile feedback directed optimizations."
msgstr ""
-#: common.opt:2011
+#: common.opt:2026
msgid ""
"Enable common options for performing profile feedback directed "
"optimizations, and set -fprofile-dir=."
msgstr ""
-#: common.opt:2015
+#: common.opt:2030
msgid "Insert code to profile values of expressions."
msgstr ""
-#: common.opt:2019
+#: common.opt:2034
msgid "Report on consistency of profile."
msgstr ""
-#: common.opt:2023
+#: common.opt:2038
msgid "Enable function reordering that improves code placement."
msgstr ""
-#: common.opt:2030
+#: common.opt:2042
+msgid "Insert NOP instructions at each function entry."
+msgstr ""
+
+#: common.opt:2049
msgid "-frandom-seed=<string>\tMake compile reproducible using <string>."
msgstr ""
-#: common.opt:2040
+#: common.opt:2059
msgid "Record gcc command line switches in the object file."
msgstr ""
-#: common.opt:2044
+#: common.opt:2063
msgid "Return small aggregates in registers."
msgstr ""
-#: common.opt:2052
+#: common.opt:2071
msgid ""
"Tell DSE that the storage for a C++ object is dead when the constructor "
"starts and when the destructor finishes."
msgstr ""
-#: common.opt:2060
+#: common.opt:2079
msgid "Relief of register pressure through live range shrinkage."
msgstr ""
-#: common.opt:2064
+#: common.opt:2083
msgid "Perform a register renaming optimization pass."
msgstr ""
-#: common.opt:2068
+#: common.opt:2087
msgid "Perform a target dependent instruction fusion optimization pass."
msgstr ""
-#: common.opt:2072
+#: common.opt:2091
msgid "Reorder basic blocks to improve code placement."
msgstr ""
-#: common.opt:2076
+#: common.opt:2095
msgid ""
"-freorder-blocks-algorithm=[simple|stc]\tSet the used basic block reordering "
"algorithm."
msgstr ""
-#: common.opt:2079
+#: common.opt:2098
#, c-format
msgid "unknown basic block reordering algorithm %qs"
msgstr ""
-#: common.opt:2089
+#: common.opt:2108
msgid "Reorder basic blocks and partition into hot and cold sections."
msgstr ""
-#: common.opt:2093
+#: common.opt:2112
msgid "Reorder functions to improve code placement."
msgstr ""
-#: common.opt:2097
+#: common.opt:2116
msgid "Add a common subexpression elimination pass after loop optimizations."
msgstr ""
-#: common.opt:2105
+#: common.opt:2124
msgid "Disable optimizations that assume default FP rounding behavior."
msgstr ""
-#: common.opt:2109
+#: common.opt:2128
msgid "Enable scheduling across basic blocks."
msgstr ""
-#: common.opt:2113
+#: common.opt:2132
msgid "Enable register pressure sensitive insn scheduling."
msgstr ""
-#: common.opt:2117
+#: common.opt:2136
msgid "Allow speculative motion of non-loads."
msgstr ""
-#: common.opt:2121
+#: common.opt:2140
msgid "Allow speculative motion of some loads."
msgstr ""
-#: common.opt:2125
+#: common.opt:2144
msgid "Allow speculative motion of more loads."
msgstr ""
-#: common.opt:2129
+#: common.opt:2148
msgid "-fsched-verbose=<number>\tSet the verbosity level of the scheduler."
msgstr ""
-#: common.opt:2133
+#: common.opt:2152
msgid "If scheduling post reload, do superblock scheduling."
msgstr ""
-#: common.opt:2141
+#: common.opt:2160
msgid "Reschedule instructions before register allocation."
msgstr ""
-#: common.opt:2145
+#: common.opt:2164
msgid "Reschedule instructions after register allocation."
msgstr ""
-#: common.opt:2152
+#: common.opt:2171
msgid "Schedule instructions using selective scheduling algorithm."
msgstr ""
-#: common.opt:2156
+#: common.opt:2175
msgid "Run selective scheduling after reload."
msgstr ""
-#: common.opt:2160
+#: common.opt:2179
msgid "Run self-tests, using the given path to locate test files."
msgstr ""
-#: common.opt:2164
+#: common.opt:2183
msgid "Perform software pipelining of inner loops during selective scheduling."
msgstr ""
-#: common.opt:2168
+#: common.opt:2187
msgid "Perform software pipelining of outer loops during selective scheduling."
msgstr ""
-#: common.opt:2172
+#: common.opt:2191
msgid "Reschedule pipelined regions without pipelining."
msgstr ""
-#: common.opt:2176
+#: common.opt:2195
msgid ""
"Allow interposing function (or variables) by ones with different semantics "
"(or initializer) respectively by dynamic linker."
msgstr ""
-#: common.opt:2182
+#: common.opt:2201
msgid "Allow premature scheduling of queued insns."
msgstr ""
-#: common.opt:2186
+#: common.opt:2205
msgid ""
"-fsched-stalled-insns=<number>\tSet number of queued insns that can be "
"prematurely scheduled."
msgstr ""
-#: common.opt:2194
+#: common.opt:2213
msgid ""
"Set dependence distance checking in premature scheduling of queued insns."
msgstr ""
-#: common.opt:2198
+#: common.opt:2217
msgid ""
"-fsched-stalled-insns-dep=<number>\tSet dependence distance checking in "
"premature scheduling of queued insns."
msgstr ""
-#: common.opt:2202
+#: common.opt:2221
msgid "Enable the group heuristic in the scheduler."
msgstr ""
-#: common.opt:2206
+#: common.opt:2225
msgid "Enable the critical path heuristic in the scheduler."
msgstr ""
-#: common.opt:2210
+#: common.opt:2229
msgid "Enable the speculative instruction heuristic in the scheduler."
msgstr ""
-#: common.opt:2214
+#: common.opt:2233
msgid "Enable the rank heuristic in the scheduler."
msgstr ""
-#: common.opt:2218
+#: common.opt:2237
msgid "Enable the last instruction heuristic in the scheduler."
msgstr ""
-#: common.opt:2222
+#: common.opt:2241
msgid "Enable the dependent count heuristic in the scheduler."
msgstr ""
-#: common.opt:2226
+#: common.opt:2245
msgid "Access data in the same section from shared anchor points."
msgstr ""
-#: common.opt:2238
+#: common.opt:2257
msgid "Turn on Redundant Extensions Elimination pass."
msgstr ""
-#: common.opt:2242
+#: common.opt:2261
msgid "Show column numbers in diagnostics, when available. Default on."
msgstr ""
-#: common.opt:2246
+#: common.opt:2265
msgid ""
"Emit function prologues only before parts of the function that need it, "
"rather than at the top of the function."
msgstr ""
-#: common.opt:2251
+#: common.opt:2270
msgid "Shrink-wrap parts of the prologue and epilogue separately."
msgstr ""
-#: common.opt:2255
+#: common.opt:2274
msgid "Disable optimizations observable by IEEE signaling NaNs."
msgstr ""
-#: common.opt:2259
+#: common.opt:2278
msgid ""
"Disable floating point optimizations that ignore the IEEE signedness of zero."
msgstr ""
-#: common.opt:2263
+#: common.opt:2282
msgid "Convert floating point constants to single precision constants."
msgstr ""
-#: common.opt:2267
+#: common.opt:2286
msgid "Split lifetimes of induction variables when loops are unrolled."
msgstr ""
-#: common.opt:2271
+#: common.opt:2290
msgid "Generate discontiguous stack frames."
msgstr ""
-#: common.opt:2275
+#: common.opt:2294
msgid "Split wide types into independent registers."
msgstr ""
-#: common.opt:2279
+#: common.opt:2298
msgid "Enable backward propagation of use properties at the SSA level."
msgstr ""
-#: common.opt:2283
+#: common.opt:2302
msgid "Optimize conditional patterns using SSA PHI nodes."
msgstr ""
-#: common.opt:2287
+#: common.opt:2306
msgid ""
"Optimize amount of stdarg registers saved to stack at start of function."
msgstr ""
-#: common.opt:2291
+#: common.opt:2310
msgid "Apply variable expansion when loops are unrolled."
msgstr ""
-#: common.opt:2295
+#: common.opt:2314
msgid ""
"-fstack-check=[no|generic|specific]\tInsert stack checking code into the "
"program."
msgstr ""
-#: common.opt:2299
+#: common.opt:2318
msgid ""
"Insert stack checking code into the program. Same as -fstack-check=specific."
msgstr ""
-#: common.opt:2306
+#: common.opt:2325
msgid ""
"-fstack-limit-register=<register>\tTrap if the stack goes past <register>."
msgstr ""
-#: common.opt:2310
+#: common.opt:2329
msgid "-fstack-limit-symbol=<name>\tTrap if the stack goes past symbol <name>."
msgstr ""
-#: common.opt:2314
+#: common.opt:2333
msgid "Use propolice as a stack protection method."
msgstr ""
-#: common.opt:2318
+#: common.opt:2337
msgid "Use a stack protection method for every function."
msgstr ""
-#: common.opt:2322
+#: common.opt:2341
msgid "Use a smart stack protection method for certain functions."
msgstr ""
-#: common.opt:2326
+#: common.opt:2345
msgid ""
"Use stack protection method only for functions with the stack_protect "
"attribute."
msgstr ""
-#: common.opt:2330
+#: common.opt:2349
msgid "Output stack usage information on a per-function basis."
msgstr ""
-#: common.opt:2342
+#: common.opt:2361
msgid "Assume strict aliasing rules apply."
msgstr ""
-#: common.opt:2346
-msgid "Treat signed overflow as undefined."
+#: common.opt:2365
+msgid "Treat signed overflow as undefined. Negated as -fwrapv."
msgstr ""
-#: common.opt:2350
+#: common.opt:2369
msgid "Implement __atomic operations via libcalls to legacy __sync functions."
msgstr ""
-#: common.opt:2354
+#: common.opt:2373
msgid "Check for syntax errors, then stop."
msgstr ""
-#: common.opt:2358
+#: common.opt:2377
msgid "Create data files needed by \"gcov\"."
msgstr ""
-#: common.opt:2362
+#: common.opt:2381
msgid "Perform jump threading optimizations."
msgstr ""
-#: common.opt:2366
+#: common.opt:2385
msgid "Report the time taken by each compiler pass."
msgstr ""
-#: common.opt:2370
+#: common.opt:2389
msgid "Record times taken by sub-phases separately."
msgstr ""
-#: common.opt:2374
+#: common.opt:2393
msgid ""
"-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tSet the "
"default thread-local storage code generation model."
msgstr ""
-#: common.opt:2377
+#: common.opt:2396
#, c-format
msgid "unknown TLS model %qs"
msgstr ""
-#: common.opt:2393
+#: common.opt:2412
msgid "Reorder top level functions, variables, and asms."
msgstr ""
-#: common.opt:2397
+#: common.opt:2416
msgid "Perform superblock formation via tail duplication."
msgstr ""
-#: common.opt:2401
+#: common.opt:2420
msgid ""
"For targets that normally need trampolines for nested functions, always "
"generate them instead of using descriptors."
msgstr ""
-#: common.opt:2409
+#: common.opt:2428
msgid "Assume floating-point operations can trap."
msgstr ""
-#: common.opt:2413
+#: common.opt:2432
msgid "Trap for signed overflow in addition, subtraction and multiplication."
msgstr ""
-#: common.opt:2417
+#: common.opt:2436
msgid "Enable SSA-CCP optimization on trees."
msgstr ""
-#: common.opt:2421
+#: common.opt:2440
msgid "Enable SSA-BIT-CCP optimization on trees."
msgstr ""
-#: common.opt:2429
+#: common.opt:2448
msgid "Enable loop header copying on trees."
msgstr ""
-#: common.opt:2437
+#: common.opt:2456
msgid "Enable SSA coalescing of user variables."
msgstr ""
-#: common.opt:2445
+#: common.opt:2464
msgid "Enable copy propagation on trees."
msgstr ""
-#: common.opt:2453
+#: common.opt:2472
msgid "Transform condition stores into unconditional ones."
msgstr ""
-#: common.opt:2457
+#: common.opt:2476
msgid "Perform conversions of switch initializations."
msgstr ""
-#: common.opt:2461
+#: common.opt:2480
msgid "Enable SSA dead code elimination optimization on trees."
msgstr ""
-#: common.opt:2465
+#: common.opt:2484
msgid "Enable dominator optimizations."
msgstr ""
-#: common.opt:2469
+#: common.opt:2488
msgid "Enable tail merging on trees."
msgstr ""
-#: common.opt:2473
+#: common.opt:2492
msgid "Enable dead store elimination."
msgstr ""
-#: common.opt:2477
+#: common.opt:2496
msgid "Enable forward propagation on trees."
msgstr ""
-#: common.opt:2481
+#: common.opt:2500
msgid "Enable Full Redundancy Elimination (FRE) on trees."
msgstr ""
-#: common.opt:2485
+#: common.opt:2504
msgid "Enable string length optimizations on trees."
msgstr ""
-#: common.opt:2489
+#: common.opt:2508
msgid ""
"Detect paths that trigger erroneous or undefined behavior due to "
"dereferencing a null pointer. Isolate those paths from the main control "
"flow and turn the statement with erroneous or undefined behavior into a trap."
msgstr ""
-#: common.opt:2495
+#: common.opt:2514
msgid ""
-"Detect paths that trigger erroneous or undefined behavior due a null value "
-"being used in a way forbidden by a returns_nonnull or nonnull attribute. "
-"Isolate those paths from the main control flow and turn the statement with "
-"erroneous or undefined behavior into a trap."
+"Detect paths that trigger erroneous or undefined behavior due to a null "
+"value being used in a way forbidden by a returns_nonnull or nonnull "
+"attribute. Isolate those paths from the main control flow and turn the "
+"statement with erroneous or undefined behavior into a trap."
msgstr ""
-#: common.opt:2502
+#: common.opt:2521
msgid "Enable loop distribution on trees."
msgstr ""
-#: common.opt:2506
+#: common.opt:2525
msgid "Enable loop distribution for patterns transformed into a library call."
msgstr ""
-#: common.opt:2510
+#: common.opt:2529
msgid "Enable loop invariant motion on trees."
msgstr ""
-#: common.opt:2518
+#: common.opt:2537
msgid "Create canonical induction variables in loops."
msgstr ""
-#: common.opt:2522
+#: common.opt:2541
msgid "Enable loop optimizations on tree level."
msgstr ""
-#: common.opt:2526
+#: common.opt:2545
msgid ""
"-ftree-parallelize-loops=<number>\tEnable automatic parallelization of loops."
msgstr ""
-#: common.opt:2530
+#: common.opt:2549
msgid "Enable hoisting loads from conditional pointers."
msgstr ""
-#: common.opt:2534
+#: common.opt:2553
msgid "Enable SSA-PRE optimization on trees."
msgstr ""
-#: common.opt:2538
+#: common.opt:2557
msgid ""
"In SSA-PRE optimization on trees, enable partial-partial redundancy "
"elimination."
msgstr ""
-#: common.opt:2542
+#: common.opt:2561
msgid "Perform function-local points-to analysis on trees."
msgstr ""
-#: common.opt:2546
+#: common.opt:2565
msgid "Enable reassociation on tree level."
msgstr ""
-#: common.opt:2554
+#: common.opt:2573
msgid "Enable SSA code sinking on trees."
msgstr ""
-#: common.opt:2558
+#: common.opt:2577
msgid "Perform straight-line strength reduction."
msgstr ""
-#: common.opt:2562
+#: common.opt:2581
msgid "Perform scalar replacement of aggregates."
msgstr ""
-#: common.opt:2566
+#: common.opt:2585
msgid "Replace temporary expressions in the SSA->normal pass."
msgstr ""
-#: common.opt:2570
+#: common.opt:2589
msgid "Perform live range splitting during the SSA->normal pass."
msgstr ""
-#: common.opt:2574
+#: common.opt:2593
msgid "Perform Value Range Propagation on trees."
msgstr ""
-#: common.opt:2578
+#: common.opt:2597
msgid "Split paths leading to loop backedges."
msgstr ""
-#: common.opt:2582
+#: common.opt:2601
msgid ""
"Assume common declarations may be overridden with ones with a larger "
"trailing array."
msgstr ""
-#: common.opt:2587
+#: common.opt:2606
msgid "Compile whole compilation unit at a time."
msgstr ""
-#: common.opt:2591
+#: common.opt:2610
msgid "Perform loop unrolling when iteration count is known."
msgstr ""
-#: common.opt:2595
+#: common.opt:2614
msgid "Perform loop unrolling for all loops."
msgstr ""
-#: common.opt:2606
+#: common.opt:2625
msgid ""
"Allow optimization for floating-point arithmetic which may change the result "
"of the operation due to rounding."
msgstr ""
-#: common.opt:2611
+#: common.opt:2630
msgid "Same as -fassociative-math for expressions which include division."
msgstr ""
-#: common.opt:2619
+#: common.opt:2638
msgid "Allow math optimizations that may violate IEEE or ISO standards."
msgstr ""
-#: common.opt:2623
+#: common.opt:2642
msgid "Perform loop unswitching."
msgstr ""
-#: common.opt:2627
+#: common.opt:2646
msgid "Perform loop splitting."
msgstr ""
-#: common.opt:2631
+#: common.opt:2650
msgid "Just generate unwind tables for exception handling."
msgstr ""
-#: common.opt:2635
+#: common.opt:2654
msgid "Use the bfd linker instead of the default linker."
msgstr ""
-#: common.opt:2639
+#: common.opt:2658
msgid "Use the gold linker instead of the default linker."
msgstr ""
-#: common.opt:2651
+#: common.opt:2670
msgid "Perform variable tracking."
msgstr ""
-#: common.opt:2659
+#: common.opt:2678
msgid "Perform variable tracking by annotating assignments."
msgstr ""
-#: common.opt:2665
+#: common.opt:2684
msgid "Toggle -fvar-tracking-assignments."
msgstr ""
-#: common.opt:2673
+#: common.opt:2692
msgid ""
"Perform variable tracking and also tag variables that are uninitialized."
msgstr ""
-#: common.opt:2677
+#: common.opt:2697
msgid "Enable vectorization on trees."
msgstr ""
-#: common.opt:2685
+#: common.opt:2705
msgid "Enable loop vectorization on trees."
msgstr ""
-#: common.opt:2689
+#: common.opt:2709
msgid "Enable basic block vectorization (SLP) on trees."
msgstr ""
-#: common.opt:2693
+#: common.opt:2713
msgid ""
"Specifies the cost model for vectorization. -fvect-cost-model=[unlimited|"
"dynamic|cheap]\tSpecifies the cost model for vectorization."
msgstr ""
-#: common.opt:2698
+#: common.opt:2718
msgid ""
"-fsimd-cost-model=[unlimited|dynamic|cheap]\tSpecifies the vectorization "
"cost model for code marked with a simd directive."
msgstr ""
-#: common.opt:2701
+#: common.opt:2721
#, c-format
msgid "unknown vectorizer cost model %qs"
msgstr ""
-#: common.opt:2714
+#: common.opt:2734
msgid ""
"Enables the dynamic vectorizer cost model. Preserved for backward "
"compatibility."
msgstr ""
-#: common.opt:2722
+#: common.opt:2742
msgid "Enable copy propagation of scalar-evolution information."
msgstr ""
-#: common.opt:2732
+#: common.opt:2752
msgid "Add extra commentary to assembler output."
msgstr ""
-#: common.opt:2736
+#: common.opt:2756
msgid ""
"-fvisibility=[default|internal|hidden|protected]\tSet the default symbol "
"visibility."
msgstr ""
-#: common.opt:2739
+#: common.opt:2759
#, c-format
msgid "unrecognized visibility value %qs"
msgstr ""
-#: common.opt:2755
+#: common.opt:2775
msgid "Validate vtable pointers before using them."
msgstr ""
-#: common.opt:2758
+#: common.opt:2778
#, c-format
msgid "unknown vtable verify initialization priority %qs"
msgstr ""
-#: common.opt:2771
+#: common.opt:2791
msgid "Output vtable verification counters."
msgstr ""
-#: common.opt:2775
+#: common.opt:2795
msgid "Output vtable verification pointer sets information."
msgstr ""
-#: common.opt:2779
+#: common.opt:2799
msgid "Use expression value profiles in optimizations."
msgstr ""
-#: common.opt:2783
+#: common.opt:2803
msgid "Construct webs and split unrelated uses of single variable."
msgstr ""
-#: common.opt:2787
+#: common.opt:2807
msgid "Enable conditional dead code elimination for builtin calls."
msgstr ""
-#: common.opt:2791
+#: common.opt:2811
msgid "Perform whole program optimizations."
msgstr ""
-#: common.opt:2795
+#: common.opt:2815
msgid "Assume signed arithmetic overflow wraps around."
msgstr ""
-#: common.opt:2799
+#: common.opt:2819
msgid "Put zero initialized data in the bss section."
msgstr ""
-#: common.opt:2803
+#: common.opt:2823
msgid "Generate debug information in default format."
msgstr ""
-#: common.opt:2807
+#: common.opt:2827
msgid "Generate debug information in COFF format."
msgstr ""
-#: common.opt:2811
+#: common.opt:2831
msgid "Don't record DW_AT_decl_column and DW_AT_call_column in DWARF."
msgstr ""
-#: common.opt:2815
+#: common.opt:2835
msgid "Record DW_AT_decl_column and DW_AT_call_column in DWARF."
msgstr ""
-#: common.opt:2819
+#: common.opt:2839
msgid "Generate debug information in default version of DWARF format."
msgstr ""
-#: common.opt:2823
+#: common.opt:2843
msgid "Generate debug information in DWARF v2 (or later) format."
msgstr ""
-#: common.opt:2827
+#: common.opt:2847
msgid "Generate debug information in default extended format."
msgstr ""
-#: common.opt:2831
+#: common.opt:2851
msgid "Don't generate DWARF pubnames and pubtypes sections."
msgstr ""
-#: common.opt:2835
+#: common.opt:2855
msgid "Generate DWARF pubnames and pubtypes sections."
msgstr ""
-#: common.opt:2839
+#: common.opt:2859
msgid "Generate DWARF pubnames and pubtypes sections with GNU extensions."
msgstr ""
-#: common.opt:2843
+#: common.opt:2863
msgid "Don't record gcc command line switches in DWARF DW_AT_producer."
msgstr ""
-#: common.opt:2847
+#: common.opt:2867
msgid "Record gcc command line switches in DWARF DW_AT_producer."
msgstr ""
-#: common.opt:2851
+#: common.opt:2871
msgid "Don't generate debug information in separate .dwo files."
msgstr ""
-#: common.opt:2855
+#: common.opt:2875
msgid "Generate debug information in separate .dwo files."
msgstr ""
-#: common.opt:2859
+#: common.opt:2879
msgid "Generate debug information in STABS format."
msgstr ""
-#: common.opt:2863
+#: common.opt:2883
msgid "Generate debug information in extended STABS format."
msgstr ""
-#: common.opt:2867
+#: common.opt:2887
msgid "Emit DWARF additions beyond selected version."
msgstr ""
-#: common.opt:2871
+#: common.opt:2891
msgid "Don't emit DWARF additions beyond selected version."
msgstr ""
-#: common.opt:2875
+#: common.opt:2895
msgid "Toggle debug information generation."
msgstr ""
-#: common.opt:2879
+#: common.opt:2899
msgid "Generate debug information in VMS format."
msgstr ""
-#: common.opt:2883
+#: common.opt:2903
msgid "Generate debug information in XCOFF format."
msgstr ""
-#: common.opt:2887
+#: common.opt:2907
msgid "Generate debug information in extended XCOFF format."
msgstr ""
-#: common.opt:2905
+#: common.opt:2925
msgid "Generate compressed debug sections."
msgstr ""
-#: common.opt:2909
+#: common.opt:2929
msgid "-gz=<format>\tGenerate compressed debug sections in format <format>."
msgstr ""
-#: common.opt:2916
+#: common.opt:2936
msgid "-iplugindir=<dir>\tSet <dir> to be the default plugin directory."
msgstr ""
-#: common.opt:2920
+#: common.opt:2940
msgid "-imultiarch <dir>\tSet <dir> to be the multiarch include subdirectory."
msgstr ""
-#: common.opt:2942
+#: common.opt:2962
msgid "-o <file>\tPlace output into <file>."
msgstr ""
-#: common.opt:2946
+#: common.opt:2966
msgid "Enable function profiling."
msgstr ""
-#: common.opt:2956
+#: common.opt:2976
msgid "Like -pedantic but issue them as errors."
msgstr ""
-#: common.opt:2996
+#: common.opt:3016
msgid "Do not display functions compiled or elapsed time."
msgstr ""
-#: common.opt:3028
+#: common.opt:3048
msgid "Enable verbose output."
msgstr ""
-#: common.opt:3032
+#: common.opt:3052
msgid "Display the compiler's version."
msgstr ""
-#: common.opt:3036
+#: common.opt:3056
msgid "Suppress warnings."
msgstr ""
-#: common.opt:3046
+#: common.opt:3066
msgid "Create a shared library."
msgstr ""
-#: common.opt:3091
+#: common.opt:3111
msgid "Don't create a position independent executable."
msgstr ""
-#: common.opt:3095
+#: common.opt:3115
msgid "Create a position independent executable."
msgstr ""
-#: common.opt:3102
+#: common.opt:3122
msgid "Use caller save register across calls if possible."
msgstr ""
-#: go/gofrontend/expressions.cc:95 c-family/c-warn.c:479 cp/cvt.c:1297
-#: cp/cvt.c:1548
+#: go/gofrontend/expressions.cc:95 c-family/c-warn.c:528 cp/cvt.c:1297
+#: cp/cvt.c:1550
#, gcc-internal-format
msgid "value computed is not used"
msgstr ""
@@ -15910,439 +16046,443 @@ msgstr ""
msgid "invalid use of type"
msgstr ""
-#: go/gofrontend/expressions.cc:2841 go/gofrontend/expressions.cc:2907
-#: go/gofrontend/expressions.cc:2923
+#: go/gofrontend/expressions.cc:2848 go/gofrontend/expressions.cc:2914
+#: go/gofrontend/expressions.cc:2930
msgid "constant refers to itself"
msgstr ""
-#: go/gofrontend/expressions.cc:3735 go/gofrontend/expressions.cc:4223
+#: go/gofrontend/expressions.cc:3812 go/gofrontend/expressions.cc:4266
msgid "expected pointer"
msgstr ""
-#: go/gofrontend/expressions.cc:4194
+#: go/gofrontend/expressions.cc:4237
msgid "expected numeric type"
msgstr ""
-#: go/gofrontend/expressions.cc:4199
+#: go/gofrontend/expressions.cc:4242
msgid "expected boolean type"
msgstr ""
-#: go/gofrontend/expressions.cc:4204 c/c-parser.c:12787 c/c-parser.c:12794
-#: cp/parser.c:32636 cp/parser.c:32643
+#: go/gofrontend/expressions.cc:4247 c/c-parser.c:12768 c/c-parser.c:12775
+#: cp/parser.c:32809 cp/parser.c:32816
#, gcc-internal-format
msgid "expected integer"
msgstr ""
-#: go/gofrontend/expressions.cc:5814
+#: go/gofrontend/expressions.cc:5857
msgid "invalid comparison of nil with nil"
msgstr ""
-#: go/gofrontend/expressions.cc:5820 go/gofrontend/expressions.cc:5838
+#: go/gofrontend/expressions.cc:5863 go/gofrontend/expressions.cc:5881
msgid "incompatible types in binary expression"
msgstr ""
-#: go/gofrontend/expressions.cc:5858
+#: go/gofrontend/expressions.cc:5901
msgid "integer division by zero"
msgstr ""
-#: go/gofrontend/expressions.cc:5866
+#: go/gofrontend/expressions.cc:5909
msgid "shift of non-integer operand"
msgstr ""
-#: go/gofrontend/expressions.cc:5869 go/gofrontend/expressions.cc:5873
-#: go/gofrontend/expressions.cc:5881
+#: go/gofrontend/expressions.cc:5912 go/gofrontend/expressions.cc:5916
+#: go/gofrontend/expressions.cc:5924
msgid "shift count not unsigned integer"
msgstr ""
-#: go/gofrontend/expressions.cc:5886
+#: go/gofrontend/expressions.cc:5929
msgid "negative shift count"
msgstr ""
-#: go/gofrontend/expressions.cc:6697
+#: go/gofrontend/expressions.cc:6741
msgid "object is not a method"
msgstr ""
-#: go/gofrontend/expressions.cc:6714
+#: go/gofrontend/expressions.cc:6758
msgid "method type does not match object type"
msgstr ""
-#: go/gofrontend/expressions.cc:7221
+#: go/gofrontend/expressions.cc:7265
msgid "invalid use of %<...%> with builtin function"
msgstr ""
-#: go/gofrontend/expressions.cc:7232
+#: go/gofrontend/expressions.cc:7276
msgid "invalid use of method value as argument of Offsetof"
msgstr ""
-#: go/gofrontend/expressions.cc:7246
+#: go/gofrontend/expressions.cc:7290
msgid "argument of Offsetof implies indirection of an embedded field"
msgstr ""
-#: go/gofrontend/expressions.cc:7271 go/gofrontend/expressions.cc:7308
-#: go/gofrontend/expressions.cc:7450 go/gofrontend/expressions.cc:8485
-#: go/gofrontend/expressions.cc:8634 go/gofrontend/expressions.cc:8680
-#: go/gofrontend/expressions.cc:8712 go/gofrontend/expressions.cc:8788
-#: go/gofrontend/expressions.cc:10038 go/gofrontend/expressions.cc:10055
-#: go/gofrontend/expressions.cc:10071
+#: go/gofrontend/expressions.cc:7315 go/gofrontend/expressions.cc:7352
+#: go/gofrontend/expressions.cc:7494 go/gofrontend/expressions.cc:8542
+#: go/gofrontend/expressions.cc:8691 go/gofrontend/expressions.cc:8737
+#: go/gofrontend/expressions.cc:8772 go/gofrontend/expressions.cc:8848
+#: go/gofrontend/expressions.cc:10085 go/gofrontend/expressions.cc:10102
+#: go/gofrontend/expressions.cc:10118
msgid "not enough arguments"
msgstr ""
-#: go/gofrontend/expressions.cc:7273 go/gofrontend/expressions.cc:7310
-#: go/gofrontend/expressions.cc:8490 go/gofrontend/expressions.cc:8617
-#: go/gofrontend/expressions.cc:8639 go/gofrontend/expressions.cc:8717
-#: go/gofrontend/expressions.cc:8790 go/gofrontend/expressions.cc:9586
-#: go/gofrontend/expressions.cc:10043 go/gofrontend/expressions.cc:10057
-#: go/gofrontend/expressions.cc:10078
+#: go/gofrontend/expressions.cc:7317 go/gofrontend/expressions.cc:7354
+#: go/gofrontend/expressions.cc:8547 go/gofrontend/expressions.cc:8674
+#: go/gofrontend/expressions.cc:8696 go/gofrontend/expressions.cc:8777
+#: go/gofrontend/expressions.cc:8850 go/gofrontend/expressions.cc:9656
+#: go/gofrontend/expressions.cc:10090 go/gofrontend/expressions.cc:10104
+#: go/gofrontend/expressions.cc:10125
msgid "too many arguments"
msgstr ""
-#: go/gofrontend/expressions.cc:7312
+#: go/gofrontend/expressions.cc:7356
msgid "argument 1 must be a map"
msgstr ""
-#: go/gofrontend/expressions.cc:7476
+#: go/gofrontend/expressions.cc:7524
msgid "invalid type for make function"
msgstr ""
-#: go/gofrontend/expressions.cc:7489
+#: go/gofrontend/expressions.cc:7537
msgid "length required when allocating a slice"
msgstr ""
-#: go/gofrontend/expressions.cc:7522
+#: go/gofrontend/expressions.cc:7570
msgid "len larger than cap"
msgstr ""
-#: go/gofrontend/expressions.cc:7531
+#: go/gofrontend/expressions.cc:7579
msgid "too many arguments to make"
msgstr ""
-#: go/gofrontend/expressions.cc:8534
+#: go/gofrontend/expressions.cc:8591
msgid "argument must be array or slice or channel"
msgstr ""
-#: go/gofrontend/expressions.cc:8544
+#: go/gofrontend/expressions.cc:8601
msgid "argument must be string or array or slice or map or channel"
msgstr ""
-#: go/gofrontend/expressions.cc:8590
+#: go/gofrontend/expressions.cc:8647
msgid "unsupported argument type to builtin function"
msgstr ""
-#: go/gofrontend/expressions.cc:8601
+#: go/gofrontend/expressions.cc:8658
msgid "argument must be channel"
msgstr ""
-#: go/gofrontend/expressions.cc:8603
+#: go/gofrontend/expressions.cc:8660
msgid "cannot close receive-only channel"
msgstr ""
-#: go/gofrontend/expressions.cc:8625
+#: go/gofrontend/expressions.cc:8682
msgid "argument must be a field reference"
msgstr ""
-#: go/gofrontend/expressions.cc:8655
+#: go/gofrontend/expressions.cc:8712
msgid "left argument must be a slice"
msgstr ""
-#: go/gofrontend/expressions.cc:8663
+#: go/gofrontend/expressions.cc:8720
msgid "element types must be the same"
msgstr ""
-#: go/gofrontend/expressions.cc:8668
+#: go/gofrontend/expressions.cc:8725
msgid "first argument must be []byte"
msgstr ""
-#: go/gofrontend/expressions.cc:8671
+#: go/gofrontend/expressions.cc:8728
msgid "second argument must be slice or string"
msgstr ""
-#: go/gofrontend/expressions.cc:8780
+#: go/gofrontend/expressions.cc:8840
msgid "argument must have complex type"
msgstr ""
-#: go/gofrontend/expressions.cc:8798
+#: go/gofrontend/expressions.cc:8858
msgid "complex arguments must have identical types"
msgstr ""
-#: go/gofrontend/expressions.cc:8800
+#: go/gofrontend/expressions.cc:8860
msgid "complex arguments must have floating-point type"
msgstr ""
-#: go/gofrontend/expressions.cc:9357 go/gofrontend/expressions.cc:9984
-#: go/gofrontend/expressions.cc:10380
+#: go/gofrontend/expressions.cc:9417 go/gofrontend/expressions.cc:10031
+#: go/gofrontend/expressions.cc:10400
msgid "expected function"
msgstr ""
-#: go/gofrontend/expressions.cc:9385
+#: go/gofrontend/expressions.cc:9445
msgid "multiple-value argument in single-value context"
msgstr ""
-#: go/gofrontend/expressions.cc:9590
+#: go/gofrontend/expressions.cc:9660
msgid "invalid use of %<...%> with non-slice"
msgstr ""
-#: go/gofrontend/expressions.cc:9992
+#: go/gofrontend/expressions.cc:10039
msgid "function result count mismatch"
msgstr ""
-#: go/gofrontend/expressions.cc:10010
+#: go/gofrontend/expressions.cc:10057
msgid "incompatible type for receiver"
msgstr ""
-#: go/gofrontend/expressions.cc:10028
+#: go/gofrontend/expressions.cc:10075
msgid "invalid use of %<...%> calling non-variadic function"
msgstr ""
-#: go/gofrontend/expressions.cc:10389 go/gofrontend/expressions.cc:10403
+#: go/gofrontend/expressions.cc:10409 go/gofrontend/expressions.cc:10423
msgid "number of results does not match number of values"
msgstr ""
-#: go/gofrontend/expressions.cc:10692 go/gofrontend/expressions.cc:11198
+#: go/gofrontend/expressions.cc:10727 go/gofrontend/expressions.cc:11247
msgid "index must be integer"
msgstr ""
-#: go/gofrontend/expressions.cc:10700 go/gofrontend/expressions.cc:11206
+#: go/gofrontend/expressions.cc:10735 go/gofrontend/expressions.cc:11255
msgid "slice end must be integer"
msgstr ""
-#: go/gofrontend/expressions.cc:10708
+#: go/gofrontend/expressions.cc:10743
msgid "slice capacity must be integer"
msgstr ""
-#: go/gofrontend/expressions.cc:10758 go/gofrontend/expressions.cc:11240
+#: go/gofrontend/expressions.cc:10793 go/gofrontend/expressions.cc:11289
msgid "inverted slice range"
msgstr ""
-#: go/gofrontend/expressions.cc:10801
+#: go/gofrontend/expressions.cc:10836
msgid "slice of unaddressable value"
msgstr ""
-#: go/gofrontend/expressions.cc:11465
+#: go/gofrontend/expressions.cc:11514
msgid "incompatible type for map index"
msgstr ""
-#: go/gofrontend/expressions.cc:11833
+#: go/gofrontend/expressions.cc:11882
msgid "expected interface or pointer to interface"
msgstr ""
-#: go/gofrontend/expressions.cc:12534
+#: go/gofrontend/expressions.cc:12593
msgid "too many expressions for struct"
msgstr ""
-#: go/gofrontend/expressions.cc:12547
+#: go/gofrontend/expressions.cc:12606
msgid "too few expressions for struct"
msgstr ""
-#: go/gofrontend/expressions.cc:14143 go/gofrontend/statements.cc:1625
+#: go/gofrontend/expressions.cc:14204 go/gofrontend/statements.cc:1645
msgid "type assertion only valid for interface types"
msgstr ""
-#: go/gofrontend/expressions.cc:14155
+#: go/gofrontend/expressions.cc:14216
msgid "impossible type assertion: type does not implement interface"
msgstr ""
-#: go/gofrontend/expressions.cc:14283 go/gofrontend/expressions.cc:14303
-#: go/gofrontend/statements.cc:1470
+#: go/gofrontend/expressions.cc:14377 go/gofrontend/expressions.cc:14397
+#: go/gofrontend/statements.cc:1490
msgid "expected channel"
msgstr ""
-#: go/gofrontend/expressions.cc:14308 go/gofrontend/statements.cc:1475
+#: go/gofrontend/expressions.cc:14402 go/gofrontend/statements.cc:1495
msgid "invalid receive on send-only channel"
msgstr ""
-#: go/gofrontend/parse.cc:3107
+#: go/gofrontend/parse.cc:3127
msgid ""
"parentheses required around this composite literal to avoid parsing ambiguity"
msgstr ""
-#: go/gofrontend/parse.cc:4665
+#: go/gofrontend/parse.cc:4685
msgid "cannot fallthrough final case in switch"
msgstr ""
-#: go/gofrontend/statements.cc:774
+#: go/gofrontend/statements.cc:778
msgid "invalid left hand side of assignment"
msgstr ""
-#: go/gofrontend/statements.cc:785 go/gofrontend/statements.cc:1187
+#: go/gofrontend/statements.cc:789 go/gofrontend/statements.cc:1207
msgid "use of untyped nil"
msgstr ""
-#: go/gofrontend/statements.cc:1309
+#: go/gofrontend/statements.cc:1329
msgid "expected map index on right hand side"
msgstr ""
-#: go/gofrontend/statements.cc:2710 go/gofrontend/statements.cc:2740
+#: go/gofrontend/statements.cc:2756 go/gofrontend/statements.cc:2786
msgid "not enough arguments to return"
msgstr ""
-#: go/gofrontend/statements.cc:2718
+#: go/gofrontend/statements.cc:2764
msgid "return with value in function with no return type"
msgstr ""
-#: go/gofrontend/statements.cc:2746
+#: go/gofrontend/statements.cc:2792
msgid "too many values in return statement"
msgstr ""
-#: go/gofrontend/statements.cc:3153
+#: go/gofrontend/statements.cc:3199
msgid "expected boolean expression"
msgstr ""
-#: go/gofrontend/statements.cc:4244
+#: go/gofrontend/statements.cc:4290
msgid "cannot type switch on non-interface value"
msgstr ""
-#: go/gofrontend/statements.cc:4379
+#: go/gofrontend/statements.cc:4425
msgid "incompatible types in send"
msgstr ""
-#: go/gofrontend/statements.cc:4384
+#: go/gofrontend/statements.cc:4430
msgid "invalid send on receive-only channel"
msgstr ""
-#: go/gofrontend/statements.cc:5335
+#: go/gofrontend/statements.cc:5381
msgid "too many variables for range clause with channel"
msgstr ""
-#: go/gofrontend/statements.cc:5342
+#: go/gofrontend/statements.cc:5388
msgid "range clause must have array, slice, string, map, or channel type"
msgstr ""
-#: go/gofrontend/types.cc:513
+#: go/gofrontend/types.cc:525
msgid "invalid comparison of non-ordered type"
msgstr ""
-#: go/gofrontend/types.cc:529
+#: go/gofrontend/types.cc:541
msgid "slice can only be compared to nil"
msgstr ""
-#: go/gofrontend/types.cc:531
+#: go/gofrontend/types.cc:543
msgid "map can only be compared to nil"
msgstr ""
-#: go/gofrontend/types.cc:533
+#: go/gofrontend/types.cc:545
msgid "func can only be compared to nil"
msgstr ""
-#: go/gofrontend/types.cc:539
+#: go/gofrontend/types.cc:551
#, c-format
msgid "invalid operation (%s)"
msgstr ""
-#: go/gofrontend/types.cc:562
+#: go/gofrontend/types.cc:574
msgid "invalid comparison of non-comparable type"
msgstr ""
-#: go/gofrontend/types.cc:575
+#: go/gofrontend/types.cc:587
msgid "invalid comparison of generated struct"
msgstr ""
-#: go/gofrontend/types.cc:586
+#: go/gofrontend/types.cc:598
msgid "invalid comparison of non-comparable struct"
msgstr ""
-#: go/gofrontend/types.cc:596
+#: go/gofrontend/types.cc:608
msgid "invalid comparison of generated array"
msgstr ""
-#: go/gofrontend/types.cc:603
+#: go/gofrontend/types.cc:615
msgid "invalid comparison of non-comparable array"
msgstr ""
-#: go/gofrontend/types.cc:631
+#: go/gofrontend/types.cc:643
msgid "multiple-value function call in single-value context"
msgstr ""
-#: go/gofrontend/types.cc:708
+#: go/gofrontend/types.cc:720
msgid "need explicit conversion"
msgstr ""
-#: go/gofrontend/types.cc:715
+#: go/gofrontend/types.cc:727
#, c-format
msgid "cannot use type %s as type %s"
msgstr ""
-#: go/gofrontend/types.cc:3849
+#: go/gofrontend/types.cc:759
+msgid "conversion from notinheap type to normal type"
+msgstr ""
+
+#: go/gofrontend/types.cc:4630
msgid "different receiver types"
msgstr ""
-#: go/gofrontend/types.cc:3869 go/gofrontend/types.cc:3882
-#: go/gofrontend/types.cc:3897
+#: go/gofrontend/types.cc:4650 go/gofrontend/types.cc:4663
+#: go/gofrontend/types.cc:4678
msgid "different number of parameters"
msgstr ""
-#: go/gofrontend/types.cc:3890
+#: go/gofrontend/types.cc:4671
msgid "different parameter types"
msgstr ""
-#: go/gofrontend/types.cc:3905
+#: go/gofrontend/types.cc:4686
msgid "different varargs"
msgstr ""
-#: go/gofrontend/types.cc:3914 go/gofrontend/types.cc:3927
-#: go/gofrontend/types.cc:3942
+#: go/gofrontend/types.cc:4695 go/gofrontend/types.cc:4708
+#: go/gofrontend/types.cc:4724
msgid "different number of results"
msgstr ""
-#: go/gofrontend/types.cc:3935
+#: go/gofrontend/types.cc:4717
msgid "different result types"
msgstr ""
-#: go/gofrontend/types.cc:8423
+#: go/gofrontend/types.cc:9140
#, c-format
msgid "need explicit conversion; missing method %s%s%s"
msgstr ""
-#: go/gofrontend/types.cc:8440 go/gofrontend/types.cc:8582
+#: go/gofrontend/types.cc:9157 go/gofrontend/types.cc:9300
#, c-format
msgid "incompatible type for method %s%s%s"
msgstr ""
-#: go/gofrontend/types.cc:8444 go/gofrontend/types.cc:8586
+#: go/gofrontend/types.cc:9161 go/gofrontend/types.cc:9304
#, c-format
msgid "incompatible type for method %s%s%s (%s)"
msgstr ""
-#: go/gofrontend/types.cc:8523 go/gofrontend/types.cc:8536
+#: go/gofrontend/types.cc:9240 go/gofrontend/types.cc:9253
msgid "pointer to interface type has no methods"
msgstr ""
-#: go/gofrontend/types.cc:8525 go/gofrontend/types.cc:8538
+#: go/gofrontend/types.cc:9242 go/gofrontend/types.cc:9255
msgid "type has no methods"
msgstr ""
-#: go/gofrontend/types.cc:8559
+#: go/gofrontend/types.cc:9276
#, c-format
msgid "ambiguous method %s%s%s"
msgstr ""
-#: go/gofrontend/types.cc:8562
+#: go/gofrontend/types.cc:9279
#, c-format
msgid "missing method %s%s%s"
msgstr ""
-#: go/gofrontend/types.cc:8603
+#: go/gofrontend/types.cc:9321
#, c-format
msgid "method %s%s%s requires a pointer receiver"
msgstr ""
-#: go/gofrontend/types.cc:8621
+#: go/gofrontend/types.cc:9339
#, c-format
msgid "method %s%s%s is marked go:nointerface"
msgstr ""
#. Warn about and ignore all others for now, but store them.
-#: attribs.c:436 c-family/c-attribs.c:2400 objc/objc-act.c:4957
+#: attribs.c:453 c-family/c-attribs.c:2510 objc/objc-act.c:4957
#: objc/objc-act.c:6926 objc/objc-act.c:8113 objc/objc-act.c:8164
#, gcc-internal-format
msgid "%qE attribute directive ignored"
msgstr ""
-#: attribs.c:440
+#: attribs.c:457
#, gcc-internal-format
msgid "%<%E::%E%> scoped attribute directive ignored"
msgstr ""
-#: attribs.c:449
+#: attribs.c:466
#, gcc-internal-format
msgid "wrong number of arguments specified for %qE attribute"
msgstr ""
@@ -16350,406 +16490,433 @@ msgstr ""
#. This is a c++11 attribute that appertains to a
#. type-specifier, outside of the definition of, a class
#. type. Ignore it.
-#: attribs.c:462
+#: attribs.c:479
#, gcc-internal-format
msgid "attribute ignored"
msgstr ""
-#: attribs.c:464
+#: attribs.c:481
#, gcc-internal-format
msgid "an attribute that appertains to a type-specifier is ignored"
msgstr ""
-#: attribs.c:481
+#: attribs.c:498
#, gcc-internal-format
msgid "%qE attribute does not apply to types"
msgstr ""
-#: attribs.c:529
+#: attribs.c:546
#, gcc-internal-format
msgid "%qE attribute only applies to function types"
msgstr ""
-#: attribs.c:539
+#: attribs.c:556
#, gcc-internal-format
msgid "type attributes ignored after type is already defined"
msgstr ""
-#: auto-profile.c:347
+#: attribs.c:835
+#, gcc-internal-format
+msgid "missing %<target%> attribute for multi-versioned %qD"
+msgstr ""
+
+#: attribs.c:838 cp/decl.c:1205 cp/decl.c:1923 cp/decl.c:1933 cp/decl.c:2491
+#: cp/decl.c:2906
+#, gcc-internal-format
+msgid "previous declaration of %qD"
+msgstr ""
+
+#: auto-profile.c:348
#, gcc-internal-format
msgid "offset exceeds 16 bytes"
msgstr ""
-#: auto-profile.c:854
+#: auto-profile.c:855
#, gcc-internal-format
msgid "Not expected TAG."
msgstr ""
-#: auto-profile.c:920
+#: auto-profile.c:921
#, gcc-internal-format, gfc-internal-format
msgid "cannot open profile file %s"
msgstr ""
-#: auto-profile.c:926
+#: auto-profile.c:927
#, gcc-internal-format
msgid "AutoFDO profile magic number does not match"
msgstr ""
-#: auto-profile.c:934
+#: auto-profile.c:935
#, gcc-internal-format, gfc-internal-format
msgid "AutoFDO profile version %u does match %u"
msgstr ""
-#: auto-profile.c:946
+#: auto-profile.c:947
#, gcc-internal-format, gfc-internal-format
msgid "cannot read string table from %s"
msgstr ""
-#: auto-profile.c:954
+#: auto-profile.c:955
#, gcc-internal-format, gfc-internal-format
msgid "cannot read function profile from %s"
msgstr ""
-#: auto-profile.c:964
+#: auto-profile.c:965
#, gcc-internal-format, gfc-internal-format
msgid "cannot read working set from %s"
msgstr ""
-#: bt-load.c:1564
+#: bt-load.c:1562
#, gcc-internal-format
msgid ""
"branch target register load optimization is not intended to be run twice"
msgstr ""
-#: builtins.c:644
+#: builtins.c:647
#, gcc-internal-format
msgid "offset %qwi outside bounds of constant string"
msgstr ""
-#: builtins.c:1242
+#: builtins.c:1245
#, gcc-internal-format
msgid "second argument to %<__builtin_prefetch%> must be a constant"
msgstr ""
-#: builtins.c:1249
+#: builtins.c:1252
#, gcc-internal-format
msgid "invalid second argument to %<__builtin_prefetch%>; using zero"
msgstr ""
-#: builtins.c:1257
+#: builtins.c:1260
#, gcc-internal-format
msgid "third argument to %<__builtin_prefetch%> must be a constant"
msgstr ""
-#: builtins.c:1264
+#: builtins.c:1267
#, gcc-internal-format
msgid "invalid third argument to %<__builtin_prefetch%>; using zero"
msgstr ""
-#: builtins.c:3131
+#: builtins.c:3075
#, gcc-internal-format
-msgid "%K%qD: specified size %wu exceeds maximum object size %wu"
+msgid "%K%qD specified size %E exceeds maximum object size %E"
msgstr ""
-#: builtins.c:3138
+#: builtins.c:3080
#, gcc-internal-format
-msgid ""
-"%K%qD: specified size between %wu and %wu exceeds maximum object size %wu"
+msgid "%K%qD specified size between %E and %E exceeds maximum object size %E"
msgstr ""
-#: builtins.c:3163
+#: builtins.c:3106 builtins.c:3122
#, gcc-internal-format
msgid ""
-"%K%qD: writing at least %wu byte into a region of size %wu overflows the "
+"%K%qD writing %E or more bytes into a region of size %E overflows the "
"destination"
msgstr ""
-#: builtins.c:3170
+#: builtins.c:3113
#, gcc-internal-format
msgid ""
-"%K%qD: writing %wu byte into a region of size %wu overflows the destination"
+"%K%qD writing %E byte into a region of size %E overflows the destination"
msgstr ""
-#: builtins.c:3172
+#: builtins.c:3115
#, gcc-internal-format
msgid ""
-"%K%qD writing %wu bytes into a region of size %wu overflows the destination"
+"%K%qD writing %E bytes into a region of size %E overflows the destination"
msgstr ""
-#: builtins.c:3178
+#: builtins.c:3128
#, gcc-internal-format
msgid ""
-"%K%qD: writing between %wu and %wu bytes into a region of size %wu overflows "
-"the destination"
+"%K%qD writing between %E and %E bytes into a region of size %E overflows the "
+"destination"
msgstr ""
-#: builtins.c:3207
+#: builtins.c:3157
#, gcc-internal-format
-msgid "%K%qD: specified bound %wu exceeds maximum object size %wu"
+msgid "%K%qD specified bound %E exceeds maximum object size %E"
msgstr ""
-#: builtins.c:3214
+#: builtins.c:3163
#, gcc-internal-format
-msgid ""
-"%K%qD: specified bound between %wu and %wu exceeds maximum object size %wu"
+msgid "%K%qD specified bound between %E and %E exceeds maximum object size %E"
msgstr ""
-#: builtins.c:3228
+#: builtins.c:3175
#, gcc-internal-format
-msgid "%K%qD: specified bound %wu exceeds the size %wu of the destination"
+msgid "%K%qD specified bound %E exceeds destination size %E"
msgstr ""
-#: builtins.c:3235
+#: builtins.c:3181
#, gcc-internal-format
-msgid ""
-"%K%qD: specified bound between %wu and %wu exceeds the size %wu of the "
-"destination"
+msgid "%K%qD specified bound between %E and %E exceeds destination size %E"
+msgstr ""
+
+#: builtins.c:3200
+#, gcc-internal-format
+msgid "%K%qD reading %E byte from a region of size %E"
msgstr ""
-#: builtins.c:3733 builtins.c:3797
+#: builtins.c:3201
#, gcc-internal-format
-msgid "specified bound %wu equals the size of the destination"
+msgid "%K%qD reading %E bytes from a region of size %E"
msgstr ""
-#: builtins.c:4640 gimplify.c:3149
+#: builtins.c:3207
+#, gcc-internal-format
+msgid "%K%qD reading %E or more bytes from a region of size %E"
+msgstr ""
+
+#: builtins.c:3213
+#, gcc-internal-format
+msgid "%K%qD reading between %E and %E bytes from a region of size %E"
+msgstr ""
+
+#: builtins.c:3800 builtins.c:3866
+#, gcc-internal-format
+msgid "%K%qD specified bound %E equals destination size"
+msgstr ""
+
+#: builtins.c:4714 gimplify.c:3190
#, gcc-internal-format
msgid "too few arguments to function %<va_start%>"
msgstr ""
-#: builtins.c:4740
+#: builtins.c:4814
#, gcc-internal-format
msgid "invalid argument to %qD"
msgstr ""
-#: builtins.c:4753
+#: builtins.c:4827
#, gcc-internal-format
msgid "unsupported argument to %qD"
msgstr ""
#. Warn since no effort is made to ensure that any frame
#. beyond the current one exists or can be safely reached.
-#: builtins.c:4761
+#: builtins.c:4835
#, gcc-internal-format
msgid "calling %qD with a nonzero argument is unsafe"
msgstr ""
-#: builtins.c:5028
+#: builtins.c:5120
#, gcc-internal-format
msgid "both arguments to %<__builtin___clear_cache%> must be pointers"
msgstr ""
-#: builtins.c:5127
+#: builtins.c:5219
#, gcc-internal-format
msgid "trampoline generated for nested function %qD"
msgstr ""
-#: builtins.c:5471 builtins.c:5484
+#: builtins.c:5563 builtins.c:5576
#, gcc-internal-format
msgid "%qD changed semantics in GCC 4.4"
msgstr ""
-#: builtins.c:5590
+#: builtins.c:5682
#, gcc-internal-format
msgid "unknown architecture specifier in memory model to builtin"
msgstr ""
-#: builtins.c:5598
+#: builtins.c:5690
#, gcc-internal-format
msgid "invalid memory model argument to builtin"
msgstr ""
-#: builtins.c:5659 builtins.c:5783
+#: builtins.c:5751 builtins.c:5875
#, gcc-internal-format
msgid ""
"failure memory model cannot be stronger than success memory model for "
"%<__atomic_compare_exchange%>"
msgstr ""
-#: builtins.c:5667 builtins.c:5791
+#: builtins.c:5759 builtins.c:5883
#, gcc-internal-format
msgid "invalid failure memory model for %<__atomic_compare_exchange%>"
msgstr ""
-#: builtins.c:5849
+#: builtins.c:5941
#, gcc-internal-format
msgid "invalid memory model for %<__atomic_load%>"
msgstr ""
-#: builtins.c:5881 builtins.c:6068
+#: builtins.c:5973 builtins.c:6166
#, gcc-internal-format
msgid "invalid memory model for %<__atomic_store%>"
msgstr ""
-#: builtins.c:6186
+#: builtins.c:6284
#, gcc-internal-format
msgid "non-constant argument 1 to __atomic_always_lock_free"
msgstr ""
-#: builtins.c:6228
+#: builtins.c:6326
#, gcc-internal-format
msgid "non-integer argument 1 to __atomic_is_lock_free"
msgstr ""
-#: builtins.c:6292
+#: builtins.c:6390
#, gcc-internal-format
msgid "__builtin_thread_pointer is not supported on this target"
msgstr ""
-#: builtins.c:6312
+#: builtins.c:6410
#, gcc-internal-format
msgid "__builtin_set_thread_pointer is not supported on this target"
msgstr ""
#. All valid uses of __builtin_va_arg_pack () are removed during
#. inlining.
-#: builtins.c:6572 expr.c:10795
+#: builtins.c:6670 expr.c:10822
#, gcc-internal-format
msgid "%Kinvalid use of %<__builtin_va_arg_pack ()%>"
msgstr ""
#. All valid uses of __builtin_va_arg_pack_len () are removed during
#. inlining.
-#: builtins.c:6578
+#: builtins.c:6676
#, gcc-internal-format
msgid "%Kinvalid use of %<__builtin_va_arg_pack_len ()%>"
msgstr ""
-#: builtins.c:6815
+#: builtins.c:6932
#, gcc-internal-format
msgid "%<__builtin_longjmp%> second argument must be 1"
msgstr ""
#. Software implementation of Pointer Bounds Checker is NYI.
#. Target support is required.
-#: builtins.c:7457
+#: builtins.c:7574
#, gcc-internal-format
msgid "Your target platform does not support -fcheck-pointer-bounds"
msgstr ""
-#: builtins.c:7776
+#: builtins.c:7893
#, gcc-internal-format
msgid "target format does not support infinity"
msgstr ""
-#: builtins.c:9394
+#: builtins.c:9509
#, gcc-internal-format
msgid "%<va_start%> used in function with fixed args"
msgstr ""
-#: builtins.c:9402
+#: builtins.c:9517
#, gcc-internal-format
msgid "wrong number of arguments to function %<va_start%>"
msgstr ""
-#: builtins.c:9417
+#: builtins.c:9532
#, gcc-internal-format
msgid "%<__builtin_next_arg%> called without an argument"
msgstr ""
-#: builtins.c:9422
+#: builtins.c:9537
#, gcc-internal-format
msgid "wrong number of arguments to function %<__builtin_next_arg%>"
msgstr ""
-#: builtins.c:9454
+#: builtins.c:9569
#, gcc-internal-format
msgid "second parameter of %<va_start%> not last named argument"
msgstr ""
-#: builtins.c:9467
+#: builtins.c:9582
#, gcc-internal-format
msgid ""
"undefined behavior when second parameter of %<va_start%> is declared with "
"%<register%> storage"
msgstr ""
-#: builtins.c:9496
+#: builtins.c:9611
#, gcc-internal-format
-msgid "%Kfirst argument of %D must be a pointer, second integer constant"
+msgid "%Kfirst argument of %qD must be a pointer, second integer constant"
msgstr ""
-#: builtins.c:9509
+#: builtins.c:9624
#, gcc-internal-format
-msgid "%Klast argument of %D is not integer constant between 0 and 3"
+msgid "%Klast argument of %qD is not integer constant between 0 and 3"
msgstr ""
-#: builtins.c:9783
+#: builtins.c:9898
#, gcc-internal-format
msgid "%Kattempt to free a non-heap object %qD"
msgstr ""
-#: builtins.c:9786
+#: builtins.c:9901
#, gcc-internal-format
msgid "%Kattempt to free a non-heap object"
msgstr ""
-#: calls.c:1374
+#: calls.c:1382
#, gcc-internal-format
msgid "%Kargument %i value %qE is negative"
msgstr ""
-#: calls.c:1392
+#: calls.c:1400
#, gcc-internal-format
msgid "%Kargument %i value is zero"
msgstr ""
-#: calls.c:1409
+#: calls.c:1417
#, gcc-internal-format
msgid "%Kargument %i value %qE exceeds maximum object size %E"
msgstr ""
-#: calls.c:1423
+#: calls.c:1431
#, gcc-internal-format
msgid "%Kargument %i range [%E, %E] is negative"
msgstr ""
-#: calls.c:1430
+#: calls.c:1438
#, gcc-internal-format
msgid "%Kargument %i range [%E, %E] exceeds maximum object size %E"
msgstr ""
-#: calls.c:1460
+#: calls.c:1468
#, gcc-internal-format
msgid "%Kproduct %<%E * %E%> of arguments %i and %i exceeds %<SIZE_MAX%>"
msgstr ""
-#: calls.c:1466
+#: calls.c:1474
#, gcc-internal-format
msgid ""
"%Kproduct %<%E * %E%> of arguments %i and %i exceeds maximum object size %E"
msgstr ""
-#: calls.c:1477 calls.c:1480
+#: calls.c:1485 calls.c:1488
#, gcc-internal-format
msgid "argument %i in the range [%E, %E]"
msgstr ""
-#: calls.c:1491
+#: calls.c:1499
#, gcc-internal-format
msgid "in a call to built-in allocation function %qD"
msgstr ""
-#: calls.c:1494
+#: calls.c:1502
#, gcc-internal-format
msgid "in a call to allocation function %qD declared here"
msgstr ""
-#: calls.c:1508
+#: calls.c:1516
#, gcc-internal-format, gfc-internal-format
msgid "cannot tail-call: %s"
msgstr ""
-#: calls.c:3071
+#: calls.c:3075
#, gcc-internal-format
msgid "function call has aggregate value"
msgstr ""
-#: calls.c:3748
+#: calls.c:3752
#, gcc-internal-format
msgid "passing too large argument on stack"
msgstr ""
-#: cfgexpand.c:1645 function.c:993 varasm.c:2179
+#: cfgexpand.c:1645 function.c:993 varasm.c:2220
#, gcc-internal-format
msgid "size of variable %q+D is too large"
msgstr ""
@@ -16759,64 +16926,64 @@ msgstr ""
msgid "cannot allocate stack for variable %q+D, naked function."
msgstr ""
-#: cfgexpand.c:2734
+#: cfgexpand.c:2740
#, gcc-internal-format
msgid "too many alternatives in %<asm%>"
msgstr ""
-#: cfgexpand.c:2741
+#: cfgexpand.c:2747
#, gcc-internal-format
msgid "operand constraints for %<asm%> differ in number of alternatives"
msgstr ""
-#: cfgexpand.c:2762
+#: cfgexpand.c:2768
#, gcc-internal-format
msgid "asm-specifier for variable %qE conflicts with asm clobber list"
msgstr ""
-#: cfgexpand.c:2836
+#: cfgexpand.c:2842
#, gcc-internal-format
msgid "more than %d operands in %<asm%>"
msgstr ""
#. ??? Diagnose during gimplification?
-#: cfgexpand.c:2889
+#: cfgexpand.c:2895
#, gcc-internal-format
msgid "unknown register name %qs in %<asm%>"
msgstr ""
#. ??? Diagnose during gimplification?
-#: cfgexpand.c:2910
+#: cfgexpand.c:2916
#, gcc-internal-format
msgid "PIC register clobbered by %qs in %<asm%>"
msgstr ""
-#: cfgexpand.c:3015
+#: cfgexpand.c:3021
#, gcc-internal-format, gfc-internal-format
msgid "output number %d not directly addressable"
msgstr ""
-#: cfgexpand.c:3096
+#: cfgexpand.c:3102
#, gcc-internal-format
msgid "asm operand %d probably doesn%'t match constraints"
msgstr ""
-#: cfgexpand.c:3279
+#: cfgexpand.c:3285
#, gcc-internal-format
msgid "asm clobber conflict with output operand"
msgstr ""
-#: cfgexpand.c:3283
+#: cfgexpand.c:3289
#, gcc-internal-format
msgid "asm clobber conflict with input operand"
msgstr ""
-#: cfgexpand.c:6240
+#: cfgexpand.c:6241
#, gcc-internal-format
msgid "stack protector not protecting local variables: variable length buffer"
msgstr ""
-#: cfgexpand.c:6244
+#: cfgexpand.c:6245
#, gcc-internal-format, gfc-internal-format
msgid ""
"stack protector not protecting function: all local arrays are less than %d "
@@ -16845,60 +17012,60 @@ msgstr ""
#: cfghooks.c:146
#, gcc-internal-format, gfc-internal-format
-msgid "verify_flow_info: Wrong count of block %i %i"
+msgid "verify_flow_info: Wrong count of block %i"
msgstr ""
-#: cfghooks.c:152
+#: cfghooks.c:151
#, gcc-internal-format, gfc-internal-format
msgid "verify_flow_info: Wrong frequency of block %i %i"
msgstr ""
-#: cfghooks.c:160
+#: cfghooks.c:159
#, gcc-internal-format, gfc-internal-format
msgid "verify_flow_info: Duplicate edge %i->%i"
msgstr ""
-#: cfghooks.c:166
+#: cfghooks.c:165
#, gcc-internal-format, gfc-internal-format
-msgid "verify_flow_info: Wrong probability of edge %i->%i %i"
+msgid "verify_flow_info: Wrong probability of edge %i->%i"
msgstr ""
-#: cfghooks.c:172
+#: cfghooks.c:171
#, gcc-internal-format, gfc-internal-format
-msgid "verify_flow_info: Wrong count of edge %i->%i %i"
+msgid "verify_flow_info: Wrong count of edge %i->%i"
msgstr ""
-#: cfghooks.c:184
+#: cfghooks.c:183
#, gcc-internal-format, gfc-internal-format
msgid "verify_flow_info: Basic block %d succ edge is corrupted"
msgstr ""
-#: cfghooks.c:198
+#: cfghooks.c:197
#, gcc-internal-format, gfc-internal-format
msgid "wrong amount of branch edges after unconditional jump %i"
msgstr ""
-#: cfghooks.c:206 cfghooks.c:217
+#: cfghooks.c:205 cfghooks.c:216
#, gcc-internal-format, gfc-internal-format
msgid "basic block %d pred edge is corrupted"
msgstr ""
-#: cfghooks.c:218
+#: cfghooks.c:217
#, gcc-internal-format, gfc-internal-format
msgid "its dest_idx should be %d, not %d"
msgstr ""
-#: cfghooks.c:247
+#: cfghooks.c:246
#, gcc-internal-format, gfc-internal-format
msgid "basic block %i edge lists are corrupted"
msgstr ""
-#: cfghooks.c:260
+#: cfghooks.c:259
#, gcc-internal-format
msgid "verify_flow_info failed"
msgstr ""
-#: cfghooks.c:310
+#: cfghooks.c:309
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support dump_bb_for_graph"
msgstr ""
@@ -16913,747 +17080,753 @@ msgstr ""
msgid "%s does not support can_remove_branch_p"
msgstr ""
-#: cfghooks.c:470
+#: cfghooks.c:468
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support redirect_edge_and_branch_force"
msgstr ""
-#: cfghooks.c:508
+#: cfghooks.c:506
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support split_block"
msgstr ""
-#: cfghooks.c:575
+#: cfghooks.c:573
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support move_block_after"
msgstr ""
-#: cfghooks.c:588
+#: cfghooks.c:586
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support delete_basic_block"
msgstr ""
-#: cfghooks.c:635
+#: cfghooks.c:633
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support split_edge"
msgstr ""
-#: cfghooks.c:710
+#: cfghooks.c:708
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support create_basic_block"
msgstr ""
-#: cfghooks.c:751
+#: cfghooks.c:749
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support can_merge_blocks_p"
msgstr ""
-#: cfghooks.c:762
+#: cfghooks.c:760
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support predict_edge"
msgstr ""
-#: cfghooks.c:771
+#: cfghooks.c:769
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support predicted_by_p"
msgstr ""
-#: cfghooks.c:785
+#: cfghooks.c:783
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support merge_blocks"
msgstr ""
-#: cfghooks.c:866
+#: cfghooks.c:864
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support make_forwarder_block"
msgstr ""
-#: cfghooks.c:1022
+#: cfghooks.c:1020
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support force_nonfallthru"
msgstr ""
-#: cfghooks.c:1056
+#: cfghooks.c:1054
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support can_duplicate_block_p"
msgstr ""
-#: cfghooks.c:1078
+#: cfghooks.c:1076
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support duplicate_block"
msgstr ""
-#: cfghooks.c:1172
+#: cfghooks.c:1167
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support block_ends_with_call_p"
msgstr ""
-#: cfghooks.c:1183
+#: cfghooks.c:1178
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support block_ends_with_condjump_p"
msgstr ""
-#: cfghooks.c:1201
+#: cfghooks.c:1196
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support flow_call_edges_add"
msgstr ""
-#: cfgloop.c:1326
+#: cfgloop.c:1324
#, gcc-internal-format
msgid "loop verification on loop tree that needs fixup"
msgstr ""
-#: cfgloop.c:1342
+#: cfgloop.c:1340
#, gcc-internal-format
msgid "corrupt loop tree root"
msgstr ""
-#: cfgloop.c:1352
+#: cfgloop.c:1350
#, gcc-internal-format, gfc-internal-format
msgid "loop with header %d marked for removal"
msgstr ""
-#: cfgloop.c:1357
+#: cfgloop.c:1355
#, gcc-internal-format, gfc-internal-format
msgid "loop with header %d not in loop tree"
msgstr ""
-#: cfgloop.c:1363
+#: cfgloop.c:1361
#, gcc-internal-format, gfc-internal-format
msgid "non-loop with header %d not marked for removal"
msgstr ""
-#: cfgloop.c:1377
+#: cfgloop.c:1375
#, gcc-internal-format, gfc-internal-format
msgid "removed loop %d in loop tree"
msgstr ""
-#: cfgloop.c:1385
+#: cfgloop.c:1383
#, gcc-internal-format, gfc-internal-format
msgid "size of loop %d should be %d, not %d"
msgstr ""
-#: cfgloop.c:1396
+#: cfgloop.c:1394
#, gcc-internal-format, gfc-internal-format
msgid "bb %d does not belong to loop %d"
msgstr ""
-#: cfgloop.c:1408
+#: cfgloop.c:1406
#, gcc-internal-format, gfc-internal-format
msgid "bb %d has father loop %d, should be loop %d"
msgstr ""
-#: cfgloop.c:1424
+#: cfgloop.c:1422
#, gcc-internal-format
msgid "loop %d%'s header is not a loop header"
msgstr ""
-#: cfgloop.c:1430
+#: cfgloop.c:1428
#, gcc-internal-format
msgid "loop %d%'s header does not have exactly 2 entries"
msgstr ""
-#: cfgloop.c:1437
+#: cfgloop.c:1435
#, gcc-internal-format
msgid "loop %d%'s latch does not have an edge to its header"
msgstr ""
-#: cfgloop.c:1442
+#: cfgloop.c:1440
#, gcc-internal-format
msgid "loop %d%'s latch is not dominated by its header"
msgstr ""
-#: cfgloop.c:1450
+#: cfgloop.c:1448
#, gcc-internal-format
msgid "loop %d%'s latch does not have exactly 1 successor"
msgstr ""
-#: cfgloop.c:1455
+#: cfgloop.c:1453
#, gcc-internal-format
msgid "loop %d%'s latch does not have header as successor"
msgstr ""
-#: cfgloop.c:1460
+#: cfgloop.c:1458
#, gcc-internal-format
msgid "loop %d%'s latch does not belong directly to it"
msgstr ""
-#: cfgloop.c:1466
+#: cfgloop.c:1464
#, gcc-internal-format
msgid "loop %d%'s header does not belong directly to it"
msgstr ""
-#: cfgloop.c:1472
+#: cfgloop.c:1470
#, gcc-internal-format
msgid "loop %d%'s latch is marked as part of irreducible region"
msgstr ""
-#: cfgloop.c:1505
+#: cfgloop.c:1503
#, gcc-internal-format, gfc-internal-format
msgid "basic block %d should be marked irreducible"
msgstr ""
-#: cfgloop.c:1511
+#: cfgloop.c:1509
#, gcc-internal-format, gfc-internal-format
msgid "basic block %d should not be marked irreducible"
msgstr ""
-#: cfgloop.c:1519
+#: cfgloop.c:1517
#, gcc-internal-format, gfc-internal-format
msgid "edge from %d to %d should be marked irreducible"
msgstr ""
-#: cfgloop.c:1526
+#: cfgloop.c:1524
#, gcc-internal-format, gfc-internal-format
msgid "edge from %d to %d should not be marked irreducible"
msgstr ""
-#: cfgloop.c:1540
+#: cfgloop.c:1538
#, gcc-internal-format, gfc-internal-format
msgid "corrupted head of the exits list of loop %d"
msgstr ""
-#: cfgloop.c:1558
+#: cfgloop.c:1556
#, gcc-internal-format, gfc-internal-format
msgid "corrupted exits list of loop %d"
msgstr ""
-#: cfgloop.c:1567
+#: cfgloop.c:1565
#, gcc-internal-format, gfc-internal-format
msgid "nonempty exits list of loop %d, but exits are not recorded"
msgstr ""
-#: cfgloop.c:1594
+#: cfgloop.c:1592
#, gcc-internal-format, gfc-internal-format
msgid "exit %d->%d not recorded"
msgstr ""
-#: cfgloop.c:1617
+#: cfgloop.c:1615
#, gcc-internal-format, gfc-internal-format
msgid "wrong list of exited loops for edge %d->%d"
msgstr ""
-#: cfgloop.c:1626
+#: cfgloop.c:1624
#, gcc-internal-format
msgid "too many loop exits recorded"
msgstr ""
-#: cfgloop.c:1637
+#: cfgloop.c:1635
#, gcc-internal-format, gfc-internal-format
msgid "%d exits recorded for loop %d (having %d exits)"
msgstr ""
-#: cfgrtl.c:2333
+#: cfgrtl.c:2335
#, gcc-internal-format, gfc-internal-format
-msgid "non-cold basic block %d dominated by a block in the cold partition (%d)"
+msgid ""
+"non-cold basic block %d reachable only by paths crossing the cold partition"
msgstr ""
-#: cfgrtl.c:2410
+#: cfgrtl.c:2407
#, gcc-internal-format, gfc-internal-format
msgid "multiple hot/cold transitions found (bb %i)"
msgstr ""
-#: cfgrtl.c:2418
+#: cfgrtl.c:2415
#, gcc-internal-format
msgid "partition found but function partition flag not set"
msgstr ""
-#: cfgrtl.c:2456
+#: cfgrtl.c:2454
+#, gcc-internal-format
+msgid "verify_flow_info: REG_BR_PROB is set but cfg probability is not"
+msgstr ""
+
+#: cfgrtl.c:2463
#, gcc-internal-format, gfc-internal-format
msgid "verify_flow_info: REG_BR_PROB does not match cfg %i %i"
msgstr ""
-#: cfgrtl.c:2477
+#: cfgrtl.c:2485
#, gcc-internal-format
msgid "EDGE_CROSSING incorrectly set across same section"
msgstr ""
-#: cfgrtl.c:2482
+#: cfgrtl.c:2490
#, gcc-internal-format, gfc-internal-format
msgid "fallthru edge crosses section boundary in bb %i"
msgstr ""
-#: cfgrtl.c:2488
+#: cfgrtl.c:2496
#, gcc-internal-format, gfc-internal-format
msgid "EH edge crosses section boundary in bb %i"
msgstr ""
-#: cfgrtl.c:2494
+#: cfgrtl.c:2502
#, gcc-internal-format, gfc-internal-format
msgid "No region crossing jump at section boundary in bb %i"
msgstr ""
-#: cfgrtl.c:2501
+#: cfgrtl.c:2509
#, gcc-internal-format
msgid "EDGE_CROSSING missing across section boundary"
msgstr ""
-#: cfgrtl.c:2531
+#: cfgrtl.c:2539
#, gcc-internal-format, gfc-internal-format
msgid "Region crossing jump across same section in bb %i"
msgstr ""
-#: cfgrtl.c:2538
+#: cfgrtl.c:2546
#, gcc-internal-format, gfc-internal-format
msgid "missing REG_EH_REGION note at the end of bb %i"
msgstr ""
-#: cfgrtl.c:2543
+#: cfgrtl.c:2551
#, gcc-internal-format, gfc-internal-format
msgid "too many exception handling edges in bb %i"
msgstr ""
-#: cfgrtl.c:2551
+#: cfgrtl.c:2559
#, gcc-internal-format, gfc-internal-format
msgid "too many outgoing branch edges from bb %i"
msgstr ""
-#: cfgrtl.c:2556
+#: cfgrtl.c:2564
#, gcc-internal-format, gfc-internal-format
msgid "fallthru edge after unconditional jump in bb %i"
msgstr ""
-#: cfgrtl.c:2561
+#: cfgrtl.c:2569
#, gcc-internal-format, gfc-internal-format
msgid "wrong number of branch edges after unconditional jump in bb %i"
msgstr ""
-#: cfgrtl.c:2568
+#: cfgrtl.c:2576
#, gcc-internal-format, gfc-internal-format
msgid "wrong amount of branch edges after conditional jump in bb %i"
msgstr ""
-#: cfgrtl.c:2574
+#: cfgrtl.c:2582
#, gcc-internal-format, gfc-internal-format
msgid "abnormal call edges for non-call insn in bb %i"
msgstr ""
-#: cfgrtl.c:2579
+#: cfgrtl.c:2587
#, gcc-internal-format, gfc-internal-format
msgid "sibcall edges for non-call insn in bb %i"
msgstr ""
-#: cfgrtl.c:2589
+#: cfgrtl.c:2597
#, gcc-internal-format, gfc-internal-format
msgid "abnormal edges for no purpose in bb %i"
msgstr ""
-#: cfgrtl.c:2627 cfgrtl.c:2637
+#: cfgrtl.c:2635 cfgrtl.c:2645
#, gcc-internal-format, gfc-internal-format
msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d"
msgstr ""
-#: cfgrtl.c:2650
+#: cfgrtl.c:2658
#, gcc-internal-format, gfc-internal-format
msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d"
msgstr ""
-#: cfgrtl.c:2660
+#: cfgrtl.c:2668
#, gcc-internal-format, gfc-internal-format
msgid "in basic block %d:"
msgstr ""
-#: cfgrtl.c:2686
+#: cfgrtl.c:2694
#, gcc-internal-format, gfc-internal-format
msgid "BB_RTL flag not set for block %d"
msgstr ""
-#: cfgrtl.c:2693
+#: cfgrtl.c:2701
#, gcc-internal-format, gfc-internal-format
msgid "insn %d basic block pointer is %d, should be %d"
msgstr ""
-#: cfgrtl.c:2704
+#: cfgrtl.c:2712
#, gcc-internal-format, gfc-internal-format
msgid "insn %d in header of bb %d has non-NULL basic block"
msgstr ""
-#: cfgrtl.c:2712
+#: cfgrtl.c:2720
#, gcc-internal-format, gfc-internal-format
msgid "insn %d in footer of bb %d has non-NULL basic block"
msgstr ""
-#: cfgrtl.c:2785 cfgrtl.c:2833
+#: cfgrtl.c:2793 cfgrtl.c:2841
#, gcc-internal-format, gfc-internal-format
msgid "insn %d outside of basic blocks has non-NULL bb field"
msgstr ""
-#: cfgrtl.c:2793
+#: cfgrtl.c:2801
#, gcc-internal-format, gfc-internal-format
msgid "end insn %d for block %d not found in the insn stream"
msgstr ""
-#: cfgrtl.c:2806
+#: cfgrtl.c:2814
#, gcc-internal-format, gfc-internal-format
msgid "insn %d is in multiple basic blocks (%d and %d)"
msgstr ""
-#: cfgrtl.c:2818
+#: cfgrtl.c:2826
#, gcc-internal-format, gfc-internal-format
msgid "head insn %d for block %d not found in the insn stream"
msgstr ""
-#: cfgrtl.c:2866
+#: cfgrtl.c:2874
#, gcc-internal-format, gfc-internal-format
msgid "missing barrier after block %i"
msgstr ""
-#: cfgrtl.c:2882
+#: cfgrtl.c:2890
#, gcc-internal-format, gfc-internal-format
msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i"
msgstr ""
-#: cfgrtl.c:2891
+#: cfgrtl.c:2899
#, gcc-internal-format, gfc-internal-format
msgid "verify_flow_info: Incorrect fallthru %i->%i"
msgstr ""
-#: cfgrtl.c:2927
+#: cfgrtl.c:2935
#, gcc-internal-format
msgid "basic blocks not laid down consecutively"
msgstr ""
-#: cfgrtl.c:2965
+#: cfgrtl.c:2973
#, gcc-internal-format, gfc-internal-format
msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)"
msgstr ""
-#: cgraph.c:3001
+#: cgraph.c:3028
#, gcc-internal-format
msgid "caller edge count is negative"
msgstr ""
-#: cgraph.c:3006
+#: cgraph.c:3033
#, gcc-internal-format
msgid "caller edge frequency is negative"
msgstr ""
-#: cgraph.c:3011
+#: cgraph.c:3038
#, gcc-internal-format
msgid "caller edge frequency is too large"
msgstr ""
-#: cgraph.c:3095
+#: cgraph.c:3122
#, gcc-internal-format, gfc-internal-format
msgid "aux field set for edge %s->%s"
msgstr ""
-#: cgraph.c:3102
+#: cgraph.c:3129
#, gcc-internal-format
msgid "execution count is negative"
msgstr ""
-#: cgraph.c:3107
+#: cgraph.c:3134
#, gcc-internal-format
msgid "inline clone in same comdat group list"
msgstr ""
-#: cgraph.c:3112
+#: cgraph.c:3139
#, gcc-internal-format
msgid "local symbols must be defined"
msgstr ""
-#: cgraph.c:3117
+#: cgraph.c:3144
#, gcc-internal-format
msgid "externally visible inline clone"
msgstr ""
-#: cgraph.c:3122
+#: cgraph.c:3149
#, gcc-internal-format
msgid "inline clone with address taken"
msgstr ""
-#: cgraph.c:3127
+#: cgraph.c:3154
#, gcc-internal-format
msgid "inline clone is forced to output"
msgstr ""
-#: cgraph.c:3134
+#: cgraph.c:3161
#, gcc-internal-format, gfc-internal-format
msgid "aux field set for indirect edge from %s"
msgstr ""
-#: cgraph.c:3141
+#: cgraph.c:3168
#, 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:3156
+#: cgraph.c:3183
#, gcc-internal-format, gfc-internal-format
msgid "comdat-local function called by %s outside its comdat"
msgstr ""
-#: cgraph.c:3166
+#: cgraph.c:3193
#, gcc-internal-format
msgid "inlined_to pointer is wrong"
msgstr ""
-#: cgraph.c:3171
+#: cgraph.c:3198
#, gcc-internal-format
msgid "multiple inline callers"
msgstr ""
-#: cgraph.c:3178
+#: cgraph.c:3205
#, gcc-internal-format
msgid "inlined_to pointer set for noninline callers"
msgstr ""
-#: cgraph.c:3198
+#: cgraph.c:3225
#, gcc-internal-format, gfc-internal-format
msgid "caller edge frequency %i does not match BB frequency %i"
msgstr ""
-#: cgraph.c:3216
+#: cgraph.c:3243
#, gcc-internal-format, gfc-internal-format
msgid "indirect call frequency %i does not match BB frequency %i"
msgstr ""
-#: cgraph.c:3225
+#: cgraph.c:3252
#, gcc-internal-format
msgid "inlined_to pointer is set but no predecessors found"
msgstr ""
-#: cgraph.c:3230
+#: cgraph.c:3257
#, gcc-internal-format
msgid "inlined_to pointer refers to itself"
msgstr ""
-#: cgraph.c:3242
+#: cgraph.c:3269
#, gcc-internal-format
msgid "cgraph_node has wrong clone_of"
msgstr ""
-#: cgraph.c:3254
+#: cgraph.c:3281
#, gcc-internal-format
msgid "cgraph_node has wrong clone list"
msgstr ""
-#: cgraph.c:3260
+#: cgraph.c:3287
#, gcc-internal-format
msgid "cgraph_node is in clone list but it is not clone"
msgstr ""
-#: cgraph.c:3265
+#: cgraph.c:3292
#, gcc-internal-format
msgid "cgraph_node has wrong prev_clone pointer"
msgstr ""
-#: cgraph.c:3270
+#: cgraph.c:3297
#, gcc-internal-format
msgid "double linked list of clones corrupted"
msgstr ""
-#: cgraph.c:3282
+#: cgraph.c:3309
#, gcc-internal-format
msgid "Alias has call edges"
msgstr ""
-#: cgraph.c:3290
+#: cgraph.c:3317
#, gcc-internal-format
msgid "Alias has non-alias reference"
msgstr ""
-#: cgraph.c:3295
+#: cgraph.c:3322
#, gcc-internal-format
msgid "Alias has more than one alias reference"
msgstr ""
-#: cgraph.c:3302
+#: cgraph.c:3329
#, gcc-internal-format
msgid "Analyzed alias has no reference"
msgstr ""
-#: cgraph.c:3311
+#: cgraph.c:3338
#, gcc-internal-format
msgid "Instrumentation clone does not reference original node"
msgstr ""
-#: cgraph.c:3318
+#: cgraph.c:3345
#, gcc-internal-format
msgid "Not instrumented node has non-NULL original declaration"
msgstr ""
-#: cgraph.c:3328
+#: cgraph.c:3355
#, gcc-internal-format
msgid "Instrumented node has wrong original declaration"
msgstr ""
-#: cgraph.c:3346
+#: cgraph.c:3373
#, gcc-internal-format
msgid "Node has more than one chkp reference"
msgstr ""
-#: cgraph.c:3351
+#: cgraph.c:3378
#, gcc-internal-format
msgid "Wrong node is referenced with chkp reference"
msgstr ""
-#: cgraph.c:3359
+#: cgraph.c:3386
#, gcc-internal-format
msgid "Analyzed node has no reference to instrumented version"
msgstr ""
-#: cgraph.c:3373
+#: cgraph.c:3400
#, gcc-internal-format
msgid "Alias chain for instrumented node is broken"
msgstr ""
-#: cgraph.c:3382
+#: cgraph.c:3409
#, gcc-internal-format
msgid "No edge out of thunk node"
msgstr ""
-#: cgraph.c:3387
+#: cgraph.c:3414
#, gcc-internal-format
msgid "More than one edge out of thunk node"
msgstr ""
-#: cgraph.c:3392
+#: cgraph.c:3419
#, gcc-internal-format
msgid "Thunk is not supposed to have body"
msgstr ""
-#: cgraph.c:3398
+#: cgraph.c:3425
#, gcc-internal-format
msgid "Instrumentation thunk has wrong edge callee"
msgstr ""
-#: cgraph.c:3434
+#: cgraph.c:3461
#, gcc-internal-format
msgid "shared call_stmt:"
msgstr ""
-#: cgraph.c:3442
+#: cgraph.c:3469
#, gcc-internal-format
msgid "edge points to wrong declaration:"
msgstr ""
-#: cgraph.c:3451
+#: cgraph.c:3478
#, gcc-internal-format
msgid ""
"an indirect edge with unknown callee corresponding to a call_stmt with a "
"known declaration:"
msgstr ""
-#: cgraph.c:3461
+#: cgraph.c:3488
#, gcc-internal-format
msgid "missing callgraph edge for call stmt:"
msgstr ""
-#: cgraph.c:3471
+#: cgraph.c:3498
#, gcc-internal-format
msgid "reference to dead statement"
msgstr ""
-#: cgraph.c:3484
+#: cgraph.c:3511
#, gcc-internal-format, gfc-internal-format
msgid "edge %s->%s has no corresponding call_stmt"
msgstr ""
-#: cgraph.c:3496
+#: cgraph.c:3523
#, gcc-internal-format, gfc-internal-format
msgid "an indirect edge from %s has no corresponding call_stmt"
msgstr ""
-#: cgraph.c:3507
+#: cgraph.c:3534
#, gcc-internal-format
msgid "verify_cgraph_node failed"
msgstr ""
-#: cgraph.c:3614 varpool.c:304
+#: cgraph.c:3641 varpool.c:304
#, gcc-internal-format, gfc-internal-format
msgid "%s: section %s is missing"
msgstr ""
-#: cgraphunit.c:712
+#: cgraphunit.c:723
#, gcc-internal-format
msgid "%<weakref%> attribute should be accompanied with an %<alias%> attribute"
msgstr ""
-#: cgraphunit.c:764 cgraphunit.c:800
+#: cgraphunit.c:775 cgraphunit.c:811
#, gcc-internal-format
msgid "%<externally_visible%> attribute have effect only on public objects"
msgstr ""
-#: cgraphunit.c:771
+#: cgraphunit.c:782
#, gcc-internal-format
msgid "%<weakref%> attribute ignored because function is defined"
msgstr ""
-#: cgraphunit.c:783
+#: cgraphunit.c:794
#, gcc-internal-format
msgid "always_inline function might not be inlinable"
msgstr ""
-#: cgraphunit.c:808
+#: cgraphunit.c:819
#, gcc-internal-format
msgid "%<weakref%> attribute ignored because variable is initialized"
msgstr ""
#. include_self=
-#: cgraphunit.c:968 c/c-decl.c:11131
+#: cgraphunit.c:979 c/c-decl.c:11117
#, gcc-internal-format
msgid "%q+F used but never defined"
msgstr ""
-#: cgraphunit.c:970 c/c-decl.c:11140
+#: cgraphunit.c:981 c/c-decl.c:11126
#, gcc-internal-format
msgid "%q+F declared %<static%> but never defined"
msgstr ""
-#: cgraphunit.c:1014
+#: cgraphunit.c:1025
#, gcc-internal-format
msgid "%qD defined but not used"
msgstr ""
-#: cgraphunit.c:1319 c-family/c-pragma.c:337
+#: cgraphunit.c:1330 c-family/c-pragma.c:337
#, gcc-internal-format
msgid "%q+D aliased to undefined symbol %qE"
msgstr ""
-#: cgraphunit.c:1335
+#: cgraphunit.c:1346
#, gcc-internal-format
msgid "%q+D aliased to external symbol %qE"
msgstr ""
-#: cgraphunit.c:1356
+#: cgraphunit.c:1367
#, gcc-internal-format
msgid "%q+D alias in between function and variable is not supported"
msgstr ""
-#: cgraphunit.c:1358
+#: cgraphunit.c:1369
#, gcc-internal-format
msgid "%q+D aliased declaration"
msgstr ""
-#: cgraphunit.c:1429
+#: cgraphunit.c:1440
#, gcc-internal-format
msgid "failed to reclaim unneeded function"
msgstr ""
-#: cgraphunit.c:1457
+#: cgraphunit.c:1468
#, gcc-internal-format
msgid "failed to reclaim unneeded function in same comdat group"
msgstr ""
-#: cgraphunit.c:1701
+#: cgraphunit.c:1712
#, gcc-internal-format
msgid "generic thunk code fails for method %qD which uses %<...%>"
msgstr ""
-#: cgraphunit.c:2068
+#: cgraphunit.c:2078
#, gcc-internal-format
msgid "size of return value of %q+D is %u bytes"
msgstr ""
-#: cgraphunit.c:2071
+#: cgraphunit.c:2081
#, gcc-internal-format
msgid "size of return value of %q+D is larger than %wd bytes"
msgstr ""
-#: cgraphunit.c:2566
+#: cgraphunit.c:2570
#, gcc-internal-format
msgid "nodes with unreleased memory found"
msgstr ""
@@ -17693,12 +17866,12 @@ msgstr ""
msgid "cannot find '%s'"
msgstr ""
-#: collect-utils.c:183 collect2.c:2361 collect2.c:2560 gcc.c:3080 gcc.c:6787
+#: collect-utils.c:183 collect2.c:2361 collect2.c:2560 gcc.c:3083 gcc.c:6833
#, gcc-internal-format
msgid "pex_init failed: %m"
msgstr ""
-#: collect-utils.c:192 collect2.c:2370 collect2.c:2568 gcc.c:8428
+#: collect-utils.c:192 collect2.c:2370 collect2.c:2568 gcc.c:8474
#, gcc-internal-format
msgid "%s: %m"
msgstr ""
@@ -17708,7 +17881,7 @@ msgstr ""
msgid "COLLECT_LTO_WRAPPER must be set"
msgstr ""
-#: collect2.c:966 gcc.c:7313 lto-wrapper.c:1479
+#: collect2.c:966 gcc.c:7359 lto-wrapper.c:1499
#: config/i386/intelmic-mkoffload.c:554 config/nvptx/mkoffload.c:403
#, gcc-internal-format
msgid "atexit failed"
@@ -17719,7 +17892,7 @@ msgstr ""
msgid "no arguments"
msgstr ""
-#: collect2.c:1303 opts.c:904
+#: collect2.c:1303 opts.c:890
#, gcc-internal-format
msgid "LTO support has not been enabled in this configuration"
msgstr ""
@@ -17799,60 +17972,60 @@ msgstr ""
msgid "library lib%s not found"
msgstr ""
-#: convert.c:93
+#: convert.c:94
#, gcc-internal-format
msgid "cannot convert to a pointer type"
msgstr ""
-#: convert.c:389
+#: convert.c:390
#, gcc-internal-format
msgid "pointer value used where a floating point value was expected"
msgstr ""
-#: convert.c:393
+#: convert.c:394
#, gcc-internal-format
msgid "aggregate value used where a float was expected"
msgstr ""
-#: convert.c:516
+#: convert.c:517
#, gcc-internal-format
msgid "conversion to incomplete type"
msgstr ""
-#: convert.c:965
+#: convert.c:966
#, gcc-internal-format
msgid ""
"can%'t convert a vector of type %qT to type %qT which has different size"
msgstr ""
-#: convert.c:973
+#: convert.c:974
#, gcc-internal-format
msgid "aggregate value used where an integer was expected"
msgstr ""
-#: convert.c:1058
+#: convert.c:1059
#, gcc-internal-format
msgid "pointer value used where a complex was expected"
msgstr ""
-#: convert.c:1062
+#: convert.c:1063
#, gcc-internal-format
msgid "aggregate value used where a complex was expected"
msgstr ""
-#: convert.c:1096
+#: convert.c:1097
#, gcc-internal-format
msgid ""
"can%'t convert a value of type %qT to vector type %qT which has different "
"size"
msgstr ""
-#: convert.c:1104
+#: convert.c:1105
#, gcc-internal-format
msgid "can%'t convert value to a vector"
msgstr ""
-#: convert.c:1143
+#: convert.c:1144
#, gcc-internal-format
msgid "aggregate value used where a fixed-point was expected"
msgstr ""
@@ -17956,22 +18129,22 @@ msgstr ""
msgid " %s"
msgstr ""
-#: dbxout.c:3336
+#: dbxout.c:3317
#, gcc-internal-format
msgid "common symbol debug info is not structured as symbol+offset"
msgstr ""
-#: dbxout.c:3808
+#: dbxout.c:3789
#, gcc-internal-format
msgid "global destructors not supported on this target"
msgstr ""
-#: dbxout.c:3825
+#: dbxout.c:3806
#, gcc-internal-format
msgid "global constructors not supported on this target"
msgstr ""
-#: diagnostic.c:1431
+#: diagnostic.c:1476
#, gcc-internal-format, gfc-internal-format
msgid "in %s, at %s:%d"
msgstr ""
@@ -17986,39 +18159,39 @@ msgstr ""
msgid "dominator of %d should be %d, not %d"
msgstr ""
-#: dumpfile.c:321 dumpfile.c:485 dumpfile.c:578
+#: dumpfile.c:336 dumpfile.c:503 dumpfile.c:596
#, gcc-internal-format
msgid "could not open dump file %qs: %m"
msgstr ""
-#: dumpfile.c:820
+#: dumpfile.c:838
#, gcc-internal-format
msgid "ignoring unknown option %q.*s in %<-fdump-%s%>"
msgstr ""
-#: dumpfile.c:928
+#: dumpfile.c:946
#, gcc-internal-format
msgid "unknown option %q.*s in %<-fopt-info-%s%>"
msgstr ""
-#: dumpfile.c:960
+#: dumpfile.c:978
#, gcc-internal-format
msgid "ignoring possibly conflicting option %<-fopt-info-%s%>"
msgstr ""
-#: dwarf2out.c:1093
+#: dwarf2out.c:1097
#, gcc-internal-format
msgid ""
"multiple EH personalities are supported only with assemblers supporting ."
"cfi_personality directive"
msgstr ""
-#: dwarf2out.c:13685
+#: dwarf2out.c:13679
#, gcc-internal-format, gfc-internal-format
msgid "non-delegitimized UNSPEC %s (%d) found in variable location"
msgstr ""
-#: dwarf2out.c:27308
+#: dwarf2out.c:27235
#, gcc-internal-format
msgid "-feliminate-dwarf2-dups is broken for C++, ignoring"
msgstr ""
@@ -18038,7 +18211,7 @@ msgstr ""
msgid "internal consistency failure"
msgstr ""
-#: emit-rtl.c:3883
+#: emit-rtl.c:3887
#, gcc-internal-format
msgid "ICE: emit_insn used where emit_jump_insn needed:\n"
msgstr ""
@@ -18048,62 +18221,62 @@ msgstr ""
msgid "abort in %s, at %s:%d"
msgstr ""
-#: except.c:2124
+#: except.c:2119
#, gcc-internal-format
msgid "argument of %<__builtin_eh_return_regno%> must be constant"
msgstr ""
-#: except.c:2259
+#: except.c:2254
#, gcc-internal-format
msgid "__builtin_eh_return not supported on this target"
msgstr ""
-#: except.c:3315 except.c:3340
+#: except.c:3367 except.c:3392
#, gcc-internal-format, gfc-internal-format
msgid "region_array is corrupted for region %i"
msgstr ""
-#: except.c:3328 except.c:3359
+#: except.c:3380 except.c:3411
#, gcc-internal-format, gfc-internal-format
msgid "lp_array is corrupted for lp %i"
msgstr ""
-#: except.c:3345
+#: except.c:3397
#, gcc-internal-format, gfc-internal-format
msgid "outer block of region %i is wrong"
msgstr ""
-#: except.c:3350
+#: except.c:3402
#, gcc-internal-format, gfc-internal-format
msgid "negative nesting depth of region %i"
msgstr ""
-#: except.c:3364
+#: except.c:3416
#, gcc-internal-format, gfc-internal-format
msgid "region of lp %i is wrong"
msgstr ""
-#: except.c:3391
+#: except.c:3443
#, gcc-internal-format, gfc-internal-format
msgid "tree list ends on depth %i"
msgstr ""
-#: except.c:3396
+#: except.c:3448
#, gcc-internal-format
msgid "region_array does not match region_tree"
msgstr ""
-#: except.c:3401
+#: except.c:3453
#, gcc-internal-format
msgid "lp_array does not match region_tree"
msgstr ""
-#: except.c:3408
+#: except.c:3460
#, gcc-internal-format
msgid "verify_eh_tree failed"
msgstr ""
-#: explow.c:1476
+#: explow.c:1477
#, gcc-internal-format
msgid "stack limits not supported on this target"
msgstr ""
@@ -18130,12 +18303,12 @@ msgid ""
"truncated into %wu-bit"
msgstr ""
-#: expr.c:10802
+#: expr.c:10829
#, gcc-internal-format
msgid "%Kcall to %qs declared with attribute error: %s"
msgstr ""
-#: expr.c:10809
+#: expr.c:10836
#, gcc-internal-format
msgid "%Kcall to %qs declared with attribute warning: %s"
msgstr ""
@@ -18150,12 +18323,12 @@ msgstr ""
msgid "the frame size of %wd bytes is larger than %wd bytes"
msgstr ""
-#: final.c:4635 toplev.c:1404 tree-cfgcleanup.c:1148
+#: final.c:4641 toplev.c:1434 tree-cfgcleanup.c:1228
#, gcc-internal-format
msgid "could not open final insn dump file %qs: %m"
msgstr ""
-#: final.c:4688 tree-cfgcleanup.c:1164
+#: final.c:4694 tree-cfgcleanup.c:1244
#, gcc-internal-format
msgid "could not close final insn dump file %qs: %m"
msgstr ""
@@ -18165,45 +18338,45 @@ msgstr ""
msgid "large fixed-point constant implicitly truncated to fixed-point type"
msgstr ""
-#: fold-const.c:4068 fold-const.c:4078
+#: fold-const.c:4075 fold-const.c:4085
#, gcc-internal-format, gfc-internal-format
msgid "comparison is always %d due to width of bit-field"
msgstr ""
-#: fold-const.c:5343 tree-ssa-reassoc.c:2343 tree-ssa-reassoc.c:2974
+#: fold-const.c:5393 tree-ssa-reassoc.c:2363 tree-ssa-reassoc.c:3011
#, gcc-internal-format
msgid "assuming signed overflow does not occur when simplifying range test"
msgstr ""
-#: fold-const.c:5792 fold-const.c:5806
+#: fold-const.c:5842 fold-const.c:5856
#, gcc-internal-format, gfc-internal-format
msgid "comparison is always %d"
msgstr ""
-#: fold-const.c:5943
+#: fold-const.c:5993
#, gcc-internal-format
msgid "%<or%> of unmatched not-equal tests is always 1"
msgstr ""
-#: fold-const.c:5948
+#: fold-const.c:5998
#, gcc-internal-format
msgid "%<and%> of mutually exclusive equal-tests is always 0"
msgstr ""
-#: fold-const.c:8203
+#: fold-const.c:8217
#, gcc-internal-format
msgid ""
"assuming signed overflow does not occur when reducing constant in comparison"
msgstr ""
-#: fold-const.c:8584
+#: fold-const.c:8589
#, gcc-internal-format
msgid ""
"assuming signed overflow does not occur when combining constants around a "
"comparison"
msgstr ""
-#: fold-const.c:12048
+#: fold-const.c:12036
#, gcc-internal-format
msgid "fold check: original tree changed by fold"
msgstr ""
@@ -18213,162 +18386,167 @@ msgstr ""
msgid "total size of local objects too large"
msgstr ""
-#: function.c:1765 gimplify.c:6111
+#: function.c:1765 gimplify.c:6157
#, gcc-internal-format
msgid "impossible constraint in %<asm%>"
msgstr ""
-#: function.c:4390
+#: function.c:4381
#, gcc-internal-format
msgid "variable %q+D might be clobbered by %<longjmp%> or %<vfork%>"
msgstr ""
-#: function.c:4411
+#: function.c:4402
#, gcc-internal-format
msgid "argument %q+D might be clobbered by %<longjmp%> or %<vfork%>"
msgstr ""
-#: function.c:5056
+#: function.c:5047
#, gcc-internal-format
msgid "function returns an aggregate"
msgstr ""
-#: gcc.c:2119 gcc.c:2140
+#: gcc.c:2122 gcc.c:2143
#, gcc-internal-format, gfc-internal-format
msgid "specs %%include syntax malformed after %ld characters"
msgstr ""
-#: gcc.c:2167 gcc.c:2177 gcc.c:2188 gcc.c:2199
+#: gcc.c:2170 gcc.c:2180 gcc.c:2191 gcc.c:2202
#, gcc-internal-format, gfc-internal-format
msgid "specs %%rename syntax malformed after %ld characters"
msgstr ""
-#: gcc.c:2210
+#: gcc.c:2213
#, gcc-internal-format, gfc-internal-format
msgid "specs %s spec was not found to be renamed"
msgstr ""
-#: gcc.c:2218
+#: gcc.c:2221
#, gcc-internal-format
msgid "%s: attempt to rename spec %qs to already defined spec %qs"
msgstr ""
-#: gcc.c:2240
+#: gcc.c:2243
#, gcc-internal-format, gfc-internal-format
msgid "specs unknown %% command after %ld characters"
msgstr ""
-#: gcc.c:2252 gcc.c:2266
+#: gcc.c:2255 gcc.c:2269
#, gcc-internal-format, gfc-internal-format
msgid "specs file malformed after %ld characters"
msgstr ""
-#: gcc.c:2321
+#: gcc.c:2324
#, gcc-internal-format
msgid "spec file has no spec for linking"
msgstr ""
-#: gcc.c:2869
+#: gcc.c:2872
#, gcc-internal-format
msgid "system path %qs is not absolute"
msgstr ""
-#: gcc.c:2957
+#: gcc.c:2960
#, gcc-internal-format
msgid "-pipe not supported"
msgstr ""
-#: gcc.c:3119
+#: gcc.c:3122
#, gcc-internal-format
msgid "failed to get exit status: %m"
msgstr ""
-#: gcc.c:3125
+#: gcc.c:3128
#, gcc-internal-format
msgid "failed to get process times: %m"
msgstr ""
-#: gcc.c:3151
+#: gcc.c:3154
#, gcc-internal-format, gfc-internal-format
msgid "%s (program %s)"
msgstr ""
-#: gcc.c:3628 opts-common.c:1195 opts-common.c:1219 opts-global.c:136
+#: gcc.c:3631 opts-common.c:1207 opts-common.c:1231 opts-global.c:136
#, gcc-internal-format
msgid "unrecognized command line option %qs"
msgstr ""
-#: gcc.c:3693
+#: gcc.c:3696
#, gcc-internal-format, gfc-internal-format
msgid "GCC is not configured to support %s as offload target"
msgstr ""
-#: gcc.c:3996
+#: gcc.c:3999
#, gcc-internal-format
msgid "%qs is an unknown -save-temps option"
msgstr ""
-#: gcc.c:4471 toplev.c:893
+#: gcc.c:4474 toplev.c:895
#, gcc-internal-format
msgid "input file %qs is the same as output file"
msgstr ""
-#: gcc.c:4498
+#: gcc.c:4479
+#, gcc-internal-format
+msgid "output filename may not be empty"
+msgstr ""
+
+#: gcc.c:4504
#, gcc-internal-format
msgid "-pipe ignored because -save-temps specified"
msgstr ""
-#: gcc.c:4586
+#: gcc.c:4592
#, gcc-internal-format
msgid "%<-x %s%> after last input file has no effect"
msgstr ""
-#: gcc.c:4768
+#: gcc.c:4774
#, gcc-internal-format
msgid "unable to locate default linker script %qs in the library search paths"
msgstr ""
-#: gcc.c:4973
+#: gcc.c:4979
#, gcc-internal-format
msgid "switch %qs does not start with %<-%>"
msgstr ""
-#: gcc.c:4977
+#: gcc.c:4983
#, gcc-internal-format
msgid "spec-generated switch is just %<-%>"
msgstr ""
-#: gcc.c:5070
+#: gcc.c:5076
#, gcc-internal-format, gfc-internal-format
msgid "could not open temporary response file %s"
msgstr ""
-#: gcc.c:5077
+#: gcc.c:5083
#, gcc-internal-format, gfc-internal-format
msgid "could not write to temporary response file %s"
msgstr ""
-#: gcc.c:5083
+#: gcc.c:5089
#, gcc-internal-format, gfc-internal-format
msgid "could not close temporary response file %s"
msgstr ""
-#: gcc.c:5206
+#: gcc.c:5212
#, gcc-internal-format
msgid "spec %qs invalid"
msgstr ""
-#: gcc.c:5356
+#: gcc.c:5362
#, gcc-internal-format
msgid "spec %qs has invalid %<%%0%c%>"
msgstr ""
-#: gcc.c:5677
+#: gcc.c:5683
#, gcc-internal-format
msgid "spec %qs has invalid %<%%W%c%>"
msgstr ""
-#: gcc.c:5700
+#: gcc.c:5706
#, gcc-internal-format
msgid "spec %qs has invalid %<%%x%c%>"
msgstr ""
@@ -18376,228 +18554,233 @@ 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:5911
+#: gcc.c:5917
#, gcc-internal-format
msgid "spec failure: %<%%*%> has not been initialized by pattern match"
msgstr ""
-#: gcc.c:5954
+#: gcc.c:5960
#, gcc-internal-format
msgid "spec failure: unrecognized spec option %qc"
msgstr ""
-#: gcc.c:6016
+#: gcc.c:6022
#, gcc-internal-format
msgid "unknown spec function %qs"
msgstr ""
-#: gcc.c:6046
+#: gcc.c:6052
#, gcc-internal-format
msgid "error in args to spec function %qs"
msgstr ""
-#: gcc.c:6100
+#: gcc.c:6106
#, gcc-internal-format
msgid "malformed spec function name"
msgstr ""
#. )
-#: gcc.c:6103
+#: gcc.c:6109
#, gcc-internal-format
msgid "no arguments for spec function"
msgstr ""
-#: gcc.c:6122
+#: gcc.c:6128
#, gcc-internal-format
msgid "malformed spec function arguments"
msgstr ""
-#: gcc.c:6396
+#: gcc.c:6307
+#, gcc-internal-format
+msgid "braced spec %qs ends in escape"
+msgstr ""
+
+#: gcc.c:6442
#, gcc-internal-format
msgid "braced spec %qs is invalid at %qc"
msgstr ""
-#: gcc.c:6491
+#: gcc.c:6537
#, gcc-internal-format
msgid "braced spec body %qs is invalid"
msgstr ""
-#: gcc.c:7097
+#: gcc.c:7143
#, gcc-internal-format, gfc-internal-format
msgid "%s: could not determine length of compare-debug file %s"
msgstr ""
-#: gcc.c:7108
+#: gcc.c:7154
#, gcc-internal-format, gfc-internal-format
msgid "%s: -fcompare-debug failure (length)"
msgstr ""
-#: gcc.c:7118 gcc.c:7159
+#: gcc.c:7164 gcc.c:7205
#, gcc-internal-format, gfc-internal-format
msgid "%s: could not open compare-debug file %s"
msgstr ""
-#: gcc.c:7138 gcc.c:7175
+#: gcc.c:7184 gcc.c:7221
#, gcc-internal-format, gfc-internal-format
msgid "%s: -fcompare-debug failure"
msgstr ""
-#: gcc.c:7483
+#: gcc.c:7529
#, gcc-internal-format
msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC"
msgstr ""
-#: gcc.c:7507
+#: gcc.c:7553
#, gcc-internal-format
msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC"
msgstr ""
-#: gcc.c:7812
+#: gcc.c:7858
#, gcc-internal-format
msgid "unrecognized command line option %<-%s%>; did you mean %<-%s%>?"
msgstr ""
-#: gcc.c:7816
+#: gcc.c:7862
#, gcc-internal-format
msgid "unrecognized command line option %<-%s%>"
msgstr ""
-#: gcc.c:7942
+#: gcc.c:7988
#, gcc-internal-format
msgid "not configured with sysroot headers suffix"
msgstr ""
-#: gcc.c:8003
+#: gcc.c:8049
#, gcc-internal-format
msgid "no input files"
msgstr ""
-#: gcc.c:8054
+#: gcc.c:8100
#, gcc-internal-format
msgid "cannot specify -o with -c, -S or -E with multiple files"
msgstr ""
-#: gcc.c:8095
+#: gcc.c:8141
#, gcc-internal-format, gfc-internal-format
msgid "%s: %s compiler not installed on this system"
msgstr ""
-#: gcc.c:8119
+#: gcc.c:8165
#, gcc-internal-format
msgid "recompiling with -fcompare-debug"
msgstr ""
-#: gcc.c:8135
+#: gcc.c:8181
#, gcc-internal-format
msgid "during -fcompare-debug recompilation"
msgstr ""
-#: gcc.c:8144
+#: gcc.c:8190
#, gcc-internal-format
msgid "comparing final insns dumps"
msgstr ""
-#: gcc.c:8261
+#: gcc.c:8307
#, gcc-internal-format, gfc-internal-format
msgid "-fuse-linker-plugin, but %s not found"
msgstr ""
-#: gcc.c:8294
+#: gcc.c:8340
#, gcc-internal-format, gfc-internal-format
msgid "%s: linker input file unused because linking not done"
msgstr ""
-#: gcc.c:8350 c-family/c-opts.c:749
+#: gcc.c:8396 c-family/c-opts.c:747
#, gcc-internal-format
msgid "cannot use %<-%> as input filename for a precompiled header"
msgstr ""
-#: gcc.c:8356
+#: gcc.c:8402
#, gcc-internal-format, gfc-internal-format
msgid "language %s not recognized"
msgstr ""
-#: gcc.c:8596
+#: gcc.c:8642
#, gcc-internal-format
msgid "multilib spec %qs is invalid"
msgstr ""
-#: gcc.c:8798
+#: gcc.c:8844
#, gcc-internal-format
msgid "multilib exclusions %qs is invalid"
msgstr ""
-#: gcc.c:8862
+#: gcc.c:8908
#, gcc-internal-format
msgid "multilib select %qs %qs is invalid"
msgstr ""
-#: gcc.c:9024
+#: gcc.c:9070
#, gcc-internal-format
msgid "multilib select %qs is invalid"
msgstr ""
-#: gcc.c:9064
+#: gcc.c:9110
#, gcc-internal-format
msgid "multilib exclusion %qs is invalid"
msgstr ""
-#: gcc.c:9279
+#: gcc.c:9325
#, gcc-internal-format
msgid "environment variable %qs not defined"
msgstr ""
-#: gcc.c:9418 gcc.c:9423
+#: gcc.c:9465 gcc.c:9470
#, gcc-internal-format
msgid "invalid version number %qs"
msgstr ""
-#: gcc.c:9466
+#: gcc.c:9513
#, gcc-internal-format, gfc-internal-format
msgid "too few arguments to %%:version-compare"
msgstr ""
-#: gcc.c:9472
+#: gcc.c:9519
#, gcc-internal-format, gfc-internal-format
msgid "too many arguments to %%:version-compare"
msgstr ""
-#: gcc.c:9514
+#: gcc.c:9561
#, gcc-internal-format
msgid "unknown operator %qs in %%:version-compare"
msgstr ""
-#: gcc.c:9638
+#: gcc.c:9685
#, gcc-internal-format, gfc-internal-format
msgid "too many arguments to %%:compare-debug-dump-opt"
msgstr ""
-#: gcc.c:9711
+#: gcc.c:9758
#, gcc-internal-format, gfc-internal-format
msgid "too many arguments to %%:compare-debug-self-opt"
msgstr ""
-#: gcc.c:9747
+#: gcc.c:9794
#, gcc-internal-format, gfc-internal-format
msgid "too few arguments to %%:compare-debug-auxbase-opt"
msgstr ""
-#: gcc.c:9751
+#: gcc.c:9798
#, gcc-internal-format, gfc-internal-format
msgid "too many arguments to %%:compare-debug-auxbase-opt"
msgstr ""
-#: gcc.c:9758
+#: gcc.c:9805
#, gcc-internal-format, gfc-internal-format
msgid "argument to %%:compare-debug-auxbase-opt does not end in .gk"
msgstr ""
-#: gcc.c:9832
+#: gcc.c:9879
#, gcc-internal-format, gfc-internal-format
msgid "too few arguments to %%:replace-extension"
msgstr ""
-#: gcc.c:9885
+#: gcc.c:9932
#, gcc-internal-format, gfc-internal-format
msgid "wrong number of arguments to %%:debug-level-gt"
msgstr ""
@@ -18711,7 +18894,7 @@ msgid "can%'t write padding to PCH file: %m"
msgstr ""
#: ggc-common.c:613 ggc-common.c:621 ggc-common.c:624 ggc-common.c:634
-#: ggc-common.c:637 ggc-page.c:2594
+#: ggc-common.c:637 ggc-page.c:2592
#, gcc-internal-format
msgid "can%'t read PCH file: %m"
msgstr ""
@@ -18731,22 +18914,22 @@ msgstr ""
msgid "can%'t write PCH file"
msgstr ""
-#: gimple-ssa-isolate-paths.c:274
+#: gimple-ssa-isolate-paths.c:287
#, gcc-internal-format
msgid "potential null pointer dereference"
msgstr ""
-#: gimple-ssa-isolate-paths.c:314
+#: gimple-ssa-isolate-paths.c:327
#, gcc-internal-format
msgid "null pointer dereference"
msgstr ""
-#: gimple-ssa-isolate-paths.c:413 gimple-ssa-isolate-paths.c:531 tree.c:12888
-#: tree.c:12925 c/c-typeck.c:2906 c/c-typeck.c:2990 c/c-typeck.c:9913
-#: c/c-typeck.c:9930 c/gimple-parser.c:1556 c/gimple-parser.c:1564
-#: cp/call.c:6454 cp/call.c:7933 cp/constexpr.c:777 cp/constexpr.c:2174
-#: cp/cvt.c:992 cp/cvt.c:1019 cp/decl.c:7224 cp/decl2.c:5072 cp/pt.c:7993
-#: cp/semantics.c:1764 cp/typeck.c:1648 cp/typeck.c:1843 cp/typeck.c:3718
+#: gimple-ssa-isolate-paths.c:426 gimple-ssa-isolate-paths.c:546 tree.c:12905
+#: tree.c:12942 c/c-typeck.c:2909 c/c-typeck.c:2995 c/c-typeck.c:9922
+#: c/c-typeck.c:9939 c/gimple-parser.c:1599 c/gimple-parser.c:1607
+#: cp/call.c:6481 cp/call.c:7956 cp/constexpr.c:779 cp/constexpr.c:2191
+#: cp/cvt.c:992 cp/cvt.c:1019 cp/decl.c:7144 cp/decl2.c:5007 cp/pt.c:8088
+#: cp/semantics.c:1792 cp/typeck.c:1640 cp/typeck.c:1835 cp/typeck.c:3748
#, gcc-internal-format
msgid "declared here"
msgstr ""
@@ -18756,368 +18939,368 @@ msgstr ""
msgid "nonnull argument %qD compared to NULL"
msgstr ""
-#: gimple-ssa-sprintf.c:2466 gimple-ssa-sprintf.c:2593
+#: gimple-ssa-sprintf.c:2469 gimple-ssa-sprintf.c:2596
#, gcc-internal-format
msgid "%qE output may be truncated before the last format character"
msgstr ""
-#: gimple-ssa-sprintf.c:2468 gimple-ssa-sprintf.c:2595
+#: gimple-ssa-sprintf.c:2471 gimple-ssa-sprintf.c:2598
#, gcc-internal-format
msgid "%qE output truncated before the last format character"
msgstr ""
-#: gimple-ssa-sprintf.c:2470 gimple-ssa-sprintf.c:2597
+#: gimple-ssa-sprintf.c:2473 gimple-ssa-sprintf.c:2600
#, gcc-internal-format
msgid "%qE may write a terminating nul past the end of the destination"
msgstr ""
-#: gimple-ssa-sprintf.c:2472 gimple-ssa-sprintf.c:2599
+#: gimple-ssa-sprintf.c:2475 gimple-ssa-sprintf.c:2602
#, gcc-internal-format
msgid "%qE writing a terminating nul past the end of the destination"
msgstr ""
-#: gimple-ssa-sprintf.c:2485
+#: gimple-ssa-sprintf.c:2488
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output may be truncated writing %wu byte into a region of "
"size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2487
+#: gimple-ssa-sprintf.c:2490
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output truncated writing %wu byte into a region of size "
"%wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2489
+#: gimple-ssa-sprintf.c:2492
#, gcc-internal-format
msgid "%<%.*s%> directive writing %wu byte into a region of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2493
+#: gimple-ssa-sprintf.c:2496
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output may be truncated writing %wu bytes into a region "
"of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2495
+#: gimple-ssa-sprintf.c:2498
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output truncated writing %wu bytes into a region of size "
"%wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2497
+#: gimple-ssa-sprintf.c:2500
#, gcc-internal-format
msgid "%<%.*s%> directive writing %wu bytes into a region of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2510
+#: gimple-ssa-sprintf.c:2513
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output may be truncated writing up to %wu bytes into a "
"region of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2512
+#: gimple-ssa-sprintf.c:2515
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output truncated writing up to %wu bytes into a region of "
"size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2514
+#: gimple-ssa-sprintf.c:2517
#, gcc-internal-format
msgid "%<%.*s%> directive writing up to %wu bytes into a region of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2530
+#: gimple-ssa-sprintf.c:2533
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output may be truncated writing likely %wu or more bytes "
"into a region of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2532
+#: gimple-ssa-sprintf.c:2535
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output truncated writing likely %wu or more bytes into a "
"region of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2534
+#: gimple-ssa-sprintf.c:2537
#, gcc-internal-format
msgid ""
"%<%.*s%> directive writing likely %wu or more bytes into a region of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2547
+#: gimple-ssa-sprintf.c:2550
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output may be truncated writing between %wu and %wu bytes "
"into a region of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2549
+#: gimple-ssa-sprintf.c:2552
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output truncated writing between %wu and %wu bytes into a "
"region of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2551
+#: gimple-ssa-sprintf.c:2554
#, gcc-internal-format
msgid ""
"%<%.*s%> directive writing between %wu and %wu bytes into a region of size "
"%wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2562
+#: gimple-ssa-sprintf.c:2565
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output may be truncated writing %wu or more bytes into a "
"region of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2564
+#: gimple-ssa-sprintf.c:2567
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output truncated writing %wu or more bytes into a region "
"of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2566
+#: gimple-ssa-sprintf.c:2569
#, gcc-internal-format
msgid "%<%.*s%> directive writing %wu or more bytes into a region of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2612
+#: gimple-ssa-sprintf.c:2615
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output may be truncated writing %wu byte into a region of "
"size between %wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2614
+#: gimple-ssa-sprintf.c:2617
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output truncated writing %wu byte into a region of size "
"between %wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2616
+#: gimple-ssa-sprintf.c:2619
#, gcc-internal-format
msgid ""
"%<%.*s%> directive writing %wu byte into a region of size between %wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2620
+#: gimple-ssa-sprintf.c:2623
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output may be truncated writing %wu bytes into a region "
"of size between %wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2622
+#: gimple-ssa-sprintf.c:2625
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output truncated writing %wu bytes into a region of size "
"between %wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2624
+#: gimple-ssa-sprintf.c:2627
#, gcc-internal-format
msgid ""
"%<%.*s%> directive writing %wu bytes into a region of size between %wu and "
"%wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2638
+#: gimple-ssa-sprintf.c:2641
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output may be truncated writing up to %wu bytes into a "
"region of size between %wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2641
+#: gimple-ssa-sprintf.c:2644
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output truncated writing up to %wu bytes into a region of "
"size between %wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2644
+#: gimple-ssa-sprintf.c:2647
#, gcc-internal-format
msgid ""
"%<%.*s%> directive writing up to %wu bytes into a region of size between %wu "
"and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2660
+#: gimple-ssa-sprintf.c:2663
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output may be truncated writing likely %wu or more bytes "
"into a region of size between %wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2663
+#: gimple-ssa-sprintf.c:2666
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output truncated writing likely %wu or more bytes into a "
"region of size between %wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2666
+#: gimple-ssa-sprintf.c:2669
#, gcc-internal-format
msgid ""
"%<%.*s%> directive writing likely %wu or more bytes into a region of size "
"between %wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2679
+#: gimple-ssa-sprintf.c:2682
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output may be truncated writing between %wu and %wu bytes "
"into a region of size between %wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2682
+#: gimple-ssa-sprintf.c:2685
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output truncated writing between %wu and %wu bytes into a "
"region of size between %wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2685
+#: gimple-ssa-sprintf.c:2688
#, gcc-internal-format
msgid ""
"%<%.*s%> directive writing between %wu and %wu bytes into a region of size "
"between %wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2696
+#: gimple-ssa-sprintf.c:2699
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output may be truncated writing %wu or more bytes into a "
"region of size between %wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2699
+#: gimple-ssa-sprintf.c:2702
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output truncated writing %wu or more bytes into a region "
"of size between %wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2702
+#: gimple-ssa-sprintf.c:2705
#, gcc-internal-format
msgid ""
"%<%.*s%> directive writing %wu or more bytes into a region of size between "
"%wu and %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2872
+#: gimple-ssa-sprintf.c:2875
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output between %wu and %wu bytes may exceed minimum "
"required size of 4095"
msgstr ""
-#: gimple-ssa-sprintf.c:2874
+#: gimple-ssa-sprintf.c:2877
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output between %wu and %wu bytes exceeds minimum required "
"size of 4095"
msgstr ""
-#: gimple-ssa-sprintf.c:2915
+#: gimple-ssa-sprintf.c:2918
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output between %wu and %wu bytes causes result to exceed "
"%<INT_MAX%>"
msgstr ""
-#: gimple-ssa-sprintf.c:2917
+#: gimple-ssa-sprintf.c:2920
#, gcc-internal-format
msgid ""
"%<%.*s%> directive output between %wu and %wu bytes may cause result to "
"exceed %<INT_MAX%>"
msgstr ""
-#: gimple-ssa-sprintf.c:2931
+#: gimple-ssa-sprintf.c:2934
#, gcc-internal-format
msgid "assuming directive output of %wu byte"
msgstr ""
-#: gimple-ssa-sprintf.c:2932
+#: gimple-ssa-sprintf.c:2935
#, gcc-internal-format
msgid "assuming directive output of %wu bytes"
msgstr ""
-#: gimple-ssa-sprintf.c:2939
+#: gimple-ssa-sprintf.c:2942
#, gcc-internal-format
msgid "directive argument %qE"
msgstr ""
-#: gimple-ssa-sprintf.c:2941
+#: gimple-ssa-sprintf.c:2944
#, gcc-internal-format
msgid "directive argument in the range [%E, %E]"
msgstr ""
-#: gimple-ssa-sprintf.c:2945
+#: gimple-ssa-sprintf.c:2948
#, gcc-internal-format
msgid "using the range [%E, %E] for directive argument"
msgstr ""
-#: gimple-ssa-sprintf.c:2965
+#: gimple-ssa-sprintf.c:2968
#, gcc-internal-format
msgid "%qE output %wu byte into a destination of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2966
+#: gimple-ssa-sprintf.c:2969
#, gcc-internal-format
msgid "%qE output %wu bytes into a destination of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2970
+#: gimple-ssa-sprintf.c:2973
#, gcc-internal-format
msgid "%qE output between %wu and %wu bytes into a destination of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2975
+#: gimple-ssa-sprintf.c:2978
#, gcc-internal-format
msgid ""
"%qE output %wu or more bytes (assuming %wu) into a destination of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:2980
+#: gimple-ssa-sprintf.c:2983
#, gcc-internal-format
msgid "%qE output %wu or more bytes into a destination of size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:3804
+#: gimple-ssa-sprintf.c:3865
#, gcc-internal-format
msgid "specified bound %wu exceeds maximum object size %wu"
msgstr ""
-#: gimple-ssa-sprintf.c:3810
+#: gimple-ssa-sprintf.c:3871
#, gcc-internal-format
msgid "specified bound %wu exceeds %<INT_MAX %>"
msgstr ""
-#: gimple-ssa-sprintf.c:3863
+#: gimple-ssa-sprintf.c:3924
#, gcc-internal-format
msgid "null destination pointer"
msgstr ""
-#: gimple-ssa-sprintf.c:3880
+#: gimple-ssa-sprintf.c:3941
#, gcc-internal-format
msgid "specified bound %wu exceeds the size %wu of the destination object"
msgstr ""
-#: gimple-ssa-sprintf.c:3892
+#: gimple-ssa-sprintf.c:3953
#, gcc-internal-format
msgid "null format string"
msgstr ""
@@ -19215,260 +19398,260 @@ msgstr ""
msgid "gimple check: expected %s(%s), have %s(%s) in %s, at %s:%d"
msgstr ""
-#: gimplify.c:1801
+#: gimplify.c:1815
#, gcc-internal-format
msgid "statement will never be executed"
msgstr ""
-#: gimplify.c:2104 gimplify.c:2112
+#: gimplify.c:2120 gimplify.c:2128
#, gcc-internal-format
msgid "this statement may fall through"
msgstr ""
-#: gimplify.c:2114
+#: gimplify.c:2130
#, gcc-internal-format
msgid "here"
msgstr ""
-#: gimplify.c:2221
+#: gimplify.c:2237
#, gcc-internal-format
msgid "attribute %<fallthrough%> not preceding a case label or default label"
msgstr ""
-#: gimplify.c:3289
+#: gimplify.c:3330
#, gcc-internal-format
msgid "using result of function returning %<void%>"
msgstr ""
-#: gimplify.c:5969
+#: gimplify.c:6015
#, gcc-internal-format, gfc-internal-format
msgid "invalid lvalue in asm output %d"
msgstr ""
-#: gimplify.c:6112
+#: gimplify.c:6158
#, gcc-internal-format, gfc-internal-format
msgid "non-memory input %d must stay in memory"
msgstr ""
-#: gimplify.c:6152 gimplify.c:6161
+#: gimplify.c:6198 gimplify.c:6207
#, gcc-internal-format, gfc-internal-format
msgid "memory input %d is not directly addressable"
msgstr ""
-#: gimplify.c:6764
+#: gimplify.c:6812
#, gcc-internal-format
msgid "threadprivate variable %qE used in target region"
msgstr ""
-#: gimplify.c:6766
+#: gimplify.c:6814
#, gcc-internal-format
msgid "enclosing target region"
msgstr ""
-#: gimplify.c:6778
+#: gimplify.c:6826
#, gcc-internal-format
msgid "threadprivate variable %qE used in untied task"
msgstr ""
-#: gimplify.c:6780
+#: gimplify.c:6828
#, gcc-internal-format
msgid "enclosing task"
msgstr ""
-#: gimplify.c:6852
+#: gimplify.c:6900
#, gcc-internal-format
msgid "%qE not specified in enclosing %qs"
msgstr ""
-#: gimplify.c:6854
+#: gimplify.c:6902
#, gcc-internal-format
msgid "enclosing %qs"
msgstr ""
-#: gimplify.c:6965
+#: gimplify.c:7027
#, gcc-internal-format
msgid "%qE not specified in enclosing OpenACC %qs construct"
msgstr ""
-#: gimplify.c:6967
+#: gimplify.c:7029
#, gcc-internal-format
msgid "enclosing OpenACC %qs construct"
msgstr ""
-#: gimplify.c:7018
+#: gimplify.c:7082
#, gcc-internal-format
msgid "%qE with %<link%> clause used in %<routine%> function"
msgstr ""
-#: gimplify.c:7026
+#: gimplify.c:7090
#, gcc-internal-format
msgid "%qE requires a %<declare%> directive for use in a %<routine%> function"
msgstr ""
-#: gimplify.c:7092 gimplify.c:7692
+#: gimplify.c:7156 gimplify.c:7756
#, gcc-internal-format
msgid "variable %qE declared in enclosing %<host_data%> region"
msgstr ""
-#: gimplify.c:7113
+#: gimplify.c:7177
#, gcc-internal-format
msgid "%qD referenced in target region does not have a mappable type"
msgstr ""
-#: gimplify.c:7231 gimplify.c:7263
+#: gimplify.c:7295 gimplify.c:7327
#, gcc-internal-format
msgid "iteration variable %qE is predetermined linear"
msgstr ""
-#: gimplify.c:7234
+#: gimplify.c:7298
#, gcc-internal-format
msgid "iteration variable %qE should be private"
msgstr ""
-#: gimplify.c:7248
+#: gimplify.c:7312
#, gcc-internal-format
msgid "iteration variable %qE should not be firstprivate"
msgstr ""
-#: gimplify.c:7251
+#: gimplify.c:7315
#, gcc-internal-format
msgid "iteration variable %qE should not be reduction"
msgstr ""
-#: gimplify.c:7254
+#: gimplify.c:7318
#, gcc-internal-format
msgid "iteration variable %qE should not be linear"
msgstr ""
-#: gimplify.c:7257
+#: gimplify.c:7321
#, gcc-internal-format
msgid "iteration variable %qE should not be lastprivate"
msgstr ""
-#: gimplify.c:7260
+#: gimplify.c:7324
#, gcc-internal-format
msgid "iteration variable %qE should not be private"
msgstr ""
-#: gimplify.c:7562
+#: gimplify.c:7626
#, gcc-internal-format
msgid ""
"%<linear%> clause for variable other than loop iterator specified on "
"construct combined with %<distribute%>"
msgstr ""
-#: gimplify.c:7769
+#: gimplify.c:7833
#, gcc-internal-format
msgid "mapping field %qE of variable length structure"
msgstr ""
-#: gimplify.c:7980
+#: gimplify.c:8044
#, gcc-internal-format
msgid "%qE appears more than once in map clauses"
msgstr ""
-#: gimplify.c:8284
+#: gimplify.c:8348
#, gcc-internal-format
msgid ""
"copyprivate variable %qE is not threadprivate or private in outer context"
msgstr ""
-#: gimplify.c:8304
+#: gimplify.c:8368
#, gcc-internal-format
msgid "%s variable %qE is private in outer context"
msgstr ""
-#: gimplify.c:8330
+#: gimplify.c:8394
#, gcc-internal-format
msgid "expected %qs %<if%> clause modifier rather than %qs"
msgstr ""
-#: gimplify.c:8596
+#: gimplify.c:8660
#, gcc-internal-format
msgid "%<_Atomic%> %qD in implicit %<map%> clause"
msgstr ""
-#: gimplify.c:8629
+#: gimplify.c:8693
#, gcc-internal-format
msgid ""
"%<_Atomic%> %qD in implicit %<firstprivate%> clause on %<target%> construct"
msgstr ""
-#: gimplify.c:8802
+#: gimplify.c:8885
#, gcc-internal-format
msgid "%<_Atomic%> %qD in %<firstprivate%> clause on %<target%> construct"
msgstr ""
-#: gimplify.c:8853
+#: gimplify.c:8936
#, gcc-internal-format
msgid ""
"same variable used in %<firstprivate%> and %<lastprivate%> clauses on "
"%<distribute%> construct"
msgstr ""
-#: gimplify.c:8935
+#: gimplify.c:9018
#, gcc-internal-format
msgid ""
"incompatible data clause with reduction on %qE; promoting to present_or_copy"
msgstr ""
-#: gimplify.c:9080
+#: gimplify.c:9163
#, gcc-internal-format
msgid "invalid private reduction on %qE"
msgstr ""
-#: gimplify.c:10904 omp-low.c:2814
+#: gimplify.c:10987 omp-low.c:2832
#, 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:10922
+#: gimplify.c:11005
#, gcc-internal-format
msgid "variable %qE is not an iteration of outermost loop %d, expected %qE"
msgstr ""
-#: gimplify.c:10935
+#: gimplify.c:11018
#, gcc-internal-format
msgid ""
"number of variables in %<depend(sink)%> clause does not match number of "
"iteration variables"
msgstr ""
-#: gimplify.c:10948
+#: gimplify.c:11031
#, gcc-internal-format
msgid "more than one %<depend(source)%> clause on an %<ordered%> construct"
msgstr ""
-#: gimplify.c:10959
+#: gimplify.c:11042
#, gcc-internal-format
msgid ""
"%<depend(source)%> clause specified together with %<depend(sink:)%> clauses "
"on the same construct"
msgstr ""
-#: gimplify.c:11902
+#: gimplify.c:11985
#, gcc-internal-format
msgid "expected %<_Cilk_spawn%> before %<_Cilk_sync%>"
msgstr ""
-#: gimplify.c:12201
+#: gimplify.c:12284
#, gcc-internal-format
msgid "gimplification failed"
msgstr ""
-#: gimplify.c:12729
+#: gimplify.c:12811
#, gcc-internal-format
msgid "%qT is promoted to %qT when passed through %<...%>"
msgstr ""
-#: gimplify.c:12734
+#: gimplify.c:12816
#, gcc-internal-format
msgid "(so you should pass %qT not %qT to %<va_arg%>)"
msgstr ""
-#: gimplify.c:12741
+#: gimplify.c:12823
#, gcc-internal-format
msgid "if this code is reached, the program will abort"
msgstr ""
@@ -19483,17 +19666,17 @@ msgstr ""
msgid "could not open Go dump file %qs: %m"
msgstr ""
-#: graph.c:55 toplev.c:1521 objc/objc-act.c:461
+#: graph.c:55 toplev.c:1551 objc/objc-act.c:461
#, gcc-internal-format
msgid "can%'t open %s: %m"
msgstr ""
-#: graphite.c:350
+#: graphite.c:364
#, gcc-internal-format
msgid "Graphite loop optimizations cannot be used (isl is not available)."
msgstr ""
-#: hsa-brig.c:908
+#: hsa-brig.c:909
#, gcc-internal-format
msgid "Support for HSA does not implement immediate 16 bit FPU operands"
msgstr ""
@@ -19529,27 +19712,27 @@ msgstr ""
msgid "HSA instruction verification failed"
msgstr ""
-#: input.c:1147
+#: input.c:1181
#, gcc-internal-format, gfc-internal-format
msgid "expansion point is location %i"
msgstr ""
-#: input.c:1177
+#: input.c:1211
#, gcc-internal-format, gfc-internal-format
msgid "token %u has x-location == y-location == %u"
msgstr ""
-#: input.c:1185
+#: input.c:1219
#, gcc-internal-format, gfc-internal-format
msgid "token %u has x-location == %u"
msgstr ""
-#: input.c:1186
+#: input.c:1220
#, gcc-internal-format, gfc-internal-format
msgid "token %u has y-location == %u"
msgstr ""
-#: internal-fn.c:455
+#: internal-fn.c:464
#, gcc-internal-format
msgid "invalid use of attribute %<fallthrough%>"
msgstr ""
@@ -19559,326 +19742,298 @@ msgstr ""
msgid "function cannot be instrumented"
msgstr ""
-#: ipa-devirt.c:752 ipa-devirt.c:903
+#: ipa-devirt.c:753 ipa-devirt.c:904
#, gcc-internal-format
msgid "virtual table of type %qD violates one definition rule"
msgstr ""
-#: ipa-devirt.c:755
+#: ipa-devirt.c:756
#, gcc-internal-format
msgid ""
"variable of same assembler name as the virtual table is defined in another "
"translation unit"
msgstr ""
-#: ipa-devirt.c:794
+#: ipa-devirt.c:795
#, gcc-internal-format
msgid "virtual table of type %qD contains RTTI information"
msgstr ""
-#: ipa-devirt.c:800
+#: ipa-devirt.c:801
#, gcc-internal-format
msgid "but is prevailed by one without from other translation unit"
msgstr ""
-#: ipa-devirt.c:804
+#: ipa-devirt.c:805
#, gcc-internal-format
msgid "RTTI will not work on this type"
msgstr ""
-#: ipa-devirt.c:834 ipa-devirt.c:862 ipa-devirt.c:933
+#: ipa-devirt.c:835 ipa-devirt.c:863 ipa-devirt.c:934
#, gcc-internal-format
msgid "virtual table of type %qD violates one definition rule "
msgstr ""
-#: ipa-devirt.c:840
+#: ipa-devirt.c:841
#, gcc-internal-format
msgid ""
"the conflicting type defined in another translation unit has virtual table "
"of different size"
msgstr ""
-#: ipa-devirt.c:868
+#: ipa-devirt.c:869
#, gcc-internal-format
msgid ""
"the conflicting type defined in another translation unit with different RTTI "
"information"
msgstr ""
-#: ipa-devirt.c:911 ipa-devirt.c:941
+#: ipa-devirt.c:912 ipa-devirt.c:942
#, gcc-internal-format
msgid "the conflicting type defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:915
+#: ipa-devirt.c:916
#, gcc-internal-format
msgid "contains additional virtual method %qD"
msgstr ""
-#: ipa-devirt.c:922
+#: ipa-devirt.c:923
#, gcc-internal-format
msgid ""
"the conflicting type defined in another translation unit has virtual table "
"with more entries"
msgstr ""
-#: ipa-devirt.c:947
+#: ipa-devirt.c:948
#, gcc-internal-format
msgid "virtual method %qD"
msgstr ""
-#: ipa-devirt.c:951
+#: ipa-devirt.c:952
#, gcc-internal-format
msgid "ought to match virtual method %qD but does not"
msgstr ""
-#: ipa-devirt.c:957
+#: ipa-devirt.c:958
#, gcc-internal-format
msgid ""
"the conflicting type defined in another translation unit has virtual table "
"with different contents"
msgstr ""
-#: ipa-devirt.c:987
+#: ipa-devirt.c:988
#, gcc-internal-format
msgid "type %qT violates the C++ One Definition Rule"
msgstr ""
-#: ipa-devirt.c:998 ipa-devirt.c:1013 ipa-devirt.c:1263 ipa-devirt.c:1355
-#: ipa-devirt.c:1394 ipa-devirt.c:1412
+#: ipa-devirt.c:999 ipa-devirt.c:1014 ipa-devirt.c:1264 ipa-devirt.c:1356
+#: ipa-devirt.c:1395 ipa-devirt.c:1413
#, gcc-internal-format
msgid "a different type is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1005
+#: ipa-devirt.c:1006
#, gcc-internal-format
msgid "the first difference of corresponding definitions is field %qD"
msgstr ""
-#: ipa-devirt.c:1015
+#: ipa-devirt.c:1016
#, gcc-internal-format
msgid "the first difference of corresponding definitions is method %qD"
msgstr ""
-#: ipa-devirt.c:1109
+#: ipa-devirt.c:1110
#, gcc-internal-format
msgid ""
"type %qT defined in anonymous namespace can not match type %qT across the "
"translation unit boundary"
msgstr ""
-#: ipa-devirt.c:1114
+#: ipa-devirt.c:1115
#, gcc-internal-format
msgid ""
"type %qT defined in anonymous namespace can not match across the translation "
"unit boundary"
msgstr ""
-#: ipa-devirt.c:1119
+#: ipa-devirt.c:1120
#, gcc-internal-format
msgid "the incompatible type defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1142
+#: ipa-devirt.c:1143
#, gcc-internal-format
msgid "type name %qs should match type name %qs"
msgstr ""
-#: ipa-devirt.c:1146 ipa-devirt.c:1238
+#: ipa-devirt.c:1147 ipa-devirt.c:1239
#, gcc-internal-format
msgid "the incompatible type is defined here"
msgstr ""
-#: ipa-devirt.c:1174
+#: ipa-devirt.c:1175
#, gcc-internal-format
msgid "array types have different bounds"
msgstr ""
-#: ipa-devirt.c:1189
+#: ipa-devirt.c:1190
#, gcc-internal-format
msgid "return value type mismatch"
msgstr ""
-#: ipa-devirt.c:1204
+#: ipa-devirt.c:1205
#, gcc-internal-format
msgid "implicit this pointer type mismatch"
msgstr ""
-#: ipa-devirt.c:1207
+#: ipa-devirt.c:1208
#, gcc-internal-format, gfc-internal-format
msgid "type mismatch in parameter %i"
msgstr ""
-#: ipa-devirt.c:1218
+#: ipa-devirt.c:1219
#, gcc-internal-format
msgid "types have different parameter counts"
msgstr ""
-#: ipa-devirt.c:1229
+#: ipa-devirt.c:1230
#, gcc-internal-format
-msgid "type %qT itself violate the C++ One Definition Rule"
+msgid "type %qT itself violates the C++ One Definition Rule"
msgstr ""
-#: ipa-devirt.c:1235
+#: ipa-devirt.c:1236
#, gcc-internal-format
msgid "type %qT should match type %qT"
msgstr ""
-#: ipa-devirt.c:1270
+#: ipa-devirt.c:1271
#, gcc-internal-format
msgid "a type with different qualifiers is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1288
+#: ipa-devirt.c:1289
#, gcc-internal-format
msgid "a type with different attributes is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1303
+#: ipa-devirt.c:1304
#, gcc-internal-format
msgid ""
"an enum with different value name is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1312
+#: ipa-devirt.c:1313
#, gcc-internal-format
msgid "an enum with different values is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1320
+#: ipa-devirt.c:1321
#, gcc-internal-format
msgid ""
"an enum with mismatching number of values is defined in another translation "
"unit"
msgstr ""
-#: ipa-devirt.c:1338
+#: ipa-devirt.c:1339
#, gcc-internal-format
msgid "a type with different precision is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1345
+#: ipa-devirt.c:1346
#, gcc-internal-format
msgid "a type with different signedness is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1370
+#: ipa-devirt.c:1371
#, gcc-internal-format
msgid ""
"it is defined as a pointer in different address space in another translation "
"unit"
msgstr ""
-#: ipa-devirt.c:1379
+#: ipa-devirt.c:1380
#, gcc-internal-format
msgid ""
"it is defined as a pointer to different type in another translation unit"
msgstr ""
-#: ipa-devirt.c:1439
+#: ipa-devirt.c:1440
#, gcc-internal-format
msgid "an array of different size is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1454
+#: ipa-devirt.c:1455
#, gcc-internal-format
msgid "has different return value in another translation unit"
msgstr ""
-#: ipa-devirt.c:1477 ipa-devirt.c:1489
+#: ipa-devirt.c:1478 ipa-devirt.c:1490
#, gcc-internal-format
msgid "has different parameters in another translation unit"
msgstr ""
-#: ipa-devirt.c:1512
+#: ipa-devirt.c:1513
#, gcc-internal-format
msgid "a type defined in another translation unit is not polymorphic"
msgstr ""
-#: ipa-devirt.c:1516
+#: ipa-devirt.c:1517
#, gcc-internal-format
msgid "a type defined in another translation unit is polymorphic"
msgstr ""
-#: ipa-devirt.c:1534 ipa-devirt.c:1590
+#: ipa-devirt.c:1535 ipa-devirt.c:1591
#, gcc-internal-format
msgid ""
"a type with different virtual table pointers is defined in another "
"translation unit"
msgstr ""
-#: ipa-devirt.c:1541 ipa-devirt.c:1595
+#: ipa-devirt.c:1542 ipa-devirt.c:1596
#, gcc-internal-format
msgid "a type with different bases is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1549
+#: ipa-devirt.c:1550
#, gcc-internal-format
msgid "a field with different name is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1563
+#: ipa-devirt.c:1564
#, gcc-internal-format
msgid ""
"a field of same name but different type is defined in another translation "
"unit"
msgstr ""
-#: ipa-devirt.c:1576
+#: ipa-devirt.c:1577
#, gcc-internal-format
-msgid "fields has different layout in another translation unit"
+msgid "fields have different layout in another translation unit"
msgstr ""
-#: ipa-devirt.c:1599
+#: ipa-devirt.c:1600
#, gcc-internal-format
msgid ""
"a type with different number of fields is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1623
-#, gcc-internal-format
-msgid "a different method of same type is defined in another translation unit"
-msgstr ""
-
-#: ipa-devirt.c:1631
-#, gcc-internal-format
-msgid ""
-"a definition that differs by virtual keyword in another translation unit"
-msgstr ""
-
-#: ipa-devirt.c:1638
-#, gcc-internal-format
-msgid "virtual table layout differs in another translation unit"
-msgstr ""
-
-#: ipa-devirt.c:1647
-#, gcc-internal-format
-msgid "method with incompatible type is defined in another translation unit"
-msgstr ""
-
-#: ipa-devirt.c:1655
-#, gcc-internal-format
-msgid ""
-"a type with different number of methods is defined in another translation "
-"unit"
-msgstr ""
-
-#: ipa-devirt.c:1677
+#: ipa-devirt.c:1622
#, gcc-internal-format
msgid "a type with different size is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1685
+#: ipa-devirt.c:1630
#, gcc-internal-format
msgid "a type with different alignment is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1808
+#: ipa-devirt.c:1753
#, gcc-internal-format
msgid "the extra base is defined here"
msgstr ""
-#: ipa-devirt.c:3792
+#: ipa-devirt.c:3752
#, gcc-internal-format
msgid "Declaring type %qD final would enable devirtualization of %i call"
msgid_plural ""
@@ -19886,7 +20041,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ipa-devirt.c:3801
+#: ipa-devirt.c:3761
#, gcc-internal-format
msgid ""
"Declaring type %qD final would enable devirtualization of %i call executed "
@@ -19897,7 +20052,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ipa-devirt.c:3830
+#: ipa-devirt.c:3791
#, gcc-internal-format
msgid ""
"Declaring virtual destructor of %qD final would enable devirtualization of "
@@ -19908,7 +20063,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ipa-devirt.c:3838
+#: ipa-devirt.c:3799
#, gcc-internal-format
msgid "Declaring method %qD final would enable devirtualization of %i call"
msgid_plural ""
@@ -19916,7 +20071,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ipa-devirt.c:3846
+#: ipa-devirt.c:3807
#, gcc-internal-format
msgid ""
"Declaring virtual destructor of %qD final would enable devirtualization of "
@@ -19927,7 +20082,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ipa-devirt.c:3856
+#: ipa-devirt.c:3818
#, gcc-internal-format
msgid ""
"Declaring method %qD final would enable devirtualization of %i call executed "
@@ -19938,16 +20093,16 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
+#: ipa-fnsummary.c:3339
+#, gcc-internal-format
+msgid "ipa inline summary is missing in input file"
+msgstr ""
+
#: ipa-hsa.c:57
#, gcc-internal-format, gfc-internal-format
msgid "could not emit HSAIL for function %s: function cannot be cloned"
msgstr ""
-#: ipa-inline-analysis.c:4475
-#, gcc-internal-format
-msgid "ipa inline summary is missing in input file"
-msgstr ""
-
#: ipa-pure-const.c:187
#, gcc-internal-format
msgid "function might be candidate for attribute %qs"
@@ -19960,7 +20115,7 @@ msgid ""
"normally"
msgstr ""
-#: ipa-reference.c:1182
+#: ipa-reference.c:1174
#, gcc-internal-format
msgid "ipa reference summary is missing in ltrans unit"
msgstr ""
@@ -19970,32 +20125,32 @@ msgstr ""
msgid "%s cannot be used in asm here"
msgstr ""
-#: ira.c:5558
+#: ira.c:5526
#, gcc-internal-format
msgid "frame pointer required, but reserved"
msgstr ""
-#: ira.c:5559
+#: ira.c:5527
#, gcc-internal-format
msgid "for %qD"
msgstr ""
-#: ira.c:5573
+#: ira.c:5541
#, gcc-internal-format
msgid "frame size too large for reliable stack checking"
msgstr ""
-#: lra-assigns.c:1454 reload1.c:1245
+#: lra-assigns.c:1453 reload1.c:1245
#, gcc-internal-format
msgid "%<asm%> operand has impossible constraints"
msgstr ""
-#: lra-assigns.c:1475
+#: lra-assigns.c:1474
#, gcc-internal-format
msgid "unable to find a register to spill"
msgstr ""
-#: lra-assigns.c:1711
+#: lra-assigns.c:1710
#, gcc-internal-format, gfc-internal-format
msgid "Maximum number of LRA assignment passes is achieved (%d)\n"
msgstr ""
@@ -20005,7 +20160,7 @@ msgstr ""
msgid "inconsistent operand constraints in an %<asm%>"
msgstr ""
-#: lra-constraints.c:4770
+#: lra-constraints.c:4769
#, gcc-internal-format, gfc-internal-format
msgid "Max. number of generated reload insns per insn is achieved (%d)\n"
msgstr ""
@@ -20097,12 +20252,12 @@ msgstr ""
msgid "Reference statement index not found"
msgstr ""
-#: lto-streamer-in.c:1545
+#: lto-streamer-in.c:1543
#, gcc-internal-format, gfc-internal-format
msgid "cannot read LTO mode table from %s"
msgstr ""
-#: lto-streamer-in.c:1643
+#: lto-streamer-in.c:1641
#, gcc-internal-format, gfc-internal-format
msgid "unsupported mode %s\n"
msgstr ""
@@ -20117,7 +20272,7 @@ msgstr ""
msgid "bytecode stream: unexpected LTO section %s"
msgstr ""
-#: lto-streamer.c:383
+#: lto-streamer.c:291
#, gcc-internal-format
msgid ""
"bytecode stream in file %qs generated with LTO version %d.%d instead of the "
@@ -20139,82 +20294,82 @@ msgstr ""
msgid "Option %s with different values"
msgstr ""
-#: lto-wrapper.c:318 lto-wrapper.c:330
+#: lto-wrapper.c:391
#, gcc-internal-format, gfc-internal-format
msgid "Option %s not used consistently in all LTO input files"
msgstr ""
-#: lto-wrapper.c:815
+#: lto-wrapper.c:833
#, gcc-internal-format, gfc-internal-format
msgid "problem with building target image for %s\n"
msgstr ""
-#: lto-wrapper.c:835
+#: lto-wrapper.c:853
#, gcc-internal-format
msgid "reading input file"
msgstr ""
-#: lto-wrapper.c:840
+#: lto-wrapper.c:858
#, gcc-internal-format
msgid "writing output file"
msgstr ""
-#: lto-wrapper.c:870
+#: lto-wrapper.c:890
#, gcc-internal-format
msgid "installation error, can't find crtoffloadtable.o"
msgstr ""
-#: lto-wrapper.c:974
+#: lto-wrapper.c:994
#, gcc-internal-format
msgid "environment variable COLLECT_GCC must be set"
msgstr ""
-#: lto-wrapper.c:978 config/nvptx/mkoffload.c:361
+#: lto-wrapper.c:998 config/nvptx/mkoffload.c:361
#, gcc-internal-format
msgid "environment variable COLLECT_GCC_OPTIONS must be set"
msgstr ""
-#: lto-wrapper.c:1135 lto-wrapper.c:1191
+#: lto-wrapper.c:1155 lto-wrapper.c:1211
#, gcc-internal-format
msgid "cannot open %s: %m"
msgstr ""
-#: lto-wrapper.c:1138 lto-wrapper.c:1197
+#: lto-wrapper.c:1158 lto-wrapper.c:1217
#, gcc-internal-format
msgid "cannot read %s: %m"
msgstr ""
-#: lto-wrapper.c:1165
+#: lto-wrapper.c:1185
#, gcc-internal-format, gfc-internal-format
msgid "invalid format of %s"
msgstr ""
-#: lto-wrapper.c:1301
+#: lto-wrapper.c:1321
#, gcc-internal-format
msgid "fopen: %s: %m"
msgstr ""
-#: multiple_target.c:67
+#: multiple_target.c:74
#, gcc-internal-format
msgid "the call requires ifunc, which is not supported by this target"
msgstr ""
-#: multiple_target.c:74
+#: multiple_target.c:81
#, gcc-internal-format
msgid "target does not support function version dispatcher"
msgstr ""
-#: multiple_target.c:83
+#: multiple_target.c:89
#, gcc-internal-format
msgid "default target_clones attribute was not set"
msgstr ""
-#: multiple_target.c:258
+#: multiple_target.c:311
#, gcc-internal-format
msgid "single target_clones attribute is ignored"
msgstr ""
-#: multiple_target.c:270
+#: multiple_target.c:323
#, gcc-internal-format
msgid "default target was not set"
msgstr ""
@@ -20229,117 +20384,117 @@ msgstr ""
msgid "%<depend(sink)%> refers to iteration never in the iteration space"
msgstr ""
-#: omp-general.c:592
+#: omp-general.c:587
#, gcc-internal-format
msgid "multiple loop axes specified for routine"
msgstr ""
-#: omp-low.c:2120 omp-offload.c:1124
+#: omp-low.c:2139 omp-offload.c:1118
#, gcc-internal-format
msgid "%<seq%> overrides other OpenACC loop specifiers"
msgstr ""
-#: omp-low.c:2123 omp-offload.c:1125
+#: omp-low.c:2142 omp-offload.c:1119
#, gcc-internal-format
msgid "%<auto%> conflicts with other OpenACC loop specifiers"
msgstr ""
-#: omp-low.c:2127 omp-offload.c:1159
+#: omp-low.c:2146 omp-offload.c:1153
#, gcc-internal-format
msgid "inner loop uses same OpenACC parallelism as containing loop"
msgstr ""
-#: omp-low.c:2174
+#: omp-low.c:2193
#, gcc-internal-format
msgid "argument not permitted on %qs clause in OpenACC %<parallel%>"
msgstr ""
-#: omp-low.c:2443
+#: omp-low.c:2461
#, gcc-internal-format
msgid "non-OpenACC construct inside of OpenACC routine"
msgstr ""
-#: omp-low.c:2452
+#: omp-low.c:2470
#, gcc-internal-format
msgid "non-OpenACC construct inside of OpenACC region"
msgstr ""
-#: omp-low.c:2477
+#: omp-low.c:2495
#, gcc-internal-format
msgid ""
"%<ordered simd threads%> must be closely nested inside of %<for simd%> region"
msgstr ""
-#: omp-low.c:2485
+#: omp-low.c:2503
#, gcc-internal-format
msgid ""
"OpenMP constructs other than %<#pragma omp ordered simd%> may not be nested "
"inside %<simd%> region"
msgstr ""
-#: omp-low.c:2497
+#: omp-low.c:2515
#, gcc-internal-format
msgid ""
"only %<distribute%> or %<parallel%> regions are allowed to be strictly "
"nested inside %<teams%> region"
msgstr ""
-#: omp-low.c:2514
+#: omp-low.c:2532
#, gcc-internal-format
msgid ""
"%<distribute%> region must be strictly nested inside %<teams%> construct"
msgstr ""
-#: omp-low.c:2555
+#: omp-low.c:2573
#, gcc-internal-format
msgid ""
"OpenACC loop directive must be associated with an OpenACC compute region"
msgstr ""
-#: omp-low.c:2577
+#: omp-low.c:2595
#, gcc-internal-format
msgid "orphaned %qs construct"
msgstr ""
-#: omp-low.c:2606
+#: omp-low.c:2624
#, gcc-internal-format
msgid "%<#pragma omp cancel for%> inside %<nowait%> for construct"
msgstr ""
-#: omp-low.c:2611
+#: omp-low.c:2629
#, gcc-internal-format
msgid "%<#pragma omp cancel for%> inside %<ordered%> for construct"
msgstr ""
-#: omp-low.c:2631 omp-low.c:2644
+#: omp-low.c:2649 omp-low.c:2662
#, gcc-internal-format
msgid "%<#pragma omp cancel sections%> inside %<nowait%> sections construct"
msgstr ""
-#: omp-low.c:2670
+#: omp-low.c:2688
#, gcc-internal-format
msgid ""
"%<%s taskgroup%> construct not closely nested inside of %<taskgroup%> region"
msgstr ""
-#: omp-low.c:2684
+#: omp-low.c:2702
#, gcc-internal-format
msgid "invalid arguments"
msgstr ""
-#: omp-low.c:2690
+#: omp-low.c:2708
#, gcc-internal-format
msgid "%<%s %s%> construct not closely nested inside of %qs"
msgstr ""
-#: omp-low.c:2718
+#: omp-low.c:2736
#, 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:2725
+#: omp-low.c:2743
#, gcc-internal-format
msgid ""
"work-sharing region may not be closely nested inside of work-sharing, "
@@ -20347,111 +20502,111 @@ msgid ""
"region"
msgstr ""
-#: omp-low.c:2754
+#: omp-low.c:2772
#, gcc-internal-format
msgid ""
"%<master%> region may not be closely nested inside of work-sharing, explicit "
"%<task%> or %<taskloop%> region"
msgstr ""
-#: omp-low.c:2778 omp-low.c:2917
+#: omp-low.c:2796 omp-low.c:2935
#, gcc-internal-format
msgid "%<depend(%s)%> is only allowed in %<omp ordered%>"
msgstr ""
-#: omp-low.c:2806
+#: omp-low.c:2824
#, gcc-internal-format
msgid ""
"%<ordered%> construct with %<depend%> clause must be closely nested inside "
"an %<ordered%> loop"
msgstr ""
-#: omp-low.c:2823
+#: omp-low.c:2841
#, gcc-internal-format
msgid "invalid depend kind in omp %<ordered%> %<depend%>"
msgstr ""
-#: omp-low.c:2838
+#: omp-low.c:2856
#, gcc-internal-format
msgid "%<ordered%> %<simd%> must be closely nested inside %<simd%> region"
msgstr ""
-#: omp-low.c:2851
+#: omp-low.c:2869
#, gcc-internal-format
msgid ""
"%<ordered%> region may not be closely nested inside of %<critical%>, "
"%<ordered%>, explicit %<task%> or %<taskloop%> region"
msgstr ""
-#: omp-low.c:2862 omp-low.c:2875
+#: omp-low.c:2880 omp-low.c:2893
#, gcc-internal-format
msgid ""
"%<ordered%> region must be closely nested inside a loop region with an "
"%<ordered%> clause"
msgstr ""
-#: omp-low.c:2892
+#: omp-low.c:2910
#, gcc-internal-format
msgid ""
"%<critical%> region may not be nested inside a %<critical%> region with the "
"same name"
msgstr ""
-#: omp-low.c:2904
+#: omp-low.c:2922
#, gcc-internal-format
msgid "%<teams%> construct not closely nested inside of %<target%> construct"
msgstr ""
-#: omp-low.c:2925
+#: omp-low.c:2943
#, gcc-internal-format
msgid ""
"OpenACC region inside of OpenACC routine, nested parallelism not supported "
"yet"
msgstr ""
-#: omp-low.c:2938
+#: omp-low.c:2956
#, gcc-internal-format
msgid "OpenACC construct inside of non-OpenACC region"
msgstr ""
-#: omp-low.c:2983
+#: omp-low.c:3001
#, gcc-internal-format
msgid "%s %qs construct inside of %s %qs region"
msgstr ""
-#: omp-low.c:2996 omp-low.c:3003
+#: omp-low.c:3014 omp-low.c:3021
#, gcc-internal-format
msgid "%qs construct inside of %qs region"
msgstr ""
-#: omp-low.c:3115
+#: omp-low.c:3133
#, gcc-internal-format
msgid "setjmp/longjmp inside simd construct"
msgstr ""
-#: omp-low.c:6341
+#: omp-low.c:6373
#, gcc-internal-format
msgid ""
"ignoring sink clause with offset that is not a multiple of the loop step"
msgstr ""
-#: omp-low.c:6364
+#: omp-low.c:6396
#, gcc-internal-format
msgid "first offset must be in opposite direction of loop iterations"
msgstr ""
-#: omp-low.c:9087
+#: omp-low.c:9119
#, gcc-internal-format, gfc-internal-format
msgid "invalid exit from %s structured block"
msgstr ""
-#: omp-low.c:9089 omp-low.c:9094
+#: omp-low.c:9121 omp-low.c:9126
#, gcc-internal-format, gfc-internal-format
msgid "invalid entry to %s structured block"
msgstr ""
#. Otherwise, be vague and lazy, but efficient.
-#: omp-low.c:9098
+#: omp-low.c:9130
#, gcc-internal-format, gfc-internal-format
msgid "invalid branch to/from %s structured block"
msgstr ""
@@ -20461,47 +20616,47 @@ msgstr ""
msgid "-fopenacc-dim operand is malformed at '%s'"
msgstr ""
-#: omp-offload.c:1157
+#: omp-offload.c:1151
#, gcc-internal-format
msgid "routine call uses same OpenACC parallelism as containing loop"
msgstr ""
-#: omp-offload.c:1161 omp-offload.c:1193
+#: omp-offload.c:1155 omp-offload.c:1187
#, gcc-internal-format
msgid "containing loop here"
msgstr ""
-#: omp-offload.c:1166
+#: omp-offload.c:1160
#, gcc-internal-format
msgid "routine call uses OpenACC parallelism disallowed by containing routine"
msgstr ""
-#: omp-offload.c:1168
+#: omp-offload.c:1162
#, gcc-internal-format
msgid "loop uses OpenACC parallelism disallowed by containing routine"
msgstr ""
-#: omp-offload.c:1173
+#: omp-offload.c:1167
#, gcc-internal-format
msgid "routine %qD declared here"
msgstr ""
-#: omp-offload.c:1186
+#: omp-offload.c:1180
#, gcc-internal-format
msgid "incorrectly nested OpenACC loop parallelism"
msgstr ""
-#: omp-offload.c:1327
+#: omp-offload.c:1321
#, gcc-internal-format
msgid "insufficient partitioning available to parallelize element loop"
msgstr ""
-#: omp-offload.c:1335
+#: omp-offload.c:1329
#, gcc-internal-format
msgid "insufficient partitioning available to parallelize tile loop"
msgstr ""
-#: omp-offload.c:1337
+#: omp-offload.c:1331
#, gcc-internal-format
msgid "insufficient partitioning available to parallelize loop"
msgstr ""
@@ -20530,37 +20685,42 @@ msgid ""
"non-%<uniform%> argument"
msgstr ""
-#: optabs.c:4195
+#: optabs.c:4199
#, gcc-internal-format
msgid "indirect jumps are not available on this target"
msgstr ""
-#: opts-common.c:1119
+#: opts-common.c:1124
#, gcc-internal-format
msgid "command line option %qs is not supported by this configuration"
msgstr ""
-#: opts-common.c:1129 opts.c:1773
+#: opts-common.c:1134 opts.c:1817
#, gcc-internal-format
msgid "missing argument to %qs"
msgstr ""
-#: opts-common.c:1135
+#: opts-common.c:1140
#, gcc-internal-format
msgid "argument to %qs should be a non-negative integer"
msgstr ""
-#: opts-common.c:1149
+#: opts-common.c:1147
+#, gcc-internal-format
+msgid "argument to %qs is not between %d and %d"
+msgstr ""
+
+#: opts-common.c:1161
#, gcc-internal-format
msgid "unrecognized argument in option %qs"
msgstr ""
-#: opts-common.c:1160 config/i386/i386.c:4844
+#: opts-common.c:1172 config/i386/i386.c:5081
#, gcc-internal-format
msgid "valid arguments to %qs are: %s; did you mean %qs?"
msgstr ""
-#: opts-common.c:1163 config/i386/i386.c:4847
+#: opts-common.c:1175 config/i386/i386.c:5084
#, gcc-internal-format
msgid "valid arguments to %qs are: %s"
msgstr ""
@@ -20623,212 +20783,230 @@ msgid ""
"femit-struct-debug-detailed=ind:...%>"
msgstr ""
-#: opts.c:586
+#: opts.c:585
#, gcc-internal-format
msgid ""
"argument to %<-O%> should be a non-negative integer, %<g%>, %<s%> or %<fast%>"
msgstr ""
-#: opts.c:739
+#: opts.c:738
#, gcc-internal-format
msgid "section anchors must be disabled when unit-at-a-time is disabled"
msgstr ""
-#: opts.c:743
+#: opts.c:742
#, gcc-internal-format
msgid "toplevel reorder must be disabled when unit-at-a-time is disabled"
msgstr ""
-#: opts.c:757
+#: opts.c:756
#, gcc-internal-format
msgid "transactional memory is not supported with non-call exceptions"
msgstr ""
-#: opts.c:772
+#: opts.c:771
#, gcc-internal-format
msgid "section anchors must be disabled when toplevel reorder is disabled"
msgstr ""
-#: opts.c:827 config/darwin.c:3167
+#: opts.c:826
#, gcc-internal-format
msgid ""
-"-freorder-blocks-and-partition does not work with exceptions on this "
+"%<-freorder-blocks-and-partition%> does not work with exceptions on this "
"architecture"
msgstr ""
-#: opts.c:843
+#: opts.c:842
#, gcc-internal-format
msgid ""
-"-freorder-blocks-and-partition does not support unwind info on this "
+"%<-freorder-blocks-and-partition%> does not support unwind info on this "
"architecture"
msgstr ""
-#: opts.c:861 config/pa/pa.c:532
+#: opts.c:860
#, gcc-internal-format
-msgid "-freorder-blocks-and-partition does not work on this architecture"
+msgid "%<-freorder-blocks-and-partition%> does not work on this architecture"
msgstr ""
-#: opts.c:912
+#: opts.c:898
#, gcc-internal-format
-msgid "-fno-fat-lto-objects are supported only with linker plugin"
+msgid "%<-fno-fat-lto-objects%> are supported only with linker plugin"
msgstr ""
-#: opts.c:925
+#: opts.c:912
#, gcc-internal-format
msgid "%<-fsplit-stack%> is not supported by this compiler configuration"
msgstr ""
-#: opts.c:957
+#: opts.c:958
#, gcc-internal-format
-msgid "-fsanitize=address is incompatible with -fsanitize=kernel-address"
+msgid ""
+"%<-fsanitize=address%> is incompatible with %<-fsanitize=kernel-address%>"
msgstr ""
-#: opts.c:964
+#: opts.c:965
#, gcc-internal-format
msgid ""
-"-fsanitize=address and -fsanitize=kernel-address are incompatible with -"
-"fsanitize=thread"
+"%<-fsanitize=address%> and %<-fsanitize=kernel-address%> are incompatible "
+"with %<-fsanitize=thread%>"
msgstr ""
-#: opts.c:970
+#: opts.c:971
#, gcc-internal-format
-msgid "-fsanitize=leak is incompatible with -fsanitize=thread"
+msgid "%<-fsanitize=leak%> is incompatible with %<-fsanitize=thread%>"
msgstr ""
-#: opts.c:976
-#, gcc-internal-format, gfc-internal-format
-msgid "-fsanitize-recover=%s is not supported"
+#: opts.c:977
+#, gcc-internal-format
+msgid "%<-fsanitize-recover=%s%> is not supported"
+msgstr ""
+
+#: opts.c:1003
+#, gcc-internal-format
+msgid ""
+"%<-fsanitize-address-use-after-scope%> requires %<-fstack-reuse=none%> option"
msgstr ""
-#: opts.c:1005
+#: opts.c:1010
#, gcc-internal-format
-msgid "-fsanitize-address-use-after-scope requires -fstack-reuse=none option"
+msgid "transactional memory is not supported with %<-fsanitize=address%>"
msgstr ""
-#: opts.c:1410
+#: opts.c:1013
+#, gcc-internal-format
+msgid ""
+"transactional memory is not supported with %<-fsanitize=kernel-address%>"
+msgstr ""
+
+#: opts.c:1424
#, gcc-internal-format
msgid "unrecognized include_flags 0x%x passed to print_specific_help"
msgstr ""
-#: opts.c:1610
+#: opts.c:1623
#, gcc-internal-format
-msgid "-fsanitize=all option is not valid"
+msgid "%<-fsanitize=all%> option is not valid"
msgstr ""
-#: opts.c:1642
+#: opts.c:1655
#, gcc-internal-format
msgid ""
"unrecognized argument to -f%ssanitize%s= option: %q.*s; did you mean %qs?"
msgstr ""
-#: opts.c:1649
+#: opts.c:1662
#, gcc-internal-format
msgid "unrecognized argument to -f%ssanitize%s= option: %q.*s"
msgstr ""
-#: opts.c:1828
+#: opts.c:1872
#, gcc-internal-format
msgid "--help argument %q.*s is ambiguous, please be more specific"
msgstr ""
-#: opts.c:1837
+#: opts.c:1881
#, gcc-internal-format
msgid "unrecognized argument to --help= option: %q.*s"
msgstr ""
-#: opts.c:2078
+#: opts.c:2125
#, gcc-internal-format
msgid "HSA has not been enabled during configuration"
msgstr ""
-#: opts.c:2090
+#: opts.c:2137
#, gcc-internal-format
-msgid "-foffload-abi option can be specified only for offload compiler"
+msgid "%<-foffload-abi%> option can be specified only for offload compiler"
msgstr ""
-#: opts.c:2098
+#: opts.c:2145
#, gcc-internal-format, gfc-internal-format
msgid "structure alignment must be a small power of two, not %d"
msgstr ""
-#: opts.c:2217
+#: opts.c:2231
+#, gcc-internal-format
+msgid "invalid arguments for %<-fpatchable_function_entry%>"
+msgstr ""
+
+#: opts.c:2289
#, gcc-internal-format
msgid "unknown stack check parameter %qs"
msgstr ""
-#: opts.c:2249
+#: opts.c:2321
#, gcc-internal-format
msgid ""
"%<-gdwarf%s%> is ambiguous; use %<-gdwarf-%s%> for DWARF version or %<-"
"gdwarf -g%s%> for debug level"
msgstr ""
-#: opts.c:2260
+#: opts.c:2332
#, gcc-internal-format, gfc-internal-format
msgid "dwarf version %d is not supported"
msgstr ""
-#: opts.c:2360
+#: opts.c:2432
#, gcc-internal-format, gfc-internal-format
msgid "%s: --param arguments should be of the form NAME=VALUE"
msgstr ""
-#: opts.c:2371
+#: opts.c:2443
#, gcc-internal-format
msgid "invalid --param name %qs; did you mean %qs?"
msgstr ""
-#: opts.c:2374
+#: opts.c:2446
#, gcc-internal-format
msgid "invalid --param name %qs"
msgstr ""
-#: opts.c:2382
+#: opts.c:2454
#, gcc-internal-format
msgid "invalid --param value %qs"
msgstr ""
-#: opts.c:2504
+#: opts.c:2576
#, gcc-internal-format
msgid "target system does not support debug output"
msgstr ""
-#: opts.c:2513
+#: opts.c:2585
#, gcc-internal-format
msgid "debug format %qs conflicts with prior selection"
msgstr ""
-#: opts.c:2531
+#: opts.c:2603
#, gcc-internal-format
msgid "unrecognized debug output level %qs"
msgstr ""
-#: opts.c:2533
+#: opts.c:2605
#, gcc-internal-format
msgid "debug output level %qs is too high"
msgstr ""
-#: opts.c:2553
+#: opts.c:2625
#, gcc-internal-format
msgid "getting core file size maximum limit: %m"
msgstr ""
-#: opts.c:2557
+#: opts.c:2629
#, gcc-internal-format
msgid "setting core file size limit to maximum: %m"
msgstr ""
-#: opts.c:2602
+#: opts.c:2674
#, gcc-internal-format, gfc-internal-format
msgid "unrecognized gcc debugging option: %c"
msgstr ""
-#: opts.c:2627
+#: opts.c:2699
#, gcc-internal-format, gfc-internal-format
msgid "-Werror=%s: no option -%s"
msgstr ""
-#: opts.c:2629
+#: opts.c:2701
#, gcc-internal-format, gfc-internal-format
msgid "-Werror=%s: -%s is not an option that controls warnings"
msgstr ""
@@ -20849,84 +21027,84 @@ msgstr ""
msgid "maximum value of parameter %qs is %u"
msgstr ""
-#: passes.c:81
+#: passes.c:82
#, gcc-internal-format, gfc-internal-format
msgid "pass %s does not support cloning"
msgstr ""
-#: passes.c:87
+#: passes.c:88
#, gcc-internal-format, gfc-internal-format
msgid ""
"pass %s needs a set_pass_param implementation to handle the extra argument "
"in NEXT_PASS"
msgstr ""
-#: passes.c:1020
+#: passes.c:1023
#, gcc-internal-format
msgid "unrecognized option -fenable"
msgstr ""
-#: passes.c:1022
+#: passes.c:1025
#, gcc-internal-format
msgid "unrecognized option -fdisable"
msgstr ""
-#: passes.c:1030
+#: passes.c:1033
#, gcc-internal-format, gfc-internal-format
msgid "unknown pass %s specified in -fenable"
msgstr ""
-#: passes.c:1032
+#: passes.c:1035
#, gcc-internal-format, gfc-internal-format
msgid "unknown pass %s specified in -fdisable"
msgstr ""
-#: passes.c:1057 passes.c:1146
+#: passes.c:1060 passes.c:1149
#, gcc-internal-format, gfc-internal-format
msgid "enable pass %s for functions in the range of [%u, %u]"
msgstr ""
-#: passes.c:1060 passes.c:1157
+#: passes.c:1063 passes.c:1160
#, gcc-internal-format, gfc-internal-format
msgid "disable pass %s for functions in the range of [%u, %u]"
msgstr ""
-#: passes.c:1096 passes.c:1124
+#: passes.c:1099 passes.c:1127
#, gcc-internal-format, gfc-internal-format
msgid "Invalid range %s in option %s"
msgstr ""
-#: passes.c:1142
+#: passes.c:1145
#, gcc-internal-format, gfc-internal-format
msgid "enable pass %s for function %s"
msgstr ""
-#: passes.c:1153
+#: passes.c:1156
#, gcc-internal-format, gfc-internal-format
msgid "disable pass %s for function %s"
msgstr ""
-#: passes.c:1382
+#: passes.c:1385
#, gcc-internal-format
msgid "invalid pass positioning operation"
msgstr ""
-#: passes.c:1444
+#: passes.c:1447
#, gcc-internal-format
msgid "plugin cannot register a missing pass"
msgstr ""
-#: passes.c:1447
+#: passes.c:1450
#, gcc-internal-format
msgid "plugin cannot register an unnamed pass"
msgstr ""
-#: passes.c:1452
+#: passes.c:1455
#, gcc-internal-format
msgid "plugin cannot register pass %qs without reference pass name"
msgstr ""
-#: passes.c:1471
+#: passes.c:1474
#, gcc-internal-format
msgid "pass %qs not found but is referenced by new pass %qs"
msgstr ""
@@ -20984,51 +21162,51 @@ msgid ""
"%s"
msgstr ""
-#: plugin.c:620
+#: plugin.c:621
#, gcc-internal-format, gfc-internal-format
msgid ""
"cannot find %s in plugin %s\n"
"%s"
msgstr ""
-#: plugin.c:628
+#: plugin.c:630
#, gcc-internal-format, gfc-internal-format
msgid "fail to initialize plugin %s"
msgstr ""
-#: plugin.c:911
+#: plugin.c:904
#, gcc-internal-format
msgid "-iplugindir <dir> option not passed from the gcc driver"
msgstr ""
-#: predict.c:3197
+#: predict.c:3192
#, gcc-internal-format, gfc-internal-format
-msgid "Missing counts for called function %s/%i"
+msgid "Missing counts for called function %s"
msgstr ""
-#: profile.c:452
+#: profile.c:456
#, gcc-internal-format, gfc-internal-format
msgid "corrupted profile info: edge from %i to %i exceeds maximal count"
msgstr ""
-#: profile.c:532
+#: profile.c:539
#, gcc-internal-format
msgid "corrupted profile info: sum_all is smaller than sum_max"
msgstr ""
-#: profile.c:715
+#: profile.c:722
#, gcc-internal-format
msgid "corrupted profile info: profile data is not flow-consistent"
msgstr ""
-#: profile.c:732
+#: profile.c:739
#, gcc-internal-format, gfc-internal-format
msgid ""
"corrupted profile info: number of iterations for basic block %d thought to "
"be %i"
msgstr ""
-#: profile.c:753
+#: profile.c:762
#, gcc-internal-format, gfc-internal-format
msgid ""
"corrupted profile info: number of executions for edge %d-%d thought to be %i"
@@ -21149,9 +21327,10 @@ msgstr ""
msgid "can%'t use %qs as a fixed register"
msgstr ""
-#: reginfo.c:762 config/ia64/ia64.c:5946 config/ia64/ia64.c:5953
-#: config/pa/pa.c:443 config/pa/pa.c:450 config/sh/sh.c:8243
-#: config/sh/sh.c:8250 config/spu/spu.c:4906 config/spu/spu.c:4913
+#: reginfo.c:762 config/arc/arc.c:895 config/arc/arc.c:934
+#: config/ia64/ia64.c:5947 config/ia64/ia64.c:5954 config/pa/pa.c:443
+#: config/pa/pa.c:450 config/sh/sh.c:8251 config/sh/sh.c:8258
+#: config/spu/spu.c:4906 config/spu/spu.c:4913
#, gcc-internal-format, gfc-internal-format
msgid "unknown register name: %s"
msgstr ""
@@ -21171,7 +21350,8 @@ msgstr ""
msgid "register of %qD used for multiple global register variables"
msgstr ""
-#: reginfo.c:789 config/rs6000/rs6000.c:31768
+#: reginfo.c:789 config/powerpcspe/powerpcspe.c:32146
+#: config/rs6000/rs6000.c:28979
#, gcc-internal-format
msgid "conflicts with %qD"
msgstr ""
@@ -21206,17 +21386,17 @@ msgstr ""
msgid "unable to find a register to spill in class %qs"
msgstr ""
-#: reload1.c:4666
+#: reload1.c:4668
#, gcc-internal-format
msgid "%<asm%> operand requires impossible reload"
msgstr ""
-#: reload1.c:6087
+#: reload1.c:6089
#, gcc-internal-format
msgid "%<asm%> operand constraint incompatible with operand size"
msgstr ""
-#: reload1.c:7979
+#: reload1.c:7981
#, gcc-internal-format
msgid "output operand is constant in %<asm%>"
msgstr ""
@@ -21272,62 +21452,62 @@ msgstr ""
msgid "RTL flag check: %s used with unexpected rtx code '%s' in %s, at %s:%d"
msgstr ""
-#: stmt.c:238
+#: stmt.c:241
#, gcc-internal-format
msgid "output operand constraint lacks %<=%>"
msgstr ""
-#: stmt.c:253
+#: stmt.c:256
#, gcc-internal-format
msgid "output constraint %qc for operand %d is not at the beginning"
msgstr ""
-#: stmt.c:276
+#: stmt.c:279
#, gcc-internal-format
msgid "operand constraint contains incorrectly positioned %<+%> or %<=%>"
msgstr ""
-#: stmt.c:283 stmt.c:367
+#: stmt.c:286 stmt.c:370
#, gcc-internal-format
msgid "%<%%%> constraint used with last operand"
msgstr ""
-#: stmt.c:299
+#: stmt.c:302
#, gcc-internal-format
msgid "matching constraint not valid in output operand"
msgstr ""
-#: stmt.c:358
+#: stmt.c:361
#, gcc-internal-format
msgid "input operand constraint contains %qc"
msgstr ""
-#: stmt.c:397
+#: stmt.c:400
#, gcc-internal-format
msgid "matching constraint references invalid operand number"
msgstr ""
-#: stmt.c:431
+#: stmt.c:434
#, gcc-internal-format
msgid "invalid punctuation %qc in constraint"
msgstr ""
-#: stmt.c:447
+#: stmt.c:450
#, gcc-internal-format
msgid "matching constraint does not allow a register"
msgstr ""
-#: stmt.c:541
+#: stmt.c:544
#, gcc-internal-format
msgid "duplicate asm operand name %qs"
msgstr ""
-#: stmt.c:638
+#: stmt.c:641
#, gcc-internal-format
msgid "missing close brace for named operand"
msgstr ""
-#: stmt.c:663
+#: stmt.c:666
#, gcc-internal-format
msgid "undefined named operand %qs"
msgstr ""
@@ -21399,187 +21579,187 @@ msgstr ""
#: symtab.c:299
#, gcc-internal-format
-msgid "%D renamed after being referenced in assembly"
+msgid "%qD renamed after being referenced in assembly"
msgstr ""
-#: symtab.c:978
+#: symtab.c:989
#, gcc-internal-format
msgid "function symbol is not function"
msgstr ""
-#: symtab.c:986
+#: symtab.c:997
#, gcc-internal-format
msgid "variable symbol is not variable"
msgstr ""
-#: symtab.c:992
+#: symtab.c:1003
#, gcc-internal-format
msgid "node has unknown type"
msgstr ""
-#: symtab.c:1001
+#: symtab.c:1012
#, gcc-internal-format
msgid "node not found node->decl->decl_with_vis.symtab_node"
msgstr ""
-#: symtab.c:1009
+#: symtab.c:1020
#, gcc-internal-format
msgid "node differs from node->decl->decl_with_vis.symtab_node"
msgstr ""
-#: symtab.c:1018
+#: symtab.c:1029
#, gcc-internal-format
msgid "assembler name hash list corrupted"
msgstr ""
-#: symtab.c:1031
+#: symtab.c:1042
#, gcc-internal-format
msgid "node not found in symtab assembler name hash"
msgstr ""
-#: symtab.c:1038
+#: symtab.c:1049
#, gcc-internal-format
msgid "double linked list of assembler names corrupted"
msgstr ""
-#: symtab.c:1043
+#: symtab.c:1054
#, gcc-internal-format
msgid "node has body_removed but is definition"
msgstr ""
-#: symtab.c:1048
+#: symtab.c:1059
#, gcc-internal-format
msgid "node is analyzed but it is not a definition"
msgstr ""
-#: symtab.c:1053
+#: symtab.c:1064
#, gcc-internal-format
msgid "node is alias but not implicit alias"
msgstr ""
-#: symtab.c:1058
+#: symtab.c:1069
#, gcc-internal-format
msgid "node is alias but not definition"
msgstr ""
-#: symtab.c:1063
+#: symtab.c:1074
#, gcc-internal-format
msgid "node is weakref but not an transparent_alias"
msgstr ""
-#: symtab.c:1068
+#: symtab.c:1079
#, gcc-internal-format
msgid "node is transparent_alias but not an alias"
msgstr ""
-#: symtab.c:1077
+#: symtab.c:1088
#, gcc-internal-format
msgid "node is in same_comdat_group list but has no comdat_group"
msgstr ""
-#: symtab.c:1082
+#: symtab.c:1093
#, gcc-internal-format
msgid "same_comdat_group list across different groups"
msgstr ""
-#: symtab.c:1087
+#: symtab.c:1098
#, gcc-internal-format
msgid "mixing different types of symbol in same comdat groups is not supported"
msgstr ""
-#: symtab.c:1092
+#: symtab.c:1103
#, gcc-internal-format
msgid "node is alone in a comdat group"
msgstr ""
-#: symtab.c:1099
+#: symtab.c:1110
#, gcc-internal-format
msgid "same_comdat_group is not a circular list"
msgstr ""
-#: symtab.c:1114
+#: symtab.c:1125
#, gcc-internal-format, gfc-internal-format
msgid "comdat-local symbol referred to by %s outside its comdat"
msgstr ""
-#: symtab.c:1124
+#: symtab.c:1135
#, gcc-internal-format
msgid "implicit_section flag is set but section isn't"
msgstr ""
-#: symtab.c:1131
+#: symtab.c:1142
#, gcc-internal-format
msgid "Both section and comdat group is set"
msgstr ""
-#: symtab.c:1143
+#: symtab.c:1154
#, gcc-internal-format
msgid "Alias and target's section differs"
msgstr ""
-#: symtab.c:1150
+#: symtab.c:1161
#, gcc-internal-format
msgid "Alias and target's comdat groups differs"
msgstr ""
-#: symtab.c:1165
+#: symtab.c:1176
#, gcc-internal-format
msgid "Transparent alias and target's assembler names differs"
msgstr ""
-#: symtab.c:1173
+#: symtab.c:1184
#, gcc-internal-format
msgid "Chained transparent aliases"
msgstr ""
-#: symtab.c:1196 symtab.c:1233
+#: symtab.c:1207 symtab.c:1244
#, gcc-internal-format
msgid "symtab_node::verify failed"
msgstr ""
-#: symtab.c:1229
+#: symtab.c:1240
#, gcc-internal-format
msgid ""
"Two symbols with same comdat_group are not linked by the same_comdat_group "
"list."
msgstr ""
-#: symtab.c:1638
+#: symtab.c:1649
#, gcc-internal-format
msgid "function %q+D part of alias cycle"
msgstr ""
-#: symtab.c:1640
+#: symtab.c:1651
#, gcc-internal-format
msgid "variable %q+D part of alias cycle"
msgstr ""
-#: symtab.c:1668
+#: symtab.c:1679
#, gcc-internal-format
msgid "section of alias %q+D must match section of its target"
msgstr ""
-#: targhooks.c:181
+#: targhooks.c:183
#, gcc-internal-format
msgid "__builtin_saveregs not supported by this target"
msgstr ""
-#: targhooks.c:960
+#: targhooks.c:962
#, gcc-internal-format
msgid "nested functions not supported on this target"
msgstr ""
-#: targhooks.c:973
+#: targhooks.c:975
#, gcc-internal-format
msgid "nested function trampolines not supported on this target"
msgstr ""
-#: targhooks.c:1421
+#: targhooks.c:1423
#, gcc-internal-format
msgid "target attribute is not supported on this machine"
msgstr ""
-#: targhooks.c:1435
+#: targhooks.c:1437
#, gcc-internal-format
msgid "#pragma GCC target is not supported for this machine"
msgstr ""
@@ -21611,188 +21791,188 @@ msgstr ""
msgid "ld returned %d exit status"
msgstr ""
-#: toplev.c:897
+#: toplev.c:899
#, gcc-internal-format
msgid "can%'t open %qs for writing: %m"
msgstr ""
-#: toplev.c:919
+#: toplev.c:921
#, gcc-internal-format
msgid "-frecord-gcc-switches is not supported by the current target"
msgstr ""
-#: toplev.c:968
+#: toplev.c:970
#, gcc-internal-format
msgid "stack usage computation not supported for this target"
msgstr ""
-#: toplev.c:1037
+#: toplev.c:1039
#, gcc-internal-format
msgid "stack usage might be unbounded"
msgstr ""
-#: toplev.c:1042
+#: toplev.c:1044
#, gcc-internal-format
msgid "stack usage might be %wd bytes"
msgstr ""
-#: toplev.c:1045
+#: toplev.c:1047
#, gcc-internal-format
msgid "stack usage is %wd bytes"
msgstr ""
-#: toplev.c:1061
+#: toplev.c:1063
#, gcc-internal-format
msgid "can%'t open %s for writing: %m"
msgstr ""
-#: toplev.c:1237
+#: toplev.c:1267
#, gcc-internal-format
msgid "this target does not support %qs"
msgstr ""
-#: toplev.c:1263
+#: toplev.c:1293
#, gcc-internal-format
msgid ""
"Graphite loop optimizations cannot be used (isl is not available) (-"
"fgraphite, -fgraphite-identity, -floop-nest-optimize, -floop-parallelize-all)"
msgstr ""
-#: toplev.c:1273
+#: toplev.c:1303
#, gcc-internal-format
msgid "%<-fcheck-pointer-bounds%> is not supported for this target"
msgstr ""
-#: toplev.c:1281
+#: toplev.c:1311
#, gcc-internal-format
msgid ""
"%<-fcheck-pointer-bounds%> is not supported with %<-fsanitize=bounds-strict%>"
msgstr ""
-#: toplev.c:1288
+#: toplev.c:1318
#, gcc-internal-format
msgid "%<-fcheck-pointer-bounds%> is not supported with %<-fsanitize=bounds%>"
msgstr ""
-#: toplev.c:1296
+#: toplev.c:1326
#, gcc-internal-format
msgid "%<-fcheck-pointer-bounds%> is not supported with Address Sanitizer"
msgstr ""
-#: toplev.c:1304
+#: toplev.c:1334
#, gcc-internal-format
msgid "%<-fcheck-pointer-bounds%> is not supported with Thread Sanitizer"
msgstr ""
-#: toplev.c:1320
+#: toplev.c:1350
#, gcc-internal-format
msgid "%<-fabi-version=1%> is no longer supported"
msgstr ""
-#: toplev.c:1348
+#: toplev.c:1378
#, gcc-internal-format
msgid "instruction scheduling not supported on this target machine"
msgstr ""
-#: toplev.c:1352
+#: toplev.c:1382
#, gcc-internal-format
msgid "this target machine does not have delayed branches"
msgstr ""
-#: toplev.c:1366
+#: toplev.c:1396
#, gcc-internal-format, gfc-internal-format
msgid "-f%sleading-underscore not supported on this target machine"
msgstr ""
-#: toplev.c:1411
+#: toplev.c:1441
#, gcc-internal-format
msgid "could not close zeroed insn dump file %qs: %m"
msgstr ""
-#: toplev.c:1448
+#: toplev.c:1478
#, gcc-internal-format
msgid "target system does not support the %qs debug format"
msgstr ""
-#: toplev.c:1461
+#: toplev.c:1491
#, gcc-internal-format
msgid "variable tracking requested, but useless unless producing debug info"
msgstr ""
-#: toplev.c:1465
+#: toplev.c:1495
#, gcc-internal-format
msgid "variable tracking requested, but not supported by this debug format"
msgstr ""
-#: toplev.c:1503
+#: toplev.c:1533
#, gcc-internal-format
msgid "var-tracking-assignments changes selective scheduling"
msgstr ""
-#: toplev.c:1529
+#: toplev.c:1559
#, gcc-internal-format
msgid "-ffunction-sections not supported for this target"
msgstr ""
-#: toplev.c:1535
+#: toplev.c:1565
#, gcc-internal-format
msgid "-fdata-sections not supported for this target"
msgstr ""
-#: toplev.c:1543
+#: toplev.c:1573
#, gcc-internal-format
msgid "-fprefetch-loop-arrays not supported for this target"
msgstr ""
-#: toplev.c:1549
+#: toplev.c:1579
#, gcc-internal-format
msgid ""
"-fprefetch-loop-arrays not supported for this target (try -march switches)"
msgstr ""
-#: toplev.c:1559
+#: toplev.c:1589
#, gcc-internal-format
msgid "-fprefetch-loop-arrays is not supported with -Os"
msgstr ""
-#: toplev.c:1571
+#: toplev.c:1601
#, gcc-internal-format
msgid "-fassociative-math disabled; other options take precedence"
msgstr ""
-#: toplev.c:1589
+#: toplev.c:1619
#, gcc-internal-format
msgid "-fstack-protector not supported for this target"
msgstr ""
-#: toplev.c:1601
+#: toplev.c:1631
#, gcc-internal-format
msgid ""
"-fsanitize=address and -fsanitize=kernel-address are not supported for this "
"target"
msgstr ""
-#: toplev.c:1610
+#: toplev.c:1640
#, gcc-internal-format
msgid "-fsanitize=address not supported for this target"
msgstr ""
-#: toplev.c:1906
+#: toplev.c:1938
#, gcc-internal-format
msgid "error writing to %s: %m"
msgstr ""
-#: toplev.c:1908
+#: toplev.c:1940
#, gcc-internal-format
msgid "error closing %s: %m"
msgstr ""
-#: toplev.c:2057
+#: toplev.c:2089
#, gcc-internal-format
msgid "self-tests incompatible with -E"
msgstr ""
-#: toplev.c:2072
+#: toplev.c:2104
#, gcc-internal-format
msgid "self-tests are not enabled in this build"
msgstr ""
@@ -21814,7 +21994,7 @@ msgid ""
"or %<transaction_may_cancel_outer%>"
msgstr ""
-#: trans-mem.c:724 trans-mem.c:4841
+#: trans-mem.c:724 trans-mem.c:4848
#, gcc-internal-format
msgid "unsafe function call %qD within atomic transaction"
msgstr ""
@@ -21829,7 +22009,7 @@ msgstr ""
msgid "unsafe indirect function call within atomic transaction"
msgstr ""
-#: trans-mem.c:743 trans-mem.c:4773
+#: trans-mem.c:743 trans-mem.c:4780
#, gcc-internal-format
msgid "unsafe function call %qD within %<transaction_safe%> function"
msgstr ""
@@ -21844,7 +22024,7 @@ msgstr ""
msgid "unsafe indirect function call within %<transaction_safe%> function"
msgstr ""
-#: trans-mem.c:769 trans-mem.c:4813
+#: trans-mem.c:769 trans-mem.c:4820
#, gcc-internal-format
msgid "asm not allowed in atomic transaction"
msgstr ""
@@ -21879,251 +22059,251 @@ msgstr ""
msgid "outer transaction in %<transaction_safe%> function"
msgstr ""
-#: trans-mem.c:4439
+#: trans-mem.c:4446
#, gcc-internal-format
msgid "%Kasm not allowed in %<transaction_safe%> function"
msgstr ""
-#: tree-cfg.c:343
+#: tree-cfg.c:344
#, gcc-internal-format
msgid "ignoring loop annotation"
msgstr ""
-#: tree-cfg.c:2833
+#: tree-cfg.c:2876
#, gcc-internal-format
msgid "constant not recomputed when ADDR_EXPR changed"
msgstr ""
-#: tree-cfg.c:2838
+#: tree-cfg.c:2881
#, gcc-internal-format
msgid "side effects not recomputed when ADDR_EXPR changed"
msgstr ""
-#: tree-cfg.c:2849
+#: tree-cfg.c:2892
#, gcc-internal-format
msgid "DECL_GIMPLE_REG_P set on a variable with address taken"
msgstr ""
-#: tree-cfg.c:2878
+#: tree-cfg.c:2921
#, gcc-internal-format
msgid "SSA name in freelist but still referenced"
msgstr ""
-#: tree-cfg.c:2893
+#: tree-cfg.c:2936
#, gcc-internal-format
msgid "Local declaration from a different function"
msgstr ""
-#: tree-cfg.c:2900 tree-cfg.c:4316
+#: tree-cfg.c:2943 tree-cfg.c:4360
#, gcc-internal-format
msgid "INDIRECT_REF in gimple IL"
msgstr ""
-#: tree-cfg.c:2908
+#: tree-cfg.c:2951
#, gcc-internal-format
msgid "invalid first operand of MEM_REF"
msgstr ""
-#: tree-cfg.c:2914
+#: tree-cfg.c:2957
#, gcc-internal-format
msgid "invalid offset operand of MEM_REF"
msgstr ""
-#: tree-cfg.c:2932
+#: tree-cfg.c:2975
#, gcc-internal-format
msgid "ASSERT_EXPR with an always-false condition"
msgstr ""
-#: tree-cfg.c:2938
+#: tree-cfg.c:2981
#, gcc-internal-format
msgid "MODIFY_EXPR not expected while having tuples"
msgstr ""
-#: tree-cfg.c:2965 tree-ssa.c:982
+#: tree-cfg.c:3008 tree-ssa.c:985
#, gcc-internal-format
msgid "address taken, but ADDRESSABLE bit not set"
msgstr ""
-#: tree-cfg.c:2976
+#: tree-cfg.c:3019
#, gcc-internal-format
msgid "non-integral used in condition"
msgstr ""
-#: tree-cfg.c:2981
+#: tree-cfg.c:3024
#, gcc-internal-format
msgid "invalid conditional operand"
msgstr ""
-#: tree-cfg.c:3004
+#: tree-cfg.c:3047
#, gcc-internal-format
msgid "non-scalar BIT_FIELD_REF, IMAGPART_EXPR or REALPART_EXPR"
msgstr ""
-#: tree-cfg.c:3016
+#: tree-cfg.c:3061
#, gcc-internal-format
msgid "invalid position or size operand to BIT_FIELD_REF"
msgstr ""
-#: tree-cfg.c:3023
+#: tree-cfg.c:3068
#, gcc-internal-format
msgid ""
"integral result type precision does not match field size of BIT_FIELD_REF"
msgstr ""
-#: tree-cfg.c:3032
+#: tree-cfg.c:3077
#, gcc-internal-format
msgid ""
"mode size of non-integral result does not match field size of BIT_FIELD_REF"
msgstr ""
-#: tree-cfg.c:3040
+#: tree-cfg.c:3085
#, gcc-internal-format
msgid "position plus size exceeds size of referenced object in BIT_FIELD_REF"
msgstr ""
-#: tree-cfg.c:3073
+#: tree-cfg.c:3118
#, gcc-internal-format
msgid "non-top-level BIT_FIELD_REF, IMAGPART_EXPR or REALPART_EXPR"
msgstr ""
-#: tree-cfg.c:3083
+#: tree-cfg.c:3128
#, gcc-internal-format
msgid "invalid reference prefix"
msgstr ""
-#: tree-cfg.c:3095
+#: tree-cfg.c:3140
#, gcc-internal-format
msgid "invalid operand to plus/minus, type is a pointer"
msgstr ""
-#: tree-cfg.c:3106
+#: tree-cfg.c:3151
#, gcc-internal-format
msgid "invalid operand to pointer plus, first operand is not a pointer"
msgstr ""
-#: tree-cfg.c:3112
+#: tree-cfg.c:3157
#, gcc-internal-format
msgid ""
"invalid operand to pointer plus, second operand is not an integer type of "
"appropriate width"
msgstr ""
-#: tree-cfg.c:3163
+#: tree-cfg.c:3208
#, gcc-internal-format
msgid "invalid CASE_CHAIN"
msgstr ""
-#: tree-cfg.c:3191
+#: tree-cfg.c:3236
#, gcc-internal-format
msgid "invalid expression for min lvalue"
msgstr ""
-#: tree-cfg.c:3202
+#: tree-cfg.c:3247
#, gcc-internal-format
msgid "invalid operand in indirect reference"
msgstr ""
-#: tree-cfg.c:3231
+#: tree-cfg.c:3276
#, gcc-internal-format
msgid "invalid operands to array reference"
msgstr ""
-#: tree-cfg.c:3242
+#: tree-cfg.c:3287
#, gcc-internal-format
msgid "type mismatch in array reference"
msgstr ""
-#: tree-cfg.c:3251
+#: tree-cfg.c:3296
#, gcc-internal-format
msgid "type mismatch in array range reference"
msgstr ""
-#: tree-cfg.c:3262
+#: tree-cfg.c:3307
#, gcc-internal-format
msgid "type mismatch in real/imagpart reference"
msgstr ""
-#: tree-cfg.c:3272
+#: tree-cfg.c:3317
#, gcc-internal-format
msgid "type mismatch in component reference"
msgstr ""
-#: tree-cfg.c:3289
+#: tree-cfg.c:3334
#, gcc-internal-format
msgid "conversion of an SSA_NAME on the left hand side"
msgstr ""
-#: tree-cfg.c:3296
+#: tree-cfg.c:3341
#, gcc-internal-format
msgid "conversion of register to a different size"
msgstr ""
-#: tree-cfg.c:3311
+#: tree-cfg.c:3356
#, gcc-internal-format
msgid "invalid address operand in MEM_REF"
msgstr ""
-#: tree-cfg.c:3318
+#: tree-cfg.c:3363
#, gcc-internal-format
msgid "invalid offset operand in MEM_REF"
msgstr ""
-#: tree-cfg.c:3328
+#: tree-cfg.c:3373
#, gcc-internal-format
msgid "invalid address operand in TARGET_MEM_REF"
msgstr ""
-#: tree-cfg.c:3335
+#: tree-cfg.c:3380
#, gcc-internal-format
msgid "invalid offset operand in TARGET_MEM_REF"
msgstr ""
-#: tree-cfg.c:3389
+#: tree-cfg.c:3434
#, gcc-internal-format
msgid "gimple call has two targets"
msgstr ""
-#: tree-cfg.c:3403
+#: tree-cfg.c:3448
#, gcc-internal-format
msgid "gimple call has no target"
msgstr ""
-#: tree-cfg.c:3410
+#: tree-cfg.c:3455
#, gcc-internal-format
msgid "invalid function in gimple call"
msgstr ""
-#: tree-cfg.c:3420
+#: tree-cfg.c:3465
#, gcc-internal-format
msgid "non-function in gimple call"
msgstr ""
-#: tree-cfg.c:3431
+#: tree-cfg.c:3476
#, gcc-internal-format
msgid "invalid pure const state for function"
msgstr ""
-#: tree-cfg.c:3440
+#: tree-cfg.c:3485
#, gcc-internal-format
msgid "invalid LHS in gimple call"
msgstr ""
-#: tree-cfg.c:3448
+#: tree-cfg.c:3493
#, gcc-internal-format
msgid "LHS in noreturn call"
msgstr ""
-#: tree-cfg.c:3464
+#: tree-cfg.c:3507
#, gcc-internal-format
msgid "invalid conversion in gimple call"
msgstr ""
-#: tree-cfg.c:3473
+#: tree-cfg.c:3516
#, gcc-internal-format
msgid "invalid static chain in gimple call"
msgstr ""
-#: tree-cfg.c:3484
+#: tree-cfg.c:3527
#, gcc-internal-format
msgid "static chain with function that doesn%'t use one"
msgstr ""
@@ -22134,526 +22314,526 @@ msgstr ""
#. __builtin_unreachable internally, for example when IPA figures
#. out a call cannot happen in a legal program. In such cases,
#. we must make sure arguments are stripped off.
-#: tree-cfg.c:3502
+#: tree-cfg.c:3545
#, gcc-internal-format
msgid "__builtin_unreachable or __builtin_trap call with arguments"
msgstr ""
-#: tree-cfg.c:3525
+#: tree-cfg.c:3568
#, gcc-internal-format
msgid "invalid argument to gimple call"
msgstr ""
-#: tree-cfg.c:3545
+#: tree-cfg.c:3588
#, gcc-internal-format
msgid "invalid operands in gimple comparison"
msgstr ""
-#: tree-cfg.c:3561
+#: tree-cfg.c:3604
#, gcc-internal-format
msgid "mismatching comparison operand types"
msgstr ""
-#: tree-cfg.c:3578
+#: tree-cfg.c:3621
#, gcc-internal-format
msgid "unsupported operation or type for vector comparison returning a boolean"
msgstr ""
-#: tree-cfg.c:3593
+#: tree-cfg.c:3636
#, gcc-internal-format
msgid "non-vector operands in vector comparison"
msgstr ""
-#: tree-cfg.c:3601
+#: tree-cfg.c:3644
#, gcc-internal-format
msgid "invalid vector comparison resulting type"
msgstr ""
-#: tree-cfg.c:3608
+#: tree-cfg.c:3651
#, gcc-internal-format
msgid "bogus comparison result type"
msgstr ""
-#: tree-cfg.c:3630
+#: tree-cfg.c:3673
#, gcc-internal-format
msgid "non-register as LHS of unary operation"
msgstr ""
-#: tree-cfg.c:3636
+#: tree-cfg.c:3679
#, gcc-internal-format
msgid "invalid operand in unary operation"
msgstr ""
-#: tree-cfg.c:3668
+#: tree-cfg.c:3711
#, gcc-internal-format
msgid "invalid types in nop conversion"
msgstr ""
-#: tree-cfg.c:3683
+#: tree-cfg.c:3726
#, gcc-internal-format
msgid "invalid types in address space conversion"
msgstr ""
-#: tree-cfg.c:3697
+#: tree-cfg.c:3740
#, gcc-internal-format
msgid "invalid types in fixed-point conversion"
msgstr ""
-#: tree-cfg.c:3712
+#: tree-cfg.c:3755
#, gcc-internal-format
msgid "invalid types in conversion to floating point"
msgstr ""
-#: tree-cfg.c:3727
+#: tree-cfg.c:3770
#, gcc-internal-format
msgid "invalid types in conversion to integer"
msgstr ""
-#: tree-cfg.c:3741
+#: tree-cfg.c:3784
#, gcc-internal-format
msgid "reduction should convert from vector to element type"
msgstr ""
-#: tree-cfg.c:3769
+#: tree-cfg.c:3812
#, gcc-internal-format
msgid "non-trivial conversion in unary operation"
msgstr ""
-#: tree-cfg.c:3794
+#: tree-cfg.c:3837
#, gcc-internal-format
msgid "non-register as LHS of binary operation"
msgstr ""
-#: tree-cfg.c:3801
+#: tree-cfg.c:3844
#, gcc-internal-format
msgid "invalid operands in binary operation"
msgstr ""
-#: tree-cfg.c:3816
+#: tree-cfg.c:3859
#, gcc-internal-format
msgid "type mismatch in complex expression"
msgstr ""
-#: tree-cfg.c:3845
+#: tree-cfg.c:3888
#, gcc-internal-format
msgid "type mismatch in shift expression"
msgstr ""
-#: tree-cfg.c:3862 tree-cfg.c:3883
+#: tree-cfg.c:3905 tree-cfg.c:3926
#, gcc-internal-format
msgid "type mismatch in widening vector shift expression"
msgstr ""
-#: tree-cfg.c:3904
+#: tree-cfg.c:3947
#, gcc-internal-format
msgid "invalid non-vector operands to vector valued plus"
msgstr ""
-#: tree-cfg.c:3915
+#: tree-cfg.c:3958
#, gcc-internal-format
msgid "invalid (pointer) operands to plus/minus"
msgstr ""
-#: tree-cfg.c:3929
+#: tree-cfg.c:3972
#, gcc-internal-format
msgid "type mismatch in pointer plus expression"
msgstr ""
-#: tree-cfg.c:4009
+#: tree-cfg.c:4052
#, gcc-internal-format
msgid "type mismatch in binary expression"
msgstr ""
-#: tree-cfg.c:4037
+#: tree-cfg.c:4080
#, gcc-internal-format
msgid "non-register as LHS of ternary operation"
msgstr ""
-#: tree-cfg.c:4046
+#: tree-cfg.c:4089
#, gcc-internal-format
msgid "invalid operands in ternary operation"
msgstr ""
-#: tree-cfg.c:4062
+#: tree-cfg.c:4105
#, gcc-internal-format
msgid "type mismatch in widening multiply-accumulate expression"
msgstr ""
-#: tree-cfg.c:4076
+#: tree-cfg.c:4119
#, gcc-internal-format
msgid "type mismatch in fused multiply-add expression"
msgstr ""
-#: tree-cfg.c:4090
+#: tree-cfg.c:4133
#, gcc-internal-format
msgid ""
"the first argument of a VEC_COND_EXPR must be of a boolean vector type of "
"the same number of elements as the result"
msgstr ""
-#: tree-cfg.c:4102 c/c-typeck.c:5141
+#: tree-cfg.c:4145 c/c-typeck.c:5146
#, gcc-internal-format
msgid "type mismatch in conditional expression"
msgstr ""
-#: tree-cfg.c:4114
+#: tree-cfg.c:4157
#, gcc-internal-format
msgid "type mismatch in vector permute expression"
msgstr ""
-#: tree-cfg.c:4126
+#: tree-cfg.c:4169
#, gcc-internal-format
msgid "vector types expected in vector permute expression"
msgstr ""
-#: tree-cfg.c:4140
+#: tree-cfg.c:4183
#, gcc-internal-format
msgid ""
"vectors with different element number found in vector permute expression"
msgstr ""
-#: tree-cfg.c:4153
+#: tree-cfg.c:4196
#, gcc-internal-format
msgid "invalid mask type in vector permute expression"
msgstr ""
-#: tree-cfg.c:4169
+#: tree-cfg.c:4212
#, gcc-internal-format
msgid "type mismatch in sad expression"
msgstr ""
-#: tree-cfg.c:4181
+#: tree-cfg.c:4224
#, gcc-internal-format
msgid "vector types expected in sad expression"
msgstr ""
-#: tree-cfg.c:4194
+#: tree-cfg.c:4237
#, gcc-internal-format
msgid "type mismatch in BIT_INSERT_EXPR"
msgstr ""
-#: tree-cfg.c:4204
+#: tree-cfg.c:4247
#, gcc-internal-format
msgid "not allowed type combination in BIT_INSERT_EXPR"
msgstr ""
-#: tree-cfg.c:4212
+#: tree-cfg.c:4256
#, gcc-internal-format
msgid "invalid position or size in BIT_INSERT_EXPR"
msgstr ""
-#: tree-cfg.c:4222
+#: tree-cfg.c:4266
#, gcc-internal-format
msgid "insertion out of range in BIT_INSERT_EXPR"
msgstr ""
-#: tree-cfg.c:4232
+#: tree-cfg.c:4276
#, gcc-internal-format
msgid "vector insertion not at element boundary"
msgstr ""
-#: tree-cfg.c:4264
+#: tree-cfg.c:4308
#, gcc-internal-format
msgid "non-trivial conversion at assignment"
msgstr ""
-#: tree-cfg.c:4273
+#: tree-cfg.c:4317
#, gcc-internal-format
msgid "non-decl/MEM_REF LHS in clobber statement"
msgstr ""
-#: tree-cfg.c:4291
+#: tree-cfg.c:4335
#, gcc-internal-format
msgid "invalid operand in unary expression"
msgstr ""
-#: tree-cfg.c:4305
+#: tree-cfg.c:4349
#, gcc-internal-format
msgid "type mismatch in address expression"
msgstr ""
-#: tree-cfg.c:4331 tree-cfg.c:4357
+#: tree-cfg.c:4375 tree-cfg.c:4401
#, gcc-internal-format
msgid "invalid rhs for gimple memory store"
msgstr ""
-#: tree-cfg.c:4391 tree-cfg.c:4409 tree-cfg.c:4423
+#: tree-cfg.c:4435 tree-cfg.c:4453 tree-cfg.c:4467
#, gcc-internal-format
msgid "incorrect type of vector CONSTRUCTOR elements"
msgstr ""
-#: tree-cfg.c:4400 tree-cfg.c:4416
+#: tree-cfg.c:4444 tree-cfg.c:4460
#, gcc-internal-format
msgid "incorrect number of vector CONSTRUCTOR elements"
msgstr ""
-#: tree-cfg.c:4432
+#: tree-cfg.c:4476
#, gcc-internal-format
msgid "vector CONSTRUCTOR with non-NULL element index"
msgstr ""
-#: tree-cfg.c:4438
+#: tree-cfg.c:4482
#, gcc-internal-format
msgid "vector CONSTRUCTOR element is not a GIMPLE value"
msgstr ""
-#: tree-cfg.c:4446
+#: tree-cfg.c:4490
#, gcc-internal-format
msgid "non-vector CONSTRUCTOR with elements"
msgstr ""
-#: tree-cfg.c:4505
+#: tree-cfg.c:4549
#, gcc-internal-format
msgid "invalid operand in return statement"
msgstr ""
-#: tree-cfg.c:4520 c/gimple-parser.c:1562
+#: tree-cfg.c:4564 c/gimple-parser.c:1605
#, gcc-internal-format
msgid "invalid conversion in return statement"
msgstr ""
-#: tree-cfg.c:4544
+#: tree-cfg.c:4588
#, gcc-internal-format
msgid "goto destination is neither a label nor a pointer"
msgstr ""
-#: tree-cfg.c:4563
+#: tree-cfg.c:4607
#, gcc-internal-format
msgid "invalid operand to switch statement"
msgstr ""
-#: tree-cfg.c:4571
+#: tree-cfg.c:4615
#, gcc-internal-format
msgid "non-integral type switch statement"
msgstr ""
-#: tree-cfg.c:4579
+#: tree-cfg.c:4623
#, gcc-internal-format
msgid "invalid default case label in switch statement"
msgstr ""
-#: tree-cfg.c:4591
+#: tree-cfg.c:4635
#, gcc-internal-format
msgid "invalid case label in switch statement"
msgstr ""
-#: tree-cfg.c:4598
+#: tree-cfg.c:4642
#, gcc-internal-format
msgid "invalid case range in switch statement"
msgstr ""
-#: tree-cfg.c:4608
+#: tree-cfg.c:4652
#, gcc-internal-format
msgid "type mismatch for case label in switch statement"
msgstr ""
-#: tree-cfg.c:4618
+#: tree-cfg.c:4662
#, gcc-internal-format
msgid "type precision mismatch in switch statement"
msgstr ""
-#: tree-cfg.c:4627
+#: tree-cfg.c:4671
#, gcc-internal-format
msgid "case labels not sorted in switch statement"
msgstr ""
-#: tree-cfg.c:4670
+#: tree-cfg.c:4714
#, gcc-internal-format
msgid "label's context is not the current function decl"
msgstr ""
-#: tree-cfg.c:4679
+#: tree-cfg.c:4723
#, gcc-internal-format
msgid "incorrect entry in label_to_block_map"
msgstr ""
-#: tree-cfg.c:4689
+#: tree-cfg.c:4733
#, gcc-internal-format
msgid "incorrect setting of landing pad number"
msgstr ""
-#: tree-cfg.c:4705
+#: tree-cfg.c:4749
#, gcc-internal-format
msgid "invalid comparison code in gimple cond"
msgstr ""
-#: tree-cfg.c:4713
+#: tree-cfg.c:4757
#, gcc-internal-format
msgid "invalid labels in gimple cond"
msgstr ""
-#: tree-cfg.c:4796 tree-cfg.c:4805
+#: tree-cfg.c:4840 tree-cfg.c:4849
#, gcc-internal-format
msgid "invalid PHI result"
msgstr ""
-#: tree-cfg.c:4815
+#: tree-cfg.c:4859
#, gcc-internal-format
msgid "missing PHI def"
msgstr ""
-#: tree-cfg.c:4829
+#: tree-cfg.c:4873
#, gcc-internal-format
msgid "invalid PHI argument"
msgstr ""
-#: tree-cfg.c:4836
+#: tree-cfg.c:4880
#, gcc-internal-format, gfc-internal-format
msgid "incompatible types in PHI argument %u"
msgstr ""
-#: tree-cfg.c:4934 tree-cfg.c:5266
+#: tree-cfg.c:4978 tree-cfg.c:5310
#, gcc-internal-format
msgid "verify_gimple failed"
msgstr ""
-#: tree-cfg.c:4994
+#: tree-cfg.c:5038
#, gcc-internal-format
msgid "dead STMT in EH table"
msgstr ""
-#: tree-cfg.c:5010
+#: tree-cfg.c:5054
#, gcc-internal-format
msgid "location references block not in block tree"
msgstr ""
-#: tree-cfg.c:5132
+#: tree-cfg.c:5176
#, gcc-internal-format
msgid "gimple_bb (phi) is set to a wrong basic block"
msgstr ""
-#: tree-cfg.c:5141
+#: tree-cfg.c:5185
#, gcc-internal-format
msgid "PHI node with location"
msgstr ""
-#: tree-cfg.c:5152 tree-cfg.c:5201
+#: tree-cfg.c:5196 tree-cfg.c:5245
#, gcc-internal-format
msgid "incorrect sharing of tree nodes"
msgstr ""
-#: tree-cfg.c:5160
+#: tree-cfg.c:5204
#, gcc-internal-format
msgid "virtual PHI with argument locations"
msgstr ""
-#: tree-cfg.c:5189
+#: tree-cfg.c:5233
#, gcc-internal-format
msgid "gimple_bb (stmt) is set to a wrong basic block"
msgstr ""
-#: tree-cfg.c:5225
+#: tree-cfg.c:5269
#, gcc-internal-format
msgid "in statement"
msgstr ""
-#: tree-cfg.c:5242
+#: tree-cfg.c:5286
#, gcc-internal-format
msgid "statement marked for throw, but doesn%'t"
msgstr ""
-#: tree-cfg.c:5248
+#: tree-cfg.c:5292
#, gcc-internal-format
msgid "statement marked for throw in middle of block"
msgstr ""
-#: tree-cfg.c:5288
+#: tree-cfg.c:5332
#, gcc-internal-format
msgid "ENTRY_BLOCK has IL associated with it"
msgstr ""
-#: tree-cfg.c:5295
+#: tree-cfg.c:5339
#, gcc-internal-format
msgid "EXIT_BLOCK has IL associated with it"
msgstr ""
-#: tree-cfg.c:5302
+#: tree-cfg.c:5346
#, gcc-internal-format, gfc-internal-format
msgid "fallthru to exit from bb %d"
msgstr ""
-#: tree-cfg.c:5326
+#: tree-cfg.c:5370
#, gcc-internal-format
msgid "nonlocal label "
msgstr ""
-#: tree-cfg.c:5335
+#: tree-cfg.c:5379
#, gcc-internal-format
msgid "EH landing pad label "
msgstr ""
-#: tree-cfg.c:5344 tree-cfg.c:5353 tree-cfg.c:5378
+#: tree-cfg.c:5388 tree-cfg.c:5397 tree-cfg.c:5422
#, gcc-internal-format
msgid "label "
msgstr ""
-#: tree-cfg.c:5368
+#: tree-cfg.c:5412
#, gcc-internal-format, gfc-internal-format
msgid "control flow in the middle of basic block %d"
msgstr ""
-#: tree-cfg.c:5401
+#: tree-cfg.c:5445
#, gcc-internal-format, gfc-internal-format
msgid "fallthru edge after a control statement in bb %d"
msgstr ""
-#: tree-cfg.c:5414
+#: tree-cfg.c:5458
#, gcc-internal-format, gfc-internal-format
msgid "true/false edge after a non-GIMPLE_COND in bb %d"
msgstr ""
-#: tree-cfg.c:5437 tree-cfg.c:5459 tree-cfg.c:5476 tree-cfg.c:5546
+#: tree-cfg.c:5481 tree-cfg.c:5503 tree-cfg.c:5520 tree-cfg.c:5590
#, gcc-internal-format, gfc-internal-format
msgid "wrong outgoing edge flags at end of bb %d"
msgstr ""
-#: tree-cfg.c:5447
+#: tree-cfg.c:5491
#, gcc-internal-format, gfc-internal-format
msgid "explicit goto at end of bb %d"
msgstr ""
-#: tree-cfg.c:5481
+#: tree-cfg.c:5525
#, gcc-internal-format, gfc-internal-format
msgid "return edge does not point to exit in bb %d"
msgstr ""
-#: tree-cfg.c:5512
+#: tree-cfg.c:5556
#, gcc-internal-format
msgid "found default case not at the start of case vector"
msgstr ""
-#: tree-cfg.c:5520
+#: tree-cfg.c:5564
#, gcc-internal-format
msgid "case labels not sorted: "
msgstr ""
-#: tree-cfg.c:5537
+#: tree-cfg.c:5581
#, gcc-internal-format, gfc-internal-format
msgid "extra outgoing edge %d->%d"
msgstr ""
-#: tree-cfg.c:5560
+#: tree-cfg.c:5604
#, gcc-internal-format, gfc-internal-format
msgid "missing edge %i->%i"
msgstr ""
-#: tree-cfg.c:8890
+#: tree-cfg.c:8963
#, gcc-internal-format
msgid "%<noreturn%> function does return"
msgstr ""
-#: tree-cfg.c:8911
+#: tree-cfg.c:8984
#, gcc-internal-format
msgid "control reaches end of non-void function"
msgstr ""
-#: tree-cfg.c:8977 cp/cvt.c:1016
+#: tree-cfg.c:9050 cp/cvt.c:1016
#, gcc-internal-format
msgid ""
"ignoring return value of %qD, declared with attribute warn_unused_result"
msgstr ""
-#: tree-cfg.c:8982 cp/cvt.c:1023
+#: tree-cfg.c:9055 cp/cvt.c:1023
#, gcc-internal-format
msgid ""
"ignoring return value of function declared with attribute warn_unused_result"
@@ -22664,184 +22844,184 @@ msgstr ""
msgid "memory access check always fail"
msgstr ""
-#: tree-chkp.c:1996
+#: tree-chkp.c:2046
#, gcc-internal-format
msgid "-fcheck-pointer-bounds requires %qs name for internal usage"
msgstr ""
-#: tree-chkp.c:2774
+#: tree-chkp.c:2823
#, gcc-internal-format, gfc-internal-format
msgid "pointer bounds were lost due to unexpected expression %s"
msgstr ""
-#: tree-chkp.c:2862
+#: tree-chkp.c:2911
#, gcc-internal-format, gfc-internal-format
msgid "chkp_get_bounds_by_definition: Unexpected var of type %s"
msgstr ""
-#: tree-chkp.c:2905
+#: tree-chkp.c:2954
#, gcc-internal-format, gfc-internal-format
msgid "chkp_get_bounds_by_definition: Unexpected GIMPLE code %s"
msgstr ""
-#: tree-chkp.c:3595
+#: tree-chkp.c:3651
#, gcc-internal-format, gfc-internal-format
msgid "chkp_make_addressed_object_bounds: Unexpected tree code %s"
msgstr ""
-#: tree-chkp.c:3750
+#: tree-chkp.c:3811
#, gcc-internal-format, gfc-internal-format
msgid "chkp_find_bounds: Unexpected tree code %s"
msgstr ""
-#: tree-chkp.c:3761
+#: tree-chkp.c:3822
#, gcc-internal-format
msgid "chkp_find_bounds: Cannot find bounds for pointer"
msgstr ""
-#: tree-chkp.c:3877
+#: tree-chkp.c:3938
#, gcc-internal-format, gfc-internal-format
msgid "chkp_walk_pointer_assignments: unexpected RHS type: %s"
msgstr ""
-#: tree-diagnostic.c:202
+#: tree-diagnostic.c:201
#, gcc-internal-format
msgid "in definition of macro %qs"
msgstr ""
-#: tree-diagnostic.c:219
+#: tree-diagnostic.c:218
#, gcc-internal-format
msgid "in expansion of macro %qs"
msgstr ""
-#: tree-eh.c:4669
+#: tree-eh.c:4674
#, gcc-internal-format, gfc-internal-format
msgid "BB %i has multiple EH edges"
msgstr ""
-#: tree-eh.c:4681
+#: tree-eh.c:4686
#, gcc-internal-format, gfc-internal-format
msgid "BB %i can not throw but has an EH edge"
msgstr ""
-#: tree-eh.c:4689
+#: tree-eh.c:4694
#, gcc-internal-format, gfc-internal-format
msgid "BB %i last statement has incorrectly set lp"
msgstr ""
-#: tree-eh.c:4695
+#: tree-eh.c:4700
#, gcc-internal-format, gfc-internal-format
msgid "BB %i is missing an EH edge"
msgstr ""
-#: tree-eh.c:4701
+#: tree-eh.c:4706
#, gcc-internal-format, gfc-internal-format
msgid "Incorrect EH edge %i->%i"
msgstr ""
-#: tree-eh.c:4735 tree-eh.c:4754
+#: tree-eh.c:4740 tree-eh.c:4759
#, gcc-internal-format, gfc-internal-format
msgid "BB %i is missing an edge"
msgstr ""
-#: tree-eh.c:4771
+#: tree-eh.c:4776
#, gcc-internal-format, gfc-internal-format
msgid "BB %i too many fallthru edges"
msgstr ""
-#: tree-eh.c:4780
+#: tree-eh.c:4785
#, gcc-internal-format, gfc-internal-format
msgid "BB %i has incorrect edge"
msgstr ""
-#: tree-eh.c:4786
+#: tree-eh.c:4791
#, gcc-internal-format, gfc-internal-format
msgid "BB %i has incorrect fallthru edge"
msgstr ""
-#: tree-inline.c:3553
+#: tree-inline.c:3597
#, gcc-internal-format
msgid "function %q+F can never be copied because it receives a non-local goto"
msgstr ""
-#: tree-inline.c:3560
+#: tree-inline.c:3604
#, gcc-internal-format
msgid ""
"function %q+F can never be copied because it saves address of local label in "
"a static variable"
msgstr ""
-#: tree-inline.c:3600
+#: tree-inline.c:3644
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it uses alloca (override using "
"the always_inline attribute)"
msgstr ""
-#: tree-inline.c:3614
+#: tree-inline.c:3658
#, gcc-internal-format
msgid "function %q+F can never be inlined because it uses setjmp"
msgstr ""
-#: tree-inline.c:3628
+#: tree-inline.c:3672
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it uses variable argument lists"
msgstr ""
-#: tree-inline.c:3640
+#: tree-inline.c:3684
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it uses setjmp-longjmp exception "
"handling"
msgstr ""
-#: tree-inline.c:3648
+#: tree-inline.c:3692
#, gcc-internal-format
msgid "function %q+F can never be inlined because it uses non-local goto"
msgstr ""
-#: tree-inline.c:3660
+#: tree-inline.c:3704
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it uses __builtin_return or "
"__builtin_apply_args"
msgstr ""
-#: tree-inline.c:3680
+#: tree-inline.c:3724
#, gcc-internal-format
msgid "function %q+F can never be inlined because it contains a computed goto"
msgstr ""
-#: tree-inline.c:3781
+#: tree-inline.c:3825
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it is suppressed using -fno-inline"
msgstr ""
-#: tree-inline.c:3789
+#: tree-inline.c:3833
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it uses attributes conflicting "
"with inlining"
msgstr ""
-#: tree-inline.c:4460
+#: tree-inline.c:4504
#, gcc-internal-format
msgid "inlining failed in call to always_inline %q+F: %s"
msgstr ""
-#: tree-inline.c:4463 tree-inline.c:4483
+#: tree-inline.c:4507 tree-inline.c:4527
#, gcc-internal-format
msgid "called from here"
msgstr ""
-#: tree-inline.c:4466 tree-inline.c:4486
+#: tree-inline.c:4510 tree-inline.c:4530
#, gcc-internal-format
msgid "called from this function"
msgstr ""
-#: tree-inline.c:4479
+#: tree-inline.c:4523
#, gcc-internal-format
msgid "inlining failed in call to %q+F: %s"
msgstr ""
@@ -22862,42 +23042,37 @@ msgstr ""
msgid "SSA corruption"
msgstr ""
-#: tree-profile.c:602
+#: tree-profile.c:637
#, gcc-internal-format
msgid "target does not support atomic profile update, single mode is selected"
msgstr ""
-#: tree-ssa-ccp.c:3422
+#: tree-ssa-ccp.c:3421
#, gcc-internal-format, gfc-internal-format
msgid "argument %u null where non-null expected"
msgstr ""
-#: tree-ssa-ccp.c:3427
+#: tree-ssa-ccp.c:3426
#, gcc-internal-format
msgid "in a call to built-in function %qD"
msgstr ""
-#: tree-ssa-ccp.c:3431
+#: tree-ssa-ccp.c:3430
#, gcc-internal-format
msgid "in a call to function %qD declared here"
msgstr ""
-#: tree-ssa-loop-niter.c:2367
-#, gcc-internal-format
-msgid "missed loop optimization, the loop counter may overflow"
-msgstr ""
-
-#: tree-ssa-loop-niter.c:2964
+#: tree-ssa-loop-niter.c:3029
#, gcc-internal-format, gfc-internal-format
msgid "iteration %s invokes undefined behavior"
msgstr ""
-#: tree-ssa-loop-niter.c:2965
+#: tree-ssa-loop-niter.c:3030
#, gcc-internal-format
msgid "within this loop"
msgstr ""
-#: tree-ssa-loop-prefetch.c:2045
+#: tree-ssa-loop-prefetch.c:2064
#, gcc-internal-format
msgid "%<l1-cache-size%> parameter is not a power of two %d"
msgstr ""
@@ -22947,167 +23122,167 @@ msgstr ""
msgid "%qD is used uninitialized in this function"
msgstr ""
-#: tree-ssa-uninit.c:263 tree-ssa-uninit.c:2554
+#: tree-ssa-uninit.c:263 tree-ssa-uninit.c:2579
#, gcc-internal-format
msgid "%qD may be used uninitialized in this function"
msgstr ""
-#: tree-ssa-uninit.c:343
+#: tree-ssa-uninit.c:368
#, gcc-internal-format
msgid "%qE is used uninitialized in this function"
msgstr ""
-#: tree-ssa-uninit.c:353
+#: tree-ssa-uninit.c:378
#, gcc-internal-format
msgid "%qE may be used uninitialized in this function"
msgstr ""
-#: tree-ssa.c:642
+#: tree-ssa.c:645
#, gcc-internal-format, gfc-internal-format
msgid "multiple virtual PHI nodes in BB %d"
msgstr ""
-#: tree-ssa.c:656 tree-ssa.c:685
+#: tree-ssa.c:659 tree-ssa.c:688
#, gcc-internal-format
msgid "virtual definition is not an SSA name"
msgstr ""
-#: tree-ssa.c:672
+#: tree-ssa.c:675
#, gcc-internal-format
msgid "stmt with wrong VUSE"
msgstr ""
-#: tree-ssa.c:702
+#: tree-ssa.c:705
#, gcc-internal-format, gfc-internal-format
msgid "PHI node with wrong VUSE on edge from BB %d"
msgstr ""
-#: tree-ssa.c:728
+#: tree-ssa.c:731
#, gcc-internal-format
msgid "expected an SSA_NAME object"
msgstr ""
-#: tree-ssa.c:734
+#: tree-ssa.c:737
#, gcc-internal-format
msgid "found an SSA_NAME that had been released into the free pool"
msgstr ""
-#: tree-ssa.c:741
+#: tree-ssa.c:744
#, gcc-internal-format
msgid "type mismatch between an SSA_NAME and its symbol"
msgstr ""
-#: tree-ssa.c:747
+#: tree-ssa.c:750
#, gcc-internal-format
msgid "found a virtual definition for a GIMPLE register"
msgstr ""
-#: tree-ssa.c:753
+#: tree-ssa.c:756
#, gcc-internal-format
msgid "virtual SSA name for non-VOP decl"
msgstr ""
-#: tree-ssa.c:759
+#: tree-ssa.c:762
#, gcc-internal-format
msgid "found a real definition for a non-register"
msgstr ""
-#: tree-ssa.c:766
+#: tree-ssa.c:769
#, gcc-internal-format
msgid "found a default name with a non-empty defining statement"
msgstr ""
-#: tree-ssa.c:796
+#: tree-ssa.c:799
#, gcc-internal-format
msgid "RESULT_DECL should be read only when DECL_BY_REFERENCE is set"
msgstr ""
-#: tree-ssa.c:802
+#: tree-ssa.c:805
#, gcc-internal-format, gfc-internal-format
msgid "SSA_NAME created in two different blocks %i and %i"
msgstr ""
-#: tree-ssa.c:811 tree-ssa.c:1145
+#: tree-ssa.c:814 tree-ssa.c:1148
#, gcc-internal-format
msgid "SSA_NAME_DEF_STMT is wrong"
msgstr ""
-#: tree-ssa.c:863
+#: tree-ssa.c:866
#, gcc-internal-format
msgid "missing definition"
msgstr ""
-#: tree-ssa.c:869
+#: tree-ssa.c:872
#, gcc-internal-format, gfc-internal-format
msgid "definition in block %i does not dominate use in block %i"
msgstr ""
-#: tree-ssa.c:877
+#: tree-ssa.c:880
#, gcc-internal-format, gfc-internal-format
msgid "definition in block %i follows the use"
msgstr ""
-#: tree-ssa.c:884
+#: tree-ssa.c:887
#, gcc-internal-format
msgid "SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set"
msgstr ""
-#: tree-ssa.c:892
+#: tree-ssa.c:895
#, gcc-internal-format
msgid "no immediate_use list"
msgstr ""
-#: tree-ssa.c:904
+#: tree-ssa.c:907
#, gcc-internal-format
msgid "wrong immediate use list"
msgstr ""
-#: tree-ssa.c:938
+#: tree-ssa.c:941
#, gcc-internal-format
msgid "incoming edge count does not match number of PHI arguments"
msgstr ""
-#: tree-ssa.c:952
+#: tree-ssa.c:955
#, gcc-internal-format, gfc-internal-format
msgid "PHI argument is missing for edge %d->%d"
msgstr ""
-#: tree-ssa.c:961
+#: tree-ssa.c:964
#, gcc-internal-format
msgid "PHI argument is not SSA_NAME, or invariant"
msgstr ""
-#: tree-ssa.c:989
+#: tree-ssa.c:992
#, gcc-internal-format, gfc-internal-format
msgid "wrong edge %d->%d for PHI argument"
msgstr ""
-#: tree-ssa.c:1064
+#: tree-ssa.c:1067
#, gcc-internal-format
msgid "shared SSA name info"
msgstr ""
-#: tree-ssa.c:1091
+#: tree-ssa.c:1094
#, gcc-internal-format, gfc-internal-format
msgid "AUX pointer initialized for edge %d->%d"
msgstr ""
-#: tree-ssa.c:1117
+#: tree-ssa.c:1120
#, gcc-internal-format
msgid "stmt (%p) marked modified after optimization pass: "
msgstr ""
-#: tree-ssa.c:1184
+#: tree-ssa.c:1186
#, gcc-internal-format
msgid "verify_ssa failed"
msgstr ""
-#: tree-streamer-in.c:342
+#: tree-streamer-in.c:343
#, gcc-internal-format
msgid "machine independent builtin code out of range"
msgstr ""
-#: tree-streamer-in.c:348
+#: tree-streamer-in.c:349
#, gcc-internal-format
msgid "target specific builtin not available"
msgstr ""
@@ -23137,254 +23312,256 @@ msgstr ""
msgid "vector shuffling operation will be expanded piecewise"
msgstr ""
-#: tree-vect-loop.c:3513
+#: tree-vect-loop.c:3639
#, gcc-internal-format
msgid "vectorization did not happen for a simd loop"
msgstr ""
-#: tree-vrp.c:6929 tree-vrp.c:6969 tree-vrp.c:7050
+#: tree-vrp.c:6661 tree-vrp.c:6701 tree-vrp.c:6782
#, gcc-internal-format
msgid "array subscript is above array bounds"
msgstr ""
-#: tree-vrp.c:6953
+#: tree-vrp.c:6685
#, gcc-internal-format
msgid "array subscript is outside array bounds"
msgstr ""
-#: tree-vrp.c:6982 tree-vrp.c:7037
+#: tree-vrp.c:6714 tree-vrp.c:6769
#, gcc-internal-format
msgid "array subscript is below array bounds"
msgstr ""
-#: tree-vrp.c:7864
+#: tree-vrp.c:7596
#, gcc-internal-format
msgid ""
"assuming signed overflow does not occur when simplifying conditional to "
"constant"
msgstr ""
-#: tree-vrp.c:7870 tree-vrp.c:10031 tree-vrp.c:10075 tree-vrp.c:10138
+#: tree-vrp.c:7602
#, gcc-internal-format
msgid "assuming signed overflow does not occur when simplifying conditional"
msgstr ""
-#: tree-vrp.c:7914
+#: tree-vrp.c:7646
#, gcc-internal-format
msgid "comparison always false due to limited range of data type"
msgstr ""
-#: tree-vrp.c:7916
+#: tree-vrp.c:7648
#, gcc-internal-format
msgid "comparison always true due to limited range of data type"
msgstr ""
-#: tree-vrp.c:9630
+#: tree-vrp.c:9350
#, gcc-internal-format
msgid ""
"assuming signed overflow does not occur when simplifying %</%> or %<%%%> to "
"%<>>%> or %<&%>"
msgstr ""
-#: tree-vrp.c:9696
+#: tree-vrp.c:9416
#, gcc-internal-format
msgid ""
"assuming signed overflow does not occur when simplifying %<min/max (X,Y)%> "
"to %<X%> or %<Y%>"
msgstr ""
-#: tree-vrp.c:9747
+#: tree-vrp.c:9467
#, gcc-internal-format
msgid ""
"assuming signed overflow does not occur when simplifying %<abs (X)%> to %<X"
"%> or %<-X%>"
msgstr ""
-#: tree.c:1832
+#: tree.c:1830
#, gcc-internal-format
msgid "non-constant element in constant CONSTRUCTOR"
msgstr ""
-#: tree.c:1834
+#: tree.c:1832
#, gcc-internal-format
msgid "side-effects element in no-side-effects CONSTRUCTOR"
msgstr ""
-#: tree.c:4849
+#: tree.c:4859
#, gcc-internal-format
msgid "ignoring attributes applied to %qT after definition"
msgstr ""
-#: tree.c:6328
+#: tree.c:6301
#, gcc-internal-format
msgid "%q+D already declared with dllexport attribute: dllimport ignored"
msgstr ""
-#: tree.c:6340
+#: tree.c:6313
#, gcc-internal-format
msgid ""
"%q+D redeclared without dllimport attribute after being referenced with dll "
"linkage"
msgstr ""
-#: tree.c:6354
+#: tree.c:6327
#, gcc-internal-format
msgid "%q+D redeclared without dllimport attribute: previous dllimport ignored"
msgstr ""
-#: tree.c:6397 tree.c:6407 tree.c:6417 c-family/c-attribs.c:420
-#: c-family/c-attribs.c:439 c-family/c-attribs.c:457 c-family/c-attribs.c:487
-#: c-family/c-attribs.c:515 c-family/c-attribs.c:543 c-family/c-attribs.c:559
-#: c-family/c-attribs.c:574 c-family/c-attribs.c:592 c-family/c-attribs.c:617
-#: c-family/c-attribs.c:649 c-family/c-attribs.c:666 c-family/c-attribs.c:683
-#: c-family/c-attribs.c:721 c-family/c-attribs.c:744 c-family/c-attribs.c:761
-#: c-family/c-attribs.c:790 c-family/c-attribs.c:811 c-family/c-attribs.c:832
-#: c-family/c-attribs.c:859 c-family/c-attribs.c:889 c-family/c-attribs.c:926
-#: c-family/c-attribs.c:979 c-family/c-attribs.c:1037 c-family/c-attribs.c:1095
-#: c-family/c-attribs.c:1184 c-family/c-attribs.c:1214
-#: c-family/c-attribs.c:1268 c-family/c-attribs.c:1680
-#: c-family/c-attribs.c:1717 c-family/c-attribs.c:1773
-#: c-family/c-attribs.c:1829 c-family/c-attribs.c:1907
-#: c-family/c-attribs.c:1989 c-family/c-attribs.c:2048
-#: c-family/c-attribs.c:2067 c-family/c-attribs.c:2175
-#: c-family/c-attribs.c:2191 c-family/c-attribs.c:2207
-#: c-family/c-attribs.c:2228 c-family/c-attribs.c:2298
-#: c-family/c-attribs.c:2325 c-family/c-attribs.c:2373
-#: c-family/c-attribs.c:2553 c-family/c-attribs.c:2574
-#: c-family/c-attribs.c:2687 c-family/c-attribs.c:2714
-#: c-family/c-attribs.c:2875 c-family/c-attribs.c:2898
-#: c-family/c-attribs.c:2937 c-family/c-attribs.c:3019
-#: c-family/c-attribs.c:3062 c-family/c-attribs.c:3078
-#: c-family/c-attribs.c:3172 c-family/c-common.c:5516 config/darwin.c:2062
-#: config/arm/arm.c:6741 config/arm/arm.c:6769 config/arm/arm.c:6786
-#: config/avr/avr.c:9460 config/h8300/h8300.c:5480 config/h8300/h8300.c:5504
-#: config/i386/i386.c:7838 config/i386/i386.c:41571 config/ia64/ia64.c:762
-#: config/rs6000/rs6000.c:35369 config/spu/spu.c:3741
-#: ada/gcc-interface/utils.c:6136 ada/gcc-interface/utils.c:6153
-#: ada/gcc-interface/utils.c:6169 ada/gcc-interface/utils.c:6195
-#: lto/lto-lang.c:241
+#: tree.c:6370 tree.c:6380 tree.c:6390 c-family/c-attribs.c:434
+#: c-family/c-attribs.c:453 c-family/c-attribs.c:471 c-family/c-attribs.c:501
+#: c-family/c-attribs.c:529 c-family/c-attribs.c:557 c-family/c-attribs.c:598
+#: c-family/c-attribs.c:632 c-family/c-attribs.c:648 c-family/c-attribs.c:665
+#: c-family/c-attribs.c:681 c-family/c-attribs.c:707 c-family/c-attribs.c:722
+#: c-family/c-attribs.c:754 c-family/c-attribs.c:771 c-family/c-attribs.c:788
+#: c-family/c-attribs.c:826 c-family/c-attribs.c:849 c-family/c-attribs.c:866
+#: c-family/c-attribs.c:895 c-family/c-attribs.c:916 c-family/c-attribs.c:937
+#: c-family/c-attribs.c:964 c-family/c-attribs.c:994 c-family/c-attribs.c:1031
+#: c-family/c-attribs.c:1084 c-family/c-attribs.c:1142
+#: c-family/c-attribs.c:1200 c-family/c-attribs.c:1289
+#: c-family/c-attribs.c:1319 c-family/c-attribs.c:1373
+#: c-family/c-attribs.c:1785 c-family/c-attribs.c:1822
+#: c-family/c-attribs.c:1883 c-family/c-attribs.c:1939
+#: c-family/c-attribs.c:2017 c-family/c-attribs.c:2099
+#: c-family/c-attribs.c:2158 c-family/c-attribs.c:2177
+#: c-family/c-attribs.c:2285 c-family/c-attribs.c:2301
+#: c-family/c-attribs.c:2317 c-family/c-attribs.c:2338
+#: c-family/c-attribs.c:2408 c-family/c-attribs.c:2435
+#: c-family/c-attribs.c:2483 c-family/c-attribs.c:2663
+#: c-family/c-attribs.c:2684 c-family/c-attribs.c:2797
+#: c-family/c-attribs.c:2824 c-family/c-attribs.c:2985
+#: c-family/c-attribs.c:3008 c-family/c-attribs.c:3047
+#: c-family/c-attribs.c:3129 c-family/c-attribs.c:3172
+#: c-family/c-attribs.c:3188 c-family/c-attribs.c:3282 c-family/c-common.c:5530
+#: config/darwin.c:2062 config/arm/arm.c:6772 config/arm/arm.c:6800
+#: config/arm/arm.c:6817 config/avr/avr.c:9714 config/h8300/h8300.c:5480
+#: config/h8300/h8300.c:5504 config/i386/i386.c:8091 config/i386/i386.c:42179
+#: config/ia64/ia64.c:762 config/powerpcspe/powerpcspe.c:35746
+#: config/rs6000/rs6000.c:32579 config/spu/spu.c:3742
+#: ada/gcc-interface/utils.c:6168 ada/gcc-interface/utils.c:6185
+#: ada/gcc-interface/utils.c:6201 ada/gcc-interface/utils.c:6227
+#: lto/lto-lang.c:246
#, gcc-internal-format
msgid "%qE attribute ignored"
msgstr ""
-#: tree.c:6435
+#: tree.c:6408
#, gcc-internal-format
msgid "inline function %q+D declared as dllimport: attribute ignored"
msgstr ""
-#: tree.c:6443
+#: tree.c:6416
#, gcc-internal-format
msgid "function %q+D definition is marked dllimport"
msgstr ""
-#: tree.c:6451
+#: tree.c:6424
#, gcc-internal-format
msgid "variable %q+D definition is marked dllimport"
msgstr ""
-#: tree.c:6477
+#: tree.c:6450
#, gcc-internal-format
msgid "external linkage required for symbol %q+D because of %qE attribute"
msgstr ""
-#: tree.c:6491
+#: tree.c:6464
#, gcc-internal-format
msgid ""
"%qE implies default visibility, but %qD has already been declared with a "
"different visibility"
msgstr ""
-#: tree.c:8387
+#: tree.c:8415
#, gcc-internal-format
msgid "arrays of functions are not meaningful"
msgstr ""
-#: tree.c:8559
+#: tree.c:8582
#, gcc-internal-format
msgid "function return type cannot be function"
msgstr ""
-#: tree.c:9847 tree.c:9932 tree.c:9993
+#: tree.c:9863 tree.c:9948 tree.c:10009
#, gcc-internal-format, gfc-internal-format
msgid "tree check: %s, have %s in %s, at %s:%d"
msgstr ""
-#: tree.c:9884
+#: tree.c:9900
#, gcc-internal-format, gfc-internal-format
msgid "tree check: expected none of %s, have %s in %s, at %s:%d"
msgstr ""
-#: tree.c:9897
+#: tree.c:9913
#, gcc-internal-format
msgid "tree check: expected class %qs, have %qs (%s) in %s, at %s:%d"
msgstr ""
-#: tree.c:9946
+#: tree.c:9962
#, gcc-internal-format
msgid "tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d"
msgstr ""
-#: tree.c:9959
+#: tree.c:9975
#, gcc-internal-format, gfc-internal-format
msgid "tree check: expected omp_clause %s, have %s in %s, at %s:%d"
msgstr ""
-#: tree.c:10019
+#: tree.c:10035
#, gcc-internal-format
msgid ""
"tree check: expected tree that contains %qs structure, have %qs in %s, at %s:"
"%d"
msgstr ""
-#: tree.c:10033
+#: tree.c:10049
#, gcc-internal-format, gfc-internal-format
msgid ""
"tree check: accessed elt %d of tree_int_cst with %d elts in %s, at %s:%d"
msgstr ""
-#: tree.c:10045
+#: tree.c:10061
#, gcc-internal-format, gfc-internal-format
msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d"
msgstr ""
-#: tree.c:10058
+#: tree.c:10074
#, gcc-internal-format, gfc-internal-format
msgid "tree check: accessed operand %d of %s with %d operands in %s, at %s:%d"
msgstr ""
-#: tree.c:10071
+#: tree.c:10087
#, gcc-internal-format, gfc-internal-format
msgid ""
"tree check: accessed operand %d of omp_clause %s with %d operands in %s, at "
"%s:%d"
msgstr ""
-#: tree.c:12883
+#: tree.c:12900
#, gcc-internal-format
msgid "%qD is deprecated: %s"
msgstr ""
-#: tree.c:12886
+#: tree.c:12903
#, gcc-internal-format
msgid "%qD is deprecated"
msgstr ""
-#: tree.c:12910 tree.c:12932
+#: tree.c:12927 tree.c:12949
#, gcc-internal-format
msgid "%qE is deprecated: %s"
msgstr ""
-#: tree.c:12913 tree.c:12935
+#: tree.c:12930 tree.c:12952
#, gcc-internal-format
msgid "%qE is deprecated"
msgstr ""
-#: tree.c:12919 tree.c:12940
+#: tree.c:12936 tree.c:12957
#, gcc-internal-format, gfc-internal-format
msgid "type is deprecated: %s"
msgstr ""
-#: tree.c:12922 tree.c:12943
+#: tree.c:12939 tree.c:12960
#, gcc-internal-format
msgid "type is deprecated"
msgstr ""
@@ -23407,321 +23584,292 @@ msgstr ""
#. - aggregates may have new TYPE_FIELDS list that list variants of
#. the main variant TYPE_FIELDS.
#. - vector types may differ by TYPE_VECTOR_OPAQUE
-#. - TYPE_METHODS is always NULL for variant types and maintained for
-#. main variant only.
#.
#. Convenience macro for matching individual fields.
-#: tree.c:13370
+#: tree.c:13435
#, gcc-internal-format
msgid "type variant differs by "
msgstr ""
-#: tree.c:13411
+#: tree.c:13476
#, gcc-internal-format
msgid "type variant has different TYPE_SIZE_UNIT"
msgstr ""
-#: tree.c:13413
+#: tree.c:13478
#, gcc-internal-format
msgid "type variant's TYPE_SIZE_UNIT"
msgstr ""
-#: tree.c:13415
+#: tree.c:13480
#, gcc-internal-format
msgid "type's TYPE_SIZE_UNIT"
msgstr ""
-#: tree.c:13435
+#: tree.c:13500
#, gcc-internal-format
msgid "type variant with TYPE_ALIAS_SET_KNOWN_P"
msgstr ""
-#: tree.c:13448
+#: tree.c:13513
#, gcc-internal-format
msgid "type variant has different TYPE_VFIELD"
msgstr ""
-#: tree.c:13465
-#, gcc-internal-format
-msgid "type variant has TYPE_METHODS"
-msgstr ""
-
-#: tree.c:13490
+#: tree.c:13549
#, gcc-internal-format
msgid "type variant has different TYPE_BINFO"
msgstr ""
-#: tree.c:13492
+#: tree.c:13551
#, gcc-internal-format
msgid "type variant's TYPE_BINFO"
msgstr ""
-#: tree.c:13494
+#: tree.c:13553
#, gcc-internal-format
msgid "type's TYPE_BINFO"
msgstr ""
-#: tree.c:13532
+#: tree.c:13591
#, gcc-internal-format
msgid "type variant has different TYPE_FIELDS"
msgstr ""
-#: tree.c:13534
+#: tree.c:13593
#, gcc-internal-format
msgid "first mismatch is field"
msgstr ""
-#: tree.c:13536
+#: tree.c:13595
#, gcc-internal-format
msgid "and field"
msgstr ""
-#: tree.c:13553
+#: tree.c:13612
#, gcc-internal-format
msgid "type variant has different TREE_TYPE"
msgstr ""
-#: tree.c:13555 tree.c:13566
+#: tree.c:13614 tree.c:13625
#, gcc-internal-format
msgid "type variant's TREE_TYPE"
msgstr ""
-#: tree.c:13557 tree.c:13568
+#: tree.c:13616 tree.c:13627
#, gcc-internal-format
msgid "type's TREE_TYPE"
msgstr ""
-#: tree.c:13564
+#: tree.c:13623
#, gcc-internal-format
msgid "type is not compatible with its variant"
msgstr ""
-#: tree.c:13867
+#: tree.c:13926
#, gcc-internal-format
msgid "Main variant is not defined"
msgstr ""
-#: tree.c:13872
+#: tree.c:13931
#, gcc-internal-format
msgid "TYPE_MAIN_VARIANT has different TYPE_MAIN_VARIANT"
msgstr ""
-#: tree.c:13884
+#: tree.c:13943
#, gcc-internal-format
msgid "TYPE_CANONICAL has different TYPE_CANONICAL"
msgstr ""
-#: tree.c:13902
+#: tree.c:13961
#, gcc-internal-format
msgid "TYPE_CANONICAL is not compatible"
msgstr ""
-#: tree.c:13910
+#: tree.c:13969
#, gcc-internal-format
msgid "TYPE_MODE of TYPE_CANONICAL is not compatible"
msgstr ""
-#: tree.c:13918
+#: tree.c:13977
#, gcc-internal-format
msgid "TYPE_CANONICAL of main variant is not main variant"
msgstr ""
-#: tree.c:13934
+#: tree.c:13993
#, gcc-internal-format
msgid "TYPE_VFIELD is not FIELD_DECL nor TREE_LIST"
msgstr ""
-#: tree.c:13944
+#: tree.c:14003
#, gcc-internal-format
msgid "TYPE_NEXT_PTR_TO is not POINTER_TYPE"
msgstr ""
-#: tree.c:13954
+#: tree.c:14013
#, gcc-internal-format
msgid "TYPE_NEXT_REF_TO is not REFERENCE_TYPE"
msgstr ""
-#: tree.c:13972
-#, gcc-internal-format
-msgid "TYPE_MINVAL non-NULL"
-msgstr ""
-
-#: tree.c:13984
-#, gcc-internal-format
-msgid "TYPE_METHODS is not FUNCTION_DECL, TEMPLATE_DECL nor error_mark_node"
-msgstr ""
-
-#: tree.c:13995
+#: tree.c:14037
#, gcc-internal-format
msgid "TYPE_METHOD_BASETYPE is not record nor union"
msgstr ""
-#: tree.c:14006
+#: tree.c:14048
#, gcc-internal-format
msgid "TYPE_OFFSET_BASETYPE is not record nor union"
msgstr ""
-#: tree.c:14024
+#: tree.c:14066
#, gcc-internal-format
msgid "TYPE_ARRAY_MAX_SIZE not INTEGER_CST"
msgstr ""
-#: tree.c:14031
+#: tree.c:14073
#, gcc-internal-format
-msgid "TYPE_MAXVAL non-NULL"
+msgid "TYPE_MAX_VALUE_RAW non-NULL"
msgstr ""
-#: tree.c:14043
+#: tree.c:14085
#, gcc-internal-format
msgid "TYPE_BINFO is not TREE_BINFO"
msgstr ""
-#: tree.c:14051
-#, gcc-internal-format
-msgid "TYPE_BINFO type is not TYPE_MAIN_VARIANT"
-msgstr ""
-
-#: tree.c:14058
+#: tree.c:14092
#, gcc-internal-format
msgid "TYPE_LANG_SLOT_1 (binfo) field is non-NULL"
msgstr ""
-#: tree.c:14074
+#: tree.c:14108
#, gcc-internal-format
msgid "Enum value is not CONST_DECL or INTEGER_CST"
msgstr ""
-#: tree.c:14082
+#: tree.c:14116
#, gcc-internal-format
msgid "Enum value type is not INTEGER_TYPE nor convertible to the enum"
msgstr ""
-#: tree.c:14089
+#: tree.c:14123
#, gcc-internal-format
msgid "Enum value name is not IDENTIFIER_NODE"
msgstr ""
-#: tree.c:14099
+#: tree.c:14133
#, gcc-internal-format
msgid "Array TYPE_DOMAIN is not integer type"
msgstr ""
-#: tree.c:14108
+#: tree.c:14142
#, gcc-internal-format
msgid "TYPE_FIELDS defined in incomplete type"
msgstr ""
-#: tree.c:14128
+#: tree.c:14164
#, gcc-internal-format
msgid "Wrong tree in TYPE_FIELDS list"
msgstr ""
-#: tree.c:14143
+#: tree.c:14179
#, gcc-internal-format
msgid "TYPE_CACHED_VALUES_P is %i while TYPE_CACHED_VALUES is %p"
msgstr ""
-#: tree.c:14149
+#: tree.c:14185
#, gcc-internal-format
msgid "TYPE_CACHED_VALUES is not TREE_VEC"
msgstr ""
-#: tree.c:14162
+#: tree.c:14198
#, gcc-internal-format
msgid "wrong TYPE_CACHED_VALUES entry"
msgstr ""
-#: tree.c:14175
+#: tree.c:14211
#, gcc-internal-format
msgid "TREE_PURPOSE is non-NULL in TYPE_ARG_TYPES list"
msgstr ""
-#: tree.c:14181
+#: tree.c:14217
#, gcc-internal-format
msgid "Wrong entry in TYPE_ARG_TYPES list"
msgstr ""
-#: tree.c:14188
+#: tree.c:14224
#, gcc-internal-format
msgid "TYPE_VALUES_RAW field is non-NULL"
msgstr ""
-#: tree.c:14200
+#: tree.c:14236
#, gcc-internal-format
msgid "TYPE_CACHED_VALUES_P is set while it should not"
msgstr ""
-#: tree.c:14206
+#: tree.c:14242
#, gcc-internal-format
msgid "TYPE_STRING_FLAG is set on wrong type code"
msgstr ""
-#: tree.c:14218
-#, gcc-internal-format
-msgid ""
-"TYPE_STRING_FLAG is set on type that does not look like char nor array of "
-"chars"
-msgstr ""
-
-#: tree.c:14230
+#: tree.c:14252
#, gcc-internal-format
msgid "TYPE_METHOD_BASETYPE is not main variant"
msgstr ""
-#: tree.c:14237
+#: tree.c:14259
#, gcc-internal-format
msgid "verify_type failed"
msgstr ""
-#: value-prof.c:515
+#: value-prof.c:510
#, gcc-internal-format
msgid "dead histogram"
msgstr ""
-#: value-prof.c:544
+#: value-prof.c:539
#, gcc-internal-format
msgid ""
"Histogram value statement does not correspond to the statement it is "
"associated with"
msgstr ""
-#: value-prof.c:556
+#: value-prof.c:551
#, gcc-internal-format
msgid "verify_histograms failed"
msgstr ""
-#: value-prof.c:613
+#: value-prof.c:607
#, gcc-internal-format, gfc-internal-format
msgid ""
"corrupted value profile: %s profile counter (%d out of %d) inconsistent with "
"basic-block count (%d)"
msgstr ""
-#: var-tracking.c:7125
+#: var-tracking.c:7126
#, gcc-internal-format
msgid ""
"variable tracking size limit exceeded with -fvar-tracking-assignments, "
"retrying without"
msgstr ""
-#: var-tracking.c:7129
+#: var-tracking.c:7130
#, gcc-internal-format
msgid "variable tracking size limit exceeded"
msgstr ""
#: varasm.c:323
#, gcc-internal-format
-msgid "%+D causes a section type conflict with %D"
+msgid "%+qD causes a section type conflict with %qD"
msgstr ""
#: varasm.c:326
#, gcc-internal-format
-msgid "section type conflict with %D"
+msgid "section type conflict with %qD"
msgstr ""
#: varasm.c:331
#, gcc-internal-format
-msgid "%+D causes a section type conflict"
+msgid "%+qD causes a section type conflict"
msgstr ""
#: varasm.c:333
@@ -23787,95 +23935,100 @@ msgstr ""
msgid "register name given for non-register variable %q+D"
msgstr ""
-#: varasm.c:2017
+#: varasm.c:1859
+#, gcc-internal-format
+msgid "Patchable function entry > size"
+msgstr ""
+
+#: varasm.c:2058
#, gcc-internal-format
msgid "thread-local COMMON data not implemented"
msgstr ""
-#: varasm.c:2050
+#: varasm.c:2091
#, gcc-internal-format
msgid ""
"requested alignment for %q+D is greater than implemented alignment of %wu"
msgstr ""
-#: varasm.c:2153 c/c-decl.c:4989 c/c-parser.c:1359
+#: varasm.c:2194 c/c-decl.c:4969 c/c-parser.c:1361
#, gcc-internal-format
msgid "storage size of %q+D isn%'t known"
msgstr ""
-#: varasm.c:4812
+#: varasm.c:4853
#, gcc-internal-format
msgid "initializer for integer/fixed-point value is too complicated"
msgstr ""
-#: varasm.c:4817
+#: varasm.c:4858
#, gcc-internal-format
msgid "initializer for floating value is not a floating constant"
msgstr ""
-#: varasm.c:5126
+#: varasm.c:5167
#, gcc-internal-format
msgid "invalid initial value for member %qE"
msgstr ""
-#: varasm.c:5386
+#: varasm.c:5427
#, gcc-internal-format
-msgid "%+D declared weak after being used"
+msgid "%+qD declared weak after being used"
msgstr ""
-#: varasm.c:5438
+#: varasm.c:5479
#, gcc-internal-format
msgid ""
"weak declaration of %q+D being applied to a already existing, static "
"definition"
msgstr ""
-#: varasm.c:5474
+#: varasm.c:5515
#, gcc-internal-format
msgid "weak declaration of %q+D must be public"
msgstr ""
-#: varasm.c:5478
+#: varasm.c:5519
#, gcc-internal-format
msgid "weak declaration of %q+D not supported"
msgstr ""
-#: varasm.c:5507 varasm.c:5811
+#: varasm.c:5548 varasm.c:5852
#, gcc-internal-format
msgid "only weak aliases are supported in this configuration"
msgstr ""
-#: varasm.c:5701
+#: varasm.c:5742
#, gcc-internal-format
msgid "weakref is not supported in this configuration"
msgstr ""
-#: varasm.c:5733
+#: varasm.c:5774
#, gcc-internal-format
msgid "ifunc is not supported on this target"
msgstr ""
-#: varasm.c:5791
+#: varasm.c:5832
#, gcc-internal-format
msgid "weakref %q+D ultimately targets itself"
msgstr ""
-#: varasm.c:5793
+#: varasm.c:5834
#, gcc-internal-format
msgid "weakref %q+D must have static linkage"
msgstr ""
-#: varasm.c:5800
+#: varasm.c:5841
#, gcc-internal-format
msgid "alias definitions not supported in this configuration"
msgstr ""
-#: varasm.c:5808
+#: varasm.c:5849
#, gcc-internal-format
msgid "ifunc is not supported in this configuration"
msgstr ""
-#: varasm.c:6026 config/sol2.c:158 config/i386/winnt.c:261
+#: varasm.c:6067 config/sol2.c:158 config/i386/winnt.c:261
#, gcc-internal-format
msgid "visibility attribute not supported in this configuration; ignored"
msgstr ""
@@ -23886,12 +24039,12 @@ msgstr ""
msgid "no sclass for %s stab (0x%x)"
msgstr ""
-#: lto-streamer.h:1014
+#: lto-streamer.h:1001
#, gcc-internal-format, gfc-internal-format
msgid "bytecode stream: expected tag %s instead of %s"
msgstr ""
-#: lto-streamer.h:1024
+#: lto-streamer.h:1011
#, gcc-internal-format, gfc-internal-format
msgid "bytecode stream: tag %s is not in the expected range [%s, %s]"
msgstr ""
@@ -23928,445 +24081,455 @@ msgstr ""
msgid "__sec_implicit_index argument %d must be less than the rank of %qE"
msgstr ""
-#: c-family/c-attribs.c:409
+#: c-family/c-attribs.c:423
#, gcc-internal-format
msgid "%qE attribute ignored for field of type %qT"
msgstr ""
-#: c-family/c-attribs.c:506 c-family/c-attribs.c:534 c-family/c-attribs.c:640
-#: ada/gcc-interface/utils.c:6127
+#: c-family/c-attribs.c:520 c-family/c-attribs.c:548 c-family/c-attribs.c:745
+#: ada/gcc-interface/utils.c:6159
#, gcc-internal-format
msgid "%qE attribute ignored due to conflict with attribute %qs"
msgstr ""
-#: c-family/c-attribs.c:704 c-family/c-attribs.c:710 c-family/c-attribs.c:3024
-#: c-family/c-attribs.c:3046 c-family/c-attribs.c:3052
+#: c-family/c-attribs.c:604
+#, gcc-internal-format
+msgid "no_sanitize argument not a string"
+msgstr ""
+
+#: c-family/c-attribs.c:614
+#, gcc-internal-format, gfc-internal-format
+msgid "wrong argument: \"%s\""
+msgstr ""
+
+#: c-family/c-attribs.c:809 c-family/c-attribs.c:815 c-family/c-attribs.c:3134
+#: c-family/c-attribs.c:3156 c-family/c-attribs.c:3162
#, gcc-internal-format
msgid "%qE attribute ignored due to conflict with %qs attribute"
msgstr ""
-#: c-family/c-attribs.c:766 lto/lto-lang.c:246
+#: c-family/c-attribs.c:871 lto/lto-lang.c:251
#, gcc-internal-format
msgid "%qE attribute has no effect on unit local functions"
msgstr ""
-#: c-family/c-attribs.c:920
+#: c-family/c-attribs.c:1025
#, gcc-internal-format
msgid "%qE attribute have effect only on public objects"
msgstr ""
-#: c-family/c-attribs.c:949
+#: c-family/c-attribs.c:1054
#, gcc-internal-format
msgid "%qE attribute only affects top level objects"
msgstr ""
-#: c-family/c-attribs.c:1003
+#: c-family/c-attribs.c:1108
#, gcc-internal-format
msgid "scalar_storage_order is not supported because endianness is not uniform"
msgstr ""
-#: c-family/c-attribs.c:1020
+#: c-family/c-attribs.c:1125
#, gcc-internal-format
msgid ""
"scalar_storage_order argument must be one of \"big-endian\" or \"little-"
"endian\""
msgstr ""
-#: c-family/c-attribs.c:1116
+#: c-family/c-attribs.c:1221
#, gcc-internal-format
msgid "destructor priorities are not supported"
msgstr ""
-#: c-family/c-attribs.c:1118
+#: c-family/c-attribs.c:1223
#, gcc-internal-format
msgid "constructor priorities are not supported"
msgstr ""
-#: c-family/c-attribs.c:1140
+#: c-family/c-attribs.c:1245
#, gcc-internal-format, gfc-internal-format
msgid "destructor priorities from 0 to %d are reserved for the implementation"
msgstr ""
-#: c-family/c-attribs.c:1145
+#: c-family/c-attribs.c:1250
#, gcc-internal-format, gfc-internal-format
msgid "constructor priorities from 0 to %d are reserved for the implementation"
msgstr ""
-#: c-family/c-attribs.c:1153
+#: c-family/c-attribs.c:1258
#, gcc-internal-format, gfc-internal-format
msgid "destructor priorities must be integers from 0 to %d inclusive"
msgstr ""
-#: c-family/c-attribs.c:1156
+#: c-family/c-attribs.c:1261
#, gcc-internal-format, gfc-internal-format
msgid "constructor priorities must be integers from 0 to %d inclusive"
msgstr ""
-#: c-family/c-attribs.c:1312
+#: c-family/c-attribs.c:1417
#, gcc-internal-format
msgid "unknown machine mode %qE"
msgstr ""
-#: c-family/c-attribs.c:1341
+#: c-family/c-attribs.c:1446
#, gcc-internal-format
msgid "specifying vector types with __attribute__ ((mode)) is deprecated"
msgstr ""
-#: c-family/c-attribs.c:1344
+#: c-family/c-attribs.c:1449
#, gcc-internal-format
msgid "use __attribute__ ((vector_size)) instead"
msgstr ""
-#: c-family/c-attribs.c:1353
+#: c-family/c-attribs.c:1458
#, gcc-internal-format
msgid "unable to emulate %qs"
msgstr ""
-#: c-family/c-attribs.c:1364
+#: c-family/c-attribs.c:1469
#, gcc-internal-format
msgid "invalid pointer mode %qs"
msgstr ""
-#: c-family/c-attribs.c:1381
+#: c-family/c-attribs.c:1486
#, gcc-internal-format
msgid "signedness of type and machine mode %qs don%'t match"
msgstr ""
-#: c-family/c-attribs.c:1392
+#: c-family/c-attribs.c:1497
#, gcc-internal-format
msgid "no data type for mode %qs"
msgstr ""
-#: c-family/c-attribs.c:1402
+#: c-family/c-attribs.c:1507
#, gcc-internal-format
msgid "cannot use mode %qs for enumeral types"
msgstr ""
-#: c-family/c-attribs.c:1429
+#: c-family/c-attribs.c:1534
#, gcc-internal-format
msgid "mode %qs applied to inappropriate type"
msgstr ""
-#: c-family/c-attribs.c:1451
+#: c-family/c-attribs.c:1556
#, gcc-internal-format
msgid "section attributes are not supported for this target"
msgstr ""
-#: c-family/c-attribs.c:1457
+#: c-family/c-attribs.c:1562
#, gcc-internal-format
msgid "section attribute not allowed for %q+D"
msgstr ""
-#: c-family/c-attribs.c:1463
+#: c-family/c-attribs.c:1568
#, gcc-internal-format
msgid "section attribute argument not a string constant"
msgstr ""
-#: c-family/c-attribs.c:1472
+#: c-family/c-attribs.c:1577
#, gcc-internal-format
msgid "section attribute cannot be specified for local variables"
msgstr ""
-#: c-family/c-attribs.c:1482 config/bfin/bfin.c:4774 config/bfin/bfin.c:4825
-#: config/bfin/bfin.c:4851 config/bfin/bfin.c:4864
+#: c-family/c-attribs.c:1587 config/bfin/bfin.c:4773 config/bfin/bfin.c:4824
+#: config/bfin/bfin.c:4850 config/bfin/bfin.c:4863
#, gcc-internal-format
msgid "section of %q+D conflicts with previous declaration"
msgstr ""
-#: c-family/c-attribs.c:1490
+#: c-family/c-attribs.c:1595
#, gcc-internal-format
msgid "section of %q+D cannot be overridden"
msgstr ""
-#: c-family/c-attribs.c:1555
+#: c-family/c-attribs.c:1660
#, gcc-internal-format, gfc-internal-format
msgid "requested alignment %d is larger than %d"
msgstr ""
-#: c-family/c-attribs.c:1621
+#: c-family/c-attribs.c:1726
#, gcc-internal-format
msgid "alignment may not be specified for %q+D"
msgstr ""
-#: c-family/c-attribs.c:1639
+#: c-family/c-attribs.c:1744
#, gcc-internal-format
msgid ""
"alignment for %q+D was previously specified as %d and may not be decreased"
msgstr ""
-#: c-family/c-attribs.c:1643
+#: c-family/c-attribs.c:1748
#, gcc-internal-format
msgid "alignment for %q+D must be at least %d"
msgstr ""
-#: c-family/c-attribs.c:1668
+#: c-family/c-attribs.c:1773
#, gcc-internal-format
msgid "inline function %q+D declared weak"
msgstr ""
-#: c-family/c-attribs.c:1673
+#: c-family/c-attribs.c:1778
#, gcc-internal-format
msgid "indirect function %q+D cannot be declared weak"
msgstr ""
-#: c-family/c-attribs.c:1697
+#: c-family/c-attribs.c:1802
#, gcc-internal-format
msgid "%qE attribute is only applicable on functions"
msgstr ""
-#: c-family/c-attribs.c:1728
+#: c-family/c-attribs.c:1833
#, gcc-internal-format
msgid "%q+D defined both normally and as %qE attribute"
msgstr ""
-#: c-family/c-attribs.c:1736
+#: c-family/c-attribs.c:1841
#, gcc-internal-format
msgid "weak %q+D cannot be defined %qE"
msgstr ""
-#: c-family/c-attribs.c:1753 c-family/c-attribs.c:2269
+#: c-family/c-attribs.c:1858 c-family/c-attribs.c:2379
#, gcc-internal-format
msgid "attribute %qE argument not a string"
msgstr ""
-#: c-family/c-attribs.c:1783
+#: c-family/c-attribs.c:1893
#, gcc-internal-format
-msgid "%+D declared alias after being used"
+msgid "%+qD declared alias after being used"
msgstr ""
-#: c-family/c-attribs.c:1785
+#: c-family/c-attribs.c:1895
#, gcc-internal-format
-msgid "%+D declared ifunc after being used"
+msgid "%+qD declared ifunc after being used"
msgstr ""
-#: c-family/c-attribs.c:1836
+#: c-family/c-attribs.c:1946
#, gcc-internal-format
msgid "indirect function %q+D cannot be declared weakref"
msgstr ""
-#: c-family/c-attribs.c:1858
+#: c-family/c-attribs.c:1968
#, gcc-internal-format
msgid "weakref attribute must appear before alias attribute"
msgstr ""
-#: c-family/c-attribs.c:1870
+#: c-family/c-attribs.c:1980
#, gcc-internal-format
-msgid "%+D declared weakref after being used"
+msgid "%+qD declared weakref after being used"
msgstr ""
-#: c-family/c-attribs.c:1894
+#: c-family/c-attribs.c:2004
#, gcc-internal-format
msgid "%qE attribute ignored on non-class types"
msgstr ""
-#: c-family/c-attribs.c:1900
+#: c-family/c-attribs.c:2010
#, gcc-internal-format
msgid "%qE attribute ignored because %qT is already defined"
msgstr ""
-#: c-family/c-attribs.c:1913
+#: c-family/c-attribs.c:2023
#, gcc-internal-format
msgid "visibility argument not a string"
msgstr ""
-#: c-family/c-attribs.c:1925
+#: c-family/c-attribs.c:2035
#, gcc-internal-format
msgid "%qE attribute ignored on types"
msgstr ""
-#: c-family/c-attribs.c:1941
+#: c-family/c-attribs.c:2051
#, gcc-internal-format
msgid ""
"visibility argument must be one of \"default\", \"hidden\", \"protected\" or "
"\"internal\""
msgstr ""
-#: c-family/c-attribs.c:1952
+#: c-family/c-attribs.c:2062
#, gcc-internal-format
msgid "%qD redeclared with different visibility"
msgstr ""
-#: c-family/c-attribs.c:1955 c-family/c-attribs.c:1959
+#: c-family/c-attribs.c:2065 c-family/c-attribs.c:2069
#, gcc-internal-format
msgid "%qD was declared %qs which implies default visibility"
msgstr ""
-#: c-family/c-attribs.c:1997
+#: c-family/c-attribs.c:2107
#, gcc-internal-format
msgid "tls_model argument not a string"
msgstr ""
-#: c-family/c-attribs.c:2010
+#: c-family/c-attribs.c:2120
#, gcc-internal-format
msgid ""
"tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-"
"dynamic\" or \"global-dynamic\""
msgstr ""
-#: c-family/c-attribs.c:2030 c-family/c-attribs.c:2346
-#: c-family/c-attribs.c:3120 config/m32c/m32c.c:2938
+#: c-family/c-attribs.c:2140 c-family/c-attribs.c:2456
+#: c-family/c-attribs.c:3230 config/m32c/m32c.c:2938
#, gcc-internal-format
msgid "%qE attribute applies only to functions"
msgstr ""
-#: c-family/c-attribs.c:2094
+#: c-family/c-attribs.c:2204
#, gcc-internal-format
msgid "alloc_size parameter outside range"
msgstr ""
-#: c-family/c-attribs.c:2120
+#: c-family/c-attribs.c:2230
#, gcc-internal-format
msgid "alloc_align parameter outside range"
msgstr ""
-#: c-family/c-attribs.c:2144
+#: c-family/c-attribs.c:2254
#, gcc-internal-format
msgid "assume_aligned parameter not integer constant"
msgstr ""
-#: c-family/c-attribs.c:2255 c/c-parser.c:16724
+#: c-family/c-attribs.c:2365 c/c-parser.c:16714
#, gcc-internal-format
msgid ""
"%<__simd__%> attribute cannot be used in the same function marked as a Cilk "
"Plus SIMD-enabled function"
msgstr ""
-#: c-family/c-attribs.c:2283
+#: c-family/c-attribs.c:2393
#, gcc-internal-format
msgid ""
"only %<inbranch%> and %<notinbranch%> flags are allowed for %<__simd__%> "
"attribute"
msgstr ""
-#: c-family/c-attribs.c:2352 c-family/c-attribs.c:3126
+#: c-family/c-attribs.c:2462 c-family/c-attribs.c:3236
#, gcc-internal-format
msgid "can%'t set %qE attribute after definition"
msgstr ""
-#: c-family/c-attribs.c:2410
+#: c-family/c-attribs.c:2520
#, gcc-internal-format
msgid "%qE attribute duplicated"
msgstr ""
-#: c-family/c-attribs.c:2412
+#: c-family/c-attribs.c:2522
#, gcc-internal-format
msgid "%qE attribute follows %qE"
msgstr ""
-#: c-family/c-attribs.c:2511
+#: c-family/c-attribs.c:2621
#, gcc-internal-format
msgid "type was previously declared %qE"
msgstr ""
-#: c-family/c-attribs.c:2524 cp/class.c:4715
+#: c-family/c-attribs.c:2634 cp/class.c:4698
#, gcc-internal-format
msgid ""
"%<transaction_safe_dynamic%> may only be specified for a virtual function"
msgstr ""
-#: c-family/c-attribs.c:2582
+#: c-family/c-attribs.c:2692
#, gcc-internal-format
msgid "%qE argument not an identifier"
msgstr ""
-#: c-family/c-attribs.c:2593
+#: c-family/c-attribs.c:2703
#, gcc-internal-format
msgid "%qD is not compatible with %qD"
msgstr ""
-#: c-family/c-attribs.c:2596
+#: c-family/c-attribs.c:2706
#, gcc-internal-format
msgid "%qE argument is not a function"
msgstr ""
-#: c-family/c-attribs.c:2644
+#: c-family/c-attribs.c:2754
#, gcc-internal-format
msgid "deprecated message is not a string"
msgstr ""
-#: c-family/c-attribs.c:2685
+#: c-family/c-attribs.c:2795
#, gcc-internal-format
msgid "%qE attribute ignored for %qE"
msgstr ""
-#: c-family/c-attribs.c:2748
+#: c-family/c-attribs.c:2858
#, gcc-internal-format
msgid "invalid vector type for attribute %qE"
msgstr ""
-#: c-family/c-attribs.c:2754 ada/gcc-interface/utils.c:3843
+#: c-family/c-attribs.c:2864 ada/gcc-interface/utils.c:3858
#, gcc-internal-format
msgid "vector size not an integral multiple of component size"
msgstr ""
-#: c-family/c-attribs.c:2760 ada/gcc-interface/utils.c:3850
+#: c-family/c-attribs.c:2870 ada/gcc-interface/utils.c:3865
#, gcc-internal-format
msgid "zero vector size"
msgstr ""
-#: c-family/c-attribs.c:2768
+#: c-family/c-attribs.c:2878
#, gcc-internal-format
msgid "number of components of the vector not a power of two"
msgstr ""
-#: c-family/c-attribs.c:2801 ada/gcc-interface/utils.c:5984
+#: c-family/c-attribs.c:2911 ada/gcc-interface/utils.c:6016
#, gcc-internal-format
msgid "nonnull attribute without arguments on a non-prototype"
msgstr ""
-#: c-family/c-attribs.c:2820 ada/gcc-interface/utils.c:5998
+#: c-family/c-attribs.c:2930 ada/gcc-interface/utils.c:6030
#, gcc-internal-format, gfc-internal-format
msgid "nonnull argument has invalid operand number (argument %lu)"
msgstr ""
-#: c-family/c-attribs.c:2842 ada/gcc-interface/utils.c:6020
+#: c-family/c-attribs.c:2952 ada/gcc-interface/utils.c:6052
#, gcc-internal-format, gfc-internal-format
msgid ""
"nonnull argument with out-of-range operand number (argument %lu, operand %lu)"
msgstr ""
-#: c-family/c-attribs.c:2851 ada/gcc-interface/utils.c:6029
+#: c-family/c-attribs.c:2961 ada/gcc-interface/utils.c:6061
#, gcc-internal-format, gfc-internal-format
msgid ""
"nonnull argument references non-pointer operand (argument %lu, operand %lu)"
msgstr ""
-#: c-family/c-attribs.c:2909
+#: c-family/c-attribs.c:3019
#, gcc-internal-format
msgid "cleanup argument not an identifier"
msgstr ""
-#: c-family/c-attribs.c:2916
+#: c-family/c-attribs.c:3026
#, gcc-internal-format
msgid "cleanup argument not a function"
msgstr ""
-#: c-family/c-attribs.c:2953
+#: c-family/c-attribs.c:3063
#, gcc-internal-format
msgid "%qE attribute requires prototypes with named arguments"
msgstr ""
-#: c-family/c-attribs.c:2961
+#: c-family/c-attribs.c:3071
#, gcc-internal-format
msgid "%qE attribute only applies to variadic functions"
msgstr ""
-#: c-family/c-attribs.c:2977 ada/gcc-interface/utils.c:6071
+#: c-family/c-attribs.c:3087 ada/gcc-interface/utils.c:6103
#, gcc-internal-format
msgid "requested position is not an integer constant"
msgstr ""
-#: c-family/c-attribs.c:2985 ada/gcc-interface/utils.c:6078
+#: c-family/c-attribs.c:3095 ada/gcc-interface/utils.c:6110
#, gcc-internal-format
msgid "requested position is less than zero"
msgstr ""
-#: c-family/c-attribs.c:3143
+#: c-family/c-attribs.c:3253
#, gcc-internal-format
msgid "returns_nonnull attribute on a function not returning a pointer"
msgstr ""
-#: c-family/c-attribs.c:3158
+#: c-family/c-attribs.c:3268
#, gcc-internal-format
msgid "%qE attribute is only valid on %<struct%> type"
msgstr ""
@@ -24376,864 +24539,918 @@ msgstr ""
msgid "iteration variable cannot be volatile"
msgstr ""
-#: c-family/c-common.c:725
+#: c-family/c-common.c:727
#, gcc-internal-format
msgid "%qD is not defined outside of function scope"
msgstr ""
-#: c-family/c-common.c:775
+#: c-family/c-common.c:777
#, gcc-internal-format
msgid ""
"string length %qd is greater than the length %qd ISO C%d compilers are "
"required to support"
msgstr ""
-#: c-family/c-common.c:959
+#: c-family/c-common.c:961
#, gcc-internal-format
msgid ""
"use -flax-vector-conversions to permit conversions between vectors with "
"differing element types or numbers of subparts"
msgstr ""
-#: c-family/c-common.c:999
+#: c-family/c-common.c:1001
#, gcc-internal-format
msgid "__builtin_shuffle last argument must be an integer vector"
msgstr ""
-#: c-family/c-common.c:1008
+#: c-family/c-common.c:1010
#, gcc-internal-format
msgid "__builtin_shuffle arguments must be vectors"
msgstr ""
-#: c-family/c-common.c:1015
+#: c-family/c-common.c:1017
#, gcc-internal-format
msgid "__builtin_shuffle argument vectors must be of the same type"
msgstr ""
-#: c-family/c-common.c:1026
+#: c-family/c-common.c:1028
#, gcc-internal-format
msgid ""
"__builtin_shuffle number of elements of the argument vector(s) and the mask "
"vector should be the same"
msgstr ""
-#: c-family/c-common.c:1036
+#: c-family/c-common.c:1038
#, gcc-internal-format
msgid ""
"__builtin_shuffle argument vector(s) inner type must have the same size as "
"inner type of the mask"
msgstr ""
-#: c-family/c-common.c:1263
+#: c-family/c-common.c:1276 c-family/c-warn.c:1097
#, gcc-internal-format
-msgid "negative integer implicitly converted to unsigned type"
+msgid "unsigned conversion from %qT to %qT changes value from %qE to %qE"
msgstr ""
-#: c-family/c-common.c:1269
+#: c-family/c-common.c:1281 c-family/c-warn.c:1105
#, gcc-internal-format
-msgid "conversion of unsigned constant value to negative integer"
+msgid "unsigned conversion from %qT to %qT changes the value of %qE"
msgstr ""
-#: c-family/c-common.c:1420 c-family/c-common.c:1482
+#: c-family/c-common.c:1290
+#, gcc-internal-format
+msgid "signed conversion from %qT to %qT changes value from %qE to %qE"
+msgstr ""
+
+#: c-family/c-common.c:1295
+#, gcc-internal-format
+msgid "signed conversion from %qT to %qT changes the value of %qE"
+msgstr ""
+
+#: c-family/c-common.c:1448 c-family/c-common.c:1510
#, gcc-internal-format
msgid "conversion to %qT from %qT may change the sign of the result"
msgstr ""
-#: c-family/c-common.c:1668
+#: c-family/c-common.c:1696
#, gcc-internal-format
msgid "operation on %qE may be undefined"
msgstr ""
-#: c-family/c-common.c:1978
+#: c-family/c-common.c:2006
#, gcc-internal-format
msgid "case label does not reduce to an integer constant"
msgstr ""
-#: c-family/c-common.c:2024
+#: c-family/c-common.c:2052
#, gcc-internal-format
msgid "case label value is less than minimum value for type"
msgstr ""
-#: c-family/c-common.c:2034
+#: c-family/c-common.c:2062
#, gcc-internal-format
msgid "case label value exceeds maximum value for type"
msgstr ""
-#: c-family/c-common.c:2043
+#: c-family/c-common.c:2071
#, gcc-internal-format
msgid "lower value in case label range less than minimum value for type"
msgstr ""
-#: c-family/c-common.c:2053
+#: c-family/c-common.c:2081
#, gcc-internal-format
msgid "upper value in case label range exceeds maximum value for type"
msgstr ""
-#: c-family/c-common.c:2136
+#: c-family/c-common.c:2164
#, gcc-internal-format
msgid ""
"GCC cannot support operators with integer types and fixed-point types that "
"have too many integral and fractional bits together"
msgstr ""
-#: c-family/c-common.c:2666
+#: c-family/c-common.c:2694
#, gcc-internal-format
msgid "invalid operands to binary %s (have %qT and %qT)"
msgstr ""
-#: c-family/c-common.c:2915
+#: c-family/c-common.c:2943
#, gcc-internal-format
msgid "comparison is always false due to limited range of data type"
msgstr ""
-#: c-family/c-common.c:2918
+#: c-family/c-common.c:2946
#, gcc-internal-format
msgid "comparison is always true due to limited range of data type"
msgstr ""
-#: c-family/c-common.c:3008
+#: c-family/c-common.c:3036
#, gcc-internal-format
msgid "comparison of unsigned expression >= 0 is always true"
msgstr ""
-#: c-family/c-common.c:3015
+#: c-family/c-common.c:3043
#, gcc-internal-format
msgid "comparison of unsigned expression < 0 is always false"
msgstr ""
-#: c-family/c-common.c:3058
+#: c-family/c-common.c:3086
#, gcc-internal-format
msgid "pointer of type %<void *%> used in arithmetic"
msgstr ""
-#: c-family/c-common.c:3067
+#: c-family/c-common.c:3095
#, gcc-internal-format
msgid "pointer to a function used in arithmetic"
msgstr ""
-#: c-family/c-common.c:3257
+#: c-family/c-common.c:3267
#, gcc-internal-format
msgid "enum constant in boolean context"
msgstr ""
-#: c-family/c-common.c:3284
+#: c-family/c-common.c:3294
#, gcc-internal-format
msgid "the address of %qD will always evaluate as %<true%>"
msgstr ""
-#: c-family/c-common.c:3327
+#: c-family/c-common.c:3337
#, gcc-internal-format
msgid "%<*%> in boolean context, suggest %<&&%> instead"
msgstr ""
-#: c-family/c-common.c:3339
+#: c-family/c-common.c:3349
#, gcc-internal-format
msgid "%<<<%> in boolean context, did you mean %<<%> ?"
msgstr ""
-#: c-family/c-common.c:3355
+#: c-family/c-common.c:3365
#, gcc-internal-format
msgid ""
"?: using integer constants in boolean context, the expression will always "
"evaluate to %<true%>"
msgstr ""
-#: c-family/c-common.c:3364
+#: c-family/c-common.c:3374
#, gcc-internal-format
msgid "?: using integer constants in boolean context"
msgstr ""
-#: c-family/c-common.c:3400
+#: c-family/c-common.c:3410
#, gcc-internal-format
msgid ""
"the compiler can assume that the address of %qD will always evaluate to "
"%<true%>"
msgstr ""
-#: c-family/c-common.c:3427 cp/semantics.c:660 cp/typeck.c:8608
+#: c-family/c-common.c:3437 cp/semantics.c:664 cp/typeck.c:8701
#, gcc-internal-format
msgid "suggest parentheses around assignment used as truth value"
msgstr ""
-#: c-family/c-common.c:3507 c/c-decl.c:4296 c/c-decl.c:6377 c/c-typeck.c:13963
+#: c-family/c-common.c:3517 c/c-decl.c:4276 c/c-decl.c:6357 c/c-typeck.c:13972
#, gcc-internal-format
msgid "invalid use of %<restrict%>"
msgstr ""
-#: c-family/c-common.c:3577
+#: c-family/c-common.c:3587
#, gcc-internal-format
msgid "invalid application of %<sizeof%> to a function type"
msgstr ""
-#: c-family/c-common.c:3587
+#: c-family/c-common.c:3597
#, gcc-internal-format
msgid "ISO C++ does not permit %<alignof%> applied to a function type"
msgstr ""
-#: c-family/c-common.c:3590
+#: c-family/c-common.c:3600
#, gcc-internal-format
msgid "ISO C does not permit %<_Alignof%> applied to a function type"
msgstr ""
-#: c-family/c-common.c:3601
+#: c-family/c-common.c:3611
#, gcc-internal-format
msgid "invalid application of %qs to a void type"
msgstr ""
-#: c-family/c-common.c:3610
+#: c-family/c-common.c:3620
#, gcc-internal-format
msgid "invalid application of %qs to incomplete type %qT"
msgstr ""
-#: c-family/c-common.c:3618
+#: c-family/c-common.c:3628
#, gcc-internal-format
msgid "invalid application of %qs to array type %qT of incomplete element type"
msgstr ""
-#: c-family/c-common.c:3660
+#: c-family/c-common.c:3670
#, gcc-internal-format
msgid "%<__alignof%> applied to a bit-field"
msgstr ""
-#: c-family/c-common.c:4442
+#: c-family/c-common.c:4456
#, gcc-internal-format
msgid "first argument to %<va_arg%> not of type %<va_list%>"
msgstr ""
-#: c-family/c-common.c:4562
+#: c-family/c-common.c:4576
#, gcc-internal-format
msgid "cannot disable built-in function %qs"
msgstr ""
-#: c-family/c-common.c:4754
+#: c-family/c-common.c:4768
#, gcc-internal-format
msgid "pointers are not permitted as case values"
msgstr ""
-#: c-family/c-common.c:4761
+#: c-family/c-common.c:4775
#, gcc-internal-format
msgid "range expressions in switch statements are non-standard"
msgstr ""
-#: c-family/c-common.c:4787
+#: c-family/c-common.c:4801
#, gcc-internal-format
msgid "empty range specified"
msgstr ""
-#: c-family/c-common.c:4848
+#: c-family/c-common.c:4862
#, gcc-internal-format
msgid "duplicate (or overlapping) case value"
msgstr ""
-#: c-family/c-common.c:4850
+#: c-family/c-common.c:4864
#, gcc-internal-format
msgid "this is the first entry overlapping that value"
msgstr ""
-#: c-family/c-common.c:4854
+#: c-family/c-common.c:4868
#, gcc-internal-format
msgid "duplicate case value"
msgstr ""
-#: c-family/c-common.c:4855 c-family/c-warn.c:1995
+#: c-family/c-common.c:4869 c-family/c-warn.c:2113
#, gcc-internal-format
msgid "previously used here"
msgstr ""
-#: c-family/c-common.c:4859
+#: c-family/c-common.c:4873
#, gcc-internal-format
msgid "multiple default labels in one switch"
msgstr ""
-#: c-family/c-common.c:4861
+#: c-family/c-common.c:4875
#, gcc-internal-format
msgid "this is the first default label"
msgstr ""
-#: c-family/c-common.c:4897
+#: c-family/c-common.c:4911
#, gcc-internal-format
msgid "taking the address of a label is non-standard"
msgstr ""
-#: c-family/c-common.c:5065
+#: c-family/c-common.c:5079
#, gcc-internal-format
msgid "requested alignment is not an integer constant"
msgstr ""
-#: c-family/c-common.c:5073
+#: c-family/c-common.c:5087
#, gcc-internal-format
msgid "requested alignment is not a positive power of 2"
msgstr ""
-#: c-family/c-common.c:5078
+#: c-family/c-common.c:5092
#, gcc-internal-format
msgid "requested alignment is too large"
msgstr ""
-#: c-family/c-common.c:5224
+#: c-family/c-common.c:5238
#, gcc-internal-format
msgid "not enough variable arguments to fit a sentinel"
msgstr ""
-#: c-family/c-common.c:5238
+#: c-family/c-common.c:5252
#, gcc-internal-format
msgid "missing sentinel in function call"
msgstr ""
-#: c-family/c-common.c:5327
+#: c-family/c-common.c:5341
#, gcc-internal-format, gfc-internal-format
msgid "null argument where non-null required (argument %lu)"
msgstr ""
-#: c-family/c-common.c:5422 c-family/c-common.c:5469
+#: c-family/c-common.c:5436 c-family/c-common.c:5483
#, gcc-internal-format
msgid "bad option %qs to attribute %<optimize%>"
msgstr ""
-#: c-family/c-common.c:5425 c-family/c-common.c:5473
+#: c-family/c-common.c:5439 c-family/c-common.c:5487
#, gcc-internal-format
msgid "bad option %qs to pragma %<optimize%>"
msgstr ""
-#: c-family/c-common.c:5505
+#: c-family/c-common.c:5519
#, gcc-internal-format
msgid "%<fallthrough%> attribute specified multiple times"
msgstr ""
-#: c-family/c-common.c:5509
+#: c-family/c-common.c:5523
#, gcc-internal-format
msgid "%<fallthrough%> attribute specified with a parameter"
msgstr ""
-#: c-family/c-common.c:5647 c-family/c-common.c:6459 c-family/c-common.c:6530
-#: c/c-typeck.c:3557
+#: c-family/c-common.c:5661 c-family/c-common.c:6469 c-family/c-common.c:6543
+#: c/c-typeck.c:3562
#, gcc-internal-format
msgid "too few arguments to function %qE"
msgstr ""
-#: c-family/c-common.c:5652 c-family/c-common.c:6556 c/c-typeck.c:3286
+#: c-family/c-common.c:5666 c-family/c-common.c:6569 c/c-typeck.c:3291
#, gcc-internal-format
msgid "too many arguments to function %qE"
msgstr ""
-#: c-family/c-common.c:5698
+#: c-family/c-common.c:5712
#, gcc-internal-format
msgid ""
"second argument to function %qE must be a constant integer power of 2 "
"between %qi and %qu bits"
msgstr ""
-#: c-family/c-common.c:5719 c-family/c-common.c:5763
+#: c-family/c-common.c:5733 c-family/c-common.c:5777
#, gcc-internal-format
msgid "non-floating-point argument in call to function %qE"
msgstr ""
-#: c-family/c-common.c:5742
+#: c-family/c-common.c:5756
#, gcc-internal-format
msgid "non-floating-point arguments in call to function %qE"
msgstr ""
-#: c-family/c-common.c:5756
+#: c-family/c-common.c:5770
#, gcc-internal-format
msgid "non-const integer argument %u in call to function %qE"
msgstr ""
-#: c-family/c-common.c:5776
+#: c-family/c-common.c:5790
#, gcc-internal-format
msgid "non-integer argument 3 in call to function %qE"
msgstr ""
-#: c-family/c-common.c:5793 c-family/c-common.c:5829
+#: c-family/c-common.c:5807 c-family/c-common.c:5843
#, gcc-internal-format
msgid "argument %u in call to function %qE does not have integral type"
msgstr ""
-#: c-family/c-common.c:5800
+#: c-family/c-common.c:5814
#, gcc-internal-format
msgid ""
"argument 3 in call to function %qE does not have pointer to integral type"
msgstr ""
-#: c-family/c-common.c:5806
+#: c-family/c-common.c:5820
#, gcc-internal-format
msgid "argument 3 in call to function %qE has pointer to enumerated type"
msgstr ""
-#: c-family/c-common.c:5812
+#: c-family/c-common.c:5826
#, gcc-internal-format
msgid "argument 3 in call to function %qE has pointer to boolean type"
msgstr ""
-#: c-family/c-common.c:5835
+#: c-family/c-common.c:5849
#, gcc-internal-format
msgid "argument 3 in call to function %qE has enumerated type"
msgstr ""
-#: c-family/c-common.c:5841
+#: c-family/c-common.c:5855
#, gcc-internal-format
msgid "argument 3 in call to function %qE has boolean type"
msgstr ""
-#: c-family/c-common.c:6154
+#: c-family/c-common.c:6168
#, gcc-internal-format
msgid "cannot apply %<offsetof%> to static data member %qD"
msgstr ""
-#: c-family/c-common.c:6159
+#: c-family/c-common.c:6173
#, gcc-internal-format
msgid "cannot apply %<offsetof%> when %<operator[]%> is overloaded"
msgstr ""
-#: c-family/c-common.c:6166
+#: c-family/c-common.c:6180
#, gcc-internal-format
msgid "cannot apply %<offsetof%> to a non constant address"
msgstr ""
-#: c-family/c-common.c:6179
+#: c-family/c-common.c:6193
#, gcc-internal-format
msgid "attempt to take address of bit-field structure member %qD"
msgstr ""
-#: c-family/c-common.c:6231
+#: c-family/c-common.c:6245
#, gcc-internal-format
msgid "index %E denotes an offset greater than size of %qT"
msgstr ""
-#: c-family/c-common.c:6401 cp/init.c:2952 cp/init.c:2971
+#: c-family/c-common.c:6411 cp/init.c:2958 cp/init.c:2977
#, gcc-internal-format
msgid "size of array is too large"
msgstr ""
-#: c-family/c-common.c:6489
+#: c-family/c-common.c:6502
#, gcc-internal-format
msgid "operand type %qT is incompatible with argument %d of %qE"
msgstr ""
-#: c-family/c-common.c:6623
+#: c-family/c-common.c:6636
#, gcc-internal-format
msgid "incorrect number of arguments to function %qE"
msgstr ""
-#: c-family/c-common.c:6638
+#: c-family/c-common.c:6651
#, gcc-internal-format
msgid "argument 1 of %qE must be a non-void pointer type"
msgstr ""
-#: c-family/c-common.c:6647
+#: c-family/c-common.c:6660
#, gcc-internal-format
msgid "argument 1 of %qE must be a pointer to a constant size type"
msgstr ""
-#: c-family/c-common.c:6658
+#: c-family/c-common.c:6671
#, gcc-internal-format
msgid "argument 1 of %qE must be a pointer to a nonzero size object"
msgstr ""
-#: c-family/c-common.c:6673
+#: c-family/c-common.c:6686
#, gcc-internal-format
msgid "argument %d of %qE must be a pointer type"
msgstr ""
-#: c-family/c-common.c:6681
+#: c-family/c-common.c:6694
#, gcc-internal-format
msgid "argument %d of %qE must be a pointer to a constant size type"
msgstr ""
-#: c-family/c-common.c:6687
+#: c-family/c-common.c:6700
#, gcc-internal-format
msgid "argument %d of %qE must not be a pointer to a function"
msgstr ""
-#: c-family/c-common.c:6695
+#: c-family/c-common.c:6708
#, gcc-internal-format
msgid "size mismatch in argument %d of %qE"
msgstr ""
-#: c-family/c-common.c:6711
+#: c-family/c-common.c:6724
#, gcc-internal-format
msgid "invalid memory model argument %d of %qE"
msgstr ""
-#: c-family/c-common.c:6718
+#: c-family/c-common.c:6731
#, gcc-internal-format
msgid "non-integer memory model argument %d of %qE"
msgstr ""
-#: c-family/c-common.c:7639
+#: c-family/c-common.c:7652
#, gcc-internal-format
msgid "index value is out of bound"
msgstr ""
-#: c-family/c-common.c:7680 c-family/c-common.c:7728 c-family/c-common.c:7743
-#: cp/call.c:4836 cp/call.c:4843
+#: c-family/c-common.c:7694 c-family/c-common.c:7743 c-family/c-common.c:7759
#, gcc-internal-format
msgid "conversion of scalar %qT to vector %qT involves truncation"
msgstr ""
#. Reject arguments that are built-in functions with
#. no library fallback.
-#: c-family/c-common.c:7829
+#: c-family/c-common.c:7845
#, gcc-internal-format
msgid "built-in function %qE must be directly called"
msgstr ""
-#: c-family/c-common.c:7851 c/c-decl.c:6124
+#: c-family/c-common.c:7867 c/c-decl.c:6104
#, gcc-internal-format
msgid "size of array %qE is too large"
msgstr ""
-#: c-family/c-common.c:7853 c/c-decl.c:6127
+#: c-family/c-common.c:7869 c/c-decl.c:6107
#, gcc-internal-format
msgid "size of unnamed array is too large"
msgstr ""
-#: c-family/c-common.c:7883
+#: c-family/c-common.c:7899
#, gcc-internal-format
msgid ""
"environment variable SOURCE_DATE_EPOCH must expand to a non-negative integer "
"less than or equal to %wd"
msgstr ""
-#: c-family/c-format.c:134 c-family/c-format.c:321
+#: c-family/c-format.c:138 c-family/c-format.c:325
#, gcc-internal-format
msgid "format string has invalid operand number"
msgstr ""
-#: c-family/c-format.c:150
+#: c-family/c-format.c:154
#, gcc-internal-format
msgid "function does not return string type"
msgstr ""
-#: c-family/c-format.c:184
+#: c-family/c-format.c:188
#, gcc-internal-format
msgid "format string argument is not a string type"
msgstr ""
-#: c-family/c-format.c:210
+#: c-family/c-format.c:214
#, gcc-internal-format
msgid "found a %qs reference but the format argument should be a string"
msgstr ""
-#: c-family/c-format.c:213
+#: c-family/c-format.c:217
#, gcc-internal-format
msgid "found a %qT but the format argument should be a string"
msgstr ""
-#: c-family/c-format.c:223
+#: c-family/c-format.c:227
#, gcc-internal-format
msgid "format argument should be a %qs reference but a string was found"
msgstr ""
-#: c-family/c-format.c:245
+#: c-family/c-format.c:249
#, gcc-internal-format
msgid "format argument should be a %qs reference"
msgstr ""
-#: c-family/c-format.c:289
+#: c-family/c-format.c:293
#, gcc-internal-format
msgid "unrecognized format specifier"
msgstr ""
-#: c-family/c-format.c:304
+#: c-family/c-format.c:308
#, gcc-internal-format
msgid "%qE is only allowed in Objective-C dialects"
msgstr ""
-#: c-family/c-format.c:313
+#: c-family/c-format.c:317
#, gcc-internal-format
msgid "%qE is an unrecognized format function type"
msgstr ""
-#: c-family/c-format.c:327
+#: c-family/c-format.c:331
#, gcc-internal-format
msgid "%<...%> has invalid operand number"
msgstr ""
-#: c-family/c-format.c:334
+#: c-family/c-format.c:338
#, gcc-internal-format
msgid "format string argument follows the args to be formatted"
msgstr ""
-#: c-family/c-format.c:1106
+#: c-family/c-format.c:1128
#, gcc-internal-format
msgid "function %qD might be a candidate for %qs format attribute"
msgstr ""
-#: c-family/c-format.c:1197 c-family/c-format.c:1218 c-family/c-format.c:2601
+#: c-family/c-format.c:1219 c-family/c-format.c:1240 c-family/c-format.c:2653
#, gcc-internal-format
msgid "missing $ operand number in format"
msgstr ""
-#: c-family/c-format.c:1227
+#: c-family/c-format.c:1249
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support %%n$ operand number formats"
msgstr ""
-#: c-family/c-format.c:1234
+#: c-family/c-format.c:1256
#, gcc-internal-format
msgid "operand number out of range in format"
msgstr ""
-#: c-family/c-format.c:1257
+#: c-family/c-format.c:1279
#, gcc-internal-format, gfc-internal-format
msgid "format argument %d used more than once in %s format"
msgstr ""
-#: c-family/c-format.c:1289
+#: c-family/c-format.c:1311
#, gcc-internal-format
msgid "$ operand number used after format without operand number"
msgstr ""
-#: c-family/c-format.c:1320
+#: c-family/c-format.c:1342
#, gcc-internal-format, gfc-internal-format
msgid "format argument %d unused before used argument %d in $-style format"
msgstr ""
-#: c-family/c-format.c:1419
+#: c-family/c-format.c:1441
#, gcc-internal-format
msgid "format not a string literal, format string not checked"
msgstr ""
-#: c-family/c-format.c:1434 c-family/c-format.c:1437
+#: c-family/c-format.c:1456 c-family/c-format.c:1459
#, gcc-internal-format
msgid "format not a string literal and no format arguments"
msgstr ""
-#: c-family/c-format.c:1440
+#: c-family/c-format.c:1462
#, gcc-internal-format
msgid "format not a string literal, argument types not checked"
msgstr ""
-#: c-family/c-format.c:1457
+#: c-family/c-format.c:1479
#, gcc-internal-format
msgid "too many arguments for format"
msgstr ""
-#: c-family/c-format.c:1461
+#: c-family/c-format.c:1483
#, gcc-internal-format
msgid "unused arguments in $-style format"
msgstr ""
-#: c-family/c-format.c:1464
+#: c-family/c-format.c:1486
#, gcc-internal-format, gfc-internal-format
msgid "zero-length %s format string"
msgstr ""
-#: c-family/c-format.c:1468
+#: c-family/c-format.c:1490
#, gcc-internal-format
msgid "format is a wide character string"
msgstr ""
-#: c-family/c-format.c:1471
+#: c-family/c-format.c:1493
#, gcc-internal-format
msgid "unterminated format string"
msgstr ""
-#: c-family/c-format.c:1868
+#: c-family/c-format.c:1898
#, gcc-internal-format
msgid "%s used with %<%%%c%> %s format"
msgstr ""
-#: c-family/c-format.c:1878
+#: c-family/c-format.c:1908
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support %s"
msgstr ""
-#: c-family/c-format.c:1888
+#: c-family/c-format.c:1918
#, gcc-internal-format
msgid "%s does not support %s with the %<%%%c%> %s format"
msgstr ""
-#: c-family/c-format.c:2009 c-family/c-format.c:2340
+#: c-family/c-format.c:1932
+#, gcc-internal-format, gfc-internal-format
+msgid "%s used within a quoted sequence"
+msgstr ""
+
+#: c-family/c-format.c:1945
+#, gcc-internal-format
+msgid "%qc conversion used unquoted"
+msgstr ""
+
+#: c-family/c-format.c:2061 c-family/c-format.c:2392
#, gcc-internal-format, gfc-internal-format
msgid "repeated %s in format"
msgstr ""
-#: c-family/c-format.c:2020
+#: c-family/c-format.c:2072
#, gcc-internal-format
msgid "missing fill character at end of strfmon format"
msgstr ""
-#: c-family/c-format.c:2122
+#: c-family/c-format.c:2174
#, gcc-internal-format, gfc-internal-format
msgid "zero width in %s format"
msgstr ""
-#: c-family/c-format.c:2145
+#: c-family/c-format.c:2197
#, gcc-internal-format, gfc-internal-format
msgid "empty left precision in %s format"
msgstr ""
-#: c-family/c-format.c:2236
+#: c-family/c-format.c:2288
#, gcc-internal-format, gfc-internal-format
msgid "empty precision in %s format"
msgstr ""
-#: c-family/c-format.c:2314
+#: c-family/c-format.c:2366
#, gcc-internal-format
msgid "%s does not support the %qs %s length modifier"
msgstr ""
-#: c-family/c-format.c:2370
+#: c-family/c-format.c:2422
#, gcc-internal-format
msgid "unknown conversion type character %qc in format"
msgstr ""
-#: c-family/c-format.c:2382
+#: c-family/c-format.c:2434
#, gcc-internal-format
msgid "%s does not support the %<%%%c%> %s format"
msgstr ""
-#: c-family/c-format.c:2414
+#: c-family/c-format.c:2466
#, gcc-internal-format
msgid "%s ignored with %s and %<%%%c%> %s format"
msgstr ""
-#: c-family/c-format.c:2419
+#: c-family/c-format.c:2471
#, gcc-internal-format, gfc-internal-format
msgid "%s ignored with %s in %s format"
msgstr ""
-#: c-family/c-format.c:2426
+#: c-family/c-format.c:2478
#, gcc-internal-format
msgid "use of %s and %s together with %<%%%c%> %s format"
msgstr ""
-#: c-family/c-format.c:2431
+#: c-family/c-format.c:2483
#, gcc-internal-format, gfc-internal-format
msgid "use of %s and %s together in %s format"
msgstr ""
-#: c-family/c-format.c:2458
+#: c-family/c-format.c:2510
#, gcc-internal-format
msgid "%<%%%c%> yields only last 2 digits of year in some locales"
msgstr ""
-#: c-family/c-format.c:2462
+#: c-family/c-format.c:2514
#, gcc-internal-format
msgid "%<%%%c%> yields only last 2 digits of year"
msgstr ""
-#: c-family/c-format.c:2489
+#: c-family/c-format.c:2541
#, gcc-internal-format
msgid "no closing %<]%> for %<%%[%> format"
msgstr ""
-#: c-family/c-format.c:2518
+#: c-family/c-format.c:2570
#, gcc-internal-format
msgid ""
"use of %qs length modifier with %qc type character has either no effect or "
"undefined behavior"
msgstr ""
-#: c-family/c-format.c:2540
+#: c-family/c-format.c:2592
#, gcc-internal-format
msgid "%s does not support the %<%%%s%c%> %s format"
msgstr ""
-#: c-family/c-format.c:2578
+#: c-family/c-format.c:2630
#, gcc-internal-format
msgid "operand number specified with suppressed assignment"
msgstr ""
-#: c-family/c-format.c:2582
+#: c-family/c-format.c:2634
#, gcc-internal-format
msgid "operand number specified for format taking no argument"
msgstr ""
-#: c-family/c-format.c:2718
+#: c-family/c-format.c:2780
#, gcc-internal-format
msgid "spurious trailing %<%%%> in format"
msgstr ""
-#: c-family/c-format.c:2776
+#: c-family/c-format.c:2838
#, gcc-internal-format
msgid "conversion lacks type at end of format"
msgstr ""
-#: c-family/c-format.c:2828
+#: c-family/c-format.c:2867
+#, gcc-internal-format
+msgid "nested quoting directive"
+msgstr ""
+
+#: c-family/c-format.c:2878
+#, gcc-internal-format
+msgid "unmatched quoting directive"
+msgstr ""
+
+#: c-family/c-format.c:2893
+#, gcc-internal-format
+msgid "%qc directive redundant after prior occurence of the same"
+msgstr ""
+
+#: c-family/c-format.c:2899
+#, gcc-internal-format
+msgid "unmatched color reset directive"
+msgstr ""
+
+#: c-family/c-format.c:2911
+#, gcc-internal-format
+msgid "%qc conversion used within a quoted sequence"
+msgstr ""
+
+#: c-family/c-format.c:2951
#, gcc-internal-format
msgid "embedded %<\\0%> in format"
msgstr ""
-#: c-family/c-format.c:2956
+#: c-family/c-format.c:2964
+#, gcc-internal-format
+msgid "unterminated quoting directive"
+msgstr ""
+
+#: c-family/c-format.c:2968
+#, gcc-internal-format
+msgid "unterminated color directive"
+msgstr ""
+
+#: c-family/c-format.c:3088
#, gcc-internal-format, gfc-internal-format
msgid "writing through null pointer (argument %d)"
msgstr ""
-#: c-family/c-format.c:2964
+#: c-family/c-format.c:3096
#, gcc-internal-format, gfc-internal-format
msgid "reading through null pointer (argument %d)"
msgstr ""
-#: c-family/c-format.c:2984
+#: c-family/c-format.c:3116
#, gcc-internal-format, gfc-internal-format
msgid "writing into constant object (argument %d)"
msgstr ""
-#: c-family/c-format.c:2996
+#: c-family/c-format.c:3128
#, gcc-internal-format, gfc-internal-format
msgid "extra type qualifiers in format argument (argument %d)"
msgstr ""
-#: c-family/c-format.c:3469
+#: c-family/c-format.c:3607
#, gcc-internal-format
msgid ""
"%s %<%s%.*s%> expects argument of type %<%s%s%>, but argument %d has type %qT"
msgstr ""
-#: c-family/c-format.c:3479
+#: c-family/c-format.c:3617
#, gcc-internal-format
msgid "%s %<%s%.*s%> expects a matching %<%s%s%> argument"
msgstr ""
-#: c-family/c-format.c:3490
+#: c-family/c-format.c:3628
#, gcc-internal-format
msgid ""
"%s %<%s%.*s%> expects argument of type %<%T%s%>, but argument %d has type %qT"
msgstr ""
-#: c-family/c-format.c:3500
+#: c-family/c-format.c:3638
#, gcc-internal-format
msgid "%s %<%s%.*s%> expects a matching %<%T%s%> argument"
msgstr ""
-#: c-family/c-format.c:3562 c-family/c-format.c:3568 c-family/c-format.c:3719
+#: c-family/c-format.c:3700 c-family/c-format.c:3706 c-family/c-format.c:3855
#, gcc-internal-format
msgid "%<__gcc_host_wide_int__%> is not defined as a type"
msgstr ""
-#: c-family/c-format.c:3575 c-family/c-format.c:3729
+#: c-family/c-format.c:3713 c-family/c-format.c:3865
#, gcc-internal-format
msgid "%<__gcc_host_wide_int__%> is not defined as %<long%> or %<long long%>"
msgstr ""
-#: c-family/c-format.c:3625
+#: c-family/c-format.c:3761
#, gcc-internal-format
msgid "%<locus%> is not defined as a type"
msgstr ""
-#: c-family/c-format.c:3678
+#: c-family/c-format.c:3803
#, gcc-internal-format
msgid "%<location_t%> is not defined as a type"
msgstr ""
-#: c-family/c-format.c:3695
+#: c-family/c-format.c:3819
#, gcc-internal-format
msgid "%<tree%> is not defined as a type"
msgstr ""
-#: c-family/c-format.c:3700
+#: c-family/c-format.c:3825
#, gcc-internal-format
msgid "%<tree%> is not defined as a pointer type"
msgstr ""
-#: c-family/c-format.c:3973
+#: c-family/c-format.c:4051
#, gcc-internal-format
msgid "args to be formatted is not %<...%>"
msgstr ""
-#: c-family/c-format.c:3985
+#: c-family/c-format.c:4063
#, gcc-internal-format
msgid "strftime formats cannot format arguments"
msgstr ""
@@ -25245,12 +25462,12 @@ msgid ""
"tracking was disabled due to the size of the code/headers"
msgstr ""
-#: c-family/c-indentation.c:607
+#: c-family/c-indentation.c:609
#, gcc-internal-format
msgid "this %qs clause does not guard..."
msgstr ""
-#: c-family/c-indentation.c:610
+#: c-family/c-indentation.c:612
#, gcc-internal-format
msgid ""
"...this statement, but the latter is misleadingly indented as if it were "
@@ -25338,7 +25555,7 @@ msgstr ""
msgid "repeated %<@%> before Objective-C string"
msgstr ""
-#: c-family/c-lex.c:1191 cp/parser.c:3974
+#: c-family/c-lex.c:1191 cp/parser.c:3996
#, gcc-internal-format
msgid "unsupported non-standard concatenation of string literals"
msgstr ""
@@ -25368,7 +25585,7 @@ msgstr ""
msgid "%<#pragma omp atomic capture%> uses two different variables for memory"
msgstr ""
-#: c-family/c-omp.c:485 cp/semantics.c:8196
+#: c-family/c-omp.c:485 cp/semantics.c:8241
#, gcc-internal-format
msgid "invalid type for iteration variable %qE"
msgstr ""
@@ -25383,182 +25600,182 @@ msgstr ""
msgid "%qE is not initialized"
msgstr ""
-#: c-family/c-omp.c:527 cp/semantics.c:8084
+#: c-family/c-omp.c:527 cp/semantics.c:8129
#, gcc-internal-format
msgid "missing controlling predicate"
msgstr ""
-#: c-family/c-omp.c:612 cp/semantics.c:7740
+#: c-family/c-omp.c:633 cp/semantics.c:7785
#, gcc-internal-format
msgid "invalid controlling predicate"
msgstr ""
-#: c-family/c-omp.c:619 cp/semantics.c:8090
+#: c-family/c-omp.c:640 cp/semantics.c:8135
#, gcc-internal-format
msgid "missing increment expression"
msgstr ""
-#: c-family/c-omp.c:683 cp/semantics.c:7855
+#: c-family/c-omp.c:704 cp/semantics.c:7900
#, gcc-internal-format
msgid "invalid increment expression"
msgstr ""
-#: c-family/c-omp.c:746
+#: c-family/c-omp.c:767
#, gcc-internal-format
msgid "initializer expression refers to iteration variable %qD"
msgstr ""
-#: c-family/c-omp.c:750
+#: c-family/c-omp.c:771
#, gcc-internal-format
msgid "condition expression refers to iteration variable %qD"
msgstr ""
-#: c-family/c-omp.c:754
+#: c-family/c-omp.c:775
#, gcc-internal-format
msgid "increment expression refers to iteration variable %qD"
msgstr ""
-#: c-family/c-omp.c:1330
+#: c-family/c-omp.c:1351
#, gcc-internal-format
msgid "expected %<parallel%> or %<target%> %<if%> clause modifier"
msgstr ""
-#: c-family/c-omp.c:1440 c-family/c-omp.c:1455
+#: c-family/c-omp.c:1461 c-family/c-omp.c:1476
#, gcc-internal-format
msgid "%qD is not an function argument"
msgstr ""
-#: c-family/c-opts.c:324
+#: c-family/c-opts.c:322
#, gcc-internal-format
msgid "-I- specified twice"
msgstr ""
-#: c-family/c-opts.c:327
+#: c-family/c-opts.c:325
#, gcc-internal-format
msgid "obsolete option -I- used, please use -iquote instead"
msgstr ""
-#: c-family/c-opts.c:385
+#: c-family/c-opts.c:383
#, gcc-internal-format
msgid "-Walloca-larger-than=0 is meaningless"
msgstr ""
-#: c-family/c-opts.c:390
+#: c-family/c-opts.c:388
#, gcc-internal-format
msgid "-Wvla-larger-than=0 is meaningless"
msgstr ""
-#: c-family/c-opts.c:415
+#: c-family/c-opts.c:413
#, gcc-internal-format
msgid "%<-Wabi=1%> is not supported, using =2"
msgstr ""
-#: c-family/c-opts.c:607 fortran/cpp.c:350
+#: c-family/c-opts.c:605 fortran/cpp.c:350
#, gcc-internal-format
msgid "output filename specified twice"
msgstr ""
-#: c-family/c-opts.c:778
+#: c-family/c-opts.c:776
#, gcc-internal-format
msgid "-fexcess-precision=standard for C++"
msgstr ""
-#: c-family/c-opts.c:813
+#: c-family/c-opts.c:811
#, gcc-internal-format
msgid "-fno-gnu89-inline is only supported in GNU99 or C99 mode"
msgstr ""
-#: c-family/c-opts.c:859
+#: c-family/c-opts.c:857
#, gcc-internal-format
msgid "-Wformat-y2k ignored without -Wformat"
msgstr ""
-#: c-family/c-opts.c:861
+#: c-family/c-opts.c:859
#, gcc-internal-format
msgid "-Wformat-extra-args ignored without -Wformat"
msgstr ""
-#: c-family/c-opts.c:863
+#: c-family/c-opts.c:861
#, gcc-internal-format
msgid "-Wformat-zero-length ignored without -Wformat"
msgstr ""
-#: c-family/c-opts.c:865
+#: c-family/c-opts.c:863
#, gcc-internal-format
msgid "-Wformat-nonliteral ignored without -Wformat"
msgstr ""
-#: c-family/c-opts.c:867
+#: c-family/c-opts.c:865
#, gcc-internal-format
msgid "-Wformat-contains-nul ignored without -Wformat"
msgstr ""
-#: c-family/c-opts.c:869
+#: c-family/c-opts.c:867
#, gcc-internal-format
msgid "-Wformat-security ignored without -Wformat"
msgstr ""
-#: c-family/c-opts.c:907
+#: c-family/c-opts.c:905
#, gcc-internal-format
msgid "%<-fabi-compat-version=1%> is not supported, using =2"
msgstr ""
-#: c-family/c-opts.c:966
+#: c-family/c-opts.c:964
#, gcc-internal-format
msgid "external TLS initialization functions not supported on this target"
msgstr ""
-#: c-family/c-opts.c:975
+#: c-family/c-opts.c:973
#, gcc-internal-format, gfc-internal-format
msgid "too many filenames given. Type %s --help for usage"
msgstr ""
-#: c-family/c-opts.c:990
+#: c-family/c-opts.c:988
#, gcc-internal-format
msgid "opening output file %s: %m"
msgstr ""
-#: c-family/c-opts.c:1010
+#: c-family/c-opts.c:1008
#, gcc-internal-format, gfc-internal-format
msgid "the \"%s\" debug format cannot be used with pre-compiled headers"
msgstr ""
-#: c-family/c-opts.c:1171
+#: c-family/c-opts.c:1159
#, gcc-internal-format
msgid "opening dependency file %s: %m"
msgstr ""
-#: c-family/c-opts.c:1182
+#: c-family/c-opts.c:1170
#, gcc-internal-format
msgid "closing dependency file %s: %m"
msgstr ""
-#: c-family/c-opts.c:1185
+#: c-family/c-opts.c:1173
#, gcc-internal-format
msgid "when writing output to %s: %m"
msgstr ""
-#: c-family/c-opts.c:1265
+#: c-family/c-opts.c:1253
#, gcc-internal-format
msgid "to generate dependencies you must specify either -M or -MM"
msgstr ""
-#: c-family/c-opts.c:1288
+#: c-family/c-opts.c:1276
#, gcc-internal-format
msgid "-MG may only be used with -M or -MM"
msgstr ""
-#: c-family/c-opts.c:1321
+#: c-family/c-opts.c:1309
#, gcc-internal-format
msgid "-fdirectives-only is incompatible with -Wunused_macros"
msgstr ""
-#: c-family/c-opts.c:1323
+#: c-family/c-opts.c:1311
#, gcc-internal-format
msgid "-fdirectives-only is incompatible with -traditional"
msgstr ""
-#: c-family/c-opts.c:1515
+#: c-family/c-opts.c:1503
#, gcc-internal-format
msgid "too late for # directive to set debug directory"
msgstr ""
@@ -25950,7 +26167,7 @@ msgstr ""
msgid "<erroneous-expression>"
msgstr ""
-#: c-family/c-pretty-print.c:1231 cp/cxx-pretty-print.c:140
+#: c-family/c-pretty-print.c:1231 cp/cxx-pretty-print.c:132
#, gcc-internal-format
msgid "<return-value>"
msgstr ""
@@ -25960,711 +26177,758 @@ msgstr ""
msgid "wrong type argument to %s"
msgstr ""
-#: c-family/c-warn.c:49 c-family/c-warn.c:62 cp/constexpr.c:1757
-#: cp/constexpr.c:3919
+#: c-family/c-warn.c:51 c-family/c-warn.c:64 cp/constexpr.c:1774
+#: cp/constexpr.c:3936
#, gcc-internal-format
msgid "overflow in constant expression"
msgstr ""
-#: c-family/c-warn.c:85
+#: c-family/c-warn.c:91
#, gcc-internal-format
-msgid "integer overflow in expression"
+msgid "integer overflow in expression %qE of type %qT results in %qE"
msgstr ""
-#: c-family/c-warn.c:90
+#: c-family/c-warn.c:93
#, gcc-internal-format
-msgid "floating point overflow in expression"
+msgid "integer overflow in expression of type %qT results in %qE"
msgstr ""
-#: c-family/c-warn.c:94
+#: c-family/c-warn.c:99
#, gcc-internal-format
-msgid "fixed-point overflow in expression"
+msgid "floating point overflow in expression %qE of type %qT results in %qE"
msgstr ""
-#: c-family/c-warn.c:98
+#: c-family/c-warn.c:101
#, gcc-internal-format
-msgid "vector overflow in expression"
+msgid "floating point overflow in expression of type %qT results in %qE"
msgstr ""
-#: c-family/c-warn.c:104
+#: c-family/c-warn.c:107
#, gcc-internal-format
-msgid "complex integer overflow in expression"
+msgid "fixed-point overflow in expression %qE of type %qT results in %qE"
msgstr ""
-#: c-family/c-warn.c:107
+#: c-family/c-warn.c:109
+#, gcc-internal-format
+msgid "fixed-point overflow in expression of type %qT results in %qE"
+msgstr ""
+
+#: c-family/c-warn.c:115
+#, gcc-internal-format
+msgid "vector overflow in expression %qE of type %qT results in %qE"
+msgstr ""
+
+#: c-family/c-warn.c:117
+#, gcc-internal-format
+msgid "vector overflow in expression of type %qT results in %qE"
+msgstr ""
+
+#: c-family/c-warn.c:124
+#, gcc-internal-format
+msgid "complex integer overflow in expression %qE of type %qT results in %qE"
+msgstr ""
+
+#: c-family/c-warn.c:126
+#, gcc-internal-format
+msgid "complex integer overflow in expression of type %qT results in %qE"
+msgstr ""
+
+#: c-family/c-warn.c:130
#, gcc-internal-format
-msgid "complex floating point overflow in expression"
+msgid ""
+"complex floating point overflow in expression %qE of type %qT results in %qE"
+msgstr ""
+
+#: c-family/c-warn.c:132
+#, gcc-internal-format
+msgid ""
+"complex floating point overflow in expression of type %qT results in %qE"
msgstr ""
-#: c-family/c-warn.c:161
+#: c-family/c-warn.c:211
#, gcc-internal-format
msgid "logical %<or%> applied to non-boolean constant"
msgstr ""
-#: c-family/c-warn.c:164
+#: c-family/c-warn.c:214
#, gcc-internal-format
msgid "logical %<and%> applied to non-boolean constant"
msgstr ""
-#: c-family/c-warn.c:234
+#: c-family/c-warn.c:284
#, gcc-internal-format
msgid "logical %<or%> of collectively exhaustive tests is always true"
msgstr ""
-#: c-family/c-warn.c:238
+#: c-family/c-warn.c:288
#, gcc-internal-format
msgid "logical %<and%> of mutually exclusive tests is always false"
msgstr ""
-#: c-family/c-warn.c:248
+#: c-family/c-warn.c:298
#, gcc-internal-format
msgid "logical %<or%> of equal expressions"
msgstr ""
-#: c-family/c-warn.c:251
+#: c-family/c-warn.c:301
#, gcc-internal-format
msgid "logical %<and%> of equal expressions"
msgstr ""
-#: c-family/c-warn.c:321
+#: c-family/c-warn.c:371
#, gcc-internal-format
msgid "self-comparison always evaluates to true"
msgstr ""
-#: c-family/c-warn.c:324
+#: c-family/c-warn.c:374
#, gcc-internal-format
msgid "self-comparison always evaluates to false"
msgstr ""
-#: c-family/c-warn.c:374
+#: c-family/c-warn.c:424
#, gcc-internal-format
msgid "logical not is only applied to the left hand side of comparison"
msgstr ""
-#: c-family/c-warn.c:382
+#: c-family/c-warn.c:432
#, gcc-internal-format
msgid ""
"add parentheses around left hand side expression to silence this warning"
msgstr ""
-#: c-family/c-warn.c:512
+#: c-family/c-warn.c:561
#, gcc-internal-format
msgid "type-punning to incomplete type might break strict-aliasing rules"
msgstr ""
-#: c-family/c-warn.c:529
+#: c-family/c-warn.c:578
#, gcc-internal-format
msgid "dereferencing type-punned pointer will break strict-aliasing rules"
msgstr ""
-#: c-family/c-warn.c:536 c-family/c-warn.c:553
+#: c-family/c-warn.c:585 c-family/c-warn.c:602
#, gcc-internal-format
msgid "dereferencing type-punned pointer might break strict-aliasing rules"
msgstr ""
-#: c-family/c-warn.c:687
+#: c-family/c-warn.c:736
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same expression as the "
"destination; did you mean to remove the addressof?"
msgstr ""
-#: c-family/c-warn.c:694
+#: c-family/c-warn.c:743
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same expression as the "
"destination; did you mean to provide an explicit length?"
msgstr ""
-#: c-family/c-warn.c:699
+#: c-family/c-warn.c:748
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same expression as the "
"destination; did you mean to dereference it?"
msgstr ""
-#: c-family/c-warn.c:711
+#: c-family/c-warn.c:760
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same pointer type %qT as the "
"destination; expected %qT or an explicit length"
msgstr ""
-#: c-family/c-warn.c:727
+#: c-family/c-warn.c:776
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same expression as the source; did "
"you mean to remove the addressof?"
msgstr ""
-#: c-family/c-warn.c:734
+#: c-family/c-warn.c:783
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same expression as the source; did "
"you mean to provide an explicit length?"
msgstr ""
-#: c-family/c-warn.c:739
+#: c-family/c-warn.c:788
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same expression as the source; did "
"you mean to dereference it?"
msgstr ""
-#: c-family/c-warn.c:751
+#: c-family/c-warn.c:800
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same pointer type %qT as the "
"source; expected %qT or an explicit length"
msgstr ""
-#: c-family/c-warn.c:767
+#: c-family/c-warn.c:816
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same expression as the first "
"source; did you mean to remove the addressof?"
msgstr ""
-#: c-family/c-warn.c:774
+#: c-family/c-warn.c:823
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same expression as the first "
"source; did you mean to provide an explicit length?"
msgstr ""
-#: c-family/c-warn.c:779
+#: c-family/c-warn.c:828
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same expression as the first "
"source; did you mean to dereference it?"
msgstr ""
-#: c-family/c-warn.c:791
+#: c-family/c-warn.c:840
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same pointer type %qT as the first "
"source; expected %qT or an explicit length"
msgstr ""
-#: c-family/c-warn.c:807
+#: c-family/c-warn.c:856
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same expression as the second "
"source; did you mean to remove the addressof?"
msgstr ""
-#: c-family/c-warn.c:814
+#: c-family/c-warn.c:863
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same expression as the second "
"source; did you mean to provide an explicit length?"
msgstr ""
-#: c-family/c-warn.c:819
+#: c-family/c-warn.c:868
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same expression as the second "
"source; did you mean to dereference it?"
msgstr ""
-#: c-family/c-warn.c:831
+#: c-family/c-warn.c:880
#, gcc-internal-format
msgid ""
"argument to %<sizeof%> in %qD call is the same pointer type %qT as the "
"second source; expected %qT or an explicit length"
msgstr ""
-#: c-family/c-warn.c:860 c-family/c-warn.c:867
+#: c-family/c-warn.c:909 c-family/c-warn.c:916
#, gcc-internal-format
msgid "%<_Atomic%>-qualified parameter type %qT of %q+D"
msgstr ""
-#: c-family/c-warn.c:877
+#: c-family/c-warn.c:926
#, gcc-internal-format
msgid "first argument of %q+D should be %<int%>"
msgstr ""
-#: c-family/c-warn.c:886
+#: c-family/c-warn.c:935
#, gcc-internal-format
msgid "second argument of %q+D should be %<char **%>"
msgstr ""
-#: c-family/c-warn.c:895
+#: c-family/c-warn.c:944
#, gcc-internal-format
msgid "third argument of %q+D should probably be %<char **%>"
msgstr ""
-#: c-family/c-warn.c:906
+#: c-family/c-warn.c:955
#, gcc-internal-format
msgid "%q+D takes only zero or two arguments"
msgstr ""
-#: c-family/c-warn.c:910
+#: c-family/c-warn.c:959
#, gcc-internal-format
msgid "%q+D declared as variadic function"
msgstr ""
-#: c-family/c-warn.c:952
+#: c-family/c-warn.c:1001
#, gcc-internal-format
msgid "conversion to %qT from boolean expression"
msgstr ""
-#: c-family/c-warn.c:961 c-family/c-warn.c:965
+#: c-family/c-warn.c:1019 c-family/c-warn.c:1095
#, gcc-internal-format
-msgid "conversion to %qT alters %qT constant value"
+msgid "conversion from %qT to %qT changes value from %qE to %qE"
msgstr ""
-#: c-family/c-warn.c:985 c-family/c-warn.c:993
+#: c-family/c-warn.c:1023 c-family/c-warn.c:1103
#, gcc-internal-format
-msgid "conversion to %qT from %qT may alter its value"
+msgid "conversion from %qT to %qT changes the value of %qE"
msgstr ""
-#: c-family/c-warn.c:989
+#: c-family/c-warn.c:1043
#, gcc-internal-format
-msgid "conversion to %qT from %qT discards imaginary component"
+msgid "conversion from %qT to to %qT discards imaginary component"
msgstr ""
-#: c-family/c-warn.c:1024
+#: c-family/c-warn.c:1056
#, gcc-internal-format
-msgid "large integer implicitly truncated to unsigned type"
+msgid "conversion from %qT to %qT may change value"
msgstr ""
-#: c-family/c-warn.c:1030 c-family/c-warn.c:1037 c-family/c-warn.c:1045
+#: c-family/c-warn.c:1116 c-family/c-warn.c:1133
#, gcc-internal-format
-msgid "overflow in implicit constant conversion"
+msgid "overflow in conversion from %qT to %qT changes value from %qE to %qE"
msgstr ""
-#: c-family/c-warn.c:1068
+#: c-family/c-warn.c:1121 c-family/c-warn.c:1138
+#, gcc-internal-format
+msgid "overflow in conversion from %qT to %qT changes the value of %qE"
+msgstr ""
+
+#: c-family/c-warn.c:1150
+#, gcc-internal-format
+msgid "overflow in conversion from %qT to %qT chages value from %qE to %qE"
+msgstr ""
+
+#: c-family/c-warn.c:1155
+#, gcc-internal-format
+msgid "overflow in conversion from %qT to %qT chages the value of %qE"
+msgstr ""
+
+#: c-family/c-warn.c:1185
#, gcc-internal-format
msgid "case value %qs not in enumerated type"
msgstr ""
-#: c-family/c-warn.c:1073
+#: c-family/c-warn.c:1190
#, gcc-internal-format
msgid "case value %qs not in enumerated type %qT"
msgstr ""
-#: c-family/c-warn.c:1134
+#: c-family/c-warn.c:1251
#, gcc-internal-format
msgid "switch missing default case"
msgstr ""
-#: c-family/c-warn.c:1179
+#: c-family/c-warn.c:1296
#, gcc-internal-format
msgid "switch condition has boolean value"
msgstr ""
-#: c-family/c-warn.c:1252
+#: c-family/c-warn.c:1369
#, gcc-internal-format
msgid "enumeration value %qE not handled in switch"
msgstr ""
-#: c-family/c-warn.c:1280
+#: c-family/c-warn.c:1397
#, gcc-internal-format
msgid ""
"the omitted middle operand in ?: will always be %<true%>, suggest explicit "
"middle operand"
msgstr ""
-#: c-family/c-warn.c:1301
+#: c-family/c-warn.c:1418
#, gcc-internal-format
msgid "assignment of member %qD in read-only object"
msgstr ""
-#: c-family/c-warn.c:1303
+#: c-family/c-warn.c:1420
#, gcc-internal-format
msgid "increment of member %qD in read-only object"
msgstr ""
-#: c-family/c-warn.c:1305
+#: c-family/c-warn.c:1422
#, gcc-internal-format
msgid "decrement of member %qD in read-only object"
msgstr ""
-#: c-family/c-warn.c:1307
+#: c-family/c-warn.c:1424
#, gcc-internal-format
msgid "member %qD in read-only object used as %<asm%> output"
msgstr ""
-#: c-family/c-warn.c:1311
+#: c-family/c-warn.c:1428
#, gcc-internal-format
msgid "assignment of read-only member %qD"
msgstr ""
-#: c-family/c-warn.c:1312
+#: c-family/c-warn.c:1429
#, gcc-internal-format
msgid "increment of read-only member %qD"
msgstr ""
-#: c-family/c-warn.c:1313
+#: c-family/c-warn.c:1430
#, gcc-internal-format
msgid "decrement of read-only member %qD"
msgstr ""
-#: c-family/c-warn.c:1314
+#: c-family/c-warn.c:1431
#, gcc-internal-format
msgid "read-only member %qD used as %<asm%> output"
msgstr ""
-#: c-family/c-warn.c:1318
+#: c-family/c-warn.c:1435
#, gcc-internal-format
msgid "assignment of read-only variable %qD"
msgstr ""
-#: c-family/c-warn.c:1319
+#: c-family/c-warn.c:1436
#, gcc-internal-format
msgid "increment of read-only variable %qD"
msgstr ""
-#: c-family/c-warn.c:1320
+#: c-family/c-warn.c:1437
#, gcc-internal-format
msgid "decrement of read-only variable %qD"
msgstr ""
-#: c-family/c-warn.c:1321
+#: c-family/c-warn.c:1438
#, gcc-internal-format
msgid "read-only variable %qD used as %<asm%> output"
msgstr ""
-#: c-family/c-warn.c:1324
+#: c-family/c-warn.c:1441
#, gcc-internal-format
msgid "assignment of read-only parameter %qD"
msgstr ""
-#: c-family/c-warn.c:1325
+#: c-family/c-warn.c:1442
#, gcc-internal-format
msgid "increment of read-only parameter %qD"
msgstr ""
-#: c-family/c-warn.c:1326
+#: c-family/c-warn.c:1443
#, gcc-internal-format
msgid "decrement of read-only parameter %qD"
msgstr ""
-#: c-family/c-warn.c:1327
+#: c-family/c-warn.c:1444
#, gcc-internal-format
msgid "read-only parameter %qD use as %<asm%> output"
msgstr ""
-#: c-family/c-warn.c:1332
+#: c-family/c-warn.c:1449
#, gcc-internal-format
msgid "assignment of read-only named return value %qD"
msgstr ""
-#: c-family/c-warn.c:1334
+#: c-family/c-warn.c:1451
#, gcc-internal-format
msgid "increment of read-only named return value %qD"
msgstr ""
-#: c-family/c-warn.c:1336
+#: c-family/c-warn.c:1453
#, gcc-internal-format
msgid "decrement of read-only named return value %qD"
msgstr ""
-#: c-family/c-warn.c:1338
+#: c-family/c-warn.c:1455
#, gcc-internal-format
msgid "read-only named return value %qD used as %<asm%>output"
msgstr ""
-#: c-family/c-warn.c:1343
+#: c-family/c-warn.c:1460
#, gcc-internal-format
msgid "assignment of function %qD"
msgstr ""
-#: c-family/c-warn.c:1344
+#: c-family/c-warn.c:1461
#, gcc-internal-format
msgid "increment of function %qD"
msgstr ""
-#: c-family/c-warn.c:1345
+#: c-family/c-warn.c:1462
#, gcc-internal-format
msgid "decrement of function %qD"
msgstr ""
-#: c-family/c-warn.c:1346
+#: c-family/c-warn.c:1463
#, gcc-internal-format
msgid "function %qD used as %<asm%> output"
msgstr ""
-#: c-family/c-warn.c:1349 c/c-typeck.c:4725
+#: c-family/c-warn.c:1466 c/c-typeck.c:4730
#, gcc-internal-format
msgid "assignment of read-only location %qE"
msgstr ""
-#: c-family/c-warn.c:1350 c/c-typeck.c:4728
+#: c-family/c-warn.c:1467 c/c-typeck.c:4733
#, gcc-internal-format
msgid "increment of read-only location %qE"
msgstr ""
-#: c-family/c-warn.c:1351 c/c-typeck.c:4731
+#: c-family/c-warn.c:1468 c/c-typeck.c:4736
#, gcc-internal-format
msgid "decrement of read-only location %qE"
msgstr ""
-#: c-family/c-warn.c:1352
+#: c-family/c-warn.c:1469
#, gcc-internal-format
msgid "read-only location %qE used as %<asm%> output"
msgstr ""
-#: c-family/c-warn.c:1366
+#: c-family/c-warn.c:1483
#, gcc-internal-format
msgid "lvalue required as left operand of assignment"
msgstr ""
-#: c-family/c-warn.c:1369
+#: c-family/c-warn.c:1486
#, gcc-internal-format
msgid "lvalue required as increment operand"
msgstr ""
-#: c-family/c-warn.c:1372
+#: c-family/c-warn.c:1489
#, gcc-internal-format
msgid "lvalue required as decrement operand"
msgstr ""
-#: c-family/c-warn.c:1375
+#: c-family/c-warn.c:1492
#, gcc-internal-format
msgid "lvalue required as unary %<&%> operand"
msgstr ""
-#: c-family/c-warn.c:1378
+#: c-family/c-warn.c:1495
#, gcc-internal-format
msgid "lvalue required in asm statement"
msgstr ""
-#: c-family/c-warn.c:1395
+#: c-family/c-warn.c:1512
#, gcc-internal-format
msgid "invalid type argument (have %qT)"
msgstr ""
-#: c-family/c-warn.c:1399
+#: c-family/c-warn.c:1516
#, gcc-internal-format
msgid "invalid type argument of array indexing (have %qT)"
msgstr ""
-#: c-family/c-warn.c:1404
+#: c-family/c-warn.c:1521
#, gcc-internal-format
msgid "invalid type argument of unary %<*%> (have %qT)"
msgstr ""
-#: c-family/c-warn.c:1409
+#: c-family/c-warn.c:1526
#, gcc-internal-format
msgid "invalid type argument of %<->%> (have %qT)"
msgstr ""
-#: c-family/c-warn.c:1414
+#: c-family/c-warn.c:1531
#, gcc-internal-format
msgid "invalid type argument of %<->*%> (have %qT)"
msgstr ""
-#: c-family/c-warn.c:1419
+#: c-family/c-warn.c:1536
#, gcc-internal-format
msgid "invalid type argument of implicit conversion (have %qT)"
msgstr ""
-#: c-family/c-warn.c:1440
+#: c-family/c-warn.c:1557
#, gcc-internal-format
msgid "array subscript has type %<char%>"
msgstr ""
-#: c-family/c-warn.c:1475 c-family/c-warn.c:1478
+#: c-family/c-warn.c:1592 c-family/c-warn.c:1595
#, gcc-internal-format
msgid "suggest parentheses around %<+%> inside %<<<%>"
msgstr ""
-#: c-family/c-warn.c:1481 c-family/c-warn.c:1484
+#: c-family/c-warn.c:1598 c-family/c-warn.c:1601
#, gcc-internal-format
msgid "suggest parentheses around %<-%> inside %<<<%>"
msgstr ""
-#: c-family/c-warn.c:1490 c-family/c-warn.c:1493
+#: c-family/c-warn.c:1607 c-family/c-warn.c:1610
#, gcc-internal-format
msgid "suggest parentheses around %<+%> inside %<>>%>"
msgstr ""
-#: c-family/c-warn.c:1496 c-family/c-warn.c:1499
+#: c-family/c-warn.c:1613 c-family/c-warn.c:1616
#, gcc-internal-format
msgid "suggest parentheses around %<-%> inside %<>>%>"
msgstr ""
-#: c-family/c-warn.c:1505 c-family/c-warn.c:1508
+#: c-family/c-warn.c:1622 c-family/c-warn.c:1625
#, gcc-internal-format
msgid "suggest parentheses around %<&&%> within %<||%>"
msgstr ""
-#: c-family/c-warn.c:1515 c-family/c-warn.c:1519
+#: c-family/c-warn.c:1632 c-family/c-warn.c:1636
#, gcc-internal-format
msgid "suggest parentheses around arithmetic in operand of %<|%>"
msgstr ""
-#: c-family/c-warn.c:1523 c-family/c-warn.c:1526
+#: c-family/c-warn.c:1640 c-family/c-warn.c:1643
#, gcc-internal-format
msgid "suggest parentheses around comparison in operand of %<|%>"
msgstr ""
-#: c-family/c-warn.c:1531
+#: c-family/c-warn.c:1648
#, gcc-internal-format
msgid ""
"suggest parentheses around operand of %<!%> or change %<|%> to %<||%> or %<!"
"%> to %<~%>"
msgstr ""
-#: c-family/c-warn.c:1539 c-family/c-warn.c:1543
+#: c-family/c-warn.c:1656 c-family/c-warn.c:1660
#, gcc-internal-format
msgid "suggest parentheses around arithmetic in operand of %<^%>"
msgstr ""
-#: c-family/c-warn.c:1547 c-family/c-warn.c:1550
+#: c-family/c-warn.c:1664 c-family/c-warn.c:1667
#, gcc-internal-format
msgid "suggest parentheses around comparison in operand of %<^%>"
msgstr ""
-#: c-family/c-warn.c:1556 c-family/c-warn.c:1559
+#: c-family/c-warn.c:1673 c-family/c-warn.c:1676
#, gcc-internal-format
msgid "suggest parentheses around %<+%> in operand of %<&%>"
msgstr ""
-#: c-family/c-warn.c:1562 c-family/c-warn.c:1565
+#: c-family/c-warn.c:1679 c-family/c-warn.c:1682
#, gcc-internal-format
msgid "suggest parentheses around %<-%> in operand of %<&%>"
msgstr ""
-#: c-family/c-warn.c:1569 c-family/c-warn.c:1572
+#: c-family/c-warn.c:1686 c-family/c-warn.c:1689
#, gcc-internal-format
msgid "suggest parentheses around comparison in operand of %<&%>"
msgstr ""
-#: c-family/c-warn.c:1577
+#: c-family/c-warn.c:1694
#, gcc-internal-format
msgid ""
"suggest parentheses around operand of %<!%> or change %<&%> to %<&&%> or %<!"
"%> to %<~%>"
msgstr ""
-#: c-family/c-warn.c:1584 c-family/c-warn.c:1587
+#: c-family/c-warn.c:1701 c-family/c-warn.c:1704
#, gcc-internal-format
msgid "suggest parentheses around comparison in operand of %<==%>"
msgstr ""
-#: c-family/c-warn.c:1592 c-family/c-warn.c:1595
+#: c-family/c-warn.c:1709 c-family/c-warn.c:1712
#, gcc-internal-format
msgid "suggest parentheses around comparison in operand of %<!=%>"
msgstr ""
-#: c-family/c-warn.c:1605 c-family/c-warn.c:1611
+#: c-family/c-warn.c:1722 c-family/c-warn.c:1728
#, gcc-internal-format
msgid "comparisons like %<X<=Y<=Z%> do not have their mathematical meaning"
msgstr ""
-#: c-family/c-warn.c:1627
+#: c-family/c-warn.c:1744
#, gcc-internal-format
msgid "label %q+D defined but not used"
msgstr ""
-#: c-family/c-warn.c:1629
+#: c-family/c-warn.c:1746
#, gcc-internal-format
msgid "label %q+D declared but not defined"
msgstr ""
-#: c-family/c-warn.c:1652
+#: c-family/c-warn.c:1769
#, gcc-internal-format
msgid "division by zero"
msgstr ""
-#: c-family/c-warn.c:1669
+#: c-family/c-warn.c:1786
#, gcc-internal-format
msgid ""
"%<memset%> used with constant zero length parameter; this could be due to "
"transposed parameters"
msgstr ""
-#: c-family/c-warn.c:1692
+#: c-family/c-warn.c:1809
#, gcc-internal-format
msgid ""
"%<memset%> used with length equal to number of elements without "
"multiplication by element size"
msgstr ""
-#: c-family/c-warn.c:1728 c/c-typeck.c:11295 c/c-typeck.c:11454
-#: cp/typeck.c:4895
+#: c-family/c-warn.c:1845 c/c-typeck.c:11304 c/c-typeck.c:11463
+#: cp/typeck.c:4948
#, gcc-internal-format
msgid "comparison between types %qT and %qT"
msgstr ""
-#: c-family/c-warn.c:1779
+#: c-family/c-warn.c:1895
#, gcc-internal-format
-msgid "comparison between signed and unsigned integer expressions"
+msgid "comparison of integer expressions of different signedness: %qT and %qT"
msgstr ""
-#: c-family/c-warn.c:1830
+#: c-family/c-warn.c:1948
#, gcc-internal-format
msgid "promoted ~unsigned is always non-zero"
msgstr ""
-#: c-family/c-warn.c:1833
+#: c-family/c-warn.c:1951
#, gcc-internal-format
msgid "comparison of promoted ~unsigned with constant"
msgstr ""
-#: c-family/c-warn.c:1843
+#: c-family/c-warn.c:1961
#, gcc-internal-format
msgid "comparison of promoted ~unsigned with unsigned"
msgstr ""
-#: c-family/c-warn.c:1897
+#: c-family/c-warn.c:2015
#, gcc-internal-format
msgid "unused parameter %qD"
msgstr ""
-#: c-family/c-warn.c:1959
+#: c-family/c-warn.c:2077
#, gcc-internal-format
msgid "typedef %qD locally defined but not used"
msgstr ""
-#: c-family/c-warn.c:1994
+#: c-family/c-warn.c:2112
#, gcc-internal-format
msgid "duplicated %<if%> condition"
msgstr ""
-#: c-family/c-warn.c:2023
+#: c-family/c-warn.c:2141
#, gcc-internal-format
msgid ""
"optimization attribute on %qD follows definition but the attribute doesn%'t "
"match"
msgstr ""
-#: c-family/c-warn.c:2031
+#: c-family/c-warn.c:2149
#, gcc-internal-format
msgid "inline declaration of %qD follows declaration with attribute noinline"
msgstr ""
-#: c-family/c-warn.c:2036
+#: c-family/c-warn.c:2154
#, gcc-internal-format
msgid "declaration of %q+D with attribute noinline follows inline declaration "
msgstr ""
-#: c-family/c-warn.c:2040 c-family/c-warn.c:2045 c-family/c-warn.c:2050
-#: c-family/c-warn.c:2055
+#: c-family/c-warn.c:2158 c-family/c-warn.c:2163 c-family/c-warn.c:2168
+#: c-family/c-warn.c:2173
#, gcc-internal-format
msgid ""
"declaration of %q+D with attribute %qs follows declaration with attribute %qs"
msgstr ""
-#: c-family/c-warn.c:2102
+#: c-family/c-warn.c:2220
#, gcc-internal-format
msgid "result of %qE requires %u bits to represent, but %qT only has %u bits"
msgstr ""
-#: c-family/c-warn.c:2140 c-family/c-warn.c:2164
+#: c-family/c-warn.c:2258 c-family/c-warn.c:2282
#, gcc-internal-format
msgid "comparison of constant %qE with boolean expression is always false"
msgstr ""
-#: c-family/c-warn.c:2143 c-family/c-warn.c:2161
+#: c-family/c-warn.c:2261 c-family/c-warn.c:2279
#, gcc-internal-format
msgid "comparison of constant %qE with boolean expression is always true"
msgstr ""
-#: c-family/c-warn.c:2210
+#: c-family/c-warn.c:2328
msgid ""
"passing argument %i to restrict-qualified parameter aliases with argument %Z"
msgid_plural ""
@@ -26672,12 +26936,22 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: c-family/c-warn.c:2275 c/c-typeck.c:5217 cp/call.c:5316
+#: c-family/c-warn.c:2393 c/c-typeck.c:5222 cp/call.c:5351
#, gcc-internal-format
msgid "this condition has identical branches"
msgstr ""
-#: c-family/cilk.c:93 cp/parser.c:6573
+#: c-family/c-warn.c:2499
+#, gcc-internal-format
+msgid "macro expands to multiple statements"
+msgstr ""
+
+#: c-family/c-warn.c:2500
+#, gcc-internal-format
+msgid "some parts of macro expansion are not guarded by this %qs clause"
+msgstr ""
+
+#: c-family/cilk.c:93 cp/parser.c:6612
#, gcc-internal-format
msgid "%<_Cilk_spawn%> may only be used inside a function"
msgstr ""
@@ -26687,27 +26961,27 @@ msgstr ""
msgid "only function calls can be spawned"
msgstr ""
-#: c-family/cilk.c:250
+#: c-family/cilk.c:254
#, gcc-internal-format
msgid "invalid use of %<_Cilk_spawn%>"
msgstr ""
-#: c-family/cilk.c:393
+#: c-family/cilk.c:397
#, gcc-internal-format
msgid "explicit register variable %qD may not be modified in spawn"
msgstr ""
-#: c-family/cilk.c:474
+#: c-family/cilk.c:478
#, gcc-internal-format
msgid "cannot spawn call to function that returns twice"
msgstr ""
-#: c-family/cilk.c:495
+#: c-family/cilk.c:499
#, gcc-internal-format
msgid "invalid use of label %q+D in %<_Cilk_spawn%>"
msgstr ""
-#: c-family/cilk.c:996
+#: c-family/cilk.c:914
#, gcc-internal-format
msgid "register assignment ignored for %qD used in Cilk block"
msgstr ""
@@ -26722,7 +26996,7 @@ msgstr ""
msgid "too many input files"
msgstr ""
-#: common/config/aarch64/aarch64-common.c:313 config/aarch64/aarch64.c:8759
+#: common/config/aarch64/aarch64-common.c:313 config/aarch64/aarch64.c:9122
#, gcc-internal-format
msgid "unknown value %qs for -mcpu"
msgstr ""
@@ -26742,6 +27016,68 @@ msgstr ""
msgid "Unsupported value for mmpy-option"
msgstr ""
+#: common/config/arm/arm-common.c:179
+#, gcc-internal-format, gfc-internal-format
+msgid "%%:target_mode_check takes an even number of parameters"
+msgstr ""
+
+#: common/config/arm/arm-common.c:189
+#, gcc-internal-format, gfc-internal-format
+msgid "unrecognized option passed to %%:target_mode_check"
+msgstr ""
+
+#: common/config/arm/arm-common.c:235 common/config/arm/arm-common.c:279
+#: common/config/arm/arm-common.c:322 config/aarch64/aarch64.c:9078
+#, gcc-internal-format
+msgid "valid arguments are: %s; did you mean %qs?"
+msgstr ""
+
+#: common/config/arm/arm-common.c:238 common/config/arm/arm-common.c:282
+#: common/config/arm/arm-common.c:325
+#, gcc-internal-format, gfc-internal-format
+msgid "valid arguments are: %s"
+msgstr ""
+
+#: common/config/arm/arm-common.c:262 common/config/arm/arm-common.c:306
+#, gcc-internal-format, gfc-internal-format
+msgid "unrecognized %s target: %s"
+msgstr ""
+
+#: common/config/arm/arm-common.c:341
+#, gcc-internal-format, gfc-internal-format
+msgid "unrecognized -mfpu target: %s"
+msgstr ""
+
+#: common/config/arm/arm-common.c:369
+#, gcc-internal-format
+msgid "%qs does not support feature %qs"
+msgstr ""
+
+#: common/config/arm/arm-common.c:380
+#, gcc-internal-format
+msgid "valid feature names are: %s; did you mean %qs?"
+msgstr ""
+
+#: common/config/arm/arm-common.c:383
+#, gcc-internal-format, gfc-internal-format
+msgid "valid feature names are: %s"
+msgstr ""
+
+#: common/config/arm/arm-common.c:401
+#, gcc-internal-format, gfc-internal-format
+msgid "%s does not take any feature options"
+msgstr ""
+
+#: common/config/arm/arm-common.c:492
+#, gcc-internal-format, gfc-internal-format
+msgid "%%:canon_for_mlib takes 1 or more pairs of parameters"
+msgstr ""
+
+#: common/config/arm/arm-common.c:506
+#, gcc-internal-format, gfc-internal-format
+msgid "unrecognized operand to %%:canon_for_mlib"
+msgstr ""
+
#: common/config/bfin/bfin-common.c:304 common/config/m68k/m68k-common.c:60
#, gcc-internal-format, gfc-internal-format
msgid "-mshared-library-id=%s is not between 0 and %d"
@@ -26824,48 +27160,53 @@ msgid ""
"128, 256, or 512"
msgstr ""
-#: common/config/riscv/riscv-common.c:43
-#, gcc-internal-format, gfc-internal-format
-msgid "-march=%s: ISA string must begin with rv32 or rv64"
-msgstr ""
-
-#: common/config/riscv/riscv-common.c:82
-#, gcc-internal-format, gfc-internal-format
-msgid "-march=%s: invalid ISA string"
-msgstr ""
-
-#: common/config/riscv/riscv-common.c:92
-#, gcc-internal-format
-msgid "-march=%s: unsupported ISA substring %qs"
-msgstr ""
-
-#: common/config/rs6000/rs6000-common.c:174 config/sparc/sparc.c:1371
+#: common/config/powerpcspe/powerpcspe-common.c:174
+#: common/config/rs6000/rs6000-common.c:174 config/sparc/sparc.c:1482
#, gcc-internal-format, gfc-internal-format
msgid "unknown -mdebug-%s switch"
msgstr ""
-#: common/config/rs6000/rs6000-common.c:222
+#: common/config/powerpcspe/powerpcspe-common.c:222
+#: common/config/rs6000/rs6000-common.c:213
#, gcc-internal-format, gfc-internal-format
msgid "unknown switch -mlong-double-%s"
msgstr ""
-#: common/config/rs6000/rs6000-common.c:232
+#: common/config/powerpcspe/powerpcspe-common.c:232
+#: common/config/rs6000/rs6000-common.c:223
#, gcc-internal-format
msgid "-msingle-float option equivalent to -mhard-float"
msgstr ""
-#: common/config/rs6000/rs6000-common.c:248
+#: common/config/powerpcspe/powerpcspe-common.c:248
+#: common/config/rs6000/rs6000-common.c:239
#, gcc-internal-format
msgid "-msimple-fpu option ignored"
msgstr ""
-#: common/config/rs6000/rs6000-common.c:314
+#: common/config/powerpcspe/powerpcspe-common.c:314
+#: common/config/rs6000/rs6000-common.c:305
#, gcc-internal-format
msgid ""
"%<-fsplit-stack%> currently only supported on PowerPC64 GNU/Linux with "
"glibc-2.18 or later"
msgstr ""
+#: common/config/riscv/riscv-common.c:43
+#, gcc-internal-format, gfc-internal-format
+msgid "-march=%s: ISA string must begin with rv32 or rv64"
+msgstr ""
+
+#: common/config/riscv/riscv-common.c:82
+#, gcc-internal-format, gfc-internal-format
+msgid "-march=%s: invalid ISA string"
+msgstr ""
+
+#: common/config/riscv/riscv-common.c:92
+#, gcc-internal-format
+msgid "-march=%s: unsupported ISA substring %qs"
+msgstr ""
+
#: common/config/rx/rx-common.c:61
#, gcc-internal-format
msgid "the RX200 cpu does not have FPU hardware"
@@ -27051,6 +27392,13 @@ msgid ""
"fnext-runtime%>"
msgstr ""
+#: config/darwin.c:3167
+#, gcc-internal-format
+msgid ""
+"-freorder-blocks-and-partition does not work with exceptions on this "
+"architecture"
+msgstr ""
+
#: config/darwin.c:3215
#, gcc-internal-format
msgid ""
@@ -27099,7 +27447,7 @@ msgstr ""
#: config/sol2-c.c:115
#, gcc-internal-format
-msgid "%<#pragma align%> must appear before the declaration of %D, ignoring"
+msgid "%<#pragma align%> must appear before the declaration of %qD, ignoring"
msgstr ""
#: config/sol2-c.c:127 config/sol2-c.c:139
@@ -27147,7 +27495,7 @@ msgstr ""
msgid "ignoring %<#pragma align%> for explicitly aligned %q+D"
msgstr ""
-#: config/vxworks.c:145
+#: config/vxworks.c:151
#, gcc-internal-format
msgid "PIC is only supported for RTPs"
msgstr ""
@@ -27173,7 +27521,7 @@ msgstr ""
msgid "%Kargument %d must be a constant immediate"
msgstr ""
-#: config/aarch64/aarch64-builtins.c:1160 config/arm/arm-builtins.c:2471
+#: config/aarch64/aarch64-builtins.c:1160 config/arm/arm-builtins.c:2476
#, gcc-internal-format
msgid "%Klane index must be a constant immediate"
msgstr ""
@@ -27183,443 +27531,493 @@ msgstr ""
msgid "%Ktotal size and element size must be a non-zero constant immediate"
msgstr ""
-#: config/aarch64/aarch64.c:927
+#: config/aarch64/aarch64.c:967
#, gcc-internal-format
msgid "%qs is incompatible with %s %s"
msgstr ""
-#: config/aarch64/aarch64.c:929
+#: config/aarch64/aarch64.c:969
#, gcc-internal-format
msgid "%qs feature modifier is incompatible with %s %s"
msgstr ""
-#: config/aarch64/aarch64.c:8382
+#: config/aarch64/aarch64.c:8719
#, gcc-internal-format, gfc-internal-format
msgid "unknown flag passed in -moverride=%s (%s)"
msgstr ""
-#: config/aarch64/aarch64.c:8426
+#: config/aarch64/aarch64.c:8763
#, gcc-internal-format, gfc-internal-format
msgid "%s string ill-formed\n"
msgstr ""
-#: config/aarch64/aarch64.c:8483
+#: config/aarch64/aarch64.c:8820
#, gcc-internal-format, gfc-internal-format
msgid "tuning string missing in option (%s)"
msgstr ""
-#: config/aarch64/aarch64.c:8501
+#: config/aarch64/aarch64.c:8838
#, gcc-internal-format, gfc-internal-format
msgid "unknown tuning option (%s)"
msgstr ""
-#: config/aarch64/aarch64.c:8715
-#, gcc-internal-format
-msgid "valid arguments are: %s; did you mean %qs?"
-msgstr ""
-
-#: config/aarch64/aarch64.c:8756
+#: config/aarch64/aarch64.c:9119
#, gcc-internal-format
msgid "missing cpu name in %<-mcpu=%s%>"
msgstr ""
-#: config/aarch64/aarch64.c:8763
+#: config/aarch64/aarch64.c:9126
#, gcc-internal-format
msgid "invalid feature modifier in %<-mcpu=%s%>"
msgstr ""
-#: config/aarch64/aarch64.c:8790
+#: config/aarch64/aarch64.c:9153
#, gcc-internal-format
msgid "missing arch name in %<-march=%s%>"
msgstr ""
-#: config/aarch64/aarch64.c:8793
+#: config/aarch64/aarch64.c:9156
#, gcc-internal-format
msgid "unknown value %qs for -march"
msgstr ""
-#: config/aarch64/aarch64.c:8797
+#: config/aarch64/aarch64.c:9160
#, gcc-internal-format
msgid "invalid feature modifier in %<-march=%s%>"
msgstr ""
-#: config/aarch64/aarch64.c:8823
+#: config/aarch64/aarch64.c:9186
#, gcc-internal-format
msgid "missing cpu name in %<-mtune=%s%>"
msgstr ""
-#: config/aarch64/aarch64.c:8826
+#: config/aarch64/aarch64.c:9189
#, gcc-internal-format
msgid "unknown value %qs for -mtune"
msgstr ""
-#: config/aarch64/aarch64.c:8929 config/arm/arm.c:3094
+#: config/aarch64/aarch64.c:9292 config/arm/arm.c:3103
#, gcc-internal-format, gfc-internal-format
msgid "switch -mcpu=%s conflicts with -march=%s switch"
msgstr ""
-#: config/aarch64/aarch64.c:8964
+#: config/aarch64/aarch64.c:9327
#, gcc-internal-format
msgid "Assembler does not support -mabi=ilp32"
msgstr ""
-#: config/aarch64/aarch64.c:8968
+#: config/aarch64/aarch64.c:9331
#, gcc-internal-format
msgid "Return address signing is only supported for -mabi=lp64"
msgstr ""
-#: config/aarch64/aarch64.c:9030
+#: config/aarch64/aarch64.c:9393
#, gcc-internal-format
msgid "code model %qs with -f%s"
msgstr ""
-#: config/aarch64/aarch64.c:9195
+#: config/aarch64/aarch64.c:9558
#, gcc-internal-format, gfc-internal-format
msgid "missing architecture name in 'arch' target %s"
msgstr ""
-#: config/aarch64/aarch64.c:9198
+#: config/aarch64/aarch64.c:9561
#, gcc-internal-format
msgid "unknown value %qs for 'arch' target %s"
msgstr ""
-#: config/aarch64/aarch64.c:9202
+#: config/aarch64/aarch64.c:9565
#, gcc-internal-format
msgid "invalid feature modifier %qs for 'arch' target %s"
msgstr ""
-#: config/aarch64/aarch64.c:9236
+#: config/aarch64/aarch64.c:9599
#, gcc-internal-format, gfc-internal-format
msgid "missing cpu name in 'cpu' target %s"
msgstr ""
-#: config/aarch64/aarch64.c:9239
+#: config/aarch64/aarch64.c:9602
#, gcc-internal-format
msgid "unknown value %qs for 'cpu' target %s"
msgstr ""
-#: config/aarch64/aarch64.c:9243
+#: config/aarch64/aarch64.c:9606
#, gcc-internal-format
msgid "invalid feature modifier %qs for 'cpu' target %s"
msgstr ""
-#: config/aarch64/aarch64.c:9274
+#: config/aarch64/aarch64.c:9637
#, gcc-internal-format
msgid "unknown value %qs for 'tune' target %s"
msgstr ""
-#: config/aarch64/aarch64.c:9315
+#: config/aarch64/aarch64.c:9678
#, gcc-internal-format
msgid "missing feature modifier in target %s %qs"
msgstr ""
-#: config/aarch64/aarch64.c:9320
+#: config/aarch64/aarch64.c:9683
#, gcc-internal-format
msgid "invalid feature modifier in target %s %qs"
msgstr ""
-#: config/aarch64/aarch64.c:9372
+#: config/aarch64/aarch64.c:9735
#, gcc-internal-format, gfc-internal-format
msgid "malformed target %s"
msgstr ""
-#: config/aarch64/aarch64.c:9420
+#: config/aarch64/aarch64.c:9783
#, gcc-internal-format
msgid "target %s %qs does not accept an argument"
msgstr ""
-#: config/aarch64/aarch64.c:9429
+#: config/aarch64/aarch64.c:9792
#, gcc-internal-format
msgid "target %s %qs does not allow a negated form"
msgstr ""
-#: config/aarch64/aarch64.c:9484
+#: config/aarch64/aarch64.c:9847
#, gcc-internal-format, gfc-internal-format
msgid "target %s %s=%s is not valid"
msgstr ""
-#: config/aarch64/aarch64.c:9544 config/arm/arm.c:30411 config/i386/i386.c:6895
-#: config/rs6000/rs6000.c:39283 config/s390/s390.c:15017
+#: config/aarch64/aarch64.c:9907 config/arm/arm.c:30530 config/i386/i386.c:7141
+#: config/powerpcspe/powerpcspe.c:39660 config/rs6000/rs6000.c:36357
+#: config/s390/s390.c:15099
#, gcc-internal-format
msgid "attribute %<target%> argument not a string"
msgstr ""
-#: config/aarch64/aarch64.c:9554
+#: config/aarch64/aarch64.c:9917
#, gcc-internal-format, gfc-internal-format
msgid "malformed target %s value"
msgstr ""
-#: config/aarch64/aarch64.c:9571
+#: config/aarch64/aarch64.c:9934
#, gcc-internal-format
msgid "target %s %qs is invalid"
msgstr ""
-#: config/aarch64/aarch64.c:9580
+#: config/aarch64/aarch64.c:9943
#, gcc-internal-format
msgid "malformed target %s list %qs"
msgstr ""
-#: config/aarch64/aarch64.c:11428
+#: config/aarch64/aarch64.c:11781
#, gcc-internal-format
msgid "%Klane %wd out of range %wd - %wd"
msgstr ""
-#: config/aarch64/aarch64.c:11430
+#: config/aarch64/aarch64.c:11783
#, gcc-internal-format
msgid "lane %wd out of range %wd - %wd"
msgstr ""
-#: config/alpha/alpha.c:414
+#: config/alpha/alpha.c:415
#, gcc-internal-format
msgid "bad value %qs for -mtrap-precision switch"
msgstr ""
-#: config/alpha/alpha.c:428
+#: config/alpha/alpha.c:429
#, gcc-internal-format
msgid "bad value %qs for -mfp-rounding-mode switch"
msgstr ""
-#: config/alpha/alpha.c:443
+#: config/alpha/alpha.c:444
#, gcc-internal-format
msgid "bad value %qs for -mfp-trap-mode switch"
msgstr ""
-#: config/alpha/alpha.c:460
+#: config/alpha/alpha.c:461
#, gcc-internal-format
msgid "bad value %qs for -mcpu switch"
msgstr ""
-#: config/alpha/alpha.c:475
+#: config/alpha/alpha.c:476
#, gcc-internal-format
msgid "bad value %qs for -mtune switch"
msgstr ""
-#: config/alpha/alpha.c:496
+#: config/alpha/alpha.c:497
#, gcc-internal-format
msgid "fp software completion requires -mtrap-precision=i"
msgstr ""
-#: config/alpha/alpha.c:512
+#: config/alpha/alpha.c:513
#, gcc-internal-format
msgid "rounding mode not supported for VAX floats"
msgstr ""
-#: config/alpha/alpha.c:517
+#: config/alpha/alpha.c:518
#, gcc-internal-format
msgid "trap mode not supported for VAX floats"
msgstr ""
-#: config/alpha/alpha.c:521
+#: config/alpha/alpha.c:522
#, gcc-internal-format
msgid "128-bit long double not supported for VAX floats"
msgstr ""
-#: config/alpha/alpha.c:549
+#: config/alpha/alpha.c:550
#, gcc-internal-format, gfc-internal-format
msgid "L%d cache latency unknown for %s"
msgstr ""
-#: config/alpha/alpha.c:564
+#: config/alpha/alpha.c:565
#, gcc-internal-format
msgid "bad value %qs for -mmemory-latency"
msgstr ""
-#: config/alpha/alpha.c:6663 config/alpha/alpha.c:6666 config/arc/arc.c:5856
-#: config/arc/arc.c:6135 config/s390/s390.c:873 config/tilegx/tilegx.c:3542
-#: config/tilepro/tilepro.c:3106
+#: config/alpha/alpha.c:6663 config/alpha/alpha.c:6666 config/arc/arc.c:6208
+#: config/arc/arc.c:6487 config/s390/s390.c:876 config/tilegx/tilegx.c:3541
+#: config/tilepro/tilepro.c:3105
#, gcc-internal-format
msgid "bad builtin fcode"
msgstr ""
-#: config/arc/arc.c:743
+#: config/arc/arc.c:784
#, gcc-internal-format
msgid "-mno-mpy supported only for ARC700 or ARCv2"
msgstr ""
-#: config/arc/arc.c:746
+#: config/arc/arc.c:787
#, gcc-internal-format
msgid "-mno-dpfp-lrsr supported only with -mdpfp"
msgstr ""
-#: config/arc/arc.c:751
+#: config/arc/arc.c:792
#, gcc-internal-format
msgid "FPX fast and compact options cannot be specified together"
msgstr ""
-#: config/arc/arc.c:755
+#: config/arc/arc.c:796
#, gcc-internal-format
msgid "-mspfp_fast not available on ARC600 or ARC601"
msgstr ""
-#: config/arc/arc.c:760
+#: config/arc/arc.c:801
#, gcc-internal-format
msgid "No FPX/FPU mixing allowed"
msgstr ""
-#: config/arc/arc.c:766
+#: config/arc/arc.c:807
#, gcc-internal-format, gfc-internal-format
msgid "PIC is not supported for %s. Generating non-PIC code only.."
msgstr ""
+#: config/arc/arc.c:870
+#, gcc-internal-format
+msgid "value of -mirq-ctrl-saved must have form R0-REGx"
+msgstr ""
+
+#: config/arc/arc.c:882
+#, gcc-internal-format
+msgid "first register must be R0"
+msgstr ""
+
+#: config/arc/arc.c:901
+#, gcc-internal-format, gfc-internal-format
+msgid "last register name %s must be an odd register"
+msgstr ""
+
+#: config/arc/arc.c:909 config/ia64/ia64.c:5962 config/pa/pa.c:458
+#: config/sh/sh.c:8266 config/spu/spu.c:4921
+#, gcc-internal-format, gfc-internal-format
+msgid "%s-%s is an empty range"
+msgstr ""
+
+#: config/arc/arc.c:958
+#, gcc-internal-format, gfc-internal-format
+msgid ""
+"invalid number in -mrgf-banked-regs=%s valid values are 0, 4, 8, 16, or 32"
+msgstr ""
+
+#: config/arc/arc.c:1019
+#, gcc-internal-format
+msgid "option -mirq-ctrl-saved valid only for ARC v2 processors"
+msgstr ""
+
+#: config/arc/arc.c:1026
+#, gcc-internal-format
+msgid "option -mrgf-banked-regs valid only for ARC v2 processors"
+msgstr ""
+
#. Check options against architecture options. Throw an error if
#. option is not allowed.
-#: config/arc/arc.c:876 config/arc/arc.c:884
+#: config/arc/arc.c:1068 config/arc/arc.c:1076
#, gcc-internal-format, gfc-internal-format
msgid "%s is not available for %s architecture"
msgstr ""
-#: config/arc/arc.c:905
+#: config/arc/arc.c:1097
#, gcc-internal-format
msgid "compact-casesi is not applicable to ARCv2"
msgstr ""
-#: config/arc/arc.c:1404
+#: config/arc/arc.c:1603
#, gcc-internal-format, gfc-internal-format
msgid "multiply option implies r%d is fixed"
msgstr ""
-#: config/arc/arc.c:1641 config/epiphany/epiphany.c:492
+#: config/arc/arc.c:1841 config/epiphany/epiphany.c:492
#: config/epiphany/epiphany.c:532
#, gcc-internal-format
msgid "argument of %qE attribute is not a string constant"
msgstr ""
-#: config/arc/arc.c:1650
+#: config/arc/arc.c:1850
#, gcc-internal-format
msgid "argument of %qE attribute is not \"ilink1\" or \"ilink2\""
msgstr ""
-#: config/arc/arc.c:1658
+#: config/arc/arc.c:1859
#, gcc-internal-format
-msgid "argument of %qE attribute is not \"ilink\""
+msgid "argument of %qE attribute is not \"ilink\" or \"firq\""
msgstr ""
-#: config/arc/arc.c:5755
+#: config/arc/arc.c:1873 config/arm/arm.c:6740 config/arm/arm.c:6758
+#: config/arm/arm.c:6933 config/avr/avr.c:9734 config/avr/avr.c:9750
+#: config/bfin/bfin.c:4672 config/bfin/bfin.c:4733 config/bfin/bfin.c:4762
+#: config/epiphany/epiphany.c:475 config/h8300/h8300.c:5456
+#: config/i386/i386.c:8046 config/i386/i386.c:13589 config/i386/i386.c:42083
+#: config/i386/i386.c:42133 config/i386/i386.c:42203 config/m68k/m68k.c:760
+#: config/mcore/mcore.c:3056 config/nvptx/nvptx.c:4429
+#: config/powerpcspe/powerpcspe.c:35672 config/rl78/rl78.c:781
+#: config/rs6000/rs6000.c:32505 config/rx/rx.c:2696 config/rx/rx.c:2722
+#: config/s390/s390.c:1085 config/sh/sh.c:8402 config/sh/sh.c:8420
+#: config/sh/sh.c:8444 config/sh/sh.c:8515 config/sh/sh.c:8538
+#: config/spu/spu.c:3684 config/stormy16/stormy16.c:2212
+#: config/v850/v850.c:2083 config/visium/visium.c:705
+#, gcc-internal-format
+msgid "%qE attribute only applies to functions"
+msgstr ""
+
+#: config/arc/arc.c:6107
#, gcc-internal-format
msgid "__builtin_arc_aligned with non-constant alignment"
msgstr ""
-#: config/arc/arc.c:5763
+#: config/arc/arc.c:6115
#, gcc-internal-format
msgid "invalid alignment value for __builtin_arc_aligned"
msgstr ""
-#: config/arc/arc.c:5890
+#: config/arc/arc.c:6242
#, gcc-internal-format
msgid "builtin operand should be an unsigned 6-bit value"
msgstr ""
-#: config/arc/arc.c:5931
+#: config/arc/arc.c:6283
#, gcc-internal-format
msgid "operand 1 should be an unsigned 3-bit immediate"
msgstr ""
-#: config/arc/arc.c:5972 config/arc/arc.c:6069
+#: config/arc/arc.c:6324 config/arc/arc.c:6421
#, gcc-internal-format
msgid "operand 2 should be an unsigned 3-bit value (I0-I7)"
msgstr ""
-#: config/arc/arc.c:6005 config/arc/arc.c:6037
+#: config/arc/arc.c:6357 config/arc/arc.c:6389
#, gcc-internal-format
msgid "operand 1 should be an unsigned 3-bit value (I0-I7)"
msgstr ""
-#: config/arc/arc.c:6009 config/arc/arc.c:6041
+#: config/arc/arc.c:6361 config/arc/arc.c:6393
#, gcc-internal-format
msgid "operand 2 should be an unsigned 8-bit value"
msgstr ""
-#: config/arc/arc.c:6073
+#: config/arc/arc.c:6425
#, gcc-internal-format
msgid "operand 3 should be an unsigned 8-bit value"
msgstr ""
-#: config/arc/arc.c:6106
+#: config/arc/arc.c:6458
#, gcc-internal-format
msgid "operand 4 should be an unsigned 8-bit value (0-255)"
msgstr ""
-#: config/arc/arc.c:6110
+#: config/arc/arc.c:6462
#, gcc-internal-format
msgid "operand 3 should be an unsigned 3-bit value (I0-I7)"
msgstr ""
-#: config/arc/arc.c:6117
+#: config/arc/arc.c:6469
#, gcc-internal-format
msgid "operand 2 should be an unsigned 3-bit value (subreg 0-7)"
msgstr ""
-#: config/arc/arc.c:6120
+#: config/arc/arc.c:6472
#, gcc-internal-format
msgid "operand 2 should be an even 3-bit value (subreg 0,2,4,6)"
msgstr ""
-#: config/arc/arc.c:6167
+#: config/arc/arc.c:6519
#, gcc-internal-format, gfc-internal-format
msgid "builtin requires an immediate for operand %d"
msgstr ""
-#: config/arc/arc.c:6172
+#: config/arc/arc.c:6524
#, gcc-internal-format, gfc-internal-format
msgid "operand %d should be a 6 bit unsigned immediate"
msgstr ""
-#: config/arc/arc.c:6176
+#: config/arc/arc.c:6528
#, gcc-internal-format, gfc-internal-format
msgid "operand %d should be a 8 bit unsigned immediate"
msgstr ""
-#: config/arc/arc.c:6180
+#: config/arc/arc.c:6532
#, gcc-internal-format, gfc-internal-format
msgid "operand %d should be a 3 bit unsigned immediate"
msgstr ""
-#: config/arc/arc.c:6183
+#: config/arc/arc.c:6535
#, gcc-internal-format, gfc-internal-format
msgid "unknown builtin immediate operand type for operand %d"
msgstr ""
-#: config/arc/arc.c:6234
+#: config/arc/arc.c:6586
#, gcc-internal-format
msgid ""
"register number must be a compile-time constant. Try giving higher "
"optimization levels"
msgstr ""
-#: config/arc/arc.c:6255
+#: config/arc/arc.c:6607
#, gcc-internal-format
msgid ""
"operand for sleep instruction must be an unsigned 6 bit compile-time constant"
msgstr ""
-#: config/arc/arc.c:6862
+#: config/arc/arc.c:7214
#, gcc-internal-format
msgid "Insn addresses not set after shorten_branches"
msgstr ""
-#: config/arc/arc.c:7071
+#: config/arc/arc.c:7423
#, gcc-internal-format
msgid "insn addresses not freed"
msgstr ""
-#: config/arm/arm-builtins.c:2349
+#: config/arm/arm-builtins.c:2354
#, gcc-internal-format
msgid "this builtin is not supported for this target"
msgstr ""
-#: config/arm/arm-builtins.c:2454
+#: config/arm/arm-builtins.c:2459
#, gcc-internal-format
msgid ""
"You must enable NEON instructions (e.g. -mfloat-abi=softfp -mfpu=neon) to "
"use these intrinsics."
msgstr ""
-#: config/arm/arm-builtins.c:2492
+#: config/arm/arm-builtins.c:2497
#, gcc-internal-format
msgid "You must enable VFP instructions to use these intrinsics."
msgstr ""
-#: config/arm/arm-builtins.c:2552
+#: config/arm/arm-builtins.c:2557
#, gcc-internal-format
msgid ""
"You must enable crypto instructions (e.g. include -mfloat-abi=softfp -"
@@ -27627,480 +28025,465 @@ msgid ""
msgstr ""
#. @@@ better error message
-#: config/arm/arm-builtins.c:2610 config/arm/arm-builtins.c:2714
+#: config/arm/arm-builtins.c:2615 config/arm/arm-builtins.c:2719
#, gcc-internal-format
msgid "selector must be an immediate"
msgstr ""
-#: config/arm/arm-builtins.c:2618 config/arm/arm-builtins.c:2663
-#: config/arm/arm-builtins.c:2721 config/arm/arm-builtins.c:2730
+#: config/arm/arm-builtins.c:2623 config/arm/arm-builtins.c:2668
+#: config/arm/arm-builtins.c:2726 config/arm/arm-builtins.c:2735
#, gcc-internal-format
msgid "the range of selector should be in 0 to 7"
msgstr ""
-#: config/arm/arm-builtins.c:2623 config/arm/arm-builtins.c:2732
+#: config/arm/arm-builtins.c:2628 config/arm/arm-builtins.c:2737
#, gcc-internal-format
msgid "the range of selector should be in 0 to 3"
msgstr ""
-#: config/arm/arm-builtins.c:2628 config/arm/arm-builtins.c:2734
+#: config/arm/arm-builtins.c:2633 config/arm/arm-builtins.c:2739
#, gcc-internal-format
msgid "the range of selector should be in 0 to 1"
msgstr ""
-#: config/arm/arm-builtins.c:2800
+#: config/arm/arm-builtins.c:2805
#, gcc-internal-format
msgid "mask must be an immediate"
msgstr ""
-#: config/arm/arm-builtins.c:2805
+#: config/arm/arm-builtins.c:2810
#, gcc-internal-format
msgid "the range of mask should be in 0 to 255"
msgstr ""
-#: config/arm/arm-builtins.c:2993
+#: config/arm/arm-builtins.c:2998
#, gcc-internal-format
msgid ""
"the range of count should be in 0 to 32. please check the intrinsic "
"_mm_rori_pi16 in code."
msgstr ""
-#: config/arm/arm-builtins.c:2995
+#: config/arm/arm-builtins.c:3000
#, gcc-internal-format
msgid ""
"the range of count should be in 0 to 32. please check the intrinsic "
"_mm_rori_pi32 in code."
msgstr ""
-#: config/arm/arm-builtins.c:2997
+#: config/arm/arm-builtins.c:3002
#, gcc-internal-format
msgid ""
"the range of count should be in 0 to 32. please check the intrinsic "
"_mm_ror_pi16 in code."
msgstr ""
-#: config/arm/arm-builtins.c:2999
+#: config/arm/arm-builtins.c:3004
#, gcc-internal-format
msgid ""
"the range of count should be in 0 to 32. please check the intrinsic "
"_mm_ror_pi32 in code."
msgstr ""
-#: config/arm/arm-builtins.c:3005
+#: config/arm/arm-builtins.c:3010
#, gcc-internal-format
msgid ""
"the range of count should be in 0 to 64. please check the intrinsic "
"_mm_rori_si64 in code."
msgstr ""
-#: config/arm/arm-builtins.c:3007
+#: config/arm/arm-builtins.c:3012
#, gcc-internal-format
msgid ""
"the range of count should be in 0 to 64. please check the intrinsic "
"_mm_ror_si64 in code."
msgstr ""
-#: config/arm/arm-builtins.c:3012
+#: config/arm/arm-builtins.c:3017
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic "
"_mm_srli_pi16 in code."
msgstr ""
-#: config/arm/arm-builtins.c:3014
+#: config/arm/arm-builtins.c:3019
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic "
"_mm_srli_pi32 in code."
msgstr ""
-#: config/arm/arm-builtins.c:3016
+#: config/arm/arm-builtins.c:3021
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic "
"_mm_srli_si64 in code."
msgstr ""
-#: config/arm/arm-builtins.c:3018
+#: config/arm/arm-builtins.c:3023
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic "
"_mm_slli_pi16 in code."
msgstr ""
-#: config/arm/arm-builtins.c:3020
+#: config/arm/arm-builtins.c:3025
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic "
"_mm_slli_pi32 in code."
msgstr ""
-#: config/arm/arm-builtins.c:3022
+#: config/arm/arm-builtins.c:3027
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic "
"_mm_slli_si64 in code."
msgstr ""
-#: config/arm/arm-builtins.c:3024
+#: config/arm/arm-builtins.c:3029
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic "
"_mm_srai_pi16 in code."
msgstr ""
-#: config/arm/arm-builtins.c:3026
+#: config/arm/arm-builtins.c:3031
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic "
"_mm_srai_pi32 in code."
msgstr ""
-#: config/arm/arm-builtins.c:3028
+#: config/arm/arm-builtins.c:3033
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic "
"_mm_srai_si64 in code."
msgstr ""
-#: config/arm/arm-builtins.c:3030
+#: config/arm/arm-builtins.c:3035
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic _mm_srl_pi16 "
"in code."
msgstr ""
-#: config/arm/arm-builtins.c:3032
+#: config/arm/arm-builtins.c:3037
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic _mm_srl_pi32 "
"in code."
msgstr ""
-#: config/arm/arm-builtins.c:3034
+#: config/arm/arm-builtins.c:3039
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic _mm_srl_si64 "
"in code."
msgstr ""
-#: config/arm/arm-builtins.c:3036
+#: config/arm/arm-builtins.c:3041
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic _mm_sll_pi16 "
"in code."
msgstr ""
-#: config/arm/arm-builtins.c:3038
+#: config/arm/arm-builtins.c:3043
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic _mm_sll_pi32 "
"in code."
msgstr ""
-#: config/arm/arm-builtins.c:3040
+#: config/arm/arm-builtins.c:3045
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic _mm_sll_si64 "
"in code."
msgstr ""
-#: config/arm/arm-builtins.c:3042
+#: config/arm/arm-builtins.c:3047
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic _mm_sra_pi16 "
"in code."
msgstr ""
-#: config/arm/arm-builtins.c:3044
+#: config/arm/arm-builtins.c:3049
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic _mm_sra_pi32 "
"in code."
msgstr ""
-#: config/arm/arm-builtins.c:3046
+#: config/arm/arm-builtins.c:3051
#, gcc-internal-format
msgid ""
"the count should be no less than 0. please check the intrinsic _mm_sra_si64 "
"in code."
msgstr ""
-#: config/arm/arm.c:2800
+#: config/arm/arm.c:2785
#, gcc-internal-format
msgid "iWMMXt and NEON are incompatible"
msgstr ""
-#: config/arm/arm.c:2806
+#: config/arm/arm.c:2791
#, gcc-internal-format
msgid "target CPU does not support ARM mode"
msgstr ""
-#: config/arm/arm.c:2810
+#: config/arm/arm.c:2795
#, gcc-internal-format
msgid ""
"enabling backtrace support is only meaningful when compiling for the Thumb"
msgstr ""
-#: config/arm/arm.c:2813
+#: config/arm/arm.c:2798
#, gcc-internal-format
msgid ""
"enabling callee interworking support is only meaningful when compiling for "
"the Thumb"
msgstr ""
-#: config/arm/arm.c:2821
+#: config/arm/arm.c:2806
#, gcc-internal-format
msgid "-g with -mno-apcs-frame may not give sensible debugging"
msgstr ""
-#: config/arm/arm.c:2825
+#: config/arm/arm.c:2810
#, gcc-internal-format
msgid "iWMMXt unsupported under Thumb mode"
msgstr ""
-#: config/arm/arm.c:2828
+#: config/arm/arm.c:2813
#, gcc-internal-format
msgid "can not use -mtp=cp15 with 16-bit Thumb"
msgstr ""
-#: config/arm/arm.c:2832
+#: config/arm/arm.c:2817
#, gcc-internal-format
msgid "RTP PIC is incompatible with Thumb"
msgstr ""
-#: config/arm/arm.c:2840
-#, gcc-internal-format
-msgid "-mslow-flash-data only supports non-pic code on armv7-m targets"
-msgstr ""
-
-#: config/arm/arm.c:2845
-#, gcc-internal-format
-msgid "-mpure-code only supports non-pic code on armv7-m targets"
+#: config/arm/arm.c:2828
+#, gcc-internal-format, gfc-internal-format
+msgid ""
+"%s only supports non-pic code on M-profile targets with the MOVT instruction"
msgstr ""
-#: config/arm/arm.c:2948
+#: config/arm/arm.c:2946
#, gcc-internal-format
msgid "target CPU does not support THUMB instructions"
msgstr ""
-#: config/arm/arm.c:2993
+#: config/arm/arm.c:2991
#, gcc-internal-format
msgid "target CPU does not support unaligned accesses"
msgstr ""
-#. To support this we need to be able to parse FPU feature options
-#. from the architecture string.
-#: config/arm/arm.c:3247
-#, gcc-internal-format
-msgid "-mfpu=auto not currently supported without an explicit CPU."
-msgstr ""
-
-#: config/arm/arm.c:3322
+#: config/arm/arm.c:3340
#, gcc-internal-format
msgid "target CPU does not support interworking"
msgstr ""
-#: config/arm/arm.c:3328
+#: config/arm/arm.c:3346
#, gcc-internal-format
msgid "-mapcs-stack-check incompatible with -mno-apcs-frame"
msgstr ""
-#: config/arm/arm.c:3336
+#: config/arm/arm.c:3354
#, gcc-internal-format
msgid "-fpic and -mapcs-reent are incompatible"
msgstr ""
-#: config/arm/arm.c:3339
+#: config/arm/arm.c:3357
#, gcc-internal-format
msgid "APCS reentrant code not supported. Ignored"
msgstr ""
-#: config/arm/arm.c:3373
+#: config/arm/arm.c:3391
#, gcc-internal-format
msgid "selected fp16 options are incompatible"
msgstr ""
-#: config/arm/arm.c:3404
+#: config/arm/arm.c:3422
#, gcc-internal-format
msgid "iwmmxt requires an AAPCS compatible ABI for proper operation"
msgstr ""
-#: config/arm/arm.c:3407
+#: config/arm/arm.c:3425
#, gcc-internal-format
msgid "iwmmxt abi requires an iwmmxt capable cpu"
msgstr ""
-#: config/arm/arm.c:3418
+#: config/arm/arm.c:3436
#, gcc-internal-format
msgid "AAPCS does not support -mcaller-super-interworking"
msgstr ""
-#: config/arm/arm.c:3421
+#: config/arm/arm.c:3439
#, gcc-internal-format
msgid "AAPCS does not support -mcallee-super-interworking"
msgstr ""
-#: config/arm/arm.c:3426
+#: config/arm/arm.c:3444
#, gcc-internal-format
msgid "__fp16 and no ldrh"
msgstr ""
-#: config/arm/arm.c:3437
+#: config/arm/arm.c:3454
#, gcc-internal-format
msgid "-mfloat-abi=hard: selected processor lacks an FPU"
msgstr ""
-#: config/arm/arm.c:3445
+#: config/arm/arm.c:3462
#, gcc-internal-format
msgid "-mfloat-abi=hard and VFP"
msgstr ""
-#: config/arm/arm.c:3481
+#: config/arm/arm.c:3492
+#, gcc-internal-format
+msgid "option %<-mstructure-size-boundary%> is deprecated"
+msgstr ""
+
+#: config/arm/arm.c:3500
#, gcc-internal-format
msgid "structure size boundary can only be set to 8, 32 or 64"
msgstr ""
-#: config/arm/arm.c:3483
+#: config/arm/arm.c:3502
#, gcc-internal-format
msgid "structure size boundary can only be set to 8 or 32"
msgstr ""
-#: config/arm/arm.c:3508
+#: config/arm/arm.c:3527
#, gcc-internal-format
msgid "RTP PIC is incompatible with -msingle-pic-base"
msgstr ""
-#: config/arm/arm.c:3520
+#: config/arm/arm.c:3539
#, gcc-internal-format
msgid "-mpic-register= is useless without -fpic"
msgstr ""
-#: config/arm/arm.c:3529
+#: config/arm/arm.c:3548
#, gcc-internal-format, gfc-internal-format
msgid "unable to use '%s' for PIC register"
msgstr ""
-#: config/arm/arm.c:3548
+#: config/arm/arm.c:3567
#, gcc-internal-format
msgid "-freorder-blocks-and-partition not supported on this architecture"
msgstr ""
-#: config/arm/arm.c:3639
+#: config/arm/arm.c:3658
#, gcc-internal-format
msgid "target CPU does not support ARMv8-M Security Extensions"
msgstr ""
-#: config/arm/arm.c:5707
+#: config/arm/arm.c:5738
#, gcc-internal-format
msgid "non-AAPCS derived PCS variant"
msgstr ""
-#: config/arm/arm.c:5709
+#: config/arm/arm.c:5740
#, gcc-internal-format
msgid "variadic functions must use the base AAPCS variant"
msgstr ""
-#: config/arm/arm.c:5728
+#: config/arm/arm.c:5759
#, gcc-internal-format
msgid "PCS variant"
msgstr ""
-#: config/arm/arm.c:5923
+#: config/arm/arm.c:5954
#, gcc-internal-format
msgid "Thumb-1 hard-float VFP ABI"
msgstr ""
-#: config/arm/arm.c:6362 config/arm/arm.c:6565 config/arm/arm.c:6593
-#: config/arm/arm.c:26560
+#: config/arm/arm.c:6393 config/arm/arm.c:6596 config/arm/arm.c:6624
+#: config/arm/arm.c:26654
#, gcc-internal-format
msgid "parameter passing for argument of type %qT changed in GCC 7.1"
msgstr ""
-#: config/arm/arm.c:6709 config/arm/arm.c:6727 config/arm/arm.c:6902
-#: config/avr/avr.c:9480 config/avr/avr.c:9496 config/bfin/bfin.c:4673
-#: config/bfin/bfin.c:4734 config/bfin/bfin.c:4763
-#: config/epiphany/epiphany.c:475 config/h8300/h8300.c:5456
-#: config/i386/i386.c:7793 config/i386/i386.c:13164 config/i386/i386.c:41475
-#: config/i386/i386.c:41525 config/i386/i386.c:41595 config/m68k/m68k.c:760
-#: config/mcore/mcore.c:3056 config/nvptx/nvptx.c:4278 config/rl78/rl78.c:781
-#: config/rs6000/rs6000.c:35295 config/rx/rx.c:2696 config/rx/rx.c:2722
-#: config/s390/s390.c:1082 config/sh/sh.c:8394 config/sh/sh.c:8412
-#: config/sh/sh.c:8436 config/sh/sh.c:8507 config/sh/sh.c:8530
-#: config/spu/spu.c:3683 config/stormy16/stormy16.c:2212
-#: config/v850/v850.c:2083 config/visium/visium.c:705
-#, gcc-internal-format
-msgid "%qE attribute only applies to functions"
-msgstr ""
-
-#: config/arm/arm.c:6851
+#: config/arm/arm.c:6882
#, gcc-internal-format
msgid ""
"%qE attribute not available to functions with arguments passed on the stack"
msgstr ""
-#: config/arm/arm.c:6863
+#: config/arm/arm.c:6894
#, gcc-internal-format
msgid ""
"%qE attribute not available to functions with variable number of arguments"
msgstr ""
-#: config/arm/arm.c:6872
+#: config/arm/arm.c:6903
#, gcc-internal-format
msgid "%qE attribute not available to functions that return value on the stack"
msgstr ""
-#: config/arm/arm.c:6894 config/arm/arm.c:6946
+#: config/arm/arm.c:6925 config/arm/arm.c:6977
#, gcc-internal-format
msgid "%qE attribute ignored without -mcmse option."
msgstr ""
-#: config/arm/arm.c:6913
+#: config/arm/arm.c:6944
#, gcc-internal-format
msgid "%qE attribute has no effect on functions with static linkage"
msgstr ""
-#: config/arm/arm.c:6962
+#: config/arm/arm.c:6993
#, gcc-internal-format
msgid "%qE attribute only applies to base type of a function pointer"
msgstr ""
-#: config/arm/arm.c:12245
+#: config/arm/arm.c:8722
+#, gcc-internal-format
+msgid ""
+"accessing thread-local storage is not currently supported with -mpure-code "
+"or -mslow-flash-data"
+msgstr ""
+
+#: config/arm/arm.c:12305
#, gcc-internal-format
msgid "%K%s %wd out of range %wd - %wd"
msgstr ""
-#: config/arm/arm.c:12248
+#: config/arm/arm.c:12308
#, gcc-internal-format
msgid "%s %wd out of range %wd - %wd"
msgstr ""
-#: config/arm/arm.c:23495
+#: config/arm/arm.c:23576
#, gcc-internal-format
msgid "unable to compute real location of stacked parameter"
msgstr ""
-#: config/arm/arm.c:24148
+#: config/arm/arm.c:24223
#, gcc-internal-format
msgid "Unexpected thumb1 far jump"
msgstr ""
-#: config/arm/arm.c:24412
+#: config/arm/arm.c:24487
#, gcc-internal-format
msgid "no low registers available for popping high registers"
msgstr ""
-#: config/arm/arm.c:24661
+#: config/arm/arm.c:24736
#, gcc-internal-format
msgid "interrupt Service Routines cannot be coded in Thumb mode"
msgstr ""
-#: config/arm/arm.c:24890
+#: config/arm/arm.c:24965
#, gcc-internal-format
msgid "-fstack-check=specific for Thumb-1"
msgstr ""
-#: config/arm/arm.c:30435
+#: config/arm/arm.c:30554
#, gcc-internal-format, gfc-internal-format
msgid "invalid fpu for attribute(target(\"%s\"))"
msgstr ""
@@ -28108,13 +28491,13 @@ msgstr ""
#. This doesn't really make sense until we support
#. general dynamic selection of the architecture and all
#. sub-features.
-#: config/arm/arm.c:30443
+#: config/arm/arm.c:30562
#, gcc-internal-format
msgid "auto fpu selection not currently permitted here"
msgstr ""
-#: config/arm/arm.c:30450 config/i386/i386.c:6961 config/i386/i386.c:7008
-#: config/s390/s390.c:15083 config/s390/s390.c:15133 config/s390/s390.c:15150
+#: config/arm/arm.c:30569 config/i386/i386.c:7207 config/i386/i386.c:7254
+#: config/s390/s390.c:15165 config/s390/s390.c:15215 config/s390/s390.c:15232
#, gcc-internal-format, gfc-internal-format
msgid "attribute(target(\"%s\")) is unknown"
msgstr ""
@@ -28159,12 +28542,7 @@ msgstr ""
msgid "%qs expects an integer value as second argument"
msgstr ""
-#: config/avr/avr-devices.c:203
-#, gcc-internal-format, gfc-internal-format
-msgid "devices natively supported:%s"
-msgstr ""
-
-#: config/avr/avr-devices.c:212
+#: config/avr/avr-devices.c:150
#, gcc-internal-format, gfc-internal-format
msgid "supported core architectures:%s"
msgstr ""
@@ -28198,178 +28576,191 @@ msgstr ""
msgid "-fPIE is not supported"
msgstr ""
-#: config/avr/avr.c:1040
+#: config/avr/avr.c:1054
#, gcc-internal-format
msgid "function attributes %qs, %qs and %qs are mutually exclusive"
msgstr ""
-#: config/avr/avr.c:1047
+#: config/avr/avr.c:1061
#, gcc-internal-format
msgid "function attributes %qs and %qs have no effect on %qs function"
msgstr ""
-#: config/avr/avr.c:1074
+#: config/avr/avr.c:1082
#, gcc-internal-format
msgid "%qs function cannot have arguments"
msgstr ""
-#: config/avr/avr.c:1077
+#: config/avr/avr.c:1085
#, gcc-internal-format
msgid "%qs function cannot return a value"
msgstr ""
-#: config/avr/avr.c:1084
+#: config/avr/avr.c:1099
#, gcc-internal-format
-msgid "%qs appears to be a misspelled %s handler, missing __vector prefix"
+msgid "%qs appears to be a misspelled %qs handler, missing %<__vector%> prefix"
msgstr ""
-#: config/avr/avr.c:1311
+#: config/avr/avr.c:1112
+#, gcc-internal-format
+msgid ""
+"%qs is a reserved indentifier in AVR-LibC. Consider %<#include <avr/"
+"interrupt.h>%> before using the %qs macro"
+msgstr ""
+
+#: config/avr/avr.c:1344
#, gcc-internal-format
msgid "%<builtin_return_address%> contains only 2 bytes of address"
msgstr ""
-#: config/avr/avr.c:2543
+#: config/avr/avr.c:2769
#, gcc-internal-format
msgid "pointer offset from symbol maybe incorrect"
msgstr ""
-#: config/avr/avr.c:2682
+#: config/avr/avr.c:2908
#, gcc-internal-format
msgid "accessing data memory with program memory address"
msgstr ""
-#: config/avr/avr.c:2743
+#: config/avr/avr.c:2969
#, gcc-internal-format
msgid "accessing program memory with data memory address"
msgstr ""
-#: config/avr/avr.c:3222
+#: config/avr/avr.c:3471
#, gcc-internal-format, gfc-internal-format
msgid "fixed register %s used to pass parameter to function"
msgstr ""
-#: config/avr/avr.c:3492
+#: config/avr/avr.c:3741
#, gcc-internal-format
msgid "writing to address space %qs not supported"
msgstr ""
-#: config/avr/avr.c:9515
+#: config/avr/avr.c:9769
#, gcc-internal-format
msgid "%qE attribute only applies to variables in static storage"
msgstr ""
-#: config/avr/avr.c:9522
+#: config/avr/avr.c:9776
#, gcc-internal-format
msgid "%qE attribute only supported for reduced Tiny cores"
msgstr ""
-#: config/avr/avr.c:9539 config/bfin/bfin.c:4795 config/i386/winnt.c:59
-#: config/nvptx/nvptx.c:4301
+#: config/avr/avr.c:9793 config/bfin/bfin.c:4794 config/i386/winnt.c:59
+#: config/msp430/msp430.c:1997 config/nvptx/nvptx.c:4452
#, gcc-internal-format
msgid "%qE attribute only applies to variables"
msgstr ""
-#: config/avr/avr.c:9550
+#: config/avr/avr.c:9804
#, gcc-internal-format
msgid "%qE attribute allows only an integer constant argument"
msgstr ""
-#: config/avr/avr.c:9560
+#: config/avr/avr.c:9814
#, gcc-internal-format
msgid "%qE attribute address out of range"
msgstr ""
-#: config/avr/avr.c:9573
+#: config/avr/avr.c:9827
#, gcc-internal-format
msgid "both %s and %qE attribute provide address"
msgstr ""
-#: config/avr/avr.c:9583
+#: config/avr/avr.c:9837
#, gcc-internal-format
msgid "%qE attribute on non-volatile variable"
msgstr ""
-#: config/avr/avr.c:9653
+#: config/avr/avr.c:9909
#, gcc-internal-format
msgid "address spaces are not supported for reduced Tiny devices"
msgstr ""
-#: config/avr/avr.c:9660
+#: config/avr/avr.c:9916
#, gcc-internal-format
msgid ""
"address space %qs not supported for devices with flash size up to %d KiB"
msgstr ""
-#: config/avr/avr.c:9831
+#: config/avr/avr.c:10087
#, gcc-internal-format
msgid "pointer targeting address space %qs must be const in %qT"
msgstr ""
-#: config/avr/avr.c:9834
+#: config/avr/avr.c:10090
#, gcc-internal-format
msgid "pointer targeting address space %qs must be const in %s %q+D"
msgstr ""
-#: config/avr/avr.c:9880
+#: config/avr/avr.c:10136
#, 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:9919
+#: config/avr/avr.c:10175
#, gcc-internal-format
msgid "static IO declaration for %q+D needs an address"
msgstr ""
-#: config/avr/avr.c:9951
+#: config/avr/avr.c:10207
#, gcc-internal-format
msgid "IO definition for %q+D needs an address"
msgstr ""
-#: config/avr/avr.c:10058
+#: config/avr/avr.c:10325
#, gcc-internal-format
msgid "only uninitialized variables can be placed in the .noinit section"
msgstr ""
-#: config/avr/avr.c:10138
+#. This might happen with C++ if stuff needs constructing.
+#: config/avr/avr.c:10401
+#, gcc-internal-format
+msgid "variable %q+D with dynamic initialization put into program memory area"
+msgstr ""
+
+#: config/avr/avr.c:10412
#, gcc-internal-format
msgid "uninitialized variable %q+D put into program memory area"
msgstr ""
-#: config/avr/avr.c:10224
+#: config/avr/avr.c:10499
#, gcc-internal-format
msgid "%q+D has incompatible attributes %qs and %qs"
msgstr ""
-#: config/avr/avr.c:10287
+#: config/avr/avr.c:10562
#, gcc-internal-format
msgid "architecture %qs supported for assembler only"
msgstr ""
-#: config/avr/avr.c:12823
+#: config/avr/avr.c:13195
#, gcc-internal-format
msgid "conversion from address space %qs to address space %qs"
msgstr ""
-#: config/avr/avr.c:13916 config/avr/avr.c:13929
+#: config/avr/avr.c:14288 config/avr/avr.c:14301
#, gcc-internal-format, gfc-internal-format
msgid "%s expects a compile time integer constant"
msgstr ""
-#: config/avr/avr.c:13943
+#: config/avr/avr.c:14315
#, gcc-internal-format, gfc-internal-format
msgid "%s expects a compile time long integer constant as first argument"
msgstr ""
-#: config/avr/avr.c:13971
+#: config/avr/avr.c:14343
#, 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:13980
+#: config/avr/avr.c:14352
#, gcc-internal-format
msgid "rounding result will always be 0"
msgstr ""
@@ -28439,18 +28830,18 @@ msgstr ""
msgid "-mcorea and -mcoreb can%'t be used together"
msgstr ""
-#: config/bfin/bfin.c:4678
+#: config/bfin/bfin.c:4677
#, gcc-internal-format
msgid "multiple function type attributes specified"
msgstr ""
-#: config/bfin/bfin.c:4745
+#: config/bfin/bfin.c:4744
#, gcc-internal-format
msgid ""
"can%'t apply both longcall and shortcall attributes to the same function"
msgstr ""
-#: config/bfin/bfin.c:4802
+#: config/bfin/bfin.c:4801
#, gcc-internal-format
msgid "%qE attribute cannot be specified for local variables"
msgstr ""
@@ -28460,7 +28851,7 @@ msgstr ""
msgid "-fpic and -fPIC not supported without -mdsbt on this target"
msgstr ""
-#: config/c6x/c6x.h:365 config/nvptx/nvptx.h:181
+#: config/c6x/c6x.h:365 config/nvptx/nvptx.h:183
#, gcc-internal-format
msgid "profiling is not yet implemented for this architecture"
msgstr ""
@@ -28636,62 +29027,62 @@ msgstr ""
msgid "stack_offset must be a multiple of 4"
msgstr ""
-#: config/frv/frv.c:8593
+#: config/frv/frv.c:8592
#, gcc-internal-format
msgid "accumulator is not a constant integer"
msgstr ""
-#: config/frv/frv.c:8598
+#: config/frv/frv.c:8597
#, gcc-internal-format
msgid "accumulator number is out of bounds"
msgstr ""
-#: config/frv/frv.c:8609
+#: config/frv/frv.c:8608
#, gcc-internal-format
msgid "inappropriate accumulator for %qs"
msgstr ""
-#: config/frv/frv.c:8685
+#: config/frv/frv.c:8684
#, gcc-internal-format
msgid "invalid IACC argument"
msgstr ""
-#: config/frv/frv.c:8708
+#: config/frv/frv.c:8707 config/sparc/sparc.c:10547
#, gcc-internal-format
msgid "%qs expects a constant argument"
msgstr ""
-#: config/frv/frv.c:8713
+#: config/frv/frv.c:8712 config/sparc/sparc.c:10553
#, gcc-internal-format
msgid "constant argument out of range for %qs"
msgstr ""
-#: config/frv/frv.c:9194
+#: config/frv/frv.c:9193
#, gcc-internal-format
msgid "media functions are not available unless -mmedia is used"
msgstr ""
-#: config/frv/frv.c:9206
+#: config/frv/frv.c:9205
#, gcc-internal-format
msgid "this media function is only available on the fr500"
msgstr ""
-#: config/frv/frv.c:9234
+#: config/frv/frv.c:9233
#, gcc-internal-format
msgid "this media function is only available on the fr400 and fr550"
msgstr ""
-#: config/frv/frv.c:9253
+#: config/frv/frv.c:9252
#, gcc-internal-format
msgid "this builtin function is only available on the fr405 and fr450"
msgstr ""
-#: config/frv/frv.c:9262
+#: config/frv/frv.c:9261
#, gcc-internal-format
msgid "this builtin function is only available on the fr500 and fr550"
msgstr ""
-#: config/frv/frv.c:9274
+#: config/frv/frv.c:9273
#, gcc-internal-format
msgid "this builtin function is only available on the fr450"
msgstr ""
@@ -28762,61 +29153,61 @@ msgstr ""
msgid "can%'t set position in PCH file: %m"
msgstr ""
-#: config/i386/i386.c:4815
+#: config/i386/i386.c:5052
#, gcc-internal-format
msgid "wrong argument %qs to option %qs"
msgstr ""
-#: config/i386/i386.c:4821
+#: config/i386/i386.c:5058
#, gcc-internal-format
msgid "size ranges of option %qs should be increasing"
msgstr ""
-#: config/i386/i386.c:4831
+#: config/i386/i386.c:5068
#, gcc-internal-format
msgid "wrong strategy name %qs specified for option %qs"
msgstr ""
#. rep; movq isn't available in 32-bit code.
-#: config/i386/i386.c:4857
+#: config/i386/i386.c:5094
#, gcc-internal-format
msgid ""
"strategy name %qs specified for option %qs not supported for 32-bit code"
msgstr ""
-#: config/i386/i386.c:4870
+#: config/i386/i386.c:5107
#, gcc-internal-format
msgid "unknown alignment %qs specified for option %qs"
msgstr ""
-#: config/i386/i386.c:4880
+#: config/i386/i386.c:5117
#, gcc-internal-format
msgid "the max value for the last size range should be -1 for option %qs"
msgstr ""
-#: config/i386/i386.c:4887
+#: config/i386/i386.c:5124
#, gcc-internal-format
msgid "too many size ranges specified in option %qs"
msgstr ""
-#: config/i386/i386.c:4940
+#: config/i386/i386.c:5177
#, gcc-internal-format, gfc-internal-format
msgid "Unknown parameter to option -mtune-ctrl: %s"
msgstr ""
-#: config/i386/i386.c:5344
+#: config/i386/i386.c:5581
#, gcc-internal-format
msgid "Intel MCU psABI isn%'t supported in %s mode"
msgstr ""
-#: config/i386/i386.c:5393
+#: config/i386/i386.c:5630
#, gcc-internal-format
msgid ""
"%<-mtune=x86-64%> is deprecated; use %<-mtune=k8%> or %<-mtune=generic%> "
"instead as appropriate"
msgstr ""
-#: config/i386/i386.c:5395
+#: config/i386/i386.c:5632
#, gcc-internal-format
msgid ""
"%<target(\"tune=x86-64\")%> is deprecated; use %<target(\"tune=k8\")%> or "
@@ -28824,439 +29215,455 @@ msgid ""
msgstr ""
#. rep; movq isn't available in 32-bit code.
-#: config/i386/i386.c:5422
+#: config/i386/i386.c:5659
#, gcc-internal-format
msgid "-mstringop-strategy=rep_8byte not supported for 32-bit code"
msgstr ""
-#: config/i386/i386.c:5439
+#: config/i386/i386.c:5676
#, gcc-internal-format
msgid "address mode %qs not supported in the %s bit mode"
msgstr ""
-#: config/i386/i386.c:5465 config/i386/i386.c:5474 config/i386/i386.c:5486
-#: config/i386/i386.c:5497 config/i386/i386.c:5508
+#: config/i386/i386.c:5702 config/i386/i386.c:5711 config/i386/i386.c:5723
+#: config/i386/i386.c:5734 config/i386/i386.c:5745
#, gcc-internal-format
msgid "code model %qs not supported in the %s bit mode"
msgstr ""
-#: config/i386/i386.c:5477 config/i386/i386.c:5489
+#: config/i386/i386.c:5714 config/i386/i386.c:5726
#, gcc-internal-format
msgid "code model %qs not supported in x32 mode"
msgstr ""
-#: config/i386/i386.c:5495 config/i386/i386.c:5504 config/i386/i386.c:6679
+#: config/i386/i386.c:5732 config/i386/i386.c:5741 config/i386/i386.c:6925
#, gcc-internal-format, gfc-internal-format
msgid "code model %s does not support PIC mode"
msgstr ""
-#: config/i386/i386.c:5532
+#: config/i386/i386.c:5769
#, gcc-internal-format
msgid "-masm=intel not supported in this configuration"
msgstr ""
-#: config/i386/i386.c:5537
+#: config/i386/i386.c:5774
#, gcc-internal-format, gfc-internal-format
msgid "%i-bit mode not compiled in"
msgstr ""
-#: config/i386/i386.c:5546
+#: config/i386/i386.c:5783
#, gcc-internal-format
msgid "%<generic%> CPU can be used only for %<-mtune=%> switch"
msgstr ""
-#: config/i386/i386.c:5548
+#: config/i386/i386.c:5785
#, gcc-internal-format
msgid "%<generic%> CPU can be used only for %<target(\"tune=\")%> attribute"
msgstr ""
-#: config/i386/i386.c:5555
+#: config/i386/i386.c:5792
#, gcc-internal-format
msgid "%<intel%> CPU can be used only for %<-mtune=%> switch"
msgstr ""
-#: config/i386/i386.c:5557
+#: config/i386/i386.c:5794
#, gcc-internal-format
msgid "%<intel%> CPU can be used only for %<target(\"tune=\")%> attribute"
msgstr ""
-#: config/i386/i386.c:5565 config/i386/i386.c:5841
+#: config/i386/i386.c:5802 config/i386/i386.c:6078
#, gcc-internal-format
msgid "CPU you selected does not support x86-64 instruction set"
msgstr ""
-#: config/i386/i386.c:5778 config/i386/i386.c:5781
+#: config/i386/i386.c:6015 config/i386/i386.c:6018
#, gcc-internal-format
msgid "Intel MPX does not support x32"
msgstr ""
-#: config/i386/i386.c:5786
+#: config/i386/i386.c:6023
#, gcc-internal-format
msgid "bad value (%qs) for %<-march=%> switch"
msgstr ""
-#: config/i386/i386.c:5787
+#: config/i386/i386.c:6024
#, gcc-internal-format
msgid "bad value (%qs) for %<target(\"arch=\")%> attribute"
msgstr ""
-#: config/i386/i386.c:5804
+#: config/i386/i386.c:6041
#, gcc-internal-format
msgid "valid arguments to %<-march=%> switch are: %s; did you mean %qs?"
msgstr ""
-#: config/i386/i386.c:5806
+#: config/i386/i386.c:6043
#, gcc-internal-format
msgid ""
"valid arguments to %<target(\"arch=\")%> attribute are: %s; did you mean %qs?"
msgstr ""
-#: config/i386/i386.c:5811
+#: config/i386/i386.c:6048
#, gcc-internal-format
msgid "valid arguments to %<-march=%> switch are: %s"
msgstr ""
-#: config/i386/i386.c:5812
+#: config/i386/i386.c:6049
#, gcc-internal-format
msgid "valid arguments to %<target(\"arch=\")%> attribute are: %s"
msgstr ""
-#: config/i386/i386.c:5859
+#: config/i386/i386.c:6096
#, gcc-internal-format
msgid "bad value (%qs) for %<-mtune=%> switch"
msgstr ""
-#: config/i386/i386.c:5860
+#: config/i386/i386.c:6097
#, gcc-internal-format
msgid "bad value (%qs) for %<target(\"tune=\")%> attribute"
msgstr ""
-#: config/i386/i386.c:5875
+#: config/i386/i386.c:6112
#, gcc-internal-format
msgid "valid arguments to %<-mtune=%> switch are: %s; did you mean %qs?"
msgstr ""
-#: config/i386/i386.c:5877
+#: config/i386/i386.c:6114
#, gcc-internal-format
msgid ""
"valid arguments to %<target(\"tune=\")%> attribute are: %s; did you mean %qs?"
msgstr ""
-#: config/i386/i386.c:5882
+#: config/i386/i386.c:6119
#, gcc-internal-format
msgid "valid arguments to %<-mtune=%> switch are: %s"
msgstr ""
-#: config/i386/i386.c:5883
+#: config/i386/i386.c:6120
#, gcc-internal-format
msgid "valid arguments to %<target(\"tune=\")%> attribute are: %s"
msgstr ""
-#: config/i386/i386.c:5949
+#: config/i386/i386.c:6186
#, gcc-internal-format
msgid "-mregparm is ignored in 64-bit mode"
msgstr ""
-#: config/i386/i386.c:5951
+#: config/i386/i386.c:6188
#, gcc-internal-format
msgid "-mregparm is ignored for Intel MCU psABI"
msgstr ""
-#: config/i386/i386.c:5954
+#: config/i386/i386.c:6191
#, gcc-internal-format, gfc-internal-format
msgid "-mregparm=%d is not between 0 and %d"
msgstr ""
-#: config/i386/i386.c:5987
+#: config/i386/i386.c:6224
#, gcc-internal-format
msgid "%<-mrtd%> is ignored in 64bit mode"
msgstr ""
-#: config/i386/i386.c:5988
+#: config/i386/i386.c:6225
#, gcc-internal-format
msgid "%<target(\"rtd\")%> is ignored in 64bit mode"
msgstr ""
-#: config/i386/i386.c:6061
+#: config/i386/i386.c:6304
#, gcc-internal-format
msgid "-mpreferred-stack-boundary is not supported for this target"
msgstr ""
-#: config/i386/i386.c:6064
+#: config/i386/i386.c:6307
#, gcc-internal-format, gfc-internal-format
msgid "-mpreferred-stack-boundary=%d is not between %d and %d"
msgstr ""
-#: config/i386/i386.c:6087
+#: config/i386/i386.c:6330
#, gcc-internal-format, gfc-internal-format
msgid "-mincoming-stack-boundary=%d is not between %d and 12"
msgstr ""
-#: config/i386/i386.c:6100
+#: config/i386/i386.c:6343
#, gcc-internal-format
msgid "-mnop-mcount is not compatible with this target"
msgstr ""
-#: config/i386/i386.c:6103
+#: config/i386/i386.c:6346
#, gcc-internal-format
msgid "-mnop-mcount is not implemented for -fPIC"
msgstr ""
-#: config/i386/i386.c:6109
+#: config/i386/i386.c:6352
#, gcc-internal-format
msgid "%<-msseregparm%> used without SSE enabled"
msgstr ""
-#: config/i386/i386.c:6110
+#: config/i386/i386.c:6353
#, gcc-internal-format
msgid "%<target(\"sseregparm\")%> used without SSE enabled"
msgstr ""
-#: config/i386/i386.c:6120
+#: config/i386/i386.c:6363
#, gcc-internal-format
msgid "SSE instruction set disabled, using 387 arithmetics"
msgstr ""
-#: config/i386/i386.c:6127
+#: config/i386/i386.c:6370
#, gcc-internal-format
msgid "387 instruction set disabled, using SSE arithmetics"
msgstr ""
-#: config/i386/i386.c:6177
+#: config/i386/i386.c:6420
#, gcc-internal-format
msgid "stack probing requires %<-maccumulate-outgoing-args%> for correctness"
msgstr ""
-#: config/i386/i386.c:6179
+#: config/i386/i386.c:6422
#, gcc-internal-format
msgid ""
"stack probing requires %<target(\"accumulate-outgoing-args\")%> for "
"correctness"
msgstr ""
-#: config/i386/i386.c:6193
+#: config/i386/i386.c:6436
#, gcc-internal-format
msgid "fixed ebp register requires %<-maccumulate-outgoing-args%>"
msgstr ""
-#: config/i386/i386.c:6195
+#: config/i386/i386.c:6438
#, gcc-internal-format
msgid "fixed ebp register requires %<target(\"accumulate-outgoing-args\")%>"
msgstr ""
-#: config/i386/i386.c:6301
+#: config/i386/i386.c:6544
#, gcc-internal-format
msgid "-mfentry isn%'t supported for 32-bit in combination with -fpic"
msgstr ""
-#: config/i386/i386.c:6308
+#: config/i386/i386.c:6551
#, gcc-internal-format
msgid "-mno-fentry isn%'t compatible with SEH"
msgstr ""
-#: config/i386/i386.c:6375 config/rs6000/rs6000.c:5475
+#: config/i386/i386.c:6564
+#, gcc-internal-format
+msgid "-mcall-ms2sysv-xlogues isn%'t currently supported with SEH"
+msgstr ""
+
+#: config/i386/i386.c:6621 config/powerpcspe/powerpcspe.c:5565
+#: config/rs6000/rs6000.c:5296
#, gcc-internal-format, gfc-internal-format
msgid "unknown option for -mrecip=%s"
msgstr ""
-#: config/i386/i386.c:6989
+#: config/i386/i386.c:7235
#, gcc-internal-format, gfc-internal-format
msgid "option(\"%s\") was already specified"
msgstr ""
-#: config/i386/i386.c:7291
+#: config/i386/i386.c:7526
+#, gcc-internal-format
+msgid "interrupt and naked attributes are not compatible"
+msgstr ""
+
+#: config/i386/i386.c:7541
#, gcc-internal-format
msgid "Only DWARF debug format is supported for interrupt service routine."
msgstr ""
-#: config/i386/i386.c:7390
+#: config/i386/i386.c:7640
#, gcc-internal-format, gfc-internal-format
msgid "%s instructions aren't allowed in %s service routine"
msgstr ""
-#: config/i386/i386.c:7394
+#: config/i386/i386.c:7644
#, gcc-internal-format, gfc-internal-format
msgid ""
"%s instructions aren't allowed in function with no_caller_saved_registers "
"attribute"
msgstr ""
-#: config/i386/i386.c:7806 config/i386/i386.c:7857
+#: config/i386/i386.c:8059 config/i386/i386.c:8110
#, gcc-internal-format
msgid "fastcall and regparm attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:7811
+#: config/i386/i386.c:8064
#, gcc-internal-format
msgid "regparam and thiscall attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:7818 config/i386/i386.c:41495
+#: config/i386/i386.c:8071 config/i386/i386.c:42103
#, gcc-internal-format
msgid "%qE attribute requires an integer constant argument"
msgstr ""
-#: config/i386/i386.c:7824
+#: config/i386/i386.c:8077
#, gcc-internal-format
msgid "argument to %qE attribute larger than %d"
msgstr ""
-#: config/i386/i386.c:7849 config/i386/i386.c:7892
+#: config/i386/i386.c:8102 config/i386/i386.c:8145
#, gcc-internal-format
msgid "fastcall and cdecl attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:7853
+#: config/i386/i386.c:8106
#, gcc-internal-format
msgid "fastcall and stdcall attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:7861 config/i386/i386.c:7910
+#: config/i386/i386.c:8114 config/i386/i386.c:8163
#, gcc-internal-format
msgid "fastcall and thiscall attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:7871 config/i386/i386.c:7888
+#: config/i386/i386.c:8124 config/i386/i386.c:8141
#, gcc-internal-format
msgid "stdcall and cdecl attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:7875
+#: config/i386/i386.c:8128
#, gcc-internal-format
msgid "stdcall and fastcall attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:7879 config/i386/i386.c:7906
+#: config/i386/i386.c:8132 config/i386/i386.c:8159
#, gcc-internal-format
msgid "stdcall and thiscall attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:7896 config/i386/i386.c:7914
+#: config/i386/i386.c:8149 config/i386/i386.c:8167
#, gcc-internal-format
msgid "cdecl and thiscall attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:7902
+#: config/i386/i386.c:8155
#, gcc-internal-format
msgid "%qE attribute is used for non-class method"
msgstr ""
-#: config/i386/i386.c:8146
+#: config/i386/i386.c:8399
#, gcc-internal-format
msgid "calling %qD with attribute sseregparm without SSE/SSE2 enabled"
msgstr ""
-#: config/i386/i386.c:8149
+#: config/i386/i386.c:8402
#, gcc-internal-format
msgid "calling %qT with attribute sseregparm without SSE/SSE2 enabled"
msgstr ""
-#: config/i386/i386.c:8465
+#: config/i386/i386.c:8718
#, gcc-internal-format
msgid "X32 does not support ms_abi attribute"
msgstr ""
-#: config/i386/i386.c:8497
+#: config/i386/i386.c:8750
#, gcc-internal-format
msgid "ms_hook_prologue is not compatible with nested function"
msgstr ""
-#: config/i386/i386.c:8810
+#: config/i386/i386.c:9068
#, gcc-internal-format
msgid "AVX512F vector argument without AVX512F enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:8816
+#: config/i386/i386.c:9074
#, gcc-internal-format
msgid "AVX512F vector return without AVX512F enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:8830
+#: config/i386/i386.c:9088
#, gcc-internal-format
msgid "AVX vector argument without AVX enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:8836
+#: config/i386/i386.c:9094
#, gcc-internal-format
msgid "AVX vector return without AVX enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:8852
+#: config/i386/i386.c:9110
#, gcc-internal-format
msgid "SSE vector argument without SSE enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:8858
+#: config/i386/i386.c:9116
#, gcc-internal-format
msgid "SSE vector return without SSE enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:8874
+#: config/i386/i386.c:9132
#, gcc-internal-format
msgid "MMX vector argument without MMX enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:8880
+#: config/i386/i386.c:9138
#, gcc-internal-format
msgid "MMX vector return without MMX enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:9062
+#: config/i386/i386.c:9320
#, gcc-internal-format
msgid ""
"the ABI of passing struct with a flexible array member has changed in GCC 4.4"
msgstr ""
-#: config/i386/i386.c:9179
+#: config/i386/i386.c:9437
#, gcc-internal-format
msgid "the ABI of passing union with long double has changed in GCC 4.4"
msgstr ""
-#: config/i386/i386.c:9297
+#: config/i386/i386.c:9555
#, gcc-internal-format
msgid ""
"the ABI of passing structure with complex float member has changed in GCC 4.4"
msgstr ""
-#: config/i386/i386.c:9460
+#: config/i386/i386.c:9718
#, gcc-internal-format
msgid "SSE register return with SSE disabled"
msgstr ""
-#: config/i386/i386.c:9466
+#: config/i386/i386.c:9724
#, gcc-internal-format
msgid "SSE register argument with SSE disabled"
msgstr ""
-#: config/i386/i386.c:9482
+#: config/i386/i386.c:9740
#, gcc-internal-format
msgid "x87 register return with x87 disabled"
msgstr ""
-#: config/i386/i386.c:9778 config/i386/i386.c:10049 config/i386/i386.c:10572
+#: config/i386/i386.c:10036 config/i386/i386.c:10314 config/i386/i386.c:10838
#, gcc-internal-format
msgid "calling %qD with SSE calling convention without SSE/SSE2 enabled"
msgstr ""
-#: config/i386/i386.c:9780 config/i386/i386.c:10051 config/i386/i386.c:10574
+#: config/i386/i386.c:10038 config/i386/i386.c:10316 config/i386/i386.c:10840
#, gcc-internal-format
msgid ""
"this is a GCC bug that can be worked around by adding attribute used to "
"function called"
msgstr ""
-#: config/i386/i386.c:10474
+#: config/i386/i386.c:10740
#, gcc-internal-format, gfc-internal-format
msgid ""
"The ABI for passing parameters with %d-byte alignment has changed in GCC 4.6"
msgstr ""
-#: config/i386/i386.c:13857
+#: config/i386/i386.c:12811
+#, gcc-internal-format, gfc-internal-format
+msgid "-mcall-ms2sysv-xlogues is not compatible with %s"
+msgstr ""
+
+#: config/i386/i386.c:14371
#, gcc-internal-format
msgid "ms_hook_prologue attribute isn%'t compatible with -mfentry for 32-bit"
msgstr ""
-#: config/i386/i386.c:13947
+#: config/i386/i386.c:14461
#, gcc-internal-format
msgid ""
"Dynamic Realign Argument Pointer (DRAP) not supported in interrupt service "
@@ -29264,12 +29671,12 @@ msgid ""
"return."
msgstr ""
-#: config/i386/i386.c:14959
+#: config/i386/i386.c:15677
#, gcc-internal-format
msgid "-fsplit-stack does not support fastcall with nested function"
msgstr ""
-#: config/i386/i386.c:14979
+#: config/i386/i386.c:15697
#, gcc-internal-format
msgid ""
"-fsplit-stack does not support 2 register parameters for a nested function"
@@ -29277,301 +29684,294 @@ msgstr ""
#. FIXME: We could make this work by pushing a register
#. around the addition and comparison.
-#: config/i386/i386.c:14990
+#: config/i386/i386.c:15708
#, gcc-internal-format
msgid "-fsplit-stack does not support 3 register parameters"
msgstr ""
-#: config/i386/i386.c:17799 config/i386/i386.c:17813
+#: config/i386/i386.c:18513 config/i386/i386.c:18527
#, gcc-internal-format
msgid "unsupported size for integer register"
msgstr ""
-#: config/i386/i386.c:17845
+#: config/i386/i386.c:18559
#, gcc-internal-format
msgid "extended registers have no high halves"
msgstr ""
-#: config/i386/i386.c:17860
+#: config/i386/i386.c:18574
#, gcc-internal-format
msgid "unsupported operand size for extended register"
msgstr ""
-#: config/i386/i386.c:18051
+#: config/i386/i386.c:18765
#, gcc-internal-format
msgid "non-integer operand used with operand code 'z'"
msgstr ""
-#: config/i386/i386.c:28410
+#: config/i386/i386.c:29131
#, gcc-internal-format
msgid "interrupt service routine can't be called directly"
msgstr ""
-#: config/i386/i386.c:32696
+#: config/i386/i386.c:33498
#, gcc-internal-format
msgid "No dispatcher found for the versioning attributes"
msgstr ""
-#: config/i386/i386.c:32746
+#: config/i386/i386.c:33548
#, gcc-internal-format, gfc-internal-format
msgid "No dispatcher found for %s"
msgstr ""
-#: config/i386/i386.c:32756
+#: config/i386/i386.c:33558
#, gcc-internal-format, gfc-internal-format
msgid "No dispatcher found for the versioning attributes : %s"
msgstr ""
-#: config/i386/i386.c:33004
+#: config/i386/i386.c:33720
#, gcc-internal-format
msgid ""
"Function versions cannot be marked as gnu_inline, bodies have to be generated"
msgstr ""
-#: config/i386/i386.c:33009 config/i386/i386.c:33437
+#: config/i386/i386.c:33725 config/i386/i386.c:34002
+#: config/rs6000/rs6000.c:37301
#, gcc-internal-format
msgid "Virtual function multiversioning not supported"
msgstr ""
-#: config/i386/i386.c:33072
-#, gcc-internal-format
-msgid "missing %<target%> attribute for multi-versioned %D"
-msgstr ""
-
-#: config/i386/i386.c:33075
-#, gcc-internal-format
-msgid "previous declaration of %D"
-msgstr ""
-
-#: config/i386/i386.c:33294
+#: config/i386/i386.c:33858 config/rs6000/rs6000.c:37058
#, gcc-internal-format
msgid "multiversioning needs ifunc which is not supported on this target"
msgstr ""
-#: config/i386/i386.c:33686
+#: config/i386/i386.c:34251
#, gcc-internal-format
msgid "Parameter to builtin must be a string constant or literal"
msgstr ""
-#: config/i386/i386.c:33711 config/i386/i386.c:33761
+#: config/i386/i386.c:34276 config/i386/i386.c:34326
#, gcc-internal-format, gfc-internal-format
msgid "Parameter to builtin not valid: %s"
msgstr ""
-#: config/i386/i386.c:34440 config/i386/i386.c:35838
+#: config/i386/i386.c:35005 config/i386/i386.c:36403
#, gcc-internal-format
msgid "the last argument must be a 2-bit immediate"
msgstr ""
-#: config/i386/i386.c:34835
+#: config/i386/i386.c:35400
#, gcc-internal-format
msgid "the fifth argument must be an 8-bit immediate"
msgstr ""
-#: config/i386/i386.c:34930
+#: config/i386/i386.c:35495
#, gcc-internal-format
msgid "the third argument must be an 8-bit immediate"
msgstr ""
-#: config/i386/i386.c:35769
+#: config/i386/i386.c:36334
#, gcc-internal-format
msgid "the last argument must be an 1-bit immediate"
msgstr ""
-#: config/i386/i386.c:35784
+#: config/i386/i386.c:36349
#, gcc-internal-format
msgid "the last argument must be a 3-bit immediate"
msgstr ""
-#: config/i386/i386.c:35817
+#: config/i386/i386.c:36382
#, gcc-internal-format
msgid "the last argument must be a 4-bit immediate"
msgstr ""
-#: config/i386/i386.c:35857
+#: config/i386/i386.c:36422
#, gcc-internal-format
msgid "the last argument must be a 1-bit immediate"
msgstr ""
-#: config/i386/i386.c:35870
+#: config/i386/i386.c:36435
#, gcc-internal-format
msgid "the last argument must be a 5-bit immediate"
msgstr ""
-#: config/i386/i386.c:35880
+#: config/i386/i386.c:36445
#, gcc-internal-format
msgid "the next to last argument must be an 8-bit immediate"
msgstr ""
-#: config/i386/i386.c:35885 config/i386/i386.c:36675
+#: config/i386/i386.c:36450 config/i386/i386.c:37216
#, gcc-internal-format
msgid "the last argument must be an 8-bit immediate"
msgstr ""
-#: config/i386/i386.c:36053
+#: config/i386/i386.c:36584
#, gcc-internal-format
msgid "the third argument must be comparison constant"
msgstr ""
-#: config/i386/i386.c:36058
+#: config/i386/i386.c:36589
#, gcc-internal-format
msgid "incorrect comparison mode"
msgstr ""
-#: config/i386/i386.c:36064 config/i386/i386.c:36265
+#: config/i386/i386.c:36595 config/i386/i386.c:36802
#, gcc-internal-format
msgid "incorrect rounding operand"
msgstr ""
-#: config/i386/i386.c:36247
+#: config/i386/i386.c:36784
#, gcc-internal-format
msgid "the immediate argument must be a 4-bit immediate"
msgstr ""
-#: config/i386/i386.c:36253
+#: config/i386/i386.c:36790
#, gcc-internal-format
msgid "the immediate argument must be a 5-bit immediate"
msgstr ""
-#: config/i386/i386.c:36256
+#: config/i386/i386.c:36793
#, gcc-internal-format
msgid "the immediate argument must be an 8-bit immediate"
msgstr ""
-#: config/i386/i386.c:36673
+#: config/i386/i386.c:37214
#, gcc-internal-format
msgid "the last argument must be a 32-bit immediate"
msgstr ""
-#: config/i386/i386.c:36755 config/rs6000/rs6000.c:15973
+#: config/i386/i386.c:37296 config/powerpcspe/powerpcspe.c:16102
+#: config/rs6000/rs6000.c:15412
#, gcc-internal-format
msgid "selector must be an integer constant in the range 0..%wi"
msgstr ""
-#: config/i386/i386.c:36960
+#: config/i386/i386.c:37501
#, gcc-internal-format
msgid "%qE needs unknown isa option"
msgstr ""
-#: config/i386/i386.c:36964
+#: config/i386/i386.c:37505
#, gcc-internal-format
msgid "%qE needs isa option %s"
msgstr ""
-#: config/i386/i386.c:37712
+#: config/i386/i386.c:38299
#, gcc-internal-format
msgid "last argument must be an immediate"
msgstr ""
-#: config/i386/i386.c:38416 config/i386/i386.c:38598
+#: config/i386/i386.c:39003 config/i386/i386.c:39185
#, gcc-internal-format
msgid "the last argument must be scale 1, 2, 4, 8"
msgstr ""
-#: config/i386/i386.c:38651
+#: config/i386/i386.c:39238
#, gcc-internal-format
msgid "the forth argument must be scale 1, 2, 4, 8"
msgstr ""
-#: config/i386/i386.c:38657
+#: config/i386/i386.c:39244
#, gcc-internal-format
msgid "incorrect hint operand"
msgstr ""
-#: config/i386/i386.c:38676
+#: config/i386/i386.c:39263
#, gcc-internal-format
msgid "the xabort's argument must be an 8-bit immediate"
msgstr ""
-#: config/i386/i386.c:41482
+#: config/i386/i386.c:42090
#, gcc-internal-format
msgid "%qE attribute only available for 32-bit"
msgstr ""
-#: config/i386/i386.c:41503
+#: config/i386/i386.c:42111
#, gcc-internal-format
msgid "argument to %qE attribute is neither zero, nor one"
msgstr ""
-#: config/i386/i386.c:41536 config/i386/i386.c:41545
+#: config/i386/i386.c:42144 config/i386/i386.c:42153
#, gcc-internal-format
msgid "ms_abi and sysv_abi attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:41581 config/rs6000/rs6000.c:35378
+#: config/i386/i386.c:42189 config/powerpcspe/powerpcspe.c:35755
+#: config/rs6000/rs6000.c:32588
#, gcc-internal-format
msgid "%qE incompatible attribute ignored"
msgstr ""
-#: config/i386/i386.c:41625
+#: config/i386/i386.c:42233
#, gcc-internal-format
msgid "interrupt service routine should have a pointer as the first argument"
msgstr ""
-#: config/i386/i386.c:41632
+#: config/i386/i386.c:42240
#, gcc-internal-format, gfc-internal-format
msgid ""
"interrupt service routine should have unsigned %sint as the second argument"
msgstr ""
-#: config/i386/i386.c:41642
+#: config/i386/i386.c:42250
#, gcc-internal-format
msgid ""
"interrupt service routine can only have a pointer argument and an optional "
"integer argument"
msgstr ""
-#: config/i386/i386.c:41645
+#: config/i386/i386.c:42253
#, gcc-internal-format
msgid "interrupt service routine can't have non-void return value"
msgstr ""
-#: config/i386/i386.c:44547
+#: config/i386/i386.c:45205
#, gcc-internal-format
msgid "alternatives not allowed in asm flag output"
msgstr ""
-#: config/i386/i386.c:44611
+#: config/i386/i386.c:45269
#, gcc-internal-format
msgid "unknown asm flag output %qs"
msgstr ""
-#: config/i386/i386.c:44640
+#: config/i386/i386.c:45298
#, gcc-internal-format
msgid "invalid type for asm flag output"
msgstr ""
-#: config/i386/i386.c:50911
+#: config/i386/i386.c:51571
#, gcc-internal-format
msgid "Unknown architecture specific memory model"
msgstr ""
-#: config/i386/i386.c:50918
+#: config/i386/i386.c:51578
#, gcc-internal-format
msgid "HLE_ACQUIRE not used with ACQUIRE or stronger memory model"
msgstr ""
-#: config/i386/i386.c:50924
+#: config/i386/i386.c:51584
#, gcc-internal-format
msgid "HLE_RELEASE not used with RELEASE or stronger memory model"
msgstr ""
-#: config/i386/i386.c:50948 config/i386/i386.c:51069
+#: config/i386/i386.c:51608 config/i386/i386.c:51729
#, gcc-internal-format, gfc-internal-format
msgid "unsupported simdlen %d"
msgstr ""
-#: config/i386/i386.c:50967
+#: config/i386/i386.c:51627
#, gcc-internal-format
msgid "unsupported return type %qT for simd\n"
msgstr ""
-#: config/i386/i386.c:50989
+#: config/i386/i386.c:51649
#, gcc-internal-format
msgid "unsupported argument type %qT for simd\n"
msgstr ""
-#: config/i386/i386.c:51315
+#: config/i386/i386.c:51975
#, gcc-internal-format
msgid ""
"Pointer Checker requires MPX support on this target. Use -mmpx options to "
@@ -29667,19 +30067,13 @@ msgstr ""
msgid "%qE attribute requires a string constant argument"
msgstr ""
-#: config/ia64/ia64.c:5934 config/pa/pa.c:431 config/sh/sh.c:8232
+#: config/ia64/ia64.c:5935 config/pa/pa.c:431 config/sh/sh.c:8240
#: config/spu/spu.c:4895
#, gcc-internal-format
msgid "value of -mfixed-range must have form REG1-REG2"
msgstr ""
-#: config/ia64/ia64.c:5961 config/pa/pa.c:458 config/sh/sh.c:8258
-#: config/spu/spu.c:4921
-#, gcc-internal-format, gfc-internal-format
-msgid "%s-%s is an empty range"
-msgstr ""
-
-#: config/ia64/ia64.c:11190
+#: config/ia64/ia64.c:11191
#, gcc-internal-format
msgid "version attribute is not a string"
msgstr ""
@@ -29694,7 +30088,7 @@ msgstr ""
msgid "argument %qd is not a constant"
msgstr ""
-#: config/iq2000/iq2000.c:2912 config/xtensa/xtensa.c:2455
+#: config/iq2000/iq2000.c:2912 config/xtensa/xtensa.c:2463
#, gcc-internal-format
msgid "PRINT_OPERAND_ADDRESS, null pointer"
msgstr ""
@@ -29704,7 +30098,7 @@ msgstr ""
msgid "PRINT_OPERAND: Unknown punctuation '%c'"
msgstr ""
-#: config/iq2000/iq2000.c:3076 config/xtensa/xtensa.c:2299
+#: config/iq2000/iq2000.c:3076 config/xtensa/xtensa.c:2307
#, gcc-internal-format
msgid "PRINT_OPERAND null pointer"
msgstr ""
@@ -29745,7 +30139,7 @@ msgid "%qE attribute is not supported for R8C target"
msgstr ""
#. The argument must be a constant integer.
-#: config/m32c/m32c.c:2946 config/sh/sh.c:8444 config/sh/sh.c:8539
+#: config/m32c/m32c.c:2946 config/sh/sh.c:8452 config/sh/sh.c:8547
#, gcc-internal-format
msgid "%qE attribute argument not an integer constant"
msgstr ""
@@ -29805,7 +30199,8 @@ msgstr ""
msgid "interrupt_thread is available only on fido"
msgstr ""
-#: config/m68k/m68k.c:1108 config/rs6000/rs6000.c:28119
+#: config/m68k/m68k.c:1108 config/powerpcspe/powerpcspe.c:28398
+#: config/rs6000/rs6000.c:25424
#, gcc-internal-format
msgid "stack limit expression is not supported"
msgstr ""
@@ -29909,7 +30304,7 @@ msgstr ""
#: config/mips/mips.c:16844 config/nds32/nds32-intrinsic.c:60
#: config/nds32/nds32-intrinsic.c:88 config/nds32/nds32-intrinsic.c:118
-#: config/nios2/nios2.c:3146 config/riscv/riscv-builtins.c:216
+#: config/nios2/nios2.c:3146 config/riscv/riscv-builtins.c:217
#, gcc-internal-format
msgid "invalid argument to built-in function"
msgstr ""
@@ -30157,28 +30552,28 @@ msgstr ""
msgid "MMIX Internal: Last named vararg would not fit in a register"
msgstr ""
-#: config/mmix/mmix.c:1559 config/mmix/mmix.c:1583 config/mmix/mmix.c:1699
+#: config/mmix/mmix.c:1560 config/mmix/mmix.c:1584 config/mmix/mmix.c:1700
#, gcc-internal-format, gfc-internal-format
msgid "MMIX Internal: Bad register: %d"
msgstr ""
#. Presumably there's a missing case above if we get here.
-#: config/mmix/mmix.c:1691
+#: config/mmix/mmix.c:1692
#, gcc-internal-format
msgid "MMIX Internal: Missing %qc case in mmix_print_operand"
msgstr ""
-#: config/mmix/mmix.c:1976
+#: config/mmix/mmix.c:1977
#, gcc-internal-format
msgid "stack frame not a multiple of 8 bytes: %wd"
msgstr ""
-#: config/mmix/mmix.c:2214
+#: config/mmix/mmix.c:2215
#, gcc-internal-format
msgid "stack frame not a multiple of octabyte: %wd"
msgstr ""
-#: config/mmix/mmix.c:2500 config/mmix/mmix.c:2559
+#: config/mmix/mmix.c:2501 config/mmix/mmix.c:2560
#, gcc-internal-format, gfc-internal-format
msgid "MMIX Internal: %s is not a shiftable int"
msgstr ""
@@ -30208,33 +30603,33 @@ msgstr ""
msgid "msp430_select_hwmult_lib needs one or more arguments"
msgstr ""
-#: config/msp430/msp430.c:776
+#: config/msp430/msp430.c:777
#, gcc-internal-format, gfc-internal-format
msgid "MCU '%s' supports %s ISA but -mcpu option is set to %s"
msgstr ""
-#: config/msp430/msp430.c:782
+#: config/msp430/msp430.c:783
#, gcc-internal-format, gfc-internal-format
msgid ""
"MCU '%s' does not have hardware multiply support, but -mhwmult is set to %s"
msgstr ""
-#: config/msp430/msp430.c:789
+#: config/msp430/msp430.c:790
#, gcc-internal-format, gfc-internal-format
msgid "MCU '%s' supports %s hardware multiply, but -mhwmult is set to 16-bit"
msgstr ""
-#: config/msp430/msp430.c:792
+#: config/msp430/msp430.c:793
#, gcc-internal-format, gfc-internal-format
msgid "MCU '%s' supports %s hardware multiply, but -mhwmult is set to 32-bit"
msgstr ""
-#: config/msp430/msp430.c:795
+#: config/msp430/msp430.c:796
#, gcc-internal-format, gfc-internal-format
msgid "MCU '%s' supports %s hardware multiply, but -mhwmult is set to f5series"
msgstr ""
-#: config/msp430/msp430.c:811
+#: config/msp430/msp430.c:812
#, gcc-internal-format, gfc-internal-format
msgid ""
"Unrecognized MCU name '%s', assuming that it is just a MSP430 with no "
@@ -30242,82 +30637,92 @@ msgid ""
"Use the -mcpu and -mhwmult options to set these explicitly."
msgstr ""
-#: config/msp430/msp430.c:818
+#: config/msp430/msp430.c:819
#, gcc-internal-format, gfc-internal-format
msgid ""
"Unrecognized MCU name '%s', assuming that it has no hardware multiply.\n"
"Use the -mhwmult option to set this explicitly."
msgstr ""
-#: config/msp430/msp430.c:830
+#: config/msp430/msp430.c:831
#, gcc-internal-format, gfc-internal-format
msgid ""
"Unrecognized MCU name '%s', assuming that it just supports the MSP430 ISA.\n"
"Use the -mcpu option to set the ISA explicitly."
msgstr ""
-#: config/msp430/msp430.c:838
+#: config/msp430/msp430.c:839
#, gcc-internal-format, gfc-internal-format
msgid "Unrecognized MCU name '%s'."
msgstr ""
-#: config/msp430/msp430.c:847
+#: config/msp430/msp430.c:848
#, gcc-internal-format
msgid "-mlarge requires a 430X-compatible -mmcu="
msgstr ""
-#: config/msp430/msp430.c:850
+#: config/msp430/msp430.c:851
#, gcc-internal-format
msgid "-mcode-region=upper requires 430X-compatible cpu"
msgstr ""
-#: config/msp430/msp430.c:852
+#: config/msp430/msp430.c:853
#, gcc-internal-format
msgid "-mdata-region=upper requires 430X-compatible cpu"
msgstr ""
-#: config/msp430/msp430.c:1859
+#: config/msp430/msp430.c:1869
#, gcc-internal-format
msgid "unrecognized interrupt vector argument of %qE attribute"
msgstr ""
-#: config/msp430/msp430.c:1868
+#: config/msp430/msp430.c:1878
#, gcc-internal-format
msgid "numeric argument of %qE attribute must be in range 0..63"
msgstr ""
-#: config/msp430/msp430.c:1874
+#: config/msp430/msp430.c:1884
#, gcc-internal-format
msgid "argument of %qE attribute is not a string constant or number"
msgstr ""
-#: config/msp430/msp430.c:2124
+#: config/msp430/msp430.c:2002
+#, gcc-internal-format
+msgid "%qE attribute cannot be applied to variables with specific sections"
+msgstr ""
+
+#: config/msp430/msp430.c:2006
+#, gcc-internal-format
+msgid "%qE attribute has no effect on automatic variables"
+msgstr ""
+
+#: config/msp430/msp430.c:2148
#, gcc-internal-format
msgid "argument to interrupt attribute is unsupported for weak functions"
msgstr ""
-#: config/msp430/msp430.c:2494
+#: config/msp430/msp430.c:2524
#, gcc-internal-format
msgid "__delay_cycles() only takes constant arguments"
msgstr ""
-#: config/msp430/msp430.c:2504
+#: config/msp430/msp430.c:2534
#, gcc-internal-format
msgid "__delay_cycles only takes non-negative cycle counts"
msgstr ""
-#: config/msp430/msp430.c:2524
+#: config/msp430/msp430.c:2554
#, gcc-internal-format
msgid "__delay_cycles is limited to 32-bit loop counts"
msgstr ""
-#: config/msp430/msp430.c:2594
+#: config/msp430/msp430.c:2624
#, gcc-internal-format
msgid "MSP430 builtin functions only work inside interrupt handlers"
msgstr ""
-#: config/msp430/msp430.c:2606 config/rx/rx.c:2635 config/xtensa/xtensa.c:3375
-#: config/xtensa/xtensa.c:3401
+#: config/msp430/msp430.c:2636 config/rx/rx.c:2635 config/xtensa/xtensa.c:3407
+#: config/xtensa/xtensa.c:3433
#, gcc-internal-format
msgid "bad builtin code"
msgstr ""
@@ -30557,48 +30962,53 @@ msgstr ""
msgid "cannot open intermediate ptx file"
msgstr ""
-#: config/nvptx/nvptx.c:159
+#: config/nvptx/nvptx.c:161
#, gcc-internal-format, gfc-internal-format
msgid "option %s is not supported together with -fopenacc"
msgstr ""
-#: config/nvptx/nvptx.c:261
+#: config/nvptx/nvptx.c:185
+#, gcc-internal-format
+msgid "not generating patch area, nops not supported"
+msgstr ""
+
+#: config/nvptx/nvptx.c:283
#, gcc-internal-format
msgid ""
"static initialization of variable %q+D in %<.shared%> memory is not supported"
msgstr ""
-#: config/nvptx/nvptx.c:1941
+#: config/nvptx/nvptx.c:1971
#, gcc-internal-format
msgid "cannot emit unaligned pointers in ptx assembly"
msgstr ""
-#: config/nvptx/nvptx.c:2131
+#: config/nvptx/nvptx.c:2161
#, gcc-internal-format
msgid "PTX does not support weak declarations (only weak definitions)"
msgstr ""
-#: config/nvptx/nvptx.c:4283
+#: config/nvptx/nvptx.c:4434
#, gcc-internal-format
msgid "%qE attribute requires a void return type"
msgstr ""
-#: config/nvptx/nvptx.c:4306
+#: config/nvptx/nvptx.c:4457
#, gcc-internal-format
msgid "%qE attribute not allowed with auto storage class"
msgstr ""
-#: config/nvptx/nvptx.c:4674
+#: config/nvptx/nvptx.c:4825
#, gcc-internal-format, gfc-internal-format
msgid "using vector_length (%d), ignoring %d"
msgstr ""
-#: config/nvptx/nvptx.c:4675
+#: config/nvptx/nvptx.c:4826
#, gcc-internal-format, gfc-internal-format
msgid "using vector_length (%d), ignoring runtime setting"
msgstr ""
-#: config/nvptx/nvptx.c:4685
+#: config/nvptx/nvptx.c:4836
#, gcc-internal-format, gfc-internal-format
msgid "using num_workers (%d), ignoring %d"
msgstr ""
@@ -30623,100 +31033,34 @@ msgstr ""
msgid "-g option disabled"
msgstr ""
-#: config/pa/pa.c:8769
-#, gcc-internal-format, gfc-internal-format
-msgid ""
-"alignment (%u) for %s exceeds maximum alignment for global common data. "
-"Using %u"
-msgstr ""
-
-#: config/riscv/riscv.c:333
+#: config/pa/pa.c:532
#, gcc-internal-format
-msgid "unknown cpu %qs for -mtune"
-msgstr ""
-
-#: config/riscv/riscv.c:3765
-#, gcc-internal-format
-msgid "-mdiv requires -march to subsume the %<M%> extension"
-msgstr ""
-
-#: config/riscv/riscv.c:3795
-#, gcc-internal-format
-msgid "requested ABI requires -march to subsume the %qc extension"
+msgid "-freorder-blocks-and-partition does not work on this architecture"
msgstr ""
-#: config/riscv/riscv.c:3800
+#: config/pa/pa.c:8793
#, gcc-internal-format, gfc-internal-format
-msgid "ABI requires -march=rv%d"
-msgstr ""
-
-#. Address spaces are currently only supported by C.
-#: config/rl78/rl78.c:367
-#, gcc-internal-format
-msgid "-mes0 can only be used with C"
-msgstr ""
-
-#: config/rl78/rl78.c:370
-#, gcc-internal-format
-msgid "mduc registers only saved for G13 target"
-msgstr ""
-
-#: config/rl78/rl78.c:385
-#, gcc-internal-format
-msgid "-mmul=g13 cannot be used with -mcpu=g10"
-msgstr ""
-
-#: config/rl78/rl78.c:386
-#, gcc-internal-format
-msgid "-mmul=g14 cannot be used with -mcpu=g10"
-msgstr ""
-
-#. The S2 core does not have mul/div instructions.
-#: config/rl78/rl78.c:397
-#, gcc-internal-format
-msgid "-mmul=g14 cannot be used with -mcpu=g13"
-msgstr ""
-
-#. The G14 core does not have the hardware multiply peripheral used by the
-#. G13 core, hence you cannot use G13 multipliy routines on G14 hardware.
-#: config/rl78/rl78.c:409
-#, gcc-internal-format
-msgid "-mmul=g13 cannot be used with -mcpu=g14"
-msgstr ""
-
-#: config/rl78/rl78.c:804
-#, gcc-internal-format
-msgid "naked attribute only applies to functions"
-msgstr ""
-
-#: config/rl78/rl78.c:828
-#, gcc-internal-format
-msgid "%qE attribute doesn't apply to functions"
-msgstr ""
-
-#. This is unpredictable, as we're truncating off usable address
-#. bits.
-#: config/rl78/rl78.c:1170
-#, gcc-internal-format
-msgid "converting far pointer to near pointer"
+msgid ""
+"alignment (%u) for %s exceeds maximum alignment for global common data. "
+"Using %u"
msgstr ""
-#: config/rs6000/host-darwin.c:59
+#: config/powerpcspe/host-darwin.c:59 config/rs6000/host-darwin.c:59
#, gcc-internal-format
msgid "Segmentation Fault (code)"
msgstr ""
-#: config/rs6000/host-darwin.c:129
+#: config/powerpcspe/host-darwin.c:129 config/rs6000/host-darwin.c:129
#, gcc-internal-format
msgid "Segmentation Fault"
msgstr ""
-#: config/rs6000/host-darwin.c:143
+#: config/powerpcspe/host-darwin.c:143 config/rs6000/host-darwin.c:143
#, gcc-internal-format
msgid "While setting up signal stack: %m"
msgstr ""
-#: config/rs6000/host-darwin.c:149
+#: config/powerpcspe/host-darwin.c:149 config/rs6000/host-darwin.c:149
#, gcc-internal-format
msgid "While setting up signal handler: %m"
msgstr ""
@@ -30730,267 +31074,273 @@ msgstr ""
#. rs6000_default_long_calls is set to the value of TOGGLE, changing
#. whether or not new function declarations receive a longcall
#. attribute by default.
-#: config/rs6000/rs6000-c.c:50
+#: config/powerpcspe/powerpcspe-c.c:50 config/rs6000/rs6000-c.c:50
#, gcc-internal-format
msgid "ignoring malformed #pragma longcall"
msgstr ""
-#: config/rs6000/rs6000-c.c:63
+#: config/powerpcspe/powerpcspe-c.c:63 config/rs6000/rs6000-c.c:63
#, gcc-internal-format
msgid "missing open paren"
msgstr ""
-#: config/rs6000/rs6000-c.c:65
+#: config/powerpcspe/powerpcspe-c.c:65 config/rs6000/rs6000-c.c:65
#, gcc-internal-format
msgid "missing number"
msgstr ""
-#: config/rs6000/rs6000-c.c:67
+#: config/powerpcspe/powerpcspe-c.c:67 config/rs6000/rs6000-c.c:67
#, gcc-internal-format
msgid "missing close paren"
msgstr ""
-#: config/rs6000/rs6000-c.c:70
+#: config/powerpcspe/powerpcspe-c.c:70 config/rs6000/rs6000-c.c:70
#, gcc-internal-format
msgid "number must be 0 or 1"
msgstr ""
-#: config/rs6000/rs6000-c.c:73
+#: config/powerpcspe/powerpcspe-c.c:73 config/rs6000/rs6000-c.c:73
#, gcc-internal-format
msgid "junk at end of #pragma longcall"
msgstr ""
-#: config/rs6000/rs6000-c.c:5575
+#: config/powerpcspe/powerpcspe-c.c:5659 config/rs6000/rs6000-c.c:5801
#, gcc-internal-format
msgid ""
"vec_lvsl is deprecated for little endian; use assignment for unaligned loads "
"and stores"
msgstr ""
-#: config/rs6000/rs6000-c.c:5579
+#: config/powerpcspe/powerpcspe-c.c:5663 config/rs6000/rs6000-c.c:5805
#, gcc-internal-format
msgid ""
"vec_lvsr is deprecated for little endian; use assignment for unaligned loads "
"and stores"
msgstr ""
-#: config/rs6000/rs6000-c.c:5589
+#: config/powerpcspe/powerpcspe-c.c:5673 config/rs6000/rs6000-c.c:5815
#, gcc-internal-format
msgid "vec_mul only accepts 2 arguments"
msgstr ""
-#: config/rs6000/rs6000-c.c:5640
+#: config/powerpcspe/powerpcspe-c.c:5724 config/rs6000/rs6000-c.c:5866
#, gcc-internal-format
msgid "vec_cmpne only accepts 2 arguments"
msgstr ""
-#: config/rs6000/rs6000-c.c:5710
+#: config/powerpcspe/powerpcspe-c.c:5794
#, gcc-internal-format
msgid "vec_adde only accepts 3 arguments"
msgstr ""
-#: config/rs6000/rs6000-c.c:5774
+#: config/powerpcspe/powerpcspe-c.c:5858
#, gcc-internal-format
msgid "vec_addec only accepts 3 arguments"
msgstr ""
-#: config/rs6000/rs6000-c.c:5862
+#: config/powerpcspe/powerpcspe-c.c:5946 config/rs6000/rs6000-c.c:6131
#, gcc-internal-format, gfc-internal-format
msgid "%s only accepts %d arguments"
msgstr ""
-#: config/rs6000/rs6000-c.c:5867
+#: config/powerpcspe/powerpcspe-c.c:5951 config/rs6000/rs6000-c.c:6136
#, gcc-internal-format, gfc-internal-format
msgid "%s only accepts 1 argument"
msgstr ""
-#: config/rs6000/rs6000-c.c:5872
+#: config/powerpcspe/powerpcspe-c.c:5956 config/rs6000/rs6000-c.c:6141
#, gcc-internal-format, gfc-internal-format
msgid "%s only accepts 2 arguments"
msgstr ""
-#: config/rs6000/rs6000-c.c:5938
+#: config/powerpcspe/powerpcspe-c.c:6022 config/rs6000/rs6000-c.c:6207
#, gcc-internal-format
msgid "vec_extract only accepts 2 arguments"
msgstr ""
-#: config/rs6000/rs6000-c.c:6107
+#: config/powerpcspe/powerpcspe-c.c:6191 config/rs6000/rs6000-c.c:6376
#, gcc-internal-format
msgid "vec_insert only accepts 3 arguments"
msgstr ""
-#: config/rs6000/rs6000-c.c:6381
+#: config/powerpcspe/powerpcspe-c.c:6465 config/rs6000/rs6000-c.c:6654
#, gcc-internal-format
msgid "passing arg %d of %qE discards qualifiers from pointer target type"
msgstr ""
-#: config/rs6000/rs6000-c.c:6435
+#: config/powerpcspe/powerpcspe-c.c:6512 config/rs6000/rs6000-c.c:6701
+#, gcc-internal-format
+msgid "__builtin_cmpb only accepts 2 arguments"
+msgstr ""
+
+#: config/powerpcspe/powerpcspe-c.c:6570
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s not supported in this compiler configuration"
msgstr ""
-#: config/rs6000/rs6000-c.c:6443
+#: config/powerpcspe/powerpcspe-c.c:6578 config/rs6000/rs6000-c.c:6813
#, gcc-internal-format, gfc-internal-format
msgid "invalid parameter combination for AltiVec intrinsic %s"
msgstr ""
-#: config/rs6000/rs6000.c:3642
+#: config/powerpcspe/powerpcspe.c:3731 config/rs6000/rs6000.c:3651
#, gcc-internal-format
msgid "-mrecip requires -ffinite-math or -ffast-math"
msgstr ""
-#: config/rs6000/rs6000.c:3644
+#: config/powerpcspe/powerpcspe.c:3733 config/rs6000/rs6000.c:3653
#, gcc-internal-format
msgid "-mrecip requires -fno-trapping-math or -ffast-math"
msgstr ""
-#: config/rs6000/rs6000.c:3646
+#: config/powerpcspe/powerpcspe.c:3735 config/rs6000/rs6000.c:3655
#, gcc-internal-format
msgid "-mrecip requires -freciprocal-math or -ffast-math"
msgstr ""
-#: config/rs6000/rs6000.c:3746
+#: config/powerpcspe/powerpcspe.c:3835 config/rs6000/rs6000.c:3755
#, gcc-internal-format
msgid "-m64 requires PowerPC64 architecture, enabling"
msgstr ""
-#: config/rs6000/rs6000.c:3929
+#: config/powerpcspe/powerpcspe.c:4019 config/rs6000/rs6000.c:3937
#, 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:4021
+#: config/powerpcspe/powerpcspe.c:4111 config/rs6000/rs6000.c:4029
#, gcc-internal-format
msgid ""
"will not generate power9 instructions because assembler lacks power9 support"
msgstr ""
-#: config/rs6000/rs6000.c:4030
+#: config/powerpcspe/powerpcspe.c:4120 config/rs6000/rs6000.c:4038
#, gcc-internal-format
msgid ""
"will not generate power8 instructions because assembler lacks power8 support"
msgstr ""
-#: config/rs6000/rs6000.c:4039
+#: config/powerpcspe/powerpcspe.c:4129 config/rs6000/rs6000.c:4047
#, gcc-internal-format
msgid ""
"will not generate power7 instructions because assembler lacks power7 support"
msgstr ""
-#: config/rs6000/rs6000.c:4048
+#: config/powerpcspe/powerpcspe.c:4138 config/rs6000/rs6000.c:4056
#, gcc-internal-format
msgid ""
"will not generate power6 instructions because assembler lacks power6 support"
msgstr ""
-#: config/rs6000/rs6000.c:4057
+#: config/powerpcspe/powerpcspe.c:4147 config/rs6000/rs6000.c:4065
#, gcc-internal-format
msgid ""
"will not generate power5 instructions because assembler lacks power5 support"
msgstr ""
-#: config/rs6000/rs6000.c:4145
+#: config/powerpcspe/powerpcspe.c:4235
#, gcc-internal-format
msgid "not configured for SPE ABI"
msgstr ""
-#: config/rs6000/rs6000.c:4150
+#: config/powerpcspe/powerpcspe.c:4240
#, gcc-internal-format
msgid "not configured for SPE instruction set"
msgstr ""
-#: config/rs6000/rs6000.c:4156
+#: config/powerpcspe/powerpcspe.c:4246
#, gcc-internal-format
msgid "target attribute or pragma changes SPE ABI"
msgstr ""
-#: config/rs6000/rs6000.c:4163
+#: config/powerpcspe/powerpcspe.c:4253 config/rs6000/rs6000.c:4135
#, gcc-internal-format
msgid "AltiVec not supported in this target"
msgstr ""
-#: config/rs6000/rs6000.c:4165 config/rs6000/rs6000.c:4170
+#: config/powerpcspe/powerpcspe.c:4255 config/powerpcspe/powerpcspe.c:4260
#, gcc-internal-format
msgid "SPE not supported in this target"
msgstr ""
-#: config/rs6000/rs6000.c:4198
+#: config/powerpcspe/powerpcspe.c:4288 config/rs6000/rs6000.c:4156
#, gcc-internal-format
msgid "-mmultiple is not supported on little endian systems"
msgstr ""
-#: config/rs6000/rs6000.c:4205
+#: config/powerpcspe/powerpcspe.c:4295 config/rs6000/rs6000.c:4163
#, gcc-internal-format
msgid "-mstring is not supported on little endian systems"
msgstr ""
#. Enforce that none of the ISA_3_0_MASKS_SERVER flags
#. were explicitly cleared.
-#: config/rs6000/rs6000.c:4301 config/rs6000/rs6000.c:4312
+#: config/powerpcspe/powerpcspe.c:4391 config/powerpcspe/powerpcspe.c:4402
+#: config/rs6000/rs6000.c:4261
#, gcc-internal-format
msgid "-mpower9-minmax incompatible with explicitly disabled options"
msgstr ""
-#: config/rs6000/rs6000.c:4304
+#: config/powerpcspe/powerpcspe.c:4394
#, gcc-internal-format
msgid ""
"Power9 target option is incompatible with -mcpu=<xxx> for <xxx> less than "
"power9"
msgstr ""
-#: config/rs6000/rs6000.c:4336
+#: config/powerpcspe/powerpcspe.c:4426 config/rs6000/rs6000.c:4285
#, gcc-internal-format
msgid "-mcrypto requires -maltivec"
msgstr ""
-#: config/rs6000/rs6000.c:4343
+#: config/powerpcspe/powerpcspe.c:4433 config/rs6000/rs6000.c:4292
#, gcc-internal-format
msgid "-mdirect-move requires -mvsx"
msgstr ""
-#: config/rs6000/rs6000.c:4350
+#: config/powerpcspe/powerpcspe.c:4440 config/rs6000/rs6000.c:4299
#, gcc-internal-format
msgid "-mpower8-vector requires -maltivec"
msgstr ""
-#: config/rs6000/rs6000.c:4358
+#: config/powerpcspe/powerpcspe.c:4448 config/rs6000/rs6000.c:4307
#, gcc-internal-format
msgid "-mpower8-vector requires -mvsx"
msgstr ""
-#: config/rs6000/rs6000.c:4377
+#: config/powerpcspe/powerpcspe.c:4467 config/rs6000/rs6000.c:4326
#, gcc-internal-format
msgid "-mvsx-timode requires -mvsx"
msgstr ""
-#: config/rs6000/rs6000.c:4384
+#: config/powerpcspe/powerpcspe.c:4474 config/rs6000/rs6000.c:4333
#, gcc-internal-format
msgid "-mhard-dfp requires -mhard-float"
msgstr ""
-#: config/rs6000/rs6000.c:4437
+#: config/powerpcspe/powerpcspe.c:4527
#, gcc-internal-format
msgid "-mupper-regs-df requires -mvsx"
msgstr ""
-#: config/rs6000/rs6000.c:4444
+#: config/powerpcspe/powerpcspe.c:4534
#, gcc-internal-format
msgid "-mupper-regs-di requires -mvsx"
msgstr ""
-#: config/rs6000/rs6000.c:4451
+#: config/powerpcspe/powerpcspe.c:4541
#, gcc-internal-format
msgid "-mupper-regs-sf requires -mpower8-vector"
msgstr ""
-#: config/rs6000/rs6000.c:4500
+#: config/powerpcspe/powerpcspe.c:4590 config/rs6000/rs6000.c:4382
#, gcc-internal-format
msgid "-mpower8-fusion-sign requires -mpower8-fusion"
msgstr ""
-#: config/rs6000/rs6000.c:4503
+#: config/powerpcspe/powerpcspe.c:4593 config/rs6000/rs6000.c:4385
#, gcc-internal-format
msgid "-mtoc-fusion requires -mpower8-fusion"
msgstr ""
@@ -30999,535 +31349,537 @@ msgstr ""
#. error messages. However, if users have managed to select
#. power9-fusion without selecting power8-fusion, they
#. already know about undocumented flags.
-#: config/rs6000/rs6000.c:4520
+#: config/powerpcspe/powerpcspe.c:4610 config/rs6000/rs6000.c:4402
#, gcc-internal-format
msgid "-mpower9-fusion requires -mpower8-fusion"
msgstr ""
-#: config/rs6000/rs6000.c:4573
+#: config/powerpcspe/powerpcspe.c:4663 config/rs6000/rs6000.c:4455
#, gcc-internal-format
msgid "-mpower9-vector requires -mpower8-vector"
msgstr ""
-#: config/rs6000/rs6000.c:4618
+#: config/powerpcspe/powerpcspe.c:4708 config/rs6000/rs6000.c:4500
#, gcc-internal-format
msgid "-mpower9-dform requires -mpower9-vector"
msgstr ""
-#: config/rs6000/rs6000.c:4647
+#: config/powerpcspe/powerpcspe.c:4737 config/rs6000/rs6000.c:4529
#, gcc-internal-format
msgid ""
"-mpower9-dform, -mpower9-dform-vector, -mpower9-dform-scalar require -"
"mdirect-move"
msgstr ""
-#: config/rs6000/rs6000.c:4670
+#: config/powerpcspe/powerpcspe.c:4760
#, gcc-internal-format
msgid "-mpower9-dform requires -mupper-regs-df"
msgstr ""
-#: config/rs6000/rs6000.c:4677
+#: config/powerpcspe/powerpcspe.c:4767
#, gcc-internal-format
msgid "-mpower9-dform requires -mupper-regs-sf"
msgstr ""
-#: config/rs6000/rs6000.c:4697
+#: config/powerpcspe/powerpcspe.c:4787
#, gcc-internal-format
msgid "-mvsx-timode might need -mlra"
msgstr ""
-#: config/rs6000/rs6000.c:4722
+#: config/powerpcspe/powerpcspe.c:4812 config/rs6000/rs6000.c:4561
#, gcc-internal-format
msgid "-mallow-movmisalign requires -mvsx"
msgstr ""
-#: config/rs6000/rs6000.c:4737
+#: config/powerpcspe/powerpcspe.c:4827 config/rs6000/rs6000.c:4576
#, gcc-internal-format
msgid "-mefficient-unaligned-vsx requires -mvsx"
msgstr ""
-#: config/rs6000/rs6000.c:4745
+#: config/powerpcspe/powerpcspe.c:4835 config/rs6000/rs6000.c:4584
#, gcc-internal-format
msgid "-mefficient-unaligned-vsx requires -mallow-movmisalign"
msgstr ""
-#: config/rs6000/rs6000.c:4759
+#: config/powerpcspe/powerpcspe.c:4849
#, gcc-internal-format
msgid ""
"-mvsx-small-integer requires -mpower8-vector, -mupper-regs-di, and -mdirect-"
"move"
msgstr ""
-#: config/rs6000/rs6000.c:4771
+#: config/powerpcspe/powerpcspe.c:4861 config/rs6000/rs6000.c:4596
#, gcc-internal-format
msgid "target attribute or pragma changes long double size"
msgstr ""
-#: config/rs6000/rs6000.c:4797
+#: config/powerpcspe/powerpcspe.c:4887 config/rs6000/rs6000.c:4622
#, gcc-internal-format
msgid "-mfloat128 requires VSX support"
msgstr ""
-#: config/rs6000/rs6000.c:4807
+#: config/powerpcspe/powerpcspe.c:4897 config/rs6000/rs6000.c:4632
#, gcc-internal-format
msgid "-mfloat128-type requires VSX support"
msgstr ""
-#: config/rs6000/rs6000.c:4823
+#: config/powerpcspe/powerpcspe.c:4913 config/rs6000/rs6000.c:4648
#, gcc-internal-format
msgid "-mfloat128 requires -mfloat128-type"
msgstr ""
-#: config/rs6000/rs6000.c:4836
+#: config/powerpcspe/powerpcspe.c:4926 config/rs6000/rs6000.c:4661
#, gcc-internal-format
msgid "-mfloat128-hardware requires -mfloat128-type"
msgstr ""
-#: config/rs6000/rs6000.c:4859
+#: config/powerpcspe/powerpcspe.c:4949 config/rs6000/rs6000.c:4684
#, gcc-internal-format
msgid "-mfloat128-hardware requires full ISA 3.0 support"
msgstr ""
-#: config/rs6000/rs6000.c:4867
+#: config/powerpcspe/powerpcspe.c:4957 config/rs6000/rs6000.c:4692
#, gcc-internal-format
msgid "-mfloat128-hardware requires -m64"
msgstr ""
-#: config/rs6000/rs6000.c:4931
+#: config/powerpcspe/powerpcspe.c:5021 config/rs6000/rs6000.c:4756
#, gcc-internal-format, gfc-internal-format
msgid "unknown vectorization library ABI type (%s) for -mveclibabi= switch"
msgstr ""
-#: config/rs6000/rs6000.c:4952 config/rs6000/rs6000.c:4967
+#: config/powerpcspe/powerpcspe.c:5042 config/powerpcspe/powerpcspe.c:5057
+#: config/rs6000/rs6000.c:4777 config/rs6000/rs6000.c:4792
#, gcc-internal-format
msgid "target attribute or pragma changes AltiVec ABI"
msgstr ""
-#: config/rs6000/rs6000.c:4980
+#: config/powerpcspe/powerpcspe.c:5070 config/rs6000/rs6000.c:4805
#, gcc-internal-format
msgid "target attribute or pragma changes darwin64 ABI"
msgstr ""
-#: config/rs6000/rs6000.c:5046
+#: config/powerpcspe/powerpcspe.c:5136 config/rs6000/rs6000.c:4871
#, gcc-internal-format
msgid "target attribute or pragma changes single precision floating point"
msgstr ""
-#: config/rs6000/rs6000.c:5049
+#: config/powerpcspe/powerpcspe.c:5139 config/rs6000/rs6000.c:4874
#, gcc-internal-format
msgid "target attribute or pragma changes double precision floating point"
msgstr ""
-#: config/rs6000/rs6000.c:5151
+#: config/powerpcspe/powerpcspe.c:5241 config/rs6000/rs6000.c:4973
#, gcc-internal-format
msgid "%qs is not a valid number in -mstack-protector-guard-offset="
msgstr ""
-#: config/rs6000/rs6000.c:5156
+#: config/powerpcspe/powerpcspe.c:5246 config/rs6000/rs6000.c:4978
#, gcc-internal-format
msgid "%qs is not a valid offset in -mstack-protector-guard-offset="
msgstr ""
-#: config/rs6000/rs6000.c:5168
+#: config/powerpcspe/powerpcspe.c:5258 config/rs6000/rs6000.c:4990
#, gcc-internal-format
msgid "%qs is not a valid base register in -mstack-protector-guard-reg="
msgstr ""
-#: config/rs6000/rs6000.c:5176
+#: config/powerpcspe/powerpcspe.c:5266 config/rs6000/rs6000.c:4998
#, gcc-internal-format
msgid "-mstack-protector-guard=tls needs a valid base register"
msgstr ""
-#: config/rs6000/rs6000.c:8171
+#: config/powerpcspe/powerpcspe.c:8300 config/rs6000/rs6000.c:7953
#, 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:11584
+#: config/powerpcspe/powerpcspe.c:11713 config/rs6000/rs6000.c:11229
#, gcc-internal-format
msgid ""
"GCC vector returned by reference: non-standard ABI extension with no "
"compatibility guarantee"
msgstr ""
-#: config/rs6000/rs6000.c:11746
+#: config/powerpcspe/powerpcspe.c:11875 config/rs6000/rs6000.c:11391
#, 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:11946
+#: config/powerpcspe/powerpcspe.c:12075 config/rs6000/rs6000.c:11589
#, 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:12215
+#: config/powerpcspe/powerpcspe.c:12344 config/rs6000/rs6000.c:11858
#, 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:13067
+#: config/powerpcspe/powerpcspe.c:13196 config/rs6000/rs6000.c:12601
#, gcc-internal-format
msgid "the ABI of passing homogeneous float aggregates has changed in GCC 5"
msgstr ""
-#: config/rs6000/rs6000.c:13242
+#: config/powerpcspe/powerpcspe.c:13371 config/rs6000/rs6000.c:12776
#, gcc-internal-format
msgid ""
"GCC vector passed by reference: non-standard ABI extension with no "
"compatibility guarantee"
msgstr ""
-#: config/rs6000/rs6000.c:14036
+#: config/powerpcspe/powerpcspe.c:14165 config/rs6000/rs6000.c:13567
#, gcc-internal-format, gfc-internal-format
msgid "internal error: builtin function %s already processed"
msgstr ""
-#: config/rs6000/rs6000.c:14540
+#: config/powerpcspe/powerpcspe.c:14669 config/rs6000/rs6000.c:13965
#, gcc-internal-format
msgid "argument 1 must be an 8-bit field value"
msgstr ""
-#: config/rs6000/rs6000.c:14586
+#: config/powerpcspe/powerpcspe.c:14715 config/rs6000/rs6000.c:14009
#, gcc-internal-format
msgid "argument 1 must be a 5-bit signed literal"
msgstr ""
-#: config/rs6000/rs6000.c:14689 config/rs6000/rs6000.c:16557
+#: config/powerpcspe/powerpcspe.c:14818 config/powerpcspe/powerpcspe.c:16686
+#: config/rs6000/rs6000.c:14095
#, gcc-internal-format
msgid "argument 2 must be a 5-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:14707
+#: config/powerpcspe/powerpcspe.c:14836 config/rs6000/rs6000.c:14113
#, gcc-internal-format
msgid "argument 1 must be a 6-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:14721
+#: config/powerpcspe/powerpcspe.c:14850 config/rs6000/rs6000.c:14128
#, gcc-internal-format
msgid "argument 2 must be a 7-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:14760
+#: config/powerpcspe/powerpcspe.c:14889 config/rs6000/rs6000.c:14167
#, gcc-internal-format
msgid "argument 1 of __builtin_altivec_predicate must be a constant"
msgstr ""
-#: config/rs6000/rs6000.c:14817
+#: config/powerpcspe/powerpcspe.c:14946 config/rs6000/rs6000.c:14224
#, gcc-internal-format
msgid "argument 1 of __builtin_altivec_predicate is out of range"
msgstr ""
-#: config/rs6000/rs6000.c:15305
+#: config/powerpcspe/powerpcspe.c:15434 config/rs6000/rs6000.c:14731
#, gcc-internal-format, gfc-internal-format
msgid "builtin %s is only valid in 64-bit mode"
msgstr ""
-#: config/rs6000/rs6000.c:15354
+#: config/powerpcspe/powerpcspe.c:15483 config/rs6000/rs6000.c:14780
#, gcc-internal-format, gfc-internal-format
msgid "argument %d must be an unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:15356
+#: config/powerpcspe/powerpcspe.c:15485 config/rs6000/rs6000.c:14782
#, gcc-internal-format, gfc-internal-format
msgid "argument %d is an unsigned literal that is out of range"
msgstr ""
-#: config/rs6000/rs6000.c:15494
+#: config/powerpcspe/powerpcspe.c:15623 config/rs6000/rs6000.c:14928
#, gcc-internal-format, gfc-internal-format
msgid "builtin %s only accepts a string argument"
msgstr ""
#. Invalid CPU argument.
-#: config/rs6000/rs6000.c:15513
+#: config/powerpcspe/powerpcspe.c:15642 config/rs6000/rs6000.c:14947
#, gcc-internal-format, gfc-internal-format
msgid "cpu %s is an invalid argument to builtin %s"
msgstr ""
#. Invalid HWCAP argument.
-#: config/rs6000/rs6000.c:15541
+#: config/powerpcspe/powerpcspe.c:15670 config/rs6000/rs6000.c:14975
#, gcc-internal-format, gfc-internal-format
msgid "hwcap %s is an invalid argument to builtin %s"
msgstr ""
-#: config/rs6000/rs6000.c:15615
+#: config/powerpcspe/powerpcspe.c:15744 config/rs6000/rs6000.c:15054
#, gcc-internal-format
msgid "argument 3 must be a 4-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:15640
+#: config/powerpcspe/powerpcspe.c:15769 config/rs6000/rs6000.c:15079
#, gcc-internal-format
msgid "argument 3 must be a 2-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:15660
+#: config/powerpcspe/powerpcspe.c:15789 config/rs6000/rs6000.c:15099
#, gcc-internal-format
msgid "argument 3 must be a 1-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:15672
+#: config/powerpcspe/powerpcspe.c:15801 config/rs6000/rs6000.c:15111
#, gcc-internal-format
msgid "argument 1 must be 0 or 2"
msgstr ""
-#: config/rs6000/rs6000.c:15684
+#: config/powerpcspe/powerpcspe.c:15813 config/rs6000/rs6000.c:15123
#, gcc-internal-format
msgid "argument 1 must be a 1-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:15698
+#: config/powerpcspe/powerpcspe.c:15827 config/rs6000/rs6000.c:15137
#, gcc-internal-format
msgid "argument 2 must be a 6-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:15710
+#: config/powerpcspe/powerpcspe.c:15839 config/rs6000/rs6000.c:15149
#, gcc-internal-format
msgid "argument 2 must be 0 or 1"
msgstr ""
-#: config/rs6000/rs6000.c:15717
+#: config/powerpcspe/powerpcspe.c:15846 config/rs6000/rs6000.c:15156
#, gcc-internal-format
msgid "argument 3 must be in the range 0..15"
msgstr ""
-#: config/rs6000/rs6000.c:15906
+#: config/powerpcspe/powerpcspe.c:16035 config/rs6000/rs6000.c:15345
#, gcc-internal-format
msgid "argument to %qs must be a 2-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:16063
+#: config/powerpcspe/powerpcspe.c:16192 config/rs6000/rs6000.c:15502
#, gcc-internal-format
msgid "unresolved overload for Altivec builtin %qF"
msgstr ""
-#: config/rs6000/rs6000.c:16237
+#: config/powerpcspe/powerpcspe.c:16366 config/rs6000/rs6000.c:15676
#, gcc-internal-format
msgid "argument to dss must be a 2-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:16285
+#: config/powerpcspe/powerpcspe.c:16414 config/rs6000/rs6000.c:15724
#, gcc-internal-format
msgid "second argument to vec_vextract4b must be 0..12"
msgstr ""
-#: config/rs6000/rs6000.c:16302
+#: config/powerpcspe/powerpcspe.c:16431 config/rs6000/rs6000.c:15741
#, gcc-internal-format
msgid "third argument to vec_vinsert4b must be 0..12"
msgstr ""
-#: config/rs6000/rs6000.c:16677
+#: config/powerpcspe/powerpcspe.c:16806 config/rs6000/rs6000.c:15995
#, gcc-internal-format
msgid "argument 1 of __builtin_paired_predicate must be a constant"
msgstr ""
-#: config/rs6000/rs6000.c:16724
+#: config/powerpcspe/powerpcspe.c:16853 config/rs6000/rs6000.c:16042
#, gcc-internal-format
msgid "argument 1 of __builtin_paired_predicate is out of range"
msgstr ""
-#: config/rs6000/rs6000.c:16749
+#: config/powerpcspe/powerpcspe.c:16878
#, gcc-internal-format
msgid "argument 1 of __builtin_spe_predicate must be a constant"
msgstr ""
-#: config/rs6000/rs6000.c:16821
+#: config/powerpcspe/powerpcspe.c:16950
#, gcc-internal-format
msgid "argument 1 of __builtin_spe_predicate is out of range"
msgstr ""
-#: config/rs6000/rs6000.c:16903
+#: config/powerpcspe/powerpcspe.c:17032
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s is only valid for the cell processor"
msgstr ""
-#: config/rs6000/rs6000.c:16905
+#: config/powerpcspe/powerpcspe.c:17034
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mvsx option"
msgstr ""
-#: config/rs6000/rs6000.c:16907
+#: config/powerpcspe/powerpcspe.c:17036
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mhtm option"
msgstr ""
-#: config/rs6000/rs6000.c:16909
+#: config/powerpcspe/powerpcspe.c:17038
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -maltivec option"
msgstr ""
-#: config/rs6000/rs6000.c:16911
+#: config/powerpcspe/powerpcspe.c:17040
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mpaired option"
msgstr ""
-#: config/rs6000/rs6000.c:16913
+#: config/powerpcspe/powerpcspe.c:17042
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mspe option"
msgstr ""
-#: config/rs6000/rs6000.c:16916
+#: config/powerpcspe/powerpcspe.c:17045
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mhard-dfp and -mpower8-vector options"
msgstr ""
-#: config/rs6000/rs6000.c:16919
+#: config/powerpcspe/powerpcspe.c:17048
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mhard-dfp option"
msgstr ""
-#: config/rs6000/rs6000.c:16921
+#: config/powerpcspe/powerpcspe.c:17050
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mpower8-vector option"
msgstr ""
-#: config/rs6000/rs6000.c:16924 config/rs6000/rs6000.c:16930
+#: config/powerpcspe/powerpcspe.c:17053 config/powerpcspe/powerpcspe.c:17059
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mcpu=power9 and -m64 options"
msgstr ""
-#: config/rs6000/rs6000.c:16927 config/rs6000/rs6000.c:16933
+#: config/powerpcspe/powerpcspe.c:17056 config/powerpcspe/powerpcspe.c:17062
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mcpu=power9 option"
msgstr ""
-#: config/rs6000/rs6000.c:16936
+#: config/powerpcspe/powerpcspe.c:17065
#, gcc-internal-format, gfc-internal-format
msgid ""
"Builtin function %s requires the -mhard-float and -mlong-double-128 options"
msgstr ""
-#: config/rs6000/rs6000.c:16939
+#: config/powerpcspe/powerpcspe.c:17068
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mhard-float option"
msgstr ""
-#: config/rs6000/rs6000.c:16941
+#: config/powerpcspe/powerpcspe.c:17070
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mfloat128 option"
msgstr ""
-#: config/rs6000/rs6000.c:16943
+#: config/powerpcspe/powerpcspe.c:17072
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s is not supported with the current options"
msgstr ""
-#: config/rs6000/rs6000.c:18786
+#: config/powerpcspe/powerpcspe.c:19065 config/rs6000/rs6000.c:18062
#, gcc-internal-format, gfc-internal-format
msgid "internal error: builtin function %s had an unexpected return type %s"
msgstr ""
-#: config/rs6000/rs6000.c:18803
+#: config/powerpcspe/powerpcspe.c:19082 config/rs6000/rs6000.c:18079
#, gcc-internal-format, gfc-internal-format
msgid ""
"internal error: builtin function %s, argument %d had unexpected argument "
"type %s"
msgstr ""
-#: config/rs6000/rs6000.c:28088
+#: config/powerpcspe/powerpcspe.c:28367 config/rs6000/rs6000.c:25391
#, gcc-internal-format
msgid "stack frame too large"
msgstr ""
-#: config/rs6000/rs6000.c:31766
+#: config/powerpcspe/powerpcspe.c:32144 config/rs6000/rs6000.c:28977
#, gcc-internal-format
msgid "-fsplit-stack uses register r29"
msgstr ""
-#: config/rs6000/rs6000.c:31774
+#: config/powerpcspe/powerpcspe.c:32152 config/rs6000/rs6000.c:28985
#, gcc-internal-format
msgid "Stack frame larger than 2G is not supported for -fsplit-stack"
msgstr ""
-#: config/rs6000/rs6000.c:32762
+#: config/powerpcspe/powerpcspe.c:33139 config/rs6000/rs6000.c:29972
#, gcc-internal-format
msgid "no profiling of 64-bit code for this ABI"
msgstr ""
-#: config/rs6000/rs6000.c:35065
+#: config/powerpcspe/powerpcspe.c:35442
#, 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:35147
+#: config/powerpcspe/powerpcspe.c:35524 config/rs6000/rs6000.c:32357
#, gcc-internal-format
msgid "use of %<long double%> in AltiVec types is invalid"
msgstr ""
-#: config/rs6000/rs6000.c:35149
+#: config/powerpcspe/powerpcspe.c:35526 config/rs6000/rs6000.c:32359
#, gcc-internal-format
msgid "use of boolean types in AltiVec types is invalid"
msgstr ""
-#: config/rs6000/rs6000.c:35151
+#: config/powerpcspe/powerpcspe.c:35528 config/rs6000/rs6000.c:32361
#, gcc-internal-format
msgid "use of %<complex%> in AltiVec types is invalid"
msgstr ""
-#: config/rs6000/rs6000.c:35153
+#: config/powerpcspe/powerpcspe.c:35530 config/rs6000/rs6000.c:32363
#, gcc-internal-format
msgid "use of decimal floating point types in AltiVec types is invalid"
msgstr ""
-#: config/rs6000/rs6000.c:35159
+#: config/powerpcspe/powerpcspe.c:35536 config/rs6000/rs6000.c:32369
#, gcc-internal-format
msgid ""
"use of %<long%> in AltiVec types is invalid for 64-bit code without -mvsx"
msgstr ""
-#: config/rs6000/rs6000.c:35162
+#: config/powerpcspe/powerpcspe.c:35539 config/rs6000/rs6000.c:32372
#, gcc-internal-format
msgid "use of %<long%> in AltiVec types is deprecated; use %<int%>"
msgstr ""
-#: config/rs6000/rs6000.c:35167
+#: config/powerpcspe/powerpcspe.c:35544 config/rs6000/rs6000.c:32377
#, gcc-internal-format
msgid "use of %<long long%> in AltiVec types is invalid without -mvsx"
msgstr ""
-#: config/rs6000/rs6000.c:35170
+#: config/powerpcspe/powerpcspe.c:35547 config/rs6000/rs6000.c:32380
#, gcc-internal-format
msgid "use of %<double%> in AltiVec types is invalid without -mvsx"
msgstr ""
-#: config/rs6000/rs6000.c:38943
+#: config/powerpcspe/powerpcspe.c:39320
#, gcc-internal-format, gfc-internal-format
msgid "emitting microcode insn %s\t[%s] #%d"
msgstr ""
-#: config/rs6000/rs6000.c:38947
+#: config/powerpcspe/powerpcspe.c:39324
#, gcc-internal-format, gfc-internal-format
msgid "emitting conditional microcode insn %s\t[%s] #%d"
msgstr ""
-#: config/rs6000/rs6000.c:39255
+#: config/powerpcspe/powerpcspe.c:39632 config/rs6000/rs6000.c:36329
#, gcc-internal-format, gfc-internal-format
msgid "invalid cpu \"%s\" for %s\"%s\"%s"
msgstr ""
-#: config/rs6000/rs6000.c:39258
+#: config/powerpcspe/powerpcspe.c:39635 config/rs6000/rs6000.c:36332
#, gcc-internal-format, gfc-internal-format
msgid "%s\"%s\"%s is not allowed"
msgstr ""
-#: config/rs6000/rs6000.c:39260
+#: config/powerpcspe/powerpcspe.c:39637 config/rs6000/rs6000.c:36334
#, gcc-internal-format, gfc-internal-format
msgid "%s\"%s\"%s is invalid"
msgstr ""
-#: config/rs6000/rs6000.c:39777
+#: config/powerpcspe/powerpcspe.c:40154 config/rs6000/rs6000.c:36859
#, gcc-internal-format, gfc-internal-format
msgid "-mno-%s turns off -m%s"
msgstr ""
-#: config/rs6000/rs6000.c:39794
+#: config/powerpcspe/powerpcspe.c:40171 config/rs6000/rs6000.c:36876
#, gcc-internal-format
msgid "-mno-power9-vector turns off -mpower9-dform"
msgstr ""
@@ -31664,18 +32016,159 @@ msgstr ""
#. <http://www.gnu.org/licenses/>.
#. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to
#. get control in TARGET_OPTION_OVERRIDE.
+#. Definitions of target machine for GNU compiler,
+#. for IBM RS/6000 POWER running AIX version 4.3.
+#. Copyright (C) 1998-2017 Free Software Foundation, Inc.
+#. Contributed by David Edelsohn (edelsohn@gnu.org).
+#.
+#. This file is part of GCC.
+#.
+#. GCC is free software; you can redistribute it and/or modify it
+#. under the terms of the GNU General Public License as published
+#. by the Free Software Foundation; either version 3, or (at your
+#. option) any later version.
+#.
+#. GCC is distributed in the hope that it will be useful, but WITHOUT
+#. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+#. or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+#. License for more details.
+#.
+#. You should have received a copy of the GNU General Public License
+#. along with GCC; see the file COPYING3. If not see
+#. <http://www.gnu.org/licenses/>.
+#. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to
+#. get control in TARGET_OPTION_OVERRIDE.
+#. Definitions of target machine for GNU compiler,
+#. for IBM RS/6000 POWER running AIX V5.
+#. Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#. Contributed by David Edelsohn (edelsohn@gnu.org).
+#.
+#. This file is part of GCC.
+#.
+#. GCC is free software; you can redistribute it and/or modify it
+#. under the terms of the GNU General Public License as published
+#. by the Free Software Foundation; either version 3, or (at your
+#. option) any later version.
+#.
+#. GCC is distributed in the hope that it will be useful, but WITHOUT
+#. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+#. or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+#. License for more details.
+#.
+#. You should have received a copy of the GNU General Public License
+#. along with GCC; see the file COPYING3. If not see
+#. <http://www.gnu.org/licenses/>.
+#. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to
+#. get control in TARGET_OPTION_OVERRIDE.
+#. Definitions of target machine for GNU compiler,
+#. for IBM RS/6000 POWER running AIX V5.2.
+#. Copyright (C) 2002-2017 Free Software Foundation, Inc.
+#. Contributed by David Edelsohn (edelsohn@gnu.org).
+#.
+#. This file is part of GCC.
+#.
+#. GCC is free software; you can redistribute it and/or modify it
+#. under the terms of the GNU General Public License as published
+#. by the Free Software Foundation; either version 3, or (at your
+#. option) any later version.
+#.
+#. GCC is distributed in the hope that it will be useful, but WITHOUT
+#. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+#. or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+#. License for more details.
+#.
+#. You should have received a copy of the GNU General Public License
+#. along with GCC; see the file COPYING3. If not see
+#. <http://www.gnu.org/licenses/>.
+#. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to
+#. get control in TARGET_OPTION_OVERRIDE.
+#. Definitions of target machine for GNU compiler,
+#. for IBM RS/6000 POWER running AIX V5.3.
+#. Copyright (C) 2002-2017 Free Software Foundation, Inc.
+#. Contributed by David Edelsohn (edelsohn@gnu.org).
+#.
+#. This file is part of GCC.
+#.
+#. GCC is free software; you can redistribute it and/or modify it
+#. under the terms of the GNU General Public License as published
+#. by the Free Software Foundation; either version 3, or (at your
+#. option) any later version.
+#.
+#. GCC is distributed in the hope that it will be useful, but WITHOUT
+#. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+#. or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+#. License for more details.
+#.
+#. You should have received a copy of the GNU General Public License
+#. along with GCC; see the file COPYING3. If not see
+#. <http://www.gnu.org/licenses/>.
+#. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to
+#. get control in TARGET_OPTION_OVERRIDE.
+#. Definitions of target machine for GNU compiler,
+#. for IBM RS/6000 POWER running AIX V6.1.
+#. Copyright (C) 2002-2017 Free Software Foundation, Inc.
+#. Contributed by David Edelsohn (edelsohn@gnu.org).
+#.
+#. This file is part of GCC.
+#.
+#. GCC is free software; you can redistribute it and/or modify it
+#. under the terms of the GNU General Public License as published
+#. by the Free Software Foundation; either version 3, or (at your
+#. option) any later version.
+#.
+#. GCC is distributed in the hope that it will be useful, but WITHOUT
+#. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+#. or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+#. License for more details.
+#.
+#. You should have received a copy of the GNU General Public License
+#. along with GCC; see the file COPYING3. If not see
+#. <http://www.gnu.org/licenses/>.
+#. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to
+#. get control in TARGET_OPTION_OVERRIDE.
+#. Definitions of target machine for GNU compiler,
+#. for IBM RS/6000 POWER running AIX V7.1.
+#. Copyright (C) 2002-2017 Free Software Foundation, Inc.
+#. Contributed by David Edelsohn (edelsohn@gnu.org).
+#.
+#. This file is part of GCC.
+#.
+#. GCC is free software; you can redistribute it and/or modify it
+#. under the terms of the GNU General Public License as published
+#. by the Free Software Foundation; either version 3, or (at your
+#. option) any later version.
+#.
+#. GCC is distributed in the hope that it will be useful, but WITHOUT
+#. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+#. or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+#. License for more details.
+#.
+#. You should have received a copy of the GNU General Public License
+#. along with GCC; see the file COPYING3. If not see
+#. <http://www.gnu.org/licenses/>.
+#. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to
+#. get control in TARGET_OPTION_OVERRIDE.
+#: config/powerpcspe/aix43.h:30 config/powerpcspe/aix51.h:30
+#: config/powerpcspe/aix52.h:30 config/powerpcspe/aix53.h:30
+#: config/powerpcspe/aix61.h:30 config/powerpcspe/aix71.h:30
#: config/rs6000/aix43.h:30 config/rs6000/aix51.h:30 config/rs6000/aix52.h:30
#: config/rs6000/aix53.h:30 config/rs6000/aix61.h:30 config/rs6000/aix71.h:30
#, gcc-internal-format
msgid "-maix64 requires PowerPC64 architecture remain enabled"
msgstr ""
-#: config/rs6000/aix43.h:36 config/rs6000/aix52.h:36 config/rs6000/aix53.h:36
-#: config/rs6000/aix61.h:36 config/rs6000/aix71.h:36
+#: config/powerpcspe/aix43.h:36 config/powerpcspe/aix52.h:36
+#: config/powerpcspe/aix53.h:36 config/powerpcspe/aix61.h:36
+#: config/powerpcspe/aix71.h:36 config/rs6000/aix43.h:36
+#: config/rs6000/aix52.h:36 config/rs6000/aix53.h:36 config/rs6000/aix61.h:36
+#: config/rs6000/aix71.h:36
#, gcc-internal-format
msgid "soft-float and long-double-128 are incompatible"
msgstr ""
+#: config/powerpcspe/aix43.h:40 config/powerpcspe/aix51.h:34
+#: config/powerpcspe/aix52.h:40 config/powerpcspe/aix53.h:40
+#: config/powerpcspe/aix61.h:40 config/powerpcspe/aix71.h:40
#: config/rs6000/aix43.h:40 config/rs6000/aix51.h:34 config/rs6000/aix52.h:40
#: config/rs6000/aix53.h:40 config/rs6000/aix61.h:40 config/rs6000/aix71.h:40
#, gcc-internal-format
@@ -31683,94 +32176,282 @@ msgid ""
"-maix64 required: 64-bit computation with 32-bit addressing not yet supported"
msgstr ""
+#: config/powerpcspe/aix61.h:47 config/powerpcspe/aix71.h:47
+#: config/powerpcspe/freebsd64.h:120 config/powerpcspe/linux64.h:142
#: config/rs6000/aix61.h:47 config/rs6000/aix71.h:47
#: config/rs6000/freebsd64.h:120 config/rs6000/linux64.h:142
#, gcc-internal-format
msgid "-mcmodel incompatible with other toc options"
msgstr ""
-#: config/rs6000/e500.h:37
+#: config/powerpcspe/e500.h:37
#, gcc-internal-format
msgid "AltiVec and SPE instructions cannot coexist"
msgstr ""
-#: config/rs6000/e500.h:39
+#: config/powerpcspe/e500.h:39
#, gcc-internal-format
msgid "VSX and SPE instructions cannot coexist"
msgstr ""
-#: config/rs6000/e500.h:41
+#: config/powerpcspe/e500.h:41
#, gcc-internal-format
msgid "64-bit SPE not supported"
msgstr ""
-#: config/rs6000/e500.h:43
+#: config/powerpcspe/e500.h:43
#, gcc-internal-format
msgid "E500 and FPRs not supported"
msgstr ""
+#: config/powerpcspe/freebsd64.h:98 config/powerpcspe/linux64.h:115
#: config/rs6000/freebsd64.h:98 config/rs6000/linux64.h:115
#, gcc-internal-format
msgid "-mcall-aixdesc incompatible with -mabi=elfv2"
msgstr ""
+#: config/powerpcspe/freebsd64.h:113 config/powerpcspe/linux64.h:135
#: config/rs6000/freebsd64.h:113 config/rs6000/linux64.h:135
+#: config/rs6000/rtems.h:96
#, gcc-internal-format
msgid "-m64 requires a PowerPC64 cpu"
msgstr ""
#. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to
#. get control in TARGET_OPTION_OVERRIDE.
-#: config/rs6000/sysv4.h:111
+#: config/powerpcspe/sysv4.h:111 config/rs6000/sysv4.h:111
#, gcc-internal-format, gfc-internal-format
msgid "bad value for -mcall-%s"
msgstr ""
-#: config/rs6000/sysv4.h:127
+#: config/powerpcspe/sysv4.h:127 config/rs6000/sysv4.h:127
#, gcc-internal-format, gfc-internal-format
msgid "bad value for -msdata=%s"
msgstr ""
-#: config/rs6000/sysv4.h:144
+#: config/powerpcspe/sysv4.h:144 config/rs6000/sysv4.h:144
#, gcc-internal-format, gfc-internal-format
msgid "-mrelocatable and -msdata=%s are incompatible"
msgstr ""
-#: config/rs6000/sysv4.h:153
+#: config/powerpcspe/sysv4.h:153 config/rs6000/sysv4.h:153
#, gcc-internal-format, gfc-internal-format
msgid "-f%s and -msdata=%s are incompatible"
msgstr ""
-#: config/rs6000/sysv4.h:162
+#: config/powerpcspe/sysv4.h:162 config/rs6000/sysv4.h:162
#, gcc-internal-format, gfc-internal-format
msgid "-msdata=%s and -mcall-%s are incompatible"
msgstr ""
-#: config/rs6000/sysv4.h:171
+#: config/powerpcspe/sysv4.h:171 config/rs6000/sysv4.h:171
#, gcc-internal-format
msgid "-mrelocatable and -mno-minimal-toc are incompatible"
msgstr ""
-#: config/rs6000/sysv4.h:177
+#: config/powerpcspe/sysv4.h:177 config/rs6000/sysv4.h:177
#, gcc-internal-format, gfc-internal-format
msgid "-mrelocatable and -mcall-%s are incompatible"
msgstr ""
-#: config/rs6000/sysv4.h:184
+#: config/powerpcspe/sysv4.h:184 config/rs6000/sysv4.h:184
#, gcc-internal-format, gfc-internal-format
msgid "-fPIC and -mcall-%s are incompatible"
msgstr ""
-#: config/rs6000/sysv4.h:190
+#: config/powerpcspe/sysv4.h:190 config/rs6000/sysv4.h:190
#, gcc-internal-format
msgid "-msecure-plt not supported by your assembler"
msgstr ""
-#: config/rs6000/sysv4.h:218
+#: config/powerpcspe/sysv4.h:218 config/rs6000/sysv4.h:218
#, gcc-internal-format, gfc-internal-format
msgid "-m%s not supported in this configuration"
msgstr ""
+#: config/riscv/riscv.c:285
+#, gcc-internal-format
+msgid "unknown cpu %qs for -mtune"
+msgstr ""
+
+#: config/riscv/riscv.c:3718
+#, gcc-internal-format
+msgid "-mdiv requires -march to subsume the %<M%> extension"
+msgstr ""
+
+#: config/riscv/riscv.c:3754
+#, gcc-internal-format
+msgid "requested ABI requires -march to subsume the %qc extension"
+msgstr ""
+
+#: config/riscv/riscv.c:3759
+#, gcc-internal-format, gfc-internal-format
+msgid "ABI requires -march=rv%d"
+msgstr ""
+
+#. Address spaces are currently only supported by C.
+#: config/rl78/rl78.c:367
+#, gcc-internal-format
+msgid "-mes0 can only be used with C"
+msgstr ""
+
+#: config/rl78/rl78.c:370
+#, gcc-internal-format
+msgid "mduc registers only saved for G13 target"
+msgstr ""
+
+#: config/rl78/rl78.c:385
+#, gcc-internal-format
+msgid "-mmul=g13 cannot be used with -mcpu=g10"
+msgstr ""
+
+#: config/rl78/rl78.c:386
+#, gcc-internal-format
+msgid "-mmul=g14 cannot be used with -mcpu=g10"
+msgstr ""
+
+#. The S2 core does not have mul/div instructions.
+#: config/rl78/rl78.c:397
+#, gcc-internal-format
+msgid "-mmul=g14 cannot be used with -mcpu=g13"
+msgstr ""
+
+#. The G14 core does not have the hardware multiply peripheral used by the
+#. G13 core, hence you cannot use G13 multipliy routines on G14 hardware.
+#: config/rl78/rl78.c:409
+#, gcc-internal-format
+msgid "-mmul=g13 cannot be used with -mcpu=g14"
+msgstr ""
+
+#: config/rl78/rl78.c:804
+#, gcc-internal-format
+msgid "naked attribute only applies to functions"
+msgstr ""
+
+#: config/rl78/rl78.c:828
+#, gcc-internal-format
+msgid "%qE attribute doesn't apply to functions"
+msgstr ""
+
+#. This is unpredictable, as we're truncating off usable address
+#. bits.
+#: config/rl78/rl78.c:1170
+#, gcc-internal-format
+msgid "converting far pointer to near pointer"
+msgstr ""
+
+#: config/rs6000/rs6000-c.c:5939 config/rs6000/rs6000-c.c:6022
+#, gcc-internal-format, gfc-internal-format
+msgid "%s only accepts 3 arguments"
+msgstr ""
+
+#: config/rs6000/rs6000-c.c:6742
+#, gcc-internal-format
+msgid "scalar_insert_exp only accepts 2 arguments"
+msgstr ""
+
+#: config/rs6000/rs6000-c.c:6805
+#, gcc-internal-format, gfc-internal-format
+msgid "builtin function %s not supported in this compiler configuration"
+msgstr ""
+
+#: config/rs6000/rs6000.c:4253
+#, gcc-internal-format
+msgid ""
+"power9 target option is incompatible with -mcpu=<xxx> for <xxx> less than "
+"power9"
+msgstr ""
+
+#: config/rs6000/rs6000.c:15001
+#, gcc-internal-format, gfc-internal-format
+msgid "%s needs GLIBC (2.23 and newer) that exports hardware capability bits"
+msgstr ""
+
+#: config/rs6000/rs6000.c:16063
+#, gcc-internal-format, gfc-internal-format
+msgid "builtin function %s is only valid for the cell processor"
+msgstr ""
+
+#: config/rs6000/rs6000.c:16065
+#, gcc-internal-format, gfc-internal-format
+msgid "builtin function %s requires the -mvsx option"
+msgstr ""
+
+#: config/rs6000/rs6000.c:16067
+#, gcc-internal-format, gfc-internal-format
+msgid "builtin function %s requires the -mhtm option"
+msgstr ""
+
+#: config/rs6000/rs6000.c:16069
+#, gcc-internal-format, gfc-internal-format
+msgid "builtin function %s requires the -maltivec option"
+msgstr ""
+
+#: config/rs6000/rs6000.c:16071
+#, gcc-internal-format, gfc-internal-format
+msgid "builtin function %s requires the -mpaired option"
+msgstr ""
+
+#: config/rs6000/rs6000.c:16074
+#, gcc-internal-format, gfc-internal-format
+msgid "builtin function %s requires the -mhard-dfp and -mpower8-vector options"
+msgstr ""
+
+#: config/rs6000/rs6000.c:16077
+#, gcc-internal-format, gfc-internal-format
+msgid "builtin function %s requires the -mhard-dfp option"
+msgstr ""
+
+#: config/rs6000/rs6000.c:16079
+#, gcc-internal-format, gfc-internal-format
+msgid "builtin function %s requires the -mpower8-vector option"
+msgstr ""
+
+#: config/rs6000/rs6000.c:16082 config/rs6000/rs6000.c:16088
+#, gcc-internal-format, gfc-internal-format
+msgid "builtin function %s requires the -mcpu=power9 and -m64 options"
+msgstr ""
+
+#: config/rs6000/rs6000.c:16085 config/rs6000/rs6000.c:16091
+#, gcc-internal-format, gfc-internal-format
+msgid "builtin function %s requires the -mcpu=power9 option"
+msgstr ""
+
+#: config/rs6000/rs6000.c:16094
+#, gcc-internal-format, gfc-internal-format
+msgid ""
+"builtin function %s requires the -mhard-float and -mlong-double-128 options"
+msgstr ""
+
+#: config/rs6000/rs6000.c:16097
+#, gcc-internal-format, gfc-internal-format
+msgid "builtin function %s requires the -mhard-float option"
+msgstr ""
+
+#: config/rs6000/rs6000.c:16099
+#, gcc-internal-format, gfc-internal-format
+msgid "builtin function %s requires the -mfloat128 option"
+msgstr ""
+
+#: config/rs6000/rs6000.c:16101
+#, gcc-internal-format, gfc-internal-format
+msgid "builtin function %s is not supported with the current options"
+msgstr ""
+
+#: config/rs6000/rs6000.c:32275
+#, 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:37026
+#, gcc-internal-format
+msgid ""
+"target_clones attribute needs GLIBC (2.23 and newer) that exports hardware "
+"capability bits"
+msgstr ""
+
#: config/rx/rx.c:644
#, gcc-internal-format, gfc-internal-format
msgid "unrecognized control register number: %d - using 'psw'"
@@ -31806,7 +32487,7 @@ msgstr ""
msgid "builtin vec_step can only be used on vector types."
msgstr ""
-#: config/s390/s390-c.c:685 config/s390/s390.c:913
+#: config/s390/s390-c.c:685 config/s390/s390.c:916
#, gcc-internal-format
msgid "constant value required for builtin %qF argument %d"
msgstr ""
@@ -31835,7 +32516,7 @@ msgstr ""
#: config/s390/s390-c.c:889
#, gcc-internal-format
-msgid "%qF requires -march=arch12 or higher"
+msgid "%qF requires z14 or higher"
msgstr ""
#: config/s390/s390-c.c:903
@@ -31855,7 +32536,7 @@ msgstr ""
#: config/s390/s390-c.c:966
#, gcc-internal-format
-msgid "%qs matching variant requires -march=arch12 or higher"
+msgid "%qs matching variant requires z14 or higher"
msgstr ""
#: config/s390/s390-c.c:972
@@ -31868,69 +32549,69 @@ msgstr ""
msgid "constant argument %d for builtin %qF is out of range for target type"
msgstr ""
-#: config/s390/s390.c:769
+#: config/s390/s390.c:772
#, gcc-internal-format
msgid "constant argument %d for builtin %qF is out of range (0.."
msgstr ""
-#: config/s390/s390.c:786
+#: config/s390/s390.c:789
#, gcc-internal-format
msgid "constant argument %d for builtin %qF is out of range ("
msgstr ""
-#: config/s390/s390.c:837
+#: config/s390/s390.c:840
#, gcc-internal-format
msgid ""
"builtin %qF is not supported without -mhtm (default with -march=zEC12 and "
"higher)."
msgstr ""
-#: config/s390/s390.c:843
+#: config/s390/s390.c:846
#, gcc-internal-format
msgid "builtin %qF requires -mvx (default with -march=z13 and higher)."
msgstr ""
-#: config/s390/s390.c:850
+#: config/s390/s390.c:853
#, gcc-internal-format
-msgid "Builtin %qF requires arch12 or higher."
+msgid "Builtin %qF requires z14 or higher."
msgstr ""
-#: config/s390/s390.c:869
+#: config/s390/s390.c:872
#, gcc-internal-format
msgid "unresolved overloaded builtin"
msgstr ""
-#: config/s390/s390.c:876 config/tilegx/tilegx.c:3545
-#: config/tilepro/tilepro.c:3109
+#: config/s390/s390.c:879 config/tilegx/tilegx.c:3544
+#: config/tilepro/tilepro.c:3108
#, gcc-internal-format
msgid "bad builtin icode"
msgstr ""
-#: config/s390/s390.c:1004
+#: config/s390/s390.c:1007
#, gcc-internal-format
msgid "invalid argument %d for builtin %qF"
msgstr ""
-#: config/s390/s390.c:1105
+#: config/s390/s390.c:1108
#, 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:9980
+#: config/s390/s390.c:10064
#, gcc-internal-format
msgid "total size of local variables exceeds architecture limit"
msgstr ""
-#: config/s390/s390.c:11094
+#: config/s390/s390.c:11171
#, 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:11110
+#: config/s390/s390.c:11187
#, gcc-internal-format
msgid ""
"frame size of function %qs is %wd bytes which is more than half the stack "
@@ -31938,105 +32619,110 @@ msgid ""
"function."
msgstr ""
-#: config/s390/s390.c:11138
+#: config/s390/s390.c:11215
#, gcc-internal-format
msgid "frame size of %qs is %wd bytes"
msgstr ""
-#: config/s390/s390.c:11142
+#: config/s390/s390.c:11219
#, gcc-internal-format
msgid "%qs uses dynamic stack allocation"
msgstr ""
-#: config/s390/s390.c:11520
+#: config/s390/s390.c:11598
#, gcc-internal-format
msgid "CPUs older than z900 are not supported for -fsplit-stack"
msgstr ""
-#: config/s390/s390.c:14666
+#: config/s390/s390.c:14745
#, 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:14678
+#: config/s390/s390.c:14757
#, 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:14690
+#: config/s390/s390.c:14769
#, gcc-internal-format, gfc-internal-format
msgid "z/Architecture mode not supported on %s"
msgstr ""
-#: config/s390/s390.c:14693
+#: config/s390/s390.c:14772
#, gcc-internal-format
msgid "64-bit ABI not supported in ESA/390 mode"
msgstr ""
-#: config/s390/s390.c:14710
+#: config/s390/s390.c:14789
#, gcc-internal-format, gfc-internal-format
msgid "hardware vector support not available on %s"
msgstr ""
-#: config/s390/s390.c:14713
+#: config/s390/s390.c:14792
#, gcc-internal-format
msgid "hardware vector support not available with -msoft-float"
msgstr ""
-#: config/s390/s390.c:14741
+#: config/s390/s390.c:14820
#, gcc-internal-format, gfc-internal-format
msgid "hardware decimal floating point instructions not available on %s"
msgstr ""
-#: config/s390/s390.c:14745
+#: config/s390/s390.c:14824
#, gcc-internal-format
msgid ""
"hardware decimal floating point instructions not available in ESA/390 mode"
msgstr ""
-#: config/s390/s390.c:14757
+#: config/s390/s390.c:14836
#, gcc-internal-format
msgid "-mhard-dfp can%'t be used in conjunction with -msoft-float"
msgstr ""
-#: config/s390/s390.c:14765
+#: config/s390/s390.c:14844
#, gcc-internal-format
msgid ""
"-mbackchain -mpacked-stack -mhard-float are not supported in combination"
msgstr ""
-#: config/s390/s390.c:14771
+#: config/s390/s390.c:14850
#, gcc-internal-format
msgid "stack size must be greater than the stack guard value"
msgstr ""
-#: config/s390/s390.c:14773
+#: config/s390/s390.c:14852
#, gcc-internal-format
msgid "stack size must not be greater than 64k"
msgstr ""
-#: config/s390/s390.c:14776
+#: config/s390/s390.c:14855
#, gcc-internal-format
msgid "-mstack-guard implies use of -mstack-size"
msgstr ""
#. argument is not a plain number
-#: config/s390/s390.c:14874
+#: config/s390/s390.c:14953
#, gcc-internal-format
msgid "arguments to %qs should be non-negative integers"
msgstr ""
-#: config/s390/s390.c:14881
+#: config/s390/s390.c:14960
#, gcc-internal-format
msgid "argument to %qs is too large (max. %d)"
msgstr ""
+#: config/s390/s390.c:14990
+#, gcc-internal-format
+msgid "-mno-pic-data-is-text-relative cannot be used without -fpic/-fPIC"
+msgstr ""
+
#. Value is not allowed for the target attribute.
-#: config/s390/s390.c:15089
+#: config/s390/s390.c:15171
#, gcc-internal-format
msgid "value %qs is not supported by attribute %<target%>"
msgstr ""
@@ -32053,38 +32739,38 @@ msgid ""
"outgoing-args for correctness"
msgstr ""
-#: config/sh/sh.c:7366
+#: config/sh/sh.c:7374
#, gcc-internal-format
msgid "__builtin_saveregs not supported by this subtarget"
msgstr ""
-#: config/sh/sh.c:8318
+#: config/sh/sh.c:8326
#, gcc-internal-format
msgid "%qE attribute only applies to interrupt functions"
msgstr ""
-#: config/sh/sh.c:8388
+#: config/sh/sh.c:8396
#, gcc-internal-format
msgid "%qE attribute is supported only for SH2A"
msgstr ""
-#: config/sh/sh.c:8430
+#: config/sh/sh.c:8438
#, gcc-internal-format
msgid "%qE attribute only applies to SH2A"
msgstr ""
-#: config/sh/sh.c:8452
+#: config/sh/sh.c:8460
#, gcc-internal-format
msgid "%qE attribute argument should be between 0 to 255"
msgstr ""
#. The argument must be a constant string.
-#: config/sh/sh.c:8514
+#: config/sh/sh.c:8522
#, gcc-internal-format
msgid "%qE attribute argument not a string constant"
msgstr ""
-#: config/sh/sh.c:10762
+#: config/sh/sh.c:10770
#, gcc-internal-format
msgid "r0 needs to be available as a call-clobbered register"
msgstr ""
@@ -32095,27 +32781,27 @@ msgstr ""
msgid "-mrelax is only supported for RTP PIC"
msgstr ""
-#: config/sparc/sparc.c:1393
+#: config/sparc/sparc.c:1509
#, gcc-internal-format, gfc-internal-format
msgid "%s is not supported by this configuration"
msgstr ""
-#: config/sparc/sparc.c:1400
+#: config/sparc/sparc.c:1516
#, gcc-internal-format
msgid "-mlong-double-64 not allowed with -m64"
msgstr ""
-#: config/sparc/sparc.c:1420
+#: config/sparc/sparc.c:1536
#, gcc-internal-format, gfc-internal-format
msgid "bad value (%s) for -mcmodel= switch"
msgstr ""
-#: config/sparc/sparc.c:1425
+#: config/sparc/sparc.c:1541
#, gcc-internal-format
-msgid "-mcmodel= is not supported on 32 bit systems"
+msgid "-mcmodel= is not supported on 32-bit systems"
msgstr ""
-#: config/sparc/sparc.c:1432
+#: config/sparc/sparc.c:1548
#, gcc-internal-format
msgid "-fcall-saved-REG is not supported for out registers"
msgstr ""
@@ -32200,7 +32886,7 @@ msgstr ""
msgid "__BELOW100__ attribute not allowed with auto storage class"
msgstr ""
-#: config/tilegx/tilegx.c:3586 config/tilepro/tilepro.c:3135
+#: config/tilegx/tilegx.c:3585 config/tilepro/tilepro.c:3134
#, gcc-internal-format
msgid "operand must be an immediate of the right size"
msgstr ""
@@ -32400,22 +33086,22 @@ msgstr ""
msgid "invalid constant in %<#pragma %s%>"
msgstr ""
-#: config/xtensa/xtensa.c:2185
+#: config/xtensa/xtensa.c:2193
#, gcc-internal-format
msgid "boolean registers required for the floating-point option"
msgstr ""
-#: config/xtensa/xtensa.c:2220
+#: config/xtensa/xtensa.c:2228
#, gcc-internal-format, gfc-internal-format
msgid "-f%s is not supported with CONST16 instructions"
msgstr ""
-#: config/xtensa/xtensa.c:2227
+#: config/xtensa/xtensa.c:2235
#, gcc-internal-format
msgid "PIC is required but not supported with CONST16 instructions"
msgstr ""
-#: config/xtensa/xtensa.c:3543
+#: config/xtensa/xtensa.c:3575
#, gcc-internal-format
msgid "only uninitialized variables can be placed in a .bss section"
msgstr ""
@@ -32430,69 +33116,69 @@ msgstr ""
msgid "-fexcess-precision=standard for Ada"
msgstr ""
-#: ada/gcc-interface/misc.c:276
+#: ada/gcc-interface/misc.c:272
#, gcc-internal-format
msgid ""
"STABS debugging information for Ada is obsolete and not supported anymore"
msgstr ""
-#: ada/gcc-interface/trans.c:1525
+#: ada/gcc-interface/trans.c:1532
#, gcc-internal-format
msgid "subprogram %q+F not marked Inline_Always"
msgstr ""
-#: ada/gcc-interface/trans.c:1526 ada/gcc-interface/trans.c:1532
+#: ada/gcc-interface/trans.c:1533 ada/gcc-interface/trans.c:1539
#, gcc-internal-format
msgid "parent subprogram cannot be inlined"
msgstr ""
-#: ada/gcc-interface/trans.c:1530
+#: ada/gcc-interface/trans.c:1537
#, gcc-internal-format
msgid "subprogram %q+F not marked Inline"
msgstr ""
-#: ada/gcc-interface/trans.c:6324
+#: ada/gcc-interface/trans.c:6380
#, gcc-internal-format
msgid "out-of-bounds access may be optimized away"
msgstr ""
-#: ada/gcc-interface/trans.c:6326
+#: ada/gcc-interface/trans.c:6382
#, gcc-internal-format
msgid "containing loop"
msgstr ""
-#: ada/gcc-interface/utils.c:3834
+#: ada/gcc-interface/utils.c:3849
#, gcc-internal-format
msgid "invalid element type for attribute %qs"
msgstr ""
-#: ada/gcc-interface/utils.c:3858
+#: ada/gcc-interface/utils.c:3873
#, gcc-internal-format
msgid "number of components of vector not a power of two"
msgstr ""
-#: ada/gcc-interface/utils.c:5929 ada/gcc-interface/utils.c:6107
-#: ada/gcc-interface/utils.c:6214
+#: ada/gcc-interface/utils.c:5961 ada/gcc-interface/utils.c:6139
+#: ada/gcc-interface/utils.c:6246
#, gcc-internal-format
msgid "%qs attribute ignored"
msgstr ""
-#: ada/gcc-interface/utils.c:6050
+#: ada/gcc-interface/utils.c:6082
#, gcc-internal-format
msgid "%qs attribute requires prototypes with named arguments"
msgstr ""
-#: ada/gcc-interface/utils.c:6059
+#: ada/gcc-interface/utils.c:6091
#, gcc-internal-format
msgid "%qs attribute only applies to variadic functions"
msgstr ""
-#: ada/gcc-interface/utils.c:6174
+#: ada/gcc-interface/utils.c:6206
#, gcc-internal-format
msgid "%qE attribute has no effect"
msgstr ""
-#: ada/gcc-interface/utils.c:6298
+#: ada/gcc-interface/utils.c:6330
#, gcc-internal-format
msgid "attribute %qs applies to array types only"
msgstr ""
@@ -32502,7 +33188,7 @@ msgstr ""
msgid "could not read the BRIG file"
msgstr ""
-#: c/c-array-notation.c:217 c/c-array-notation.c:246 cp/call.c:8205
+#: c/c-array-notation.c:217 c/c-array-notation.c:246 cp/call.c:8624
#: cp/cp-array-notation.c:250
#, gcc-internal-format
msgid "Invalid builtin arguments"
@@ -32560,487 +33246,486 @@ 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:2161 c/c-typeck.c:6322 c/c-typeck.c:11906
-#: cp/typeck.c:1972 cp/typeck.c:7683 cp/typeck.c:8440
+#: c/c-convert.c:99 c/c-typeck.c:2164 c/c-typeck.c:6327 c/c-typeck.c:11915
+#: cp/typeck.c:1964 cp/typeck.c:7775 cp/typeck.c:8532
#, gcc-internal-format
msgid "void value not ignored as it ought to be"
msgstr ""
-#: c/c-convert.c:195
+#: c/c-convert.c:165
#, gcc-internal-format
msgid "conversion to non-scalar type requested"
msgstr ""
-#: c/c-decl.c:815
+#: c/c-decl.c:816
#, gcc-internal-format
msgid "array %q+D assumed to have one element"
msgstr ""
-#: c/c-decl.c:856
+#: c/c-decl.c:857
#, gcc-internal-format
msgid "%qD is static but used in inline function %qD which is not static"
msgstr ""
-#: c/c-decl.c:861
+#: c/c-decl.c:862
#, gcc-internal-format
msgid "%q+D is static but declared in inline function %qD which is not static"
msgstr ""
-#: c/c-decl.c:1046
+#: c/c-decl.c:1047
#, gcc-internal-format, gfc-internal-format
msgid "GCC supports only %u nested scopes"
msgstr ""
-#: c/c-decl.c:1198 cp/decl.c:360
+#: c/c-decl.c:1199 cp/decl.c:358
#, gcc-internal-format
msgid "label %q+D used but not defined"
msgstr ""
-#: c/c-decl.c:1243
+#: c/c-decl.c:1244
#, gcc-internal-format
msgid "nested function %q+D declared but never defined"
msgstr ""
-#: c/c-decl.c:1257
+#: c/c-decl.c:1258
#, gcc-internal-format
msgid "inline function %q+D declared but never defined"
msgstr ""
-#: c/c-decl.c:1274
+#: c/c-decl.c:1275
#, gcc-internal-format
msgid "unused variable %q+D"
msgstr ""
-#: c/c-decl.c:1278 cp/decl.c:680
+#: c/c-decl.c:1279 cp/decl.c:695
#, gcc-internal-format
msgid "variable %qD set but not used"
msgstr ""
-#: c/c-decl.c:1283
+#: c/c-decl.c:1284
#, gcc-internal-format
msgid "type of array %q+D completed incompatibly with implicit initialization"
msgstr ""
-#: c/c-decl.c:1564 c/c-decl.c:6624 c/c-decl.c:7488 c/c-decl.c:8226
+#: c/c-decl.c:1565 c/c-decl.c:6604 c/c-decl.c:7473 c/c-decl.c:8212
#, gcc-internal-format
msgid "originally defined here"
msgstr ""
-#: c/c-decl.c:1694
+#: c/c-decl.c:1695
#, gcc-internal-format
msgid ""
"a parameter list with an ellipsis can%'t match an empty parameter name list "
"declaration"
msgstr ""
-#: c/c-decl.c:1701
+#: c/c-decl.c:1702
#, gcc-internal-format
msgid ""
"an argument type that has a default promotion can%'t match an empty "
"parameter name list declaration"
msgstr ""
-#: c/c-decl.c:1748
+#: c/c-decl.c:1749
#, gcc-internal-format
msgid ""
"prototype for %q+D declares more arguments than previous old-style definition"
msgstr ""
-#: c/c-decl.c:1754
+#: c/c-decl.c:1755
#, gcc-internal-format
msgid ""
"prototype for %q+D declares fewer arguments than previous old-style "
"definition"
msgstr ""
-#: c/c-decl.c:1763
+#: c/c-decl.c:1764
#, gcc-internal-format
msgid "prototype for %q+D declares argument %d with incompatible type"
msgstr ""
#. If we get here, no errors were found, but do issue a warning
#. for this poor-style construct.
-#: c/c-decl.c:1776
+#: c/c-decl.c:1777
#, gcc-internal-format
msgid "prototype for %q+D follows non-prototype definition"
msgstr ""
-#: c/c-decl.c:1792
+#: c/c-decl.c:1793
#, gcc-internal-format
msgid "previous definition of %q+D was here"
msgstr ""
-#: c/c-decl.c:1794
+#: c/c-decl.c:1795
#, gcc-internal-format
msgid "previous implicit declaration of %q+D was here"
msgstr ""
-#: c/c-decl.c:1796
+#: c/c-decl.c:1797
#, gcc-internal-format
msgid "previous declaration of %q+D was here"
msgstr ""
-#: c/c-decl.c:1836
+#: c/c-decl.c:1837
#, gcc-internal-format
msgid "%q+D redeclared as different kind of symbol"
msgstr ""
-#: c/c-decl.c:1840
+#: c/c-decl.c:1841
#, gcc-internal-format
msgid "built-in function %q+D declared as non-function"
msgstr ""
-#: c/c-decl.c:1843 c/c-decl.c:2014 c/c-decl.c:2802
+#: c/c-decl.c:1844 c/c-decl.c:2015 c/c-decl.c:2804
#, gcc-internal-format
msgid "declaration of %q+D shadows a built-in function"
msgstr ""
-#: c/c-decl.c:1852
+#: c/c-decl.c:1853
#, gcc-internal-format
msgid "redeclaration of enumerator %q+D"
msgstr ""
-#: c/c-decl.c:1874
+#: c/c-decl.c:1875
#, gcc-internal-format
msgid "conflicting types for built-in function %q+D"
msgstr ""
-#: c/c-decl.c:1899 c/c-decl.c:1912 c/c-decl.c:1948
+#: c/c-decl.c:1900 c/c-decl.c:1913 c/c-decl.c:1949
#, gcc-internal-format
msgid "conflicting types for %q+D"
msgstr ""
-#: c/c-decl.c:1928
+#: c/c-decl.c:1929
#, gcc-internal-format
msgid "conflicting named address spaces (generic vs %s) for %q+D"
msgstr ""
-#: c/c-decl.c:1932
+#: c/c-decl.c:1933
#, gcc-internal-format
msgid "conflicting named address spaces (%s vs generic) for %q+D"
msgstr ""
-#: c/c-decl.c:1936
+#: c/c-decl.c:1937
#, gcc-internal-format
msgid "conflicting named address spaces (%s vs %s) for %q+D"
msgstr ""
-#: c/c-decl.c:1945
+#: c/c-decl.c:1946
#, gcc-internal-format
msgid "conflicting type qualifiers for %q+D"
msgstr ""
-#: c/c-decl.c:1970
+#: c/c-decl.c:1971
#, gcc-internal-format
msgid "redefinition of typedef %q+D with different type"
msgstr ""
-#: c/c-decl.c:1983
+#: c/c-decl.c:1984
#, gcc-internal-format
msgid "redefinition of typedef %q+D with variably modified type"
msgstr ""
-#: c/c-decl.c:1988
+#: c/c-decl.c:1989
#, gcc-internal-format
msgid "redefinition of typedef %q+D"
msgstr ""
-#: c/c-decl.c:2040 c/c-decl.c:2143
+#: c/c-decl.c:2041 c/c-decl.c:2144
#, gcc-internal-format
msgid "redefinition of %q+D"
msgstr ""
-#: c/c-decl.c:2075 c/c-decl.c:2181
+#: c/c-decl.c:2076 c/c-decl.c:2182
#, gcc-internal-format
msgid "static declaration of %q+D follows non-static declaration"
msgstr ""
-#: c/c-decl.c:2085 c/c-decl.c:2093 c/c-decl.c:2171 c/c-decl.c:2178
+#: c/c-decl.c:2086 c/c-decl.c:2094 c/c-decl.c:2172 c/c-decl.c:2179
#, gcc-internal-format
msgid "non-static declaration of %q+D follows static declaration"
msgstr ""
-#: c/c-decl.c:2109
+#: c/c-decl.c:2110
#, gcc-internal-format
msgid "%<gnu_inline%> attribute present on %q+D"
msgstr ""
-#: c/c-decl.c:2112
+#: c/c-decl.c:2113
#, gcc-internal-format
msgid "but not here"
msgstr ""
-#: c/c-decl.c:2130
+#: c/c-decl.c:2131
#, gcc-internal-format
msgid "thread-local declaration of %q+D follows non-thread-local declaration"
msgstr ""
-#: c/c-decl.c:2133
+#: c/c-decl.c:2134
#, gcc-internal-format
msgid "non-thread-local declaration of %q+D follows thread-local declaration"
msgstr ""
-#: c/c-decl.c:2163
+#: c/c-decl.c:2164
#, gcc-internal-format
msgid "extern declaration of %q+D follows declaration with no linkage"
msgstr ""
-#: c/c-decl.c:2199
+#: c/c-decl.c:2200
#, gcc-internal-format
msgid "declaration of %q+D with no linkage follows extern declaration"
msgstr ""
-#: c/c-decl.c:2205
+#: c/c-decl.c:2206
#, gcc-internal-format
msgid "redeclaration of %q+D with no linkage"
msgstr ""
-#: c/c-decl.c:2231
+#: c/c-decl.c:2232
#, gcc-internal-format
msgid ""
"redeclaration of %q+D with different visibility (old visibility preserved)"
msgstr ""
-#: c/c-decl.c:2251
+#: c/c-decl.c:2252
#, gcc-internal-format
msgid "redefinition of parameter %q+D"
msgstr ""
-#: c/c-decl.c:2278
+#: c/c-decl.c:2279
#, gcc-internal-format
msgid "redundant redeclaration of %q+D"
msgstr ""
-#: c/c-decl.c:2763
+#: c/c-decl.c:2765
#, gcc-internal-format
msgid "declaration of %q+D shadows previous non-variable"
msgstr ""
-#: c/c-decl.c:2782
+#: c/c-decl.c:2784
#, gcc-internal-format
msgid "declaration of %qD shadows a parameter"
msgstr ""
-#: c/c-decl.c:2795 cp/name-lookup.c:1325
+#: c/c-decl.c:2797 cp/name-lookup.c:2149
#, gcc-internal-format
msgid "declaration of %qD shadows a global declaration"
msgstr ""
-#: c/c-decl.c:2821 cp/name-lookup.c:1263
+#: c/c-decl.c:2823
#, gcc-internal-format
msgid "declaration of %qD shadows a previous local"
msgstr ""
-#: c/c-decl.c:2827 cp/name-lookup.c:1268 cp/name-lookup.c:1310
-#: cp/name-lookup.c:1328
+#: c/c-decl.c:2829 cp/name-lookup.c:2161
#, gcc-internal-format
msgid "shadowed declaration is here"
msgstr ""
-#: c/c-decl.c:2954
+#: c/c-decl.c:2956
#, gcc-internal-format
msgid "nested extern declaration of %qD"
msgstr ""
-#: c/c-decl.c:3144 c/c-decl.c:3157
+#: c/c-decl.c:3118 c/c-decl.c:3131
#, gcc-internal-format
msgid "implicit declaration of function %qE; did you mean %qs?"
msgstr ""
-#: c/c-decl.c:3149 c/c-decl.c:3162
+#: c/c-decl.c:3123 c/c-decl.c:3136
#, gcc-internal-format
msgid "implicit declaration of function %qE"
msgstr ""
-#: c/c-decl.c:3408
+#: c/c-decl.c:3382
#, gcc-internal-format
msgid "incompatible implicit declaration of built-in function %qD"
msgstr ""
-#: c/c-decl.c:3415
+#: c/c-decl.c:3394
#, gcc-internal-format
msgid "include %qs or provide a declaration of %qD"
msgstr ""
-#: c/c-decl.c:3424
+#: c/c-decl.c:3404
#, gcc-internal-format
msgid "incompatible implicit declaration of function %qD"
msgstr ""
-#: c/c-decl.c:3484
+#: c/c-decl.c:3464
#, gcc-internal-format
msgid "%qE undeclared here (not in a function); did you mean %qs?"
msgstr ""
-#: c/c-decl.c:3489
+#: c/c-decl.c:3469
#, gcc-internal-format
msgid "%qE undeclared here (not in a function)"
msgstr ""
-#: c/c-decl.c:3503
+#: c/c-decl.c:3483
#, gcc-internal-format
msgid "%qE undeclared (first use in this function); did you mean %qs?"
msgstr ""
-#: c/c-decl.c:3508
+#: c/c-decl.c:3488
#, gcc-internal-format
msgid "%qE undeclared (first use in this function)"
msgstr ""
-#: c/c-decl.c:3512
+#: c/c-decl.c:3492
#, gcc-internal-format
msgid ""
"each undeclared identifier is reported only once for each function it "
"appears in"
msgstr ""
-#: c/c-decl.c:3560 cp/decl.c:3049
+#: c/c-decl.c:3540 cp/decl.c:2988
#, gcc-internal-format
msgid "label %qE referenced outside of any function"
msgstr ""
-#: c/c-decl.c:3596
+#: c/c-decl.c:3576
#, gcc-internal-format
msgid "jump into scope of identifier with variably modified type"
msgstr ""
-#: c/c-decl.c:3599
+#: c/c-decl.c:3579
#, gcc-internal-format
msgid "jump skips variable initialization"
msgstr ""
-#: c/c-decl.c:3600 c/c-decl.c:3655 c/c-decl.c:3744
+#: c/c-decl.c:3580 c/c-decl.c:3635 c/c-decl.c:3724
#, gcc-internal-format
msgid "label %qD defined here"
msgstr ""
-#: c/c-decl.c:3601 c/c-decl.c:3872 c/c-typeck.c:8091 cp/class.c:1480
-#: cp/class.c:3379 cp/decl.c:3907 cp/decl.c:10592 cp/decl.c:10999
-#: cp/friend.c:383 cp/friend.c:392 cp/parser.c:3166 cp/parser.c:3259
-#: cp/parser.c:3290 cp/parser.c:6046 cp/parser.c:20704
+#: c/c-decl.c:3581 c/c-decl.c:3852 c/c-typeck.c:8098 cp/class.c:1459
+#: cp/class.c:3353 cp/decl.c:3846 cp/decl.c:10505 cp/decl.c:10886
+#: cp/friend.c:383 cp/friend.c:392 cp/parser.c:3168 cp/parser.c:3265
+#: cp/parser.c:3312 cp/parser.c:6071 cp/parser.c:20857
#, gcc-internal-format
msgid "%qD declared here"
msgstr ""
-#: c/c-decl.c:3654 c/c-decl.c:3743
+#: c/c-decl.c:3634 c/c-decl.c:3723
#, gcc-internal-format
msgid "jump into statement expression"
msgstr ""
-#: c/c-decl.c:3676
+#: c/c-decl.c:3656
#, gcc-internal-format
msgid "duplicate label declaration %qE"
msgstr ""
-#: c/c-decl.c:3774 cp/decl.c:3444
+#: c/c-decl.c:3754 cp/decl.c:3383
#, gcc-internal-format
msgid "duplicate label %qD"
msgstr ""
-#: c/c-decl.c:3805
+#: c/c-decl.c:3785
#, gcc-internal-format
msgid ""
"traditional C lacks a separate namespace for labels, identifier %qE conflicts"
msgstr ""
-#: c/c-decl.c:3870
+#: c/c-decl.c:3850
#, gcc-internal-format
msgid "switch jumps over variable initialization"
msgstr ""
-#: c/c-decl.c:3871 c/c-decl.c:3882
+#: c/c-decl.c:3851 c/c-decl.c:3862
#, gcc-internal-format
msgid "switch starts here"
msgstr ""
-#: c/c-decl.c:3881
+#: c/c-decl.c:3861
#, gcc-internal-format
msgid "switch jumps into statement expression"
msgstr ""
-#: c/c-decl.c:3964
+#: c/c-decl.c:3944
#, gcc-internal-format
msgid "%qE defined as wrong kind of tag"
msgstr ""
-#: c/c-decl.c:4306
+#: c/c-decl.c:4286
#, gcc-internal-format
msgid "unnamed struct/union that defines no instances"
msgstr ""
-#: c/c-decl.c:4316
+#: c/c-decl.c:4296
#, gcc-internal-format
msgid "empty declaration with storage class specifier does not redeclare tag"
msgstr ""
-#: c/c-decl.c:4331
+#: c/c-decl.c:4311
#, gcc-internal-format
msgid "empty declaration with type qualifier does not redeclare tag"
msgstr ""
-#: c/c-decl.c:4342
+#: c/c-decl.c:4322
#, gcc-internal-format
msgid "empty declaration with %<_Alignas%> does not redeclare tag"
msgstr ""
-#: c/c-decl.c:4364 c/c-decl.c:4372
+#: c/c-decl.c:4344 c/c-decl.c:4352
#, gcc-internal-format
msgid "useless type name in empty declaration"
msgstr ""
-#: c/c-decl.c:4380
+#: c/c-decl.c:4360
#, gcc-internal-format
msgid "%<inline%> in empty declaration"
msgstr ""
-#: c/c-decl.c:4386
+#: c/c-decl.c:4366
#, gcc-internal-format
msgid "%<_Noreturn%> in empty declaration"
msgstr ""
-#: c/c-decl.c:4392
+#: c/c-decl.c:4372
#, gcc-internal-format
msgid "%<auto%> in file-scope empty declaration"
msgstr ""
-#: c/c-decl.c:4398
+#: c/c-decl.c:4378
#, gcc-internal-format
msgid "%<register%> in file-scope empty declaration"
msgstr ""
-#: c/c-decl.c:4405
+#: c/c-decl.c:4385
#, gcc-internal-format
msgid "useless storage class specifier in empty declaration"
msgstr ""
-#: c/c-decl.c:4411
+#: c/c-decl.c:4391
#, gcc-internal-format
msgid "useless %qs in empty declaration"
msgstr ""
-#: c/c-decl.c:4424
+#: c/c-decl.c:4404
#, gcc-internal-format
msgid "useless type qualifier in empty declaration"
msgstr ""
-#: c/c-decl.c:4431
+#: c/c-decl.c:4411
#, gcc-internal-format
msgid "useless %<_Alignas%> in empty declaration"
msgstr ""
-#: c/c-decl.c:4438 c/c-parser.c:1681
+#: c/c-decl.c:4418 c/c-parser.c:1683
#, gcc-internal-format
msgid "empty declaration"
msgstr ""
-#: c/c-decl.c:4509
+#: c/c-decl.c:4489
#, gcc-internal-format
msgid ""
"ISO C90 does not support %<static%> or type qualifiers in parameter array "
"declarators"
msgstr ""
-#: c/c-decl.c:4513
+#: c/c-decl.c:4493
#, gcc-internal-format
msgid "ISO C90 does not support %<[*]%> array declarators"
msgstr ""
@@ -33048,33 +33733,33 @@ 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:4519 c/c-decl.c:7066
+#: c/c-decl.c:4499 c/c-decl.c:7046
#, gcc-internal-format
msgid "%<[*]%> not allowed in other than function prototype scope"
msgstr ""
-#: c/c-decl.c:4606 cp/decl2.c:1408
+#: c/c-decl.c:4586 cp/decl2.c:1379
#, gcc-internal-format
msgid "%q+D in declare target directive does not have mappable type"
msgstr ""
-#: c/c-decl.c:4655
+#: c/c-decl.c:4635
#, gcc-internal-format
msgid "%q+D is usually a function"
msgstr ""
-#: c/c-decl.c:4664
+#: c/c-decl.c:4644
#, gcc-internal-format
msgid "typedef %qD is initialized (use __typeof__ instead)"
msgstr ""
-#: c/c-decl.c:4669
+#: c/c-decl.c:4649
#, gcc-internal-format
msgid "function %qD is initialized like a variable"
msgstr ""
#. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE.
-#: c/c-decl.c:4675
+#: c/c-decl.c:4655
#, gcc-internal-format
msgid "parameter %qD is initialized"
msgstr ""
@@ -33083,257 +33768,257 @@ 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:4694 c/c-decl.c:4709 c/c-typeck.c:7376
+#: c/c-decl.c:4674 c/c-decl.c:4689 c/c-typeck.c:7381
#, gcc-internal-format
msgid "variable-sized object may not be initialized"
msgstr ""
-#: c/c-decl.c:4700
+#: c/c-decl.c:4680
#, gcc-internal-format
msgid "variable %qD has initializer but incomplete type"
msgstr ""
-#: c/c-decl.c:4789
+#: c/c-decl.c:4769
#, gcc-internal-format
msgid "inline function %q+D given attribute noinline"
msgstr ""
-#: c/c-decl.c:4839
+#: c/c-decl.c:4819
#, gcc-internal-format
msgid "uninitialized const member in %qT is invalid in C++"
msgstr ""
-#: c/c-decl.c:4841
+#: c/c-decl.c:4821
#, gcc-internal-format
msgid "%qD should be initialized"
msgstr ""
-#: c/c-decl.c:4917
+#: c/c-decl.c:4897
#, gcc-internal-format
msgid "initializer fails to determine size of %q+D"
msgstr ""
-#: c/c-decl.c:4922
+#: c/c-decl.c:4902
#, gcc-internal-format
msgid "array size missing in %q+D"
msgstr ""
-#: c/c-decl.c:4934
+#: c/c-decl.c:4914
#, gcc-internal-format
msgid "zero or negative size array %q+D"
msgstr ""
-#: c/c-decl.c:5005
+#: c/c-decl.c:4985
#, gcc-internal-format
msgid "storage size of %q+D isn%'t constant"
msgstr ""
-#: c/c-decl.c:5055
+#: c/c-decl.c:5035
#, gcc-internal-format
msgid "ignoring asm-specifier for non-static local variable %q+D"
msgstr ""
-#: c/c-decl.c:5085
+#: c/c-decl.c:5065
#, gcc-internal-format
msgid "cannot put object with volatile field into register"
msgstr ""
-#: c/c-decl.c:5171
+#: c/c-decl.c:5151
#, gcc-internal-format
msgid "uninitialized const %qD is invalid in C++"
msgstr ""
-#: c/c-decl.c:5228
+#: c/c-decl.c:5208
#, gcc-internal-format
msgid "ISO C forbids forward parameter declarations"
msgstr ""
-#: c/c-decl.c:5325
+#: c/c-decl.c:5305
#, gcc-internal-format
msgid "defining a type in a compound literal is invalid in C++"
msgstr ""
-#: c/c-decl.c:5379 c/c-decl.c:5394
+#: c/c-decl.c:5359 c/c-decl.c:5374
#, gcc-internal-format
msgid "bit-field %qs width not an integer constant"
msgstr ""
-#: c/c-decl.c:5389
+#: c/c-decl.c:5369
#, gcc-internal-format
msgid "bit-field %qs width not an integer constant expression"
msgstr ""
-#: c/c-decl.c:5400
+#: c/c-decl.c:5380
#, gcc-internal-format
msgid "negative width in bit-field %qs"
msgstr ""
-#: c/c-decl.c:5405
+#: c/c-decl.c:5385
#, gcc-internal-format
msgid "zero width for bit-field %qs"
msgstr ""
-#: c/c-decl.c:5415
+#: c/c-decl.c:5395
#, gcc-internal-format
msgid "bit-field %qs has invalid type"
msgstr ""
-#: c/c-decl.c:5425
+#: c/c-decl.c:5405
#, gcc-internal-format
msgid "type of bit-field %qs is a GCC extension"
msgstr ""
-#: c/c-decl.c:5431
+#: c/c-decl.c:5411
#, gcc-internal-format
msgid "width of %qs exceeds its type"
msgstr ""
-#: c/c-decl.c:5444
+#: c/c-decl.c:5424
#, gcc-internal-format
msgid "%qs is narrower than values of its type"
msgstr ""
-#: c/c-decl.c:5459
+#: c/c-decl.c:5439
#, gcc-internal-format
msgid "ISO C90 forbids array %qE whose size can%'t be evaluated"
msgstr ""
-#: c/c-decl.c:5462
+#: c/c-decl.c:5442
#, gcc-internal-format
msgid "ISO C90 forbids array whose size can%'t be evaluated"
msgstr ""
-#: c/c-decl.c:5469
+#: c/c-decl.c:5449
#, gcc-internal-format
msgid "ISO C90 forbids variable length array %qE"
msgstr ""
-#: c/c-decl.c:5471
+#: c/c-decl.c:5451
#, gcc-internal-format
msgid "ISO C90 forbids variable length array"
msgstr ""
-#: c/c-decl.c:5680 c/c-decl.c:6054 c/c-decl.c:6064
+#: c/c-decl.c:5660 c/c-decl.c:6034 c/c-decl.c:6044
#, gcc-internal-format
msgid "variably modified %qE at file scope"
msgstr ""
-#: c/c-decl.c:5682
+#: c/c-decl.c:5662
#, gcc-internal-format
msgid "variably modified field at file scope"
msgstr ""
-#: c/c-decl.c:5702
+#: c/c-decl.c:5682
#, gcc-internal-format
msgid "type defaults to %<int%> in declaration of %qE"
msgstr ""
-#: c/c-decl.c:5706
+#: c/c-decl.c:5686
#, gcc-internal-format
msgid "type defaults to %<int%> in type name"
msgstr ""
-#: c/c-decl.c:5738
+#: c/c-decl.c:5718
#, gcc-internal-format
msgid "duplicate %<const%>"
msgstr ""
-#: c/c-decl.c:5740
+#: c/c-decl.c:5720
#, gcc-internal-format
msgid "duplicate %<restrict%>"
msgstr ""
-#: c/c-decl.c:5742
+#: c/c-decl.c:5722
#, gcc-internal-format
msgid "duplicate %<volatile%>"
msgstr ""
-#: c/c-decl.c:5744
+#: c/c-decl.c:5724
#, gcc-internal-format
msgid "duplicate %<_Atomic%>"
msgstr ""
-#: c/c-decl.c:5747
+#: c/c-decl.c:5727
#, gcc-internal-format, gfc-internal-format
msgid "conflicting named address spaces (%s vs %s)"
msgstr ""
-#: c/c-decl.c:5770 c/c-parser.c:2606
+#: c/c-decl.c:5750 c/c-parser.c:2608
#, gcc-internal-format
msgid "%<_Atomic%>-qualified array type"
msgstr ""
-#: c/c-decl.c:5784
+#: c/c-decl.c:5764
#, gcc-internal-format
msgid "function definition declared %<auto%>"
msgstr ""
-#: c/c-decl.c:5786
+#: c/c-decl.c:5766
#, gcc-internal-format
msgid "function definition declared %<register%>"
msgstr ""
-#: c/c-decl.c:5788
+#: c/c-decl.c:5768
#, gcc-internal-format
msgid "function definition declared %<typedef%>"
msgstr ""
-#: c/c-decl.c:5790
+#: c/c-decl.c:5770
#, gcc-internal-format
msgid "function definition declared %qs"
msgstr ""
-#: c/c-decl.c:5808
+#: c/c-decl.c:5788
#, gcc-internal-format
msgid "storage class specified for structure field %qE"
msgstr ""
-#: c/c-decl.c:5811
+#: c/c-decl.c:5791
#, gcc-internal-format
msgid "storage class specified for structure field"
msgstr ""
-#: c/c-decl.c:5815
+#: c/c-decl.c:5795
#, gcc-internal-format
msgid "storage class specified for parameter %qE"
msgstr ""
-#: c/c-decl.c:5818
+#: c/c-decl.c:5798
#, gcc-internal-format
msgid "storage class specified for unnamed parameter"
msgstr ""
-#: c/c-decl.c:5821 cp/decl.c:10774
+#: c/c-decl.c:5801 cp/decl.c:10687
#, gcc-internal-format
msgid "storage class specified for typename"
msgstr ""
-#: c/c-decl.c:5838
+#: c/c-decl.c:5818
#, gcc-internal-format
msgid "%qE initialized and declared %<extern%>"
msgstr ""
-#: c/c-decl.c:5842
+#: c/c-decl.c:5822
#, gcc-internal-format
msgid "%qE has both %<extern%> and initializer"
msgstr ""
-#: c/c-decl.c:5847
+#: c/c-decl.c:5827
#, gcc-internal-format
msgid "file-scope declaration of %qE specifies %<auto%>"
msgstr ""
-#: c/c-decl.c:5851
+#: c/c-decl.c:5831
#, gcc-internal-format
msgid "file-scope declaration of %qE specifies %<register%>"
msgstr ""
-#: c/c-decl.c:5856
+#: c/c-decl.c:5836
#, gcc-internal-format
msgid "nested function %qE declared %<extern%>"
msgstr ""
-#: c/c-decl.c:5859
+#: c/c-decl.c:5839
#, gcc-internal-format
msgid "function-scope %qE implicitly auto and declared %qs"
msgstr ""
@@ -33341,709 +34026,709 @@ msgstr ""
#. Only the innermost declarator (making a parameter be of
#. array type which is converted to pointer type)
#. may have static or type qualifiers.
-#: c/c-decl.c:5906 c/c-decl.c:6275
+#: c/c-decl.c:5886 c/c-decl.c:6255
#, gcc-internal-format
msgid "static or type qualifiers in non-parameter array declarator"
msgstr ""
-#: c/c-decl.c:5954
+#: c/c-decl.c:5934
#, gcc-internal-format
msgid "declaration of %qE as array of voids"
msgstr ""
-#: c/c-decl.c:5956
+#: c/c-decl.c:5936
#, gcc-internal-format
msgid "declaration of type name as array of voids"
msgstr ""
-#: c/c-decl.c:5963
+#: c/c-decl.c:5943
#, gcc-internal-format
msgid "declaration of %qE as array of functions"
msgstr ""
-#: c/c-decl.c:5966
+#: c/c-decl.c:5946
#, gcc-internal-format
msgid "declaration of type name as array of functions"
msgstr ""
-#: c/c-decl.c:5974 c/c-decl.c:7980
+#: c/c-decl.c:5954 c/c-decl.c:7963
#, gcc-internal-format
msgid "invalid use of structure with flexible array member"
msgstr ""
-#: c/c-decl.c:6000
+#: c/c-decl.c:5980
#, gcc-internal-format
msgid "size of array %qE has non-integer type"
msgstr ""
-#: c/c-decl.c:6004
+#: c/c-decl.c:5984
#, gcc-internal-format
msgid "size of unnamed array has non-integer type"
msgstr ""
-#: c/c-decl.c:6011
+#: c/c-decl.c:5991
#, gcc-internal-format
msgid "size of array %qE has incomplete type"
msgstr ""
-#: c/c-decl.c:6014
+#: c/c-decl.c:5994
#, gcc-internal-format
msgid "size of unnamed array has incomplete type"
msgstr ""
-#: c/c-decl.c:6025
+#: c/c-decl.c:6005
#, gcc-internal-format
msgid "ISO C forbids zero-size array %qE"
msgstr ""
-#: c/c-decl.c:6028
+#: c/c-decl.c:6008
#, gcc-internal-format
msgid "ISO C forbids zero-size array"
msgstr ""
-#: c/c-decl.c:6037
+#: c/c-decl.c:6017
#, gcc-internal-format
msgid "size of array %qE is negative"
msgstr ""
-#: c/c-decl.c:6039
+#: c/c-decl.c:6019
#, gcc-internal-format
msgid "size of unnamed array is negative"
msgstr ""
-#: c/c-decl.c:6163 c/c-decl.c:6794
+#: c/c-decl.c:6143 c/c-decl.c:6774
#, gcc-internal-format
msgid "ISO C90 does not support flexible array members"
msgstr ""
#. C99 6.7.5.2p4
-#: c/c-decl.c:6185
+#: c/c-decl.c:6165
#, gcc-internal-format
msgid "%<[*]%> not in a declaration"
msgstr ""
-#: c/c-decl.c:6198
+#: c/c-decl.c:6178
#, gcc-internal-format
msgid "array type has incomplete element type %qT"
msgstr ""
-#: c/c-decl.c:6204
+#: c/c-decl.c:6184
#, gcc-internal-format
msgid ""
"declaration of %qE as multidimensional array must have bounds for all "
"dimensions except the first"
msgstr ""
-#: c/c-decl.c:6208
+#: c/c-decl.c:6188
#, gcc-internal-format
msgid ""
"declaration of multidimensional array must have bounds for all dimensions "
"except the first"
msgstr ""
-#: c/c-decl.c:6311
+#: c/c-decl.c:6291
#, gcc-internal-format
msgid "%qE declared as function returning a function"
msgstr ""
-#: c/c-decl.c:6314
+#: c/c-decl.c:6294
#, gcc-internal-format
msgid "type name declared as function returning a function"
msgstr ""
-#: c/c-decl.c:6321
+#: c/c-decl.c:6301
#, gcc-internal-format
msgid "%qE declared as function returning an array"
msgstr ""
-#: c/c-decl.c:6324
+#: c/c-decl.c:6304
#, gcc-internal-format
msgid "type name declared as function returning an array"
msgstr ""
-#: c/c-decl.c:6365
+#: c/c-decl.c:6345
#, gcc-internal-format
msgid "function definition has qualified void return type"
msgstr ""
-#: c/c-decl.c:6368 cp/decl.c:10904
+#: c/c-decl.c:6348 cp/decl.c:10926
#, gcc-internal-format
msgid "type qualifiers ignored on function return type"
msgstr ""
-#: c/c-decl.c:6406 c/c-decl.c:6590 c/c-decl.c:6644 c/c-decl.c:6728
-#: c/c-decl.c:6846 c/c-parser.c:2608
+#: c/c-decl.c:6386 c/c-decl.c:6570 c/c-decl.c:6624 c/c-decl.c:6708
+#: c/c-decl.c:6826 c/c-parser.c:2610
#, gcc-internal-format
msgid "%<_Atomic%>-qualified function type"
msgstr ""
-#: c/c-decl.c:6412 c/c-decl.c:6596 c/c-decl.c:6733 c/c-decl.c:6851
+#: c/c-decl.c:6392 c/c-decl.c:6576 c/c-decl.c:6713 c/c-decl.c:6831
#, gcc-internal-format
msgid "ISO C forbids qualified function types"
msgstr ""
-#: c/c-decl.c:6481
+#: c/c-decl.c:6461
#, gcc-internal-format
msgid "%qs combined with %<auto%> qualifier for %qE"
msgstr ""
-#: c/c-decl.c:6485
+#: c/c-decl.c:6465
#, gcc-internal-format
msgid "%qs combined with %<register%> qualifier for %qE"
msgstr ""
-#: c/c-decl.c:6491
+#: c/c-decl.c:6471
#, gcc-internal-format
msgid "%qs specified for auto variable %qE"
msgstr ""
-#: c/c-decl.c:6507
+#: c/c-decl.c:6487
#, gcc-internal-format
msgid "%qs specified for parameter %qE"
msgstr ""
-#: c/c-decl.c:6510
+#: c/c-decl.c:6490
#, gcc-internal-format
msgid "%qs specified for unnamed parameter"
msgstr ""
-#: c/c-decl.c:6516
+#: c/c-decl.c:6496
#, gcc-internal-format
msgid "%qs specified for structure field %qE"
msgstr ""
-#: c/c-decl.c:6519
+#: c/c-decl.c:6499
#, gcc-internal-format
msgid "%qs specified for structure field"
msgstr ""
-#: c/c-decl.c:6534
+#: c/c-decl.c:6514
#, gcc-internal-format
msgid "bit-field %qE has atomic type"
msgstr ""
-#: c/c-decl.c:6536
+#: c/c-decl.c:6516
#, gcc-internal-format
msgid "bit-field has atomic type"
msgstr ""
-#: c/c-decl.c:6545
+#: c/c-decl.c:6525
#, gcc-internal-format
msgid "alignment specified for typedef %qE"
msgstr ""
-#: c/c-decl.c:6547
+#: c/c-decl.c:6527
#, gcc-internal-format
msgid "alignment specified for %<register%> object %qE"
msgstr ""
-#: c/c-decl.c:6552
+#: c/c-decl.c:6532
#, gcc-internal-format
msgid "alignment specified for parameter %qE"
msgstr ""
-#: c/c-decl.c:6554
+#: c/c-decl.c:6534
#, gcc-internal-format
msgid "alignment specified for unnamed parameter"
msgstr ""
-#: c/c-decl.c:6559
+#: c/c-decl.c:6539
#, gcc-internal-format
msgid "alignment specified for bit-field %qE"
msgstr ""
-#: c/c-decl.c:6561
+#: c/c-decl.c:6541
#, gcc-internal-format
msgid "alignment specified for unnamed bit-field"
msgstr ""
-#: c/c-decl.c:6564
+#: c/c-decl.c:6544
#, gcc-internal-format
msgid "alignment specified for function %qE"
msgstr ""
-#: c/c-decl.c:6571
+#: c/c-decl.c:6551
#, gcc-internal-format
msgid "%<_Alignas%> specifiers cannot reduce alignment of %qE"
msgstr ""
-#: c/c-decl.c:6574
+#: c/c-decl.c:6554
#, gcc-internal-format
msgid "%<_Alignas%> specifiers cannot reduce alignment of unnamed field"
msgstr ""
-#: c/c-decl.c:6605
+#: c/c-decl.c:6585
#, gcc-internal-format
msgid "typedef %q+D declared %<inline%>"
msgstr ""
-#: c/c-decl.c:6607
+#: c/c-decl.c:6587
#, gcc-internal-format
msgid "typedef %q+D declared %<_Noreturn%>"
msgstr ""
-#: c/c-decl.c:6650
+#: c/c-decl.c:6630
#, gcc-internal-format
msgid "ISO C forbids const or volatile function types"
msgstr ""
#. C99 6.7.2.1p8
-#: c/c-decl.c:6661
+#: c/c-decl.c:6641
#, gcc-internal-format
msgid "a member of a structure or union cannot have a variably modified type"
msgstr ""
-#: c/c-decl.c:6678 cp/decl.c:9822
+#: c/c-decl.c:6658 cp/decl.c:9741
#, gcc-internal-format
msgid "variable or field %qE declared void"
msgstr ""
-#: c/c-decl.c:6718
+#: c/c-decl.c:6698
#, gcc-internal-format
msgid "attributes in parameter array declarator ignored"
msgstr ""
-#: c/c-decl.c:6760
+#: c/c-decl.c:6740
#, gcc-internal-format
msgid "parameter %q+D declared %<inline%>"
msgstr ""
-#: c/c-decl.c:6762
+#: c/c-decl.c:6742
#, gcc-internal-format
msgid "parameter %q+D declared %<_Noreturn%>"
msgstr ""
-#: c/c-decl.c:6775
+#: c/c-decl.c:6755
#, gcc-internal-format
msgid "field %qE declared as a function"
msgstr ""
-#: c/c-decl.c:6782
+#: c/c-decl.c:6762
#, gcc-internal-format
msgid "field %qE has incomplete type"
msgstr ""
-#: c/c-decl.c:6784
+#: c/c-decl.c:6764
#, gcc-internal-format
msgid "unnamed field has incomplete type"
msgstr ""
-#: c/c-decl.c:6817 c/c-decl.c:6828 c/c-decl.c:6831
+#: c/c-decl.c:6797 c/c-decl.c:6808 c/c-decl.c:6811
#, gcc-internal-format
msgid "invalid storage class for function %qE"
msgstr ""
-#: c/c-decl.c:6888
+#: c/c-decl.c:6868
#, gcc-internal-format
msgid "cannot inline function %<main%>"
msgstr ""
-#: c/c-decl.c:6890
+#: c/c-decl.c:6870
#, gcc-internal-format
msgid "%<main%> declared %<_Noreturn%>"
msgstr ""
-#: c/c-decl.c:6901
+#: c/c-decl.c:6881
#, gcc-internal-format
msgid "ISO C99 does not support %<_Noreturn%>"
msgstr ""
-#: c/c-decl.c:6904
+#: c/c-decl.c:6884
#, gcc-internal-format
msgid "ISO C90 does not support %<_Noreturn%>"
msgstr ""
-#: c/c-decl.c:6933
+#: c/c-decl.c:6913
#, gcc-internal-format
msgid "variable previously declared %<static%> redeclared %<extern%>"
msgstr ""
-#: c/c-decl.c:6943
+#: c/c-decl.c:6923
#, gcc-internal-format
msgid "variable %q+D declared %<inline%>"
msgstr ""
-#: c/c-decl.c:6945
+#: c/c-decl.c:6925
#, gcc-internal-format
msgid "variable %q+D declared %<_Noreturn%>"
msgstr ""
-#: c/c-decl.c:6980
+#: c/c-decl.c:6960
#, gcc-internal-format
msgid "non-nested function with variably modified type"
msgstr ""
-#: c/c-decl.c:6982
+#: c/c-decl.c:6962
#, gcc-internal-format
msgid "object with variably modified type must have no linkage"
msgstr ""
-#: c/c-decl.c:7072 c/c-decl.c:8666
+#: c/c-decl.c:7052 c/c-decl.c:8652
#, gcc-internal-format
msgid "function declaration isn%'t a prototype"
msgstr ""
-#: c/c-decl.c:7081
+#: c/c-decl.c:7062
#, gcc-internal-format
msgid "parameter names (without types) in function declaration"
msgstr ""
-#: c/c-decl.c:7118
+#: c/c-decl.c:7100
#, gcc-internal-format
msgid "parameter %u (%q+D) has incomplete type"
msgstr ""
-#: c/c-decl.c:7122
+#: c/c-decl.c:7104
#, gcc-internal-format, gfc-internal-format
msgid "parameter %u has incomplete type"
msgstr ""
-#: c/c-decl.c:7133
+#: c/c-decl.c:7115
#, gcc-internal-format
msgid "parameter %u (%q+D) has void type"
msgstr ""
-#: c/c-decl.c:7137
+#: c/c-decl.c:7119
#, gcc-internal-format, gfc-internal-format
msgid "parameter %u has void type"
msgstr ""
-#: c/c-decl.c:7211
+#: c/c-decl.c:7193
#, gcc-internal-format
msgid "%<void%> as only parameter may not be qualified"
msgstr ""
-#: c/c-decl.c:7215 c/c-decl.c:7251
+#: c/c-decl.c:7197 c/c-decl.c:7233
#, gcc-internal-format
msgid "%<void%> must be the only parameter"
msgstr ""
-#: c/c-decl.c:7245
+#: c/c-decl.c:7227
#, gcc-internal-format
msgid "parameter %q+D has just a forward declaration"
msgstr ""
-#: c/c-decl.c:7291
+#: c/c-decl.c:7273
#, 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:7297
+#: c/c-decl.c:7279
#, 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:7399
+#: c/c-decl.c:7381
#, gcc-internal-format
msgid "enum type defined here"
msgstr ""
-#: c/c-decl.c:7405
+#: c/c-decl.c:7387
#, gcc-internal-format
msgid "struct defined here"
msgstr ""
-#: c/c-decl.c:7411
+#: c/c-decl.c:7393
#, gcc-internal-format
msgid "union defined here"
msgstr ""
-#: c/c-decl.c:7484
+#: c/c-decl.c:7469
#, gcc-internal-format
msgid "redefinition of %<union %E%>"
msgstr ""
-#: c/c-decl.c:7486
+#: c/c-decl.c:7471
#, gcc-internal-format
msgid "redefinition of %<struct %E%>"
msgstr ""
-#: c/c-decl.c:7495
+#: c/c-decl.c:7480
#, gcc-internal-format
msgid "nested redefinition of %<union %E%>"
msgstr ""
-#: c/c-decl.c:7497
+#: c/c-decl.c:7482
#, gcc-internal-format
msgid "nested redefinition of %<struct %E%>"
msgstr ""
-#: c/c-decl.c:7527 c/c-decl.c:8245
+#: c/c-decl.c:7512 c/c-decl.c:8231
#, gcc-internal-format
msgid "defining type in %qs expression is invalid in C++"
msgstr ""
-#: c/c-decl.c:7595 cp/decl.c:4731
+#: c/c-decl.c:7579 cp/decl.c:4651
#, gcc-internal-format
msgid "declaration does not declare anything"
msgstr ""
-#: c/c-decl.c:7600
+#: c/c-decl.c:7584
#, gcc-internal-format
msgid "ISO C99 doesn%'t support unnamed structs/unions"
msgstr ""
-#: c/c-decl.c:7603
+#: c/c-decl.c:7587
#, gcc-internal-format
msgid "ISO C90 doesn%'t support unnamed structs/unions"
msgstr ""
-#: c/c-decl.c:7694 c/c-decl.c:7712 c/c-decl.c:7773
+#: c/c-decl.c:7678 c/c-decl.c:7696 c/c-decl.c:7757
#, gcc-internal-format
msgid "duplicate member %q+D"
msgstr ""
-#: c/c-decl.c:7799
+#: c/c-decl.c:7783
#, gcc-internal-format
msgid "empty struct has size 0 in C, size 1 in C++"
msgstr ""
-#: c/c-decl.c:7802
+#: c/c-decl.c:7786
#, gcc-internal-format
msgid "empty union has size 0 in C, size 1 in C++"
msgstr ""
-#: c/c-decl.c:7888
+#: c/c-decl.c:7871
#, gcc-internal-format
msgid "union has no named members"
msgstr ""
-#: c/c-decl.c:7890
+#: c/c-decl.c:7873
#, gcc-internal-format
msgid "union has no members"
msgstr ""
-#: c/c-decl.c:7895
+#: c/c-decl.c:7878
#, gcc-internal-format
msgid "struct has no named members"
msgstr ""
-#: c/c-decl.c:7897
+#: c/c-decl.c:7880
#, gcc-internal-format
msgid "struct has no members"
msgstr ""
-#: c/c-decl.c:7959 cp/decl.c:11862
+#: c/c-decl.c:7942 cp/decl.c:11777
#, gcc-internal-format
msgid "flexible array member in union"
msgstr ""
-#: c/c-decl.c:7965
+#: c/c-decl.c:7948
#, gcc-internal-format
msgid "flexible array member not at end of struct"
msgstr ""
-#: c/c-decl.c:7971
+#: c/c-decl.c:7954
#, gcc-internal-format
msgid "flexible array member in a struct with no named members"
msgstr ""
-#: c/c-decl.c:8002
+#: c/c-decl.c:7985
#, gcc-internal-format
msgid "type %qT is too large"
msgstr ""
-#: c/c-decl.c:8125
+#: c/c-decl.c:8108
#, gcc-internal-format
msgid "union cannot be made transparent"
msgstr ""
-#: c/c-decl.c:8217
+#: c/c-decl.c:8203
#, 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:8224
+#: c/c-decl.c:8210
#, gcc-internal-format
msgid "redeclaration of %<enum %E%>"
msgstr ""
-#: c/c-decl.c:8303 cp/decl.c:14276
+#: c/c-decl.c:8289 cp/decl.c:14185
#, gcc-internal-format
msgid "specified mode too small for enumeral values"
msgstr ""
-#: c/c-decl.c:8318
+#: c/c-decl.c:8304
#, gcc-internal-format
msgid "enumeration values exceed range of largest integer"
msgstr ""
-#: c/c-decl.c:8432 c/c-decl.c:8448
+#: c/c-decl.c:8418 c/c-decl.c:8434
#, gcc-internal-format
msgid "enumerator value for %qE is not an integer constant"
msgstr ""
-#: c/c-decl.c:8443
+#: c/c-decl.c:8429
#, gcc-internal-format
msgid "enumerator value for %qE is not an integer constant expression"
msgstr ""
-#: c/c-decl.c:8467
+#: c/c-decl.c:8453
#, gcc-internal-format
msgid "overflow in enumeration values"
msgstr ""
-#: c/c-decl.c:8475
+#: c/c-decl.c:8461
#, gcc-internal-format
msgid "ISO C restricts enumerator values to range of %<int%>"
msgstr ""
-#: c/c-decl.c:8561 cp/decl.c:5033 cp/decl.c:14804
+#: c/c-decl.c:8546 cp/decl.c:4953 cp/decl.c:14717
#, gcc-internal-format
msgid "inline function %qD given attribute noinline"
msgstr ""
-#: c/c-decl.c:8579
+#: c/c-decl.c:8564
#, gcc-internal-format
msgid "return type is an incomplete type"
msgstr ""
-#: c/c-decl.c:8590
+#: c/c-decl.c:8575
#, gcc-internal-format
msgid "return type defaults to %<int%>"
msgstr ""
-#: c/c-decl.c:8616
+#: c/c-decl.c:8602
#, gcc-internal-format
msgid "%q+D defined as variadic function without prototype"
msgstr ""
-#: c/c-decl.c:8675
+#: c/c-decl.c:8661
#, gcc-internal-format
msgid "no previous prototype for %qD"
msgstr ""
-#: c/c-decl.c:8684
+#: c/c-decl.c:8670
#, gcc-internal-format
msgid "%qD was used with no prototype before its definition"
msgstr ""
-#: c/c-decl.c:8692 cp/decl.c:14947
+#: c/c-decl.c:8678 cp/decl.c:14850
#, gcc-internal-format
msgid "no previous declaration for %qD"
msgstr ""
-#: c/c-decl.c:8702
+#: c/c-decl.c:8688
#, gcc-internal-format
msgid "%qD was used with no declaration before its definition"
msgstr ""
-#: c/c-decl.c:8721
+#: c/c-decl.c:8707
#, gcc-internal-format
msgid "return type of %qD is not %<int%>"
msgstr ""
-#: c/c-decl.c:8723
+#: c/c-decl.c:8709
#, gcc-internal-format
msgid "%<_Atomic%>-qualified return type of %qD"
msgstr ""
-#: c/c-decl.c:8730
+#: c/c-decl.c:8716
#, gcc-internal-format
msgid "%qD is normally a non-static function"
msgstr ""
-#: c/c-decl.c:8767
+#: c/c-decl.c:8753
#, gcc-internal-format
msgid "old-style parameter declarations in prototyped function definition"
msgstr ""
-#: c/c-decl.c:8782
+#: c/c-decl.c:8768
#, gcc-internal-format
msgid "traditional C rejects ISO C style function definitions"
msgstr ""
-#: c/c-decl.c:8798
+#: c/c-decl.c:8784
#, gcc-internal-format
msgid "parameter name omitted"
msgstr ""
-#: c/c-decl.c:8835
+#: c/c-decl.c:8821
#, gcc-internal-format
msgid "old-style function definition"
msgstr ""
-#: c/c-decl.c:8844
+#: c/c-decl.c:8830
#, gcc-internal-format
msgid "parameter name missing from parameter list"
msgstr ""
-#: c/c-decl.c:8860
+#: c/c-decl.c:8846
#, gcc-internal-format
msgid "%qD declared as a non-parameter"
msgstr ""
-#: c/c-decl.c:8868
+#: c/c-decl.c:8854
#, gcc-internal-format
msgid "multiple parameters named %qD"
msgstr ""
-#: c/c-decl.c:8877
+#: c/c-decl.c:8863
#, gcc-internal-format
msgid "parameter %qD declared with void type"
msgstr ""
-#: c/c-decl.c:8906 c/c-decl.c:8911
+#: c/c-decl.c:8892 c/c-decl.c:8897
#, gcc-internal-format
msgid "type of %qD defaults to %<int%>"
msgstr ""
-#: c/c-decl.c:8931
+#: c/c-decl.c:8917
#, gcc-internal-format
msgid "parameter %qD has incomplete type"
msgstr ""
-#: c/c-decl.c:8938
+#: c/c-decl.c:8924
#, gcc-internal-format
msgid "declaration for parameter %qD but no such parameter"
msgstr ""
-#: c/c-decl.c:8991
+#: c/c-decl.c:8977
#, gcc-internal-format
msgid "number of arguments doesn%'t match built-in prototype"
msgstr ""
-#: c/c-decl.c:9002
+#: c/c-decl.c:8988
#, gcc-internal-format
msgid "number of arguments doesn%'t match prototype"
msgstr ""
-#: c/c-decl.c:9005 c/c-decl.c:9052 c/c-decl.c:9066
+#: c/c-decl.c:8991 c/c-decl.c:9038 c/c-decl.c:9052
#, gcc-internal-format
msgid "prototype declaration"
msgstr ""
-#: c/c-decl.c:9044
+#: c/c-decl.c:9030
#, gcc-internal-format
msgid "promoted argument %qD doesn%'t match built-in prototype"
msgstr ""
-#: c/c-decl.c:9049
+#: c/c-decl.c:9035
#, gcc-internal-format
msgid "promoted argument %qD doesn%'t match prototype"
msgstr ""
-#: c/c-decl.c:9059
+#: c/c-decl.c:9045
#, gcc-internal-format
msgid "argument %qD doesn%'t match built-in prototype"
msgstr ""
-#: c/c-decl.c:9064
+#: c/c-decl.c:9050
#, gcc-internal-format
msgid "argument %qD doesn%'t match prototype"
msgstr ""
-#: c/c-decl.c:9321 cp/decl.c:15702
+#: c/c-decl.c:9307 cp/decl.c:15615
#, gcc-internal-format
msgid "no return statement in function returning non-void"
msgstr ""
-#: c/c-decl.c:9341 cp/decl.c:15734
+#: c/c-decl.c:9327 cp/decl.c:15647
#, gcc-internal-format
msgid "parameter %qD set but not used"
msgstr ""
@@ -34051,253 +34736,253 @@ 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:9437
+#: c/c-decl.c:9423
#, gcc-internal-format
msgid "%<for%> loop initial declarations are only allowed in C99 or C11 mode"
msgstr ""
-#: c/c-decl.c:9442
+#: c/c-decl.c:9428
#, gcc-internal-format
msgid ""
"use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code"
msgstr ""
-#: c/c-decl.c:9477
+#: c/c-decl.c:9463
#, gcc-internal-format
msgid "declaration of static variable %qD in %<for%> loop initial declaration"
msgstr ""
-#: c/c-decl.c:9481
+#: c/c-decl.c:9467
#, gcc-internal-format
msgid ""
"declaration of %<extern%> variable %qD in %<for%> loop initial declaration"
msgstr ""
-#: c/c-decl.c:9488
+#: c/c-decl.c:9474
#, gcc-internal-format
msgid "%<struct %E%> declared in %<for%> loop initial declaration"
msgstr ""
-#: c/c-decl.c:9493
+#: c/c-decl.c:9479
#, gcc-internal-format
msgid "%<union %E%> declared in %<for%> loop initial declaration"
msgstr ""
-#: c/c-decl.c:9497
+#: c/c-decl.c:9483
#, gcc-internal-format
msgid "%<enum %E%> declared in %<for%> loop initial declaration"
msgstr ""
-#: c/c-decl.c:9501
+#: c/c-decl.c:9487
#, gcc-internal-format
msgid "declaration of non-variable %qD in %<for%> loop initial declaration"
msgstr ""
-#: c/c-decl.c:9749
+#: c/c-decl.c:9735
#, gcc-internal-format
msgid "incompatible address space qualifiers %qs and %qs"
msgstr ""
-#: c/c-decl.c:9807 c/c-decl.c:9814
+#: c/c-decl.c:9793 c/c-decl.c:9800
#, gcc-internal-format
msgid "duplicate %qE declaration specifier"
msgstr ""
-#: c/c-decl.c:9841 c/c-decl.c:10225 c/c-decl.c:10615
+#: c/c-decl.c:9827 c/c-decl.c:10211 c/c-decl.c:10601
#, gcc-internal-format
msgid "two or more data types in declaration specifiers"
msgstr ""
-#: c/c-decl.c:9853 cp/parser.c:27695
+#: c/c-decl.c:9839 cp/parser.c:27861
#, gcc-internal-format
msgid "%<long long long%> is too long for GCC"
msgstr ""
-#: c/c-decl.c:9866
+#: c/c-decl.c:9852
#, gcc-internal-format
msgid "ISO C90 does not support %<long long%>"
msgstr ""
-#: c/c-decl.c:10095 c/c-parser.c:8083
+#: c/c-decl.c:10081 c/c-parser.c:8153
#, gcc-internal-format
msgid "ISO C90 does not support complex types"
msgstr ""
-#: c/c-decl.c:10141
+#: c/c-decl.c:10127
#, gcc-internal-format
msgid "ISO C does not support saturating types"
msgstr ""
-#: c/c-decl.c:10212 c/c-decl.c:10772
+#: c/c-decl.c:10198 c/c-decl.c:10758
#, gcc-internal-format
msgid "duplicate %qE"
msgstr ""
-#: c/c-decl.c:10268
+#: c/c-decl.c:10254
#, gcc-internal-format
msgid "ISO C does not support %<__int%d%> types"
msgstr ""
-#: c/c-decl.c:10290
+#: c/c-decl.c:10276
#, gcc-internal-format
msgid "%<__int%d%> is not supported on this target"
msgstr ""
-#: c/c-decl.c:10333
+#: c/c-decl.c:10319
#, gcc-internal-format
msgid "ISO C90 does not support boolean types"
msgstr ""
-#: c/c-decl.c:10452
+#: c/c-decl.c:10438
#, gcc-internal-format
msgid "ISO C does not support the %<_Float%d%s%> type"
msgstr ""
-#: c/c-decl.c:10502
+#: c/c-decl.c:10488
#, gcc-internal-format
msgid "%<_Float%d%s%> is not supported on this target"
msgstr ""
-#: c/c-decl.c:10573
+#: c/c-decl.c:10559
#, gcc-internal-format
msgid "ISO C does not support decimal floating point"
msgstr ""
-#: c/c-decl.c:10596 c/c-decl.c:10862 c/c-parser.c:7581
+#: c/c-decl.c:10582 c/c-decl.c:10848 c/c-parser.c:7650
#, gcc-internal-format
msgid "fixed-point types not supported for this target"
msgstr ""
-#: c/c-decl.c:10598
+#: c/c-decl.c:10584
#, gcc-internal-format
msgid "ISO C does not support fixed-point types"
msgstr ""
-#: c/c-decl.c:10633
+#: c/c-decl.c:10619
#, gcc-internal-format
msgid "C++ lookup of %qD would return a field, not a type"
msgstr ""
-#: c/c-decl.c:10646
+#: c/c-decl.c:10632
#, gcc-internal-format
msgid "%qE fails to be a typedef or built in type"
msgstr ""
-#: c/c-decl.c:10694
+#: c/c-decl.c:10680
#, gcc-internal-format
msgid "%qE is not at beginning of declaration"
msgstr ""
-#: c/c-decl.c:10715
+#: c/c-decl.c:10701
#, gcc-internal-format
msgid "%qE used with %<auto%>"
msgstr ""
-#: c/c-decl.c:10717
+#: c/c-decl.c:10703
#, gcc-internal-format
msgid "%qE used with %<register%>"
msgstr ""
-#: c/c-decl.c:10719
+#: c/c-decl.c:10705
#, gcc-internal-format
msgid "%qE used with %<typedef%>"
msgstr ""
-#: c/c-decl.c:10733 c/c-parser.c:7162
+#: c/c-decl.c:10719 c/c-parser.c:7231
#, gcc-internal-format
msgid "ISO C99 does not support %qE"
msgstr ""
-#: c/c-decl.c:10736 c/c-parser.c:7165
+#: c/c-decl.c:10722 c/c-parser.c:7234
#, gcc-internal-format
msgid "ISO C90 does not support %qE"
msgstr ""
-#: c/c-decl.c:10748
+#: c/c-decl.c:10734
#, gcc-internal-format
msgid "%<__thread%> before %<extern%>"
msgstr ""
-#: c/c-decl.c:10757
+#: c/c-decl.c:10743
#, gcc-internal-format
msgid "%<__thread%> before %<static%>"
msgstr ""
-#: c/c-decl.c:10770
+#: c/c-decl.c:10756
#, gcc-internal-format
msgid "duplicate %<_Thread_local%> or %<__thread%>"
msgstr ""
-#: c/c-decl.c:10778
+#: c/c-decl.c:10764
#, gcc-internal-format
msgid "multiple storage classes in declaration specifiers"
msgstr ""
-#: c/c-decl.c:10786
+#: c/c-decl.c:10772
#, gcc-internal-format
msgid "%qs used with %qE"
msgstr ""
-#: c/c-decl.c:10859
+#: c/c-decl.c:10845
#, gcc-internal-format
msgid "%<_Sat%> is used without %<_Fract%> or %<_Accum%>"
msgstr ""
-#: c/c-decl.c:10874
+#: c/c-decl.c:10860
#, gcc-internal-format
msgid "ISO C does not support plain %<complex%> meaning %<double complex%>"
msgstr ""
-#: c/c-decl.c:10925 c/c-decl.c:10941 c/c-decl.c:10967
+#: c/c-decl.c:10911 c/c-decl.c:10927 c/c-decl.c:10953
#, gcc-internal-format
msgid "ISO C does not support complex integer types"
msgstr ""
-#: c/c-decl.c:11375 cp/semantics.c:5330
+#: c/c-decl.c:11349 cp/semantics.c:5376
#, 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:11379 cp/semantics.c:5334
+#: c/c-decl.c:11353 cp/semantics.c:5380
#, 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:11223 cp/typeck.c:4528
+#: c/c-fold.c:318 c/c-typeck.c:11232 cp/typeck.c:4581
#, gcc-internal-format
msgid "left shift of negative value"
msgstr ""
-#: c/c-fold.c:329 c/c-typeck.c:11232 cp/typeck.c:4536
+#: c/c-fold.c:328 c/c-typeck.c:11241 cp/typeck.c:4589
#, gcc-internal-format
msgid "left shift count is negative"
msgstr ""
-#: c/c-fold.c:330 c/c-typeck.c:11164 cp/typeck.c:4482
+#: c/c-fold.c:329 c/c-typeck.c:11173 cp/typeck.c:4535
#, gcc-internal-format
msgid "right shift count is negative"
msgstr ""
-#: c/c-fold.c:338 c/c-typeck.c:11251 cp/typeck.c:4544
+#: c/c-fold.c:337 c/c-typeck.c:11260 cp/typeck.c:4597
#, gcc-internal-format
msgid "left shift count >= width of type"
msgstr ""
-#: c/c-fold.c:339 c/c-typeck.c:11188 cp/typeck.c:4490
+#: c/c-fold.c:338 c/c-typeck.c:11197 cp/typeck.c:4543
#, gcc-internal-format
msgid "right shift count >= width of type"
msgstr ""
-#: c/c-fold.c:346 c/c-typeck.c:11243
+#: c/c-fold.c:345 c/c-typeck.c:11252
#, gcc-internal-format
msgid "left shift count >= width of vector element"
msgstr ""
-#: c/c-fold.c:347 c/c-typeck.c:11175
+#: c/c-fold.c:346 c/c-typeck.c:11184
#, gcc-internal-format
msgid "right shift count >= width of vector element"
msgstr ""
@@ -34312,89 +34997,89 @@ msgstr ""
msgid "version control conflict marker in file"
msgstr ""
-#: c/c-parser.c:1035 cp/parser.c:27907
+#: c/c-parser.c:1035 cp/parser.c:28073
#, gcc-internal-format
msgid "expected end of line"
msgstr ""
-#: c/c-parser.c:1340
+#: c/c-parser.c:1342
#, gcc-internal-format
msgid "ISO C forbids an empty translation unit"
msgstr ""
-#: c/c-parser.c:1444 c/c-parser.c:9204
+#: c/c-parser.c:1446 c/c-parser.c:9263
#, gcc-internal-format
msgid "ISO C does not allow extra %<;%> outside of a function"
msgstr ""
-#: c/c-parser.c:1604
+#: c/c-parser.c:1606
#, gcc-internal-format
msgid "unknown type name %qE; use %<struct%> keyword to refer to the type"
msgstr ""
-#: c/c-parser.c:1612
+#: c/c-parser.c:1614
#, gcc-internal-format
msgid "unknown type name %qE; use %<union%> keyword to refer to the type"
msgstr ""
-#: c/c-parser.c:1620
+#: c/c-parser.c:1622
#, gcc-internal-format
msgid "unknown type name %qE; use %<enum%> keyword to refer to the type"
msgstr ""
-#: c/c-parser.c:1631 c/c-parser.c:3858
+#: c/c-parser.c:1633 c/c-parser.c:3860
#, gcc-internal-format
msgid "unknown type name %qE; did you mean %qs?"
msgstr ""
-#: c/c-parser.c:1635 c/c-parser.c:2435 c/c-parser.c:3862
+#: c/c-parser.c:1637 c/c-parser.c:2437 c/c-parser.c:3864
#, gcc-internal-format
msgid "unknown type name %qE"
msgstr ""
-#: c/c-parser.c:1656 c/c-parser.c:10370 c/c-parser.c:15452 c/c-parser.c:15880
-#: c/c-parser.c:16356 cp/parser.c:35399 cp/parser.c:38423
+#: c/c-parser.c:1658 c/c-parser.c:10429 c/c-parser.c:15442 c/c-parser.c:15870
+#: c/c-parser.c:16346 cp/parser.c:35572 cp/parser.c:38597
#, gcc-internal-format
msgid "expected declaration specifiers"
msgstr ""
-#: c/c-parser.c:1666
+#: c/c-parser.c:1668
#, gcc-internal-format
msgid "%<__auto_type%> in empty declaration"
msgstr ""
-#: c/c-parser.c:1696 c/c-parser.c:3128
+#: c/c-parser.c:1698 c/c-parser.c:3130
#, gcc-internal-format
msgid "expected %<;%>, identifier or %<(%>"
msgstr ""
-#: c/c-parser.c:1714 cp/parser.c:29560 cp/parser.c:29634
+#: c/c-parser.c:1716 cp/parser.c:29726 cp/parser.c:29800
#, gcc-internal-format
msgid "prefix attributes are ignored for methods"
msgstr ""
-#: c/c-parser.c:1749
+#: c/c-parser.c:1751
#, gcc-internal-format
msgid "prefix attributes are ignored for implementations"
msgstr ""
-#: c/c-parser.c:1770
+#: c/c-parser.c:1772
#, gcc-internal-format
msgid "unexpected attribute"
msgstr ""
-#: c/c-parser.c:1780 c/c-parser.c:5040 c/c-parser.c:5381 cp/parser.c:10736
-#: cp/parser.c:10923
+#: c/c-parser.c:1782 c/c-parser.c:5042 c/c-parser.c:5385 cp/parser.c:10880
+#: cp/parser.c:11067
#, gcc-internal-format
msgid "%<fallthrough%> attribute not followed by %<;%>"
msgstr ""
-#: c/c-parser.c:1813
+#: c/c-parser.c:1815
#, gcc-internal-format
msgid "%<__auto_type%> requires a plain identifier as declarator"
msgstr ""
-#: c/c-parser.c:1830
+#: c/c-parser.c:1832
#, gcc-internal-format
msgid "data definition has no type or storage class"
msgstr ""
@@ -34402,28 +35087,28 @@ msgstr ""
#. This means there is an attribute specifier after
#. the declarator in a function definition. Provide
#. some more information for the user.
-#: c/c-parser.c:1845
+#: c/c-parser.c:1847
#, gcc-internal-format
msgid ""
"attributes should be specified before the declarator in a function definition"
msgstr ""
-#: c/c-parser.c:1872
+#: c/c-parser.c:1874
#, gcc-internal-format
msgid "%<__auto_type%> used with a bit-field initializer"
msgstr ""
-#: c/c-parser.c:1949 c/c-parser.c:2036
+#: c/c-parser.c:1951 c/c-parser.c:2038
#, gcc-internal-format
msgid "%<__auto_type%> requires an initialized data declaration"
msgstr ""
-#: c/c-parser.c:1999
+#: c/c-parser.c:2001
#, gcc-internal-format
msgid "%<__auto_type%> may only be used with a single declarator"
msgstr ""
-#: c/c-parser.c:2028 cp/parser.c:12739 cp/parser.c:12896
+#: c/c-parser.c:2030 cp/parser.c:12898 cp/parser.c:13055
#, gcc-internal-format
msgid "expected %<,%> or %<;%>"
msgstr ""
@@ -34431,269 +35116,269 @@ msgstr ""
#. This can appear in many cases looking nothing like a
#. function definition, so we don't give a more specific
#. error suggesting there was one.
-#: c/c-parser.c:2042 c/c-parser.c:2058
+#: c/c-parser.c:2044 c/c-parser.c:2060
#, gcc-internal-format
msgid "expected %<=%>, %<,%>, %<;%>, %<asm%> or %<__attribute__%>"
msgstr ""
-#: c/c-parser.c:2050
+#: c/c-parser.c:2052
#, gcc-internal-format
msgid "ISO C forbids nested functions"
msgstr ""
-#: c/c-parser.c:2206
+#: c/c-parser.c:2208
#, gcc-internal-format
msgid "ISO C99 does not support %<_Static_assert%>"
msgstr ""
-#: c/c-parser.c:2209
+#: c/c-parser.c:2211
#, gcc-internal-format
msgid "ISO C90 does not support %<_Static_assert%>"
msgstr ""
-#: c/c-parser.c:2234 c/c-parser.c:3930 c/c-parser.c:10428 cp/parser.c:38082
+#: c/c-parser.c:2236 c/c-parser.c:3932 c/c-parser.c:10487 cp/parser.c:38256
#, gcc-internal-format
msgid "expected string literal"
msgstr ""
-#: c/c-parser.c:2242
+#: c/c-parser.c:2244
#, gcc-internal-format
msgid "expression in static assertion is not an integer"
msgstr ""
-#: c/c-parser.c:2251
+#: c/c-parser.c:2253
#, gcc-internal-format
msgid "expression in static assertion is not an integer constant expression"
msgstr ""
-#: c/c-parser.c:2256
+#: c/c-parser.c:2258
#, gcc-internal-format
msgid "expression in static assertion is not constant"
msgstr ""
-#: c/c-parser.c:2261
+#: c/c-parser.c:2263
#, gcc-internal-format
msgid "static assertion failed: %E"
msgstr ""
-#: c/c-parser.c:2577
+#: c/c-parser.c:2579
#, gcc-internal-format
msgid "%<_Atomic%> in Objective-C"
msgstr ""
-#: c/c-parser.c:2580
+#: c/c-parser.c:2582
#, gcc-internal-format
msgid "ISO C99 does not support the %<_Atomic%> qualifier"
msgstr ""
-#: c/c-parser.c:2583
+#: c/c-parser.c:2585
#, gcc-internal-format
msgid "ISO C90 does not support the %<_Atomic%> qualifier"
msgstr ""
-#: c/c-parser.c:2610
+#: c/c-parser.c:2612
#, gcc-internal-format
msgid "%<_Atomic%> applied to a qualified type"
msgstr ""
-#: c/c-parser.c:2640
+#: c/c-parser.c:2642
#, gcc-internal-format
msgid "%<__GIMPLE%> only valid with -fgimple"
msgstr ""
-#: c/c-parser.c:2738
+#: c/c-parser.c:2740
#, gcc-internal-format
msgid "empty enum is invalid"
msgstr ""
-#: c/c-parser.c:2742 c/c-parser.c:3691 c/c-parser.c:4501 c/c-parser.c:4798
-#: c/c-parser.c:6267 c/c-parser.c:6354 c/c-parser.c:7032 c/c-parser.c:7642
-#: c/c-parser.c:7864 c/c-parser.c:7890 c/c-parser.c:8160 c/c-parser.c:8472
-#: c/c-parser.c:8509 c/c-parser.c:8788 c/c-parser.c:8837 c/c-parser.c:8997
-#: c/c-parser.c:9027 c/c-parser.c:9035 c/c-parser.c:9064 c/c-parser.c:9077
-#: c/c-parser.c:9382 c/c-parser.c:9506 c/c-parser.c:9947 c/c-parser.c:9982
-#: c/c-parser.c:10035 c/c-parser.c:10088 c/c-parser.c:10104 c/c-parser.c:10150
-#: c/c-parser.c:10742 c/c-parser.c:10783 c/c-parser.c:12755 c/c-parser.c:12989
-#: c/c-parser.c:14843 c/c-parser.c:17643 c/c-parser.c:17972
-#: c/gimple-parser.c:1008 c/gimple-parser.c:1046 cp/parser.c:27910
-#: cp/parser.c:30403 cp/parser.c:30433 cp/parser.c:30503 cp/parser.c:32602
-#: cp/parser.c:37796 cp/parser.c:38567
+#: c/c-parser.c:2744 c/c-parser.c:3693 c/c-parser.c:4503 c/c-parser.c:4800
+#: c/c-parser.c:6307 c/c-parser.c:6394 c/c-parser.c:7101 c/c-parser.c:7711
+#: c/c-parser.c:7934 c/c-parser.c:7960 c/c-parser.c:8230 c/c-parser.c:8542
+#: c/c-parser.c:8579 c/c-parser.c:8847 c/c-parser.c:8896 c/c-parser.c:9056
+#: c/c-parser.c:9086 c/c-parser.c:9094 c/c-parser.c:9123 c/c-parser.c:9136
+#: c/c-parser.c:9441 c/c-parser.c:9565 c/c-parser.c:10006 c/c-parser.c:10041
+#: c/c-parser.c:10094 c/c-parser.c:10147 c/c-parser.c:10163 c/c-parser.c:10209
+#: c/c-parser.c:10801 c/c-parser.c:10842 c/c-parser.c:12736 c/c-parser.c:12970
+#: c/c-parser.c:14833 c/c-parser.c:17633 c/c-parser.c:17962
+#: c/gimple-parser.c:1041 c/gimple-parser.c:1079 cp/parser.c:28076
+#: cp/parser.c:30569 cp/parser.c:30599 cp/parser.c:30669 cp/parser.c:32775
+#: cp/parser.c:37970 cp/parser.c:38741
#, gcc-internal-format
msgid "expected identifier"
msgstr ""
-#: c/c-parser.c:2780 cp/parser.c:18035
+#: c/c-parser.c:2782 cp/parser.c:18214
#, gcc-internal-format
msgid "comma at end of enumerator list"
msgstr ""
-#: c/c-parser.c:2786
+#: c/c-parser.c:2788
#, gcc-internal-format
msgid "expected %<,%> or %<}%>"
msgstr ""
-#: c/c-parser.c:2817
+#: c/c-parser.c:2819
#, gcc-internal-format
msgid "ISO C forbids forward references to %<enum%> types"
msgstr ""
-#: c/c-parser.c:2933
+#: c/c-parser.c:2935
#, gcc-internal-format
msgid "expected class name"
msgstr ""
-#: c/c-parser.c:2957
+#: c/c-parser.c:2959
#, gcc-internal-format
msgid "extra semicolon in struct or union specified"
msgstr ""
-#: c/c-parser.c:2986
+#: c/c-parser.c:2988
#, gcc-internal-format
msgid "no semicolon at end of struct or union"
msgstr ""
-#: c/c-parser.c:3090 c/c-parser.c:4297
+#: c/c-parser.c:3092 c/c-parser.c:4299
#, gcc-internal-format
msgid "expected specifier-qualifier-list"
msgstr ""
-#: c/c-parser.c:3101
+#: c/c-parser.c:3103
#, gcc-internal-format
msgid "ISO C forbids member declarations with no members"
msgstr ""
-#: c/c-parser.c:3191
+#: c/c-parser.c:3193
#, gcc-internal-format
msgid "expected %<,%>, %<;%> or %<}%>"
msgstr ""
-#: c/c-parser.c:3198
+#: c/c-parser.c:3200
#, gcc-internal-format
msgid "expected %<:%>, %<,%>, %<;%>, %<}%> or %<__attribute__%>"
msgstr ""
-#: c/c-parser.c:3251
+#: c/c-parser.c:3253
#, gcc-internal-format
msgid "%<typeof%> applied to a bit-field"
msgstr ""
-#: c/c-parser.c:3288
+#: c/c-parser.c:3290
#, gcc-internal-format
msgid "ISO C99 does not support %<_Alignas%>"
msgstr ""
-#: c/c-parser.c:3291
+#: c/c-parser.c:3293
#, gcc-internal-format
msgid "ISO C90 does not support %<_Alignas%>"
msgstr ""
-#: c/c-parser.c:3527
+#: c/c-parser.c:3529
#, gcc-internal-format
msgid "expected identifier or %<(%>"
msgstr ""
-#: c/c-parser.c:3588 c/c-parser.c:3617
+#: c/c-parser.c:3590 c/c-parser.c:3619
#, gcc-internal-format
msgid "array notations cannot be used in declaration"
msgstr ""
-#: c/c-parser.c:3757
+#: c/c-parser.c:3759
#, gcc-internal-format
msgid "ISO C requires a named argument before %<...%>"
msgstr ""
-#: c/c-parser.c:3869
+#: c/c-parser.c:3871
#, gcc-internal-format
msgid "expected declaration specifiers or %<...%>"
msgstr ""
-#: c/c-parser.c:3924
+#: c/c-parser.c:3926
#, gcc-internal-format
msgid "wide string literal in %<asm%>"
msgstr ""
-#: c/c-parser.c:4406
+#: c/c-parser.c:4408
#, gcc-internal-format
msgid "ISO C forbids empty initializer braces"
msgstr ""
-#: c/c-parser.c:4465
+#: c/c-parser.c:4467
#, gcc-internal-format
msgid "obsolete use of designated initializer with %<:%>"
msgstr ""
-#: c/c-parser.c:4610
+#: c/c-parser.c:4612
#, gcc-internal-format
msgid "ISO C forbids specifying range of elements to initialize"
msgstr ""
-#: c/c-parser.c:4622
+#: c/c-parser.c:4624
#, gcc-internal-format
msgid "ISO C90 forbids specifying subobject to initialize"
msgstr ""
-#: c/c-parser.c:4630
+#: c/c-parser.c:4632
#, gcc-internal-format
msgid "obsolete use of designated initializer without %<=%>"
msgstr ""
-#: c/c-parser.c:4813
+#: c/c-parser.c:4815
#, gcc-internal-format
msgid "ISO C forbids label declarations"
msgstr ""
-#: c/c-parser.c:4819 c/c-parser.c:4900 c/gimple-parser.c:162
+#: c/c-parser.c:4821 c/c-parser.c:4902 c/gimple-parser.c:161
#, gcc-internal-format
msgid "expected declaration or statement"
msgstr ""
-#: c/c-parser.c:4851 c/c-parser.c:4879
+#: c/c-parser.c:4853 c/c-parser.c:4881
#, gcc-internal-format
msgid "ISO C90 forbids mixed declarations and code"
msgstr ""
-#: c/c-parser.c:4908
+#: c/c-parser.c:4910
#, gcc-internal-format
msgid "expected %<}%> before %<else%>"
msgstr ""
-#: c/c-parser.c:4913 cp/parser.c:11041
+#: c/c-parser.c:4915 cp/parser.c:11185
#, gcc-internal-format
msgid "%<else%> without a previous %<if%>"
msgstr ""
-#: c/c-parser.c:4930
+#: c/c-parser.c:4932
#, gcc-internal-format
msgid "label at end of compound statement"
msgstr ""
-#: c/c-parser.c:4992
+#: c/c-parser.c:4994
#, gcc-internal-format
msgid "expected %<:%> or %<...%>"
msgstr ""
-#: c/c-parser.c:5044 c/c-parser.c:5385
+#: c/c-parser.c:5046 c/c-parser.c:5389
#, gcc-internal-format
msgid "only attribute %<fallthrough%> can be applied to a null statement"
msgstr ""
-#: c/c-parser.c:5050
+#: c/c-parser.c:5052
#, gcc-internal-format
msgid ""
"a label can only be part of a statement and a declaration is not a statement"
msgstr ""
-#: c/c-parser.c:5257 cp/parser.c:10588
+#: c/c-parser.c:5261 cp/parser.c:10728
#, gcc-internal-format
msgid "-fcilkplus must be enabled to use %<_Cilk_for%>"
msgstr ""
-#: c/c-parser.c:5267 cp/parser.c:10614
+#: c/c-parser.c:5271 cp/parser.c:10754
#, gcc-internal-format
msgid "-fcilkplus must be enabled to use %<_Cilk_sync%>"
msgstr ""
-#: c/c-parser.c:5294
+#: c/c-parser.c:5298
#, gcc-internal-format
msgid "expected identifier or %<*%>"
msgstr ""
@@ -34702,1272 +35387,1275 @@ 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:5402 c/gimple-parser.c:1391 cp/parser.c:10692
+#: c/c-parser.c:5406 c/gimple-parser.c:1434 cp/parser.c:10832
#, gcc-internal-format
msgid "expected statement"
msgstr ""
-#: c/c-parser.c:5506 cp/parser.c:12274
+#: c/c-parser.c:5512 cp/parser.c:12419
#, gcc-internal-format
msgid "suggest braces around empty body in an %<if%> statement"
msgstr ""
-#: c/c-parser.c:5540 cp/parser.c:12277
+#: c/c-parser.c:5554 cp/parser.c:12422
#, gcc-internal-format
msgid "suggest braces around empty body in an %<else%> statement"
msgstr ""
-#: c/c-parser.c:5622
+#: c/c-parser.c:5644
#, gcc-internal-format
msgid "if statement cannot contain %<Cilk_spawn%>"
msgstr ""
-#: c/c-parser.c:5672 cp/parser.c:11276
+#: c/c-parser.c:5694 cp/parser.c:11420
#, gcc-internal-format
msgid "suggest explicit braces to avoid ambiguous %<else%>"
msgstr ""
-#: c/c-parser.c:5815
+#: c/c-parser.c:5849
#, gcc-internal-format
msgid "suggest braces around empty body in %<do%> statement"
msgstr ""
-#: c/c-parser.c:5944 c/c-parser.c:5974
+#: c/c-parser.c:5978 c/c-parser.c:6008
#, gcc-internal-format
msgid "multiple iterating variables in fast enumeration"
msgstr ""
-#: c/c-parser.c:5998
+#: c/c-parser.c:6032
#, gcc-internal-format
msgid "invalid iterating variable in fast enumeration"
msgstr ""
-#: c/c-parser.c:6019 cp/parser.c:11477
+#: c/c-parser.c:6053 cp/parser.c:11621
#, gcc-internal-format
msgid "missing loop condition in loop with %<GCC ivdep%> pragma"
msgstr ""
-#: c/c-parser.c:6051
+#: c/c-parser.c:6085
#, gcc-internal-format
msgid "missing collection in fast enumeration"
msgstr ""
-#: c/c-parser.c:6137
+#: c/c-parser.c:6177
#, gcc-internal-format
msgid "%E qualifier ignored on asm"
msgstr ""
-#: c/c-parser.c:6180
+#: c/c-parser.c:6220
#, gcc-internal-format
msgid "expected %<:%> or %<)%>"
msgstr ""
-#: c/c-parser.c:6492
+#: c/c-parser.c:6532
#, gcc-internal-format
msgid "ISO C forbids omitting the middle term of a ?: expression"
msgstr ""
-#: c/c-parser.c:6995
+#. Location of the binary operator.
+#. Quiet warning.
+#: c/c-parser.c:6735 cp/typeck.c:4376
+#, gcc-internal-format
+msgid ""
+"division %<sizeof (%T) / sizeof (%T)%> does not compute the number of array "
+"elements"
+msgstr ""
+
+#: c/c-parser.c:6740 cp/typeck.c:4381
+#, gcc-internal-format
+msgid "first %<sizeof%> operand was declared here"
+msgstr ""
+
+#: c/c-parser.c:7064
#, gcc-internal-format
msgid "traditional C rejects the unary plus operator"
msgstr ""
-#: c/c-parser.c:7136
+#: c/c-parser.c:7205
#, gcc-internal-format
msgid "%<sizeof%> applied to a bit-field"
msgstr ""
-#: c/c-parser.c:7223
+#: c/c-parser.c:7292
#, gcc-internal-format
msgid "ISO C does not allow %<%E (expression)%>"
msgstr ""
-#: c/c-parser.c:7254
+#: c/c-parser.c:7323
#, gcc-internal-format
msgid "cannot take address of %qs"
msgstr ""
-#: c/c-parser.c:7337
+#: c/c-parser.c:7406
#, gcc-internal-format
msgid "ISO C99 does not support %<_Generic%>"
msgstr ""
-#: c/c-parser.c:7340
+#: c/c-parser.c:7409
#, gcc-internal-format
msgid "ISO C90 does not support %<_Generic%>"
msgstr ""
-#: c/c-parser.c:7407
+#: c/c-parser.c:7476
#, gcc-internal-format
msgid "%<_Generic%> association has function type"
msgstr ""
-#: c/c-parser.c:7410
+#: c/c-parser.c:7479
#, gcc-internal-format
msgid "%<_Generic%> association has incomplete type"
msgstr ""
-#: c/c-parser.c:7414
+#: c/c-parser.c:7483
#, gcc-internal-format
msgid "%<_Generic%> association has variable length type"
msgstr ""
-#: c/c-parser.c:7438
+#: c/c-parser.c:7507
#, gcc-internal-format
msgid "duplicate %<default%> case in %<_Generic%>"
msgstr ""
-#: c/c-parser.c:7439
+#: c/c-parser.c:7508
#, gcc-internal-format
msgid "original %<default%> is here"
msgstr ""
-#: c/c-parser.c:7447
+#: c/c-parser.c:7516
#, gcc-internal-format
msgid "%<_Generic%> specifies two compatible types"
msgstr ""
-#: c/c-parser.c:7448
+#: c/c-parser.c:7517
#, gcc-internal-format
msgid "compatible type is here"
msgstr ""
-#: c/c-parser.c:7471
+#: c/c-parser.c:7540
#, gcc-internal-format
msgid "%<_Generic%> selector matches multiple associations"
msgstr ""
-#: c/c-parser.c:7473
+#: c/c-parser.c:7542
#, gcc-internal-format
msgid "other match is here"
msgstr ""
-#: c/c-parser.c:7492
+#: c/c-parser.c:7561
#, gcc-internal-format
msgid ""
"%<_Generic%> selector of type %qT is not compatible with any association"
msgstr ""
-#: c/c-parser.c:7656 c/c-parser.c:8228 c/c-parser.c:8250 c/gimple-parser.c:928
-#: c/gimple-parser.c:934 c/gimple-parser.c:1408
+#: c/c-parser.c:7725 c/c-parser.c:8298 c/c-parser.c:8320 c/gimple-parser.c:961
+#: c/gimple-parser.c:967 c/gimple-parser.c:1451
#, gcc-internal-format
msgid "expected expression"
msgstr ""
-#: c/c-parser.c:7674
+#: c/c-parser.c:7743
#, gcc-internal-format
msgid "braced-group within expression allowed only inside a function"
msgstr ""
-#: c/c-parser.c:7688
+#: c/c-parser.c:7757
#, gcc-internal-format
msgid "ISO C forbids braced-groups within expressions"
msgstr ""
-#: c/c-parser.c:7736
+#: c/c-parser.c:7806
#, gcc-internal-format
msgid "ISO C does not support %<__FUNCTION__%> predefined identifier"
msgstr ""
-#: c/c-parser.c:7745
+#: c/c-parser.c:7815
#, gcc-internal-format
msgid "ISO C does not support %<__PRETTY_FUNCTION__%> predefined identifier"
msgstr ""
-#: c/c-parser.c:7754
+#: c/c-parser.c:7824
#, gcc-internal-format
msgid "ISO C90 does not support %<__func__%> predefined identifier"
msgstr ""
-#: c/c-parser.c:7917
+#: c/c-parser.c:7987
#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_choose_expr%>"
msgstr ""
-#: c/c-parser.c:7933
+#: c/c-parser.c:8003
#, gcc-internal-format
msgid "first argument to %<__builtin_choose_expr%> not a constant"
msgstr ""
-#: c/c-parser.c:8004
+#: c/c-parser.c:8074
#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_call_with_static_chain%>"
msgstr ""
-#: c/c-parser.c:8017
+#: c/c-parser.c:8087
#, gcc-internal-format
msgid ""
"first argument to %<__builtin_call_with_static_chain%> must be a call "
"expression"
msgstr ""
-#: c/c-parser.c:8021
+#: c/c-parser.c:8091
#, gcc-internal-format
msgid ""
"second argument to %<__builtin_call_with_static_chain%> must be a pointer "
"type"
msgstr ""
-#: c/c-parser.c:8047
+#: c/c-parser.c:8117
#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_complex%>"
msgstr ""
-#: c/c-parser.c:8069
+#: c/c-parser.c:8139
#, gcc-internal-format
msgid "%<__builtin_complex%> operand not of real binary floating-point type"
msgstr ""
-#: c/c-parser.c:8078
+#: c/c-parser.c:8148
#, gcc-internal-format
msgid "%<__builtin_complex%> operands of different types"
msgstr ""
-#: c/c-parser.c:8126 cp/parser.c:6679
+#: c/c-parser.c:8196 cp/parser.c:6718
#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_shuffle%>"
msgstr ""
-#: c/c-parser.c:8207 cp/parser.c:6590
+#: c/c-parser.c:8277 cp/parser.c:6629
#, gcc-internal-format
msgid "-fcilkplus must be enabled to use %<_Cilk_spawn%>"
msgstr ""
-#: c/c-parser.c:8214 cp/parser.c:6596
+#: c/c-parser.c:8284 cp/parser.c:6635
#, gcc-internal-format
msgid "consecutive %<_Cilk_spawn%> keywords are not permitted"
msgstr ""
-#: c/c-parser.c:8287
+#: c/c-parser.c:8357
#, gcc-internal-format
msgid "compound literal has variable size"
msgstr ""
-#: c/c-parser.c:8298
+#: c/c-parser.c:8368
#, gcc-internal-format
msgid "compound literal qualified by address-space qualifier"
msgstr ""
-#: c/c-parser.c:8302
+#: c/c-parser.c:8372
#, gcc-internal-format
msgid "ISO C90 forbids compound literals"
msgstr ""
-#: c/c-parser.c:8808
+#: c/c-parser.c:8867
#, gcc-internal-format
msgid "expected identifier or %<)%>"
msgstr ""
-#: c/c-parser.c:8904
+#: c/c-parser.c:8963
#, gcc-internal-format
msgid "extra semicolon"
msgstr ""
-#: c/c-parser.c:9152
+#: c/c-parser.c:9211
#, gcc-internal-format
msgid "extra semicolon in method definition specified"
msgstr ""
-#: c/c-parser.c:9284
+#: c/c-parser.c:9343
#, gcc-internal-format
msgid "method attributes must be specified at the end only"
msgstr ""
-#: c/c-parser.c:9304
+#: c/c-parser.c:9363
#, gcc-internal-format
msgid "expected %<;%> or %<{%> after method attribute definition"
msgstr ""
-#: c/c-parser.c:9425
+#: c/c-parser.c:9484
#, gcc-internal-format
msgid "objective-c method declaration is expected"
msgstr ""
-#: c/c-parser.c:9861
+#: c/c-parser.c:9920
#, gcc-internal-format
msgid "no type or storage class may be specified here,"
msgstr ""
-#: c/c-parser.c:9951 c/c-parser.c:10008 cp/parser.c:30463
+#: c/c-parser.c:10010 c/c-parser.c:10067 cp/parser.c:30629
#, gcc-internal-format
msgid "unknown property attribute"
msgstr ""
-#: c/c-parser.c:9972 cp/parser.c:30423
+#: c/c-parser.c:10031 cp/parser.c:30589
#, gcc-internal-format
msgid "missing %<=%> (after %<getter%> attribute)"
msgstr ""
-#: c/c-parser.c:9975 cp/parser.c:30426
+#: c/c-parser.c:10034 cp/parser.c:30592
#, gcc-internal-format
msgid "missing %<=%> (after %<setter%> attribute)"
msgstr ""
-#: c/c-parser.c:9989 cp/parser.c:30441
+#: c/c-parser.c:10048 cp/parser.c:30607
#, gcc-internal-format
msgid "the %<setter%> attribute may only be specified once"
msgstr ""
-#: c/c-parser.c:9994 cp/parser.c:30447
+#: c/c-parser.c:10053 cp/parser.c:30613
#, gcc-internal-format
msgid "setter name must terminate with %<:%>"
msgstr ""
-#: c/c-parser.c:10001 cp/parser.c:30455
+#: c/c-parser.c:10060 cp/parser.c:30621
#, gcc-internal-format
msgid "the %<getter%> attribute may only be specified once"
msgstr ""
-#: c/c-parser.c:10196 c/c-parser.c:15877 c/c-parser.c:16135 c/c-parser.c:16194
-#: c/c-parser.c:16278 cp/parser.c:35396 cp/parser.c:35690 cp/parser.c:35778
-#: cp/parser.c:35849 cp/parser.c:38160 cp/parser.c:38175 cp/parser.c:38191
-#: cp/parser.c:38207 cp/parser.c:38223 cp/parser.c:38251 cp/parser.c:38264
-#: cp/parser.c:38287 cp/parser.c:38300
+#: c/c-parser.c:10255 c/c-parser.c:15867 c/c-parser.c:16125 c/c-parser.c:16184
+#: c/c-parser.c:16268 cp/parser.c:35569 cp/parser.c:35863 cp/parser.c:35951
+#: cp/parser.c:36022 cp/parser.c:38334 cp/parser.c:38349 cp/parser.c:38365
+#: cp/parser.c:38381 cp/parser.c:38397 cp/parser.c:38425 cp/parser.c:38438
+#: cp/parser.c:38461 cp/parser.c:38474
#, gcc-internal-format
msgid "%<#pragma %s%> may only be used in compound statements"
msgstr ""
-#: c/c-parser.c:10219 cp/parser.c:38277
+#: c/c-parser.c:10278 cp/parser.c:38451
#, gcc-internal-format
msgid "%<#pragma acc routine%> must be at file scope"
msgstr ""
-#: c/c-parser.c:10297 cp/parser.c:38358
+#: c/c-parser.c:10356 cp/parser.c:38532
#, gcc-internal-format
msgid ""
"%<#pragma omp section%> may only be used in %<#pragma omp sections%> "
"construct"
msgstr ""
-#: c/c-parser.c:10316 cp/parser.c:38377
+#: c/c-parser.c:10375 cp/parser.c:38551
#, gcc-internal-format
msgid "for, while or do statement expected"
msgstr ""
-#: c/c-parser.c:10328 cp/parser.c:38150
+#: c/c-parser.c:10387 cp/parser.c:38324
#, gcc-internal-format
msgid "%<#pragma GCC pch_preprocess%> must be first"
msgstr ""
-#: c/c-parser.c:10341
+#: c/c-parser.c:10400
#, gcc-internal-format
msgid "%<#pragma grainsize%> ignored because -fcilkplus is not enabled"
msgstr ""
-#: c/c-parser.c:10349
+#: c/c-parser.c:10408
#, gcc-internal-format
msgid "%<#pragma grainsize%> must be inside a function"
msgstr ""
-#: c/c-parser.c:10668 cp/parser.c:30853
+#: c/c-parser.c:10727 cp/parser.c:31019
#, gcc-internal-format
msgid "too many %qs clauses"
msgstr ""
-#: c/c-parser.c:10689 cp/parser.c:31385
+#: c/c-parser.c:10748 cp/parser.c:31551
#, gcc-internal-format
msgid "expected integer expression before ')'"
msgstr ""
-#: c/c-parser.c:10704
+#: c/c-parser.c:10763
#, gcc-internal-format
msgid "expression must be integral"
msgstr ""
-#: c/c-parser.c:10987 c/c-parser.c:17504
+#: c/c-parser.c:11046 c/c-parser.c:17494
#, gcc-internal-format
msgid "%qD is not a variable"
msgstr ""
-#: c/c-parser.c:10991 cp/semantics.c:6815
+#: c/c-parser.c:11050 cp/semantics.c:6860
#, gcc-internal-format
msgid "%qD is not a pointer variable"
msgstr ""
-#: c/c-parser.c:11032 cp/parser.c:31463
+#: c/c-parser.c:11091 cp/parser.c:31629
#, gcc-internal-format
msgid "collapse argument needs positive constant integer expression"
msgstr ""
-#: c/c-parser.c:11102 cp/parser.c:31520
+#: c/c-parser.c:11167 cp/parser.c:31692
#, gcc-internal-format
-msgid "expected %<none%>"
+msgid "expected %<none%> or %<present%>"
msgstr ""
-#: c/c-parser.c:11104 cp/parser.c:31522
+#: c/c-parser.c:11169 cp/parser.c:31694
#, gcc-internal-format
msgid "expected %<none%> or %<shared%>"
msgstr ""
-#: c/c-parser.c:11204 cp/parser.c:31622
+#: c/c-parser.c:11269 cp/parser.c:31795
#, gcc-internal-format
msgid "expected %<data%>, %<update%>, %<enter%> or %<exit%>"
msgstr ""
-#: c/c-parser.c:11224 c/c-parser.c:16187 c/c-parser.c:16271 cp/parser.c:31640
-#: cp/parser.c:35682 cp/parser.c:35770
+#: c/c-parser.c:11289 c/c-parser.c:16177 c/c-parser.c:16261 cp/parser.c:31813
+#: cp/parser.c:35855 cp/parser.c:35943
#, gcc-internal-format
msgid "expected %<data%>"
msgstr ""
-#: c/c-parser.c:11271 cp/parser.c:31693
+#: c/c-parser.c:11336 cp/parser.c:31866
#, gcc-internal-format
msgid "too many %<if%> clauses with %qs modifier"
msgstr ""
-#: c/c-parser.c:11278 cp/parser.c:31700
+#: c/c-parser.c:11343 cp/parser.c:31873
#, gcc-internal-format
msgid "too many %<if%> clauses"
msgstr ""
-#: c/c-parser.c:11280 cp/parser.c:31702
+#: c/c-parser.c:11345 cp/parser.c:31875
#, gcc-internal-format
msgid "too many %<if%> clauses without modifier"
msgstr ""
-#: c/c-parser.c:11286 cp/parser.c:31708
+#: c/c-parser.c:11351 cp/parser.c:31881
#, gcc-internal-format
msgid ""
"if any %<if%> clause has modifier, then all %<if%> clauses have to use "
"modifier"
msgstr ""
-#: c/c-parser.c:11361 c/c-parser.c:11406 c/c-parser.c:11451 c/c-parser.c:11496
-#: c/c-parser.c:11541 c/c-parser.c:11587 c/c-parser.c:11692 c/c-parser.c:11819
-#: c/c-parser.c:11900 c/c-parser.c:12308 c/c-parser.c:12376 c/c-parser.c:12480
-#: c/c-parser.c:12524 c/c-parser.c:13043
+#: c/c-parser.c:11426 c/c-parser.c:11471 c/c-parser.c:11516 c/c-parser.c:11561
+#: c/c-parser.c:11607 c/c-parser.c:11845 c/c-parser.c:11926 c/c-parser.c:12334
+#: c/c-parser.c:12461 c/c-parser.c:12505 c/c-parser.c:13024
#, gcc-internal-format
msgid "expected integer expression"
msgstr ""
-#: c/c-parser.c:11372
-#, gcc-internal-format
-msgid "%<num_gangs%> value must be positive"
-msgstr ""
-
-#: c/c-parser.c:11417
+#: c/c-parser.c:11437
#, gcc-internal-format
msgid "%<num_threads%> value must be positive"
msgstr ""
-#: c/c-parser.c:11462
+#: c/c-parser.c:11482
#, gcc-internal-format
msgid "%<num_tasks%> value must be positive"
msgstr ""
-#: c/c-parser.c:11507 cp/semantics.c:6999
+#: c/c-parser.c:11527 cp/semantics.c:7044
#, gcc-internal-format
msgid "%<grainsize%> value must be positive"
msgstr ""
-#: c/c-parser.c:11553 cp/semantics.c:7028
+#: c/c-parser.c:11573 cp/semantics.c:7073
#, gcc-internal-format
msgid "%<priority%> value must be non-negative"
msgstr ""
-#: c/c-parser.c:11616 c/c-parser.c:11622 cp/parser.c:31919 cp/parser.c:31926
+#: c/c-parser.c:11636 c/c-parser.c:11642 cp/parser.c:32092 cp/parser.c:32099
#, gcc-internal-format
msgid "expected %<tofrom%>"
msgstr ""
-#: c/c-parser.c:11630 c/c-parser.c:11636 cp/parser.c:31935 cp/parser.c:31942
+#: c/c-parser.c:11650 c/c-parser.c:11656 cp/parser.c:32108 cp/parser.c:32115
#, gcc-internal-format
msgid "expected %<scalar%>"
msgstr ""
-#: c/c-parser.c:11703
+#: c/c-parser.c:11719 cp/semantics.c:6336
#, gcc-internal-format
-msgid "%<num_workers%> value must be positive"
+msgid "%qs expression must be integral"
msgstr ""
-#: c/c-parser.c:11767 cp/parser.c:31244
+#: c/c-parser.c:11731 c/c-parser.c:11854 cp/semantics.c:6368
#, gcc-internal-format
-msgid "too many %<static%> arguments"
+msgid "%qs value must be positive"
msgstr ""
-#: c/c-parser.c:11801 cp/parser.c:31277
+#: c/c-parser.c:11793 cp/parser.c:31410
#, gcc-internal-format
-msgid "unexpected argument"
+msgid "too many %<static%> arguments"
msgstr ""
-#: c/c-parser.c:11828 cp/semantics.c:6323
+#: c/c-parser.c:11827 cp/parser.c:31443
#, gcc-internal-format
-msgid "%qs value must be positive"
+msgid "unexpected argument"
msgstr ""
-#: c/c-parser.c:11967 cp/semantics.c:7128
+#: c/c-parser.c:11993 cp/semantics.c:7173
#, gcc-internal-format
msgid "%<tile%> argument needs positive integral constant"
msgstr ""
-#: c/c-parser.c:12032 cp/parser.c:31999
+#: c/c-parser.c:12058 cp/parser.c:32172
#, gcc-internal-format
msgid "ordered argument needs positive constant integer expression"
msgstr ""
-#: c/c-parser.c:12123 c/c-parser.c:16969 cp/parser.c:37091
+#: c/c-parser.c:12149 c/c-parser.c:16959 cp/parser.c:37267
#, gcc-internal-format
msgid ""
"expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%> or "
"identifier"
msgstr ""
-#: c/c-parser.c:12232 cp/parser.c:32212
+#: c/c-parser.c:12258 cp/parser.c:32385
#, gcc-internal-format
msgid "both %<monotonic%> and %<nonmonotonic%> modifiers specified"
msgstr ""
-#: c/c-parser.c:12286 cp/parser.c:32228
+#: c/c-parser.c:12312 cp/parser.c:32401
#, gcc-internal-format
msgid "schedule %<runtime%> does not take a %<chunk_size%> parameter"
msgstr ""
-#: c/c-parser.c:12290 cp/parser.c:32231
+#: c/c-parser.c:12316 cp/parser.c:32404
#, gcc-internal-format
msgid "schedule %<auto%> does not take a %<chunk_size%> parameter"
msgstr ""
-#: c/c-parser.c:12302 cp/semantics.c:6395
+#: c/c-parser.c:12328 cp/semantics.c:6440
#, gcc-internal-format
msgid "chunk size value must be positive"
msgstr ""
-#: c/c-parser.c:12325 cp/parser.c:32251
+#: c/c-parser.c:12351 cp/parser.c:32424
#, gcc-internal-format
msgid "invalid schedule kind"
msgstr ""
-#: c/c-parser.c:12387
-#, gcc-internal-format
-msgid "%<vector_length%> value must be positive"
-msgstr ""
-
-#: c/c-parser.c:12490
+#: c/c-parser.c:12471
#, gcc-internal-format
msgid "%<num_teams%> value must be positive"
msgstr ""
-#: c/c-parser.c:12534 cp/semantics.c:6486
+#: c/c-parser.c:12515 cp/semantics.c:6531
#, gcc-internal-format
msgid "%<thread_limit%> value must be positive"
msgstr ""
-#: c/c-parser.c:12578 cp/semantics.c:6596
+#: c/c-parser.c:12559 cp/semantics.c:6641
#, gcc-internal-format
msgid ""
"%<aligned%> clause alignment expression must be positive constant integer "
"expression"
msgstr ""
-#: c/c-parser.c:12641 cp/parser.c:32509
+#: c/c-parser.c:12622 cp/parser.c:32682
#, gcc-internal-format
msgid "using parameters for %<linear%> step is not supported yet"
msgstr ""
-#: c/c-parser.c:12646
+#: c/c-parser.c:12627
#, gcc-internal-format
msgid "%<linear%> clause step expression must be integral"
msgstr ""
-#: c/c-parser.c:12686
+#: c/c-parser.c:12667
#, gcc-internal-format
msgid ""
"%<safelen%> clause expression must be positive constant integer expression"
msgstr ""
-#: c/c-parser.c:12724
+#: c/c-parser.c:12705
#, gcc-internal-format
msgid ""
"%<simdlen%> clause expression must be positive constant integer expression"
msgstr ""
-#: c/c-parser.c:12893 cp/parser.c:32745 cp/parser.c:32968
+#: c/c-parser.c:12874 cp/parser.c:32918 cp/parser.c:33141
#, gcc-internal-format
msgid "invalid depend kind"
msgstr ""
-#: c/c-parser.c:12977 cp/parser.c:32818
+#: c/c-parser.c:12958 cp/parser.c:32991
#, gcc-internal-format
msgid "invalid map kind"
msgstr ""
-#: c/c-parser.c:13073 cp/parser.c:32915
+#: c/c-parser.c:13054 cp/parser.c:33088
#, gcc-internal-format
msgid "invalid dist_schedule kind"
msgstr ""
-#: c/c-parser.c:13144
+#: c/c-parser.c:13125
#, gcc-internal-format
msgid "invalid proc_bind kind"
msgstr ""
-#: c/c-parser.c:13357 cp/parser.c:33193
+#: c/c-parser.c:13344 cp/parser.c:33366
#, gcc-internal-format
msgid "expected %<#pragma acc%> clause"
msgstr ""
-#: c/c-parser.c:13368 c/c-parser.c:13651 cp/parser.c:33204 cp/parser.c:33520
+#: c/c-parser.c:13355 c/c-parser.c:13638 cp/parser.c:33377 cp/parser.c:33693
#, gcc-internal-format
msgid "%qs is not valid for %qs"
msgstr ""
-#: c/c-parser.c:13514 cp/parser.c:33380
+#: c/c-parser.c:13501 cp/parser.c:33553
#, gcc-internal-format
msgid "%qs must be the first clause of %qs"
msgstr ""
-#: c/c-parser.c:13640 cp/parser.c:33509
+#: c/c-parser.c:13627 cp/parser.c:33682
#, gcc-internal-format
msgid "expected %<#pragma omp%> clause"
msgstr ""
-#: c/c-parser.c:13778 cp/parser.c:36195
+#: c/c-parser.c:13765 cp/parser.c:36368
#, gcc-internal-format
msgid "no valid clauses specified in %<#pragma acc declare%>"
msgstr ""
-#: c/c-parser.c:13788 cp/parser.c:36205
+#: c/c-parser.c:13775 cp/parser.c:36378
#, gcc-internal-format
msgid "array section in %<#pragma acc declare%>"
msgstr ""
-#: c/c-parser.c:13808 cp/parser.c:36225
+#: c/c-parser.c:13795 cp/parser.c:36398
#, gcc-internal-format
msgid "%qD must be a global variable in %<#pragma acc declare link%>"
msgstr ""
-#: c/c-parser.c:13819 cp/parser.c:36236
+#: c/c-parser.c:13806 cp/parser.c:36409
#, gcc-internal-format
msgid "invalid OpenACC clause at file scope"
msgstr ""
-#: c/c-parser.c:13826 cp/parser.c:36243
+#: c/c-parser.c:13813 cp/parser.c:36416
#, gcc-internal-format
msgid "invalid use of %<extern%> variable %qD in %<#pragma acc declare%>"
msgstr ""
-#: c/c-parser.c:13834 cp/parser.c:36251
+#: c/c-parser.c:13821 cp/parser.c:36424
#, gcc-internal-format
msgid "invalid use of %<global%> variable %qD in %<#pragma acc declare%>"
msgstr ""
-#: c/c-parser.c:13846 cp/parser.c:36263
+#: c/c-parser.c:13833 cp/parser.c:36436
#, gcc-internal-format
msgid "variable %qD used more than once with %<#pragma acc declare%>"
msgstr ""
-#: c/c-parser.c:13938 cp/parser.c:36349
+#: c/c-parser.c:13925 cp/parser.c:36522
#, gcc-internal-format
msgid "expected %<data%> after %<#pragma acc %s%>"
msgstr ""
-#: c/c-parser.c:13954 cp/parser.c:36366
+#: c/c-parser.c:13941 cp/parser.c:36539
#, gcc-internal-format
msgid "%<#pragma acc %s data%> has no data movement clause"
msgstr ""
-#: c/c-parser.c:14177 cp/parser.c:2845
+#: c/c-parser.c:14167 cp/parser.c:2845
#, gcc-internal-format
msgid "%qE has not been declared"
msgstr ""
-#: c/c-parser.c:14181
+#: c/c-parser.c:14171
#, gcc-internal-format
msgid "expected function name"
msgstr ""
-#: c/c-parser.c:14196 cp/parser.c:37510
+#: c/c-parser.c:14186 cp/parser.c:37684
#, gcc-internal-format
msgid "%qD does not refer to a function"
msgstr ""
-#: c/c-parser.c:14216 c/c-parser.c:14264 cp/parser.c:1395
+#: c/c-parser.c:14206 c/c-parser.c:14254 cp/parser.c:1395
#, gcc-internal-format
msgid ""
"%<#pragma acc routine%> not immediately followed by function declaration or "
"definition"
msgstr ""
-#: c/c-parser.c:14256 cp/parser.c:37564 cp/parser.c:37606
+#: c/c-parser.c:14246 cp/parser.c:37738 cp/parser.c:37780
#, gcc-internal-format
msgid ""
"%<#pragma acc routine%> not immediately followed by a single function "
"declaration or definition"
msgstr ""
-#: c/c-parser.c:14273 cp/parser.c:37620
+#: c/c-parser.c:14263 cp/parser.c:37794
#, gcc-internal-format
msgid "%<#pragma acc routine%> already applied to %qD"
msgstr ""
-#: c/c-parser.c:14282 cp/parser.c:37629
+#: c/c-parser.c:14272 cp/parser.c:37803
#, gcc-internal-format
msgid "%<#pragma acc routine%> must be applied before use"
msgstr ""
-#: c/c-parser.c:14283 cp/parser.c:37630
+#: c/c-parser.c:14273 cp/parser.c:37804
#, gcc-internal-format
msgid "%<#pragma acc routine%> must be applied before definition"
msgstr ""
-#: c/c-parser.c:14326 cp/parser.c:36541
+#: c/c-parser.c:14316 cp/parser.c:36717
#, gcc-internal-format
msgid ""
"%<#pragma acc update%> must contain at least one %<device%> or %<host%> or "
"%<self%> clause"
msgstr ""
-#: c/c-parser.c:14734 cp/parser.c:33891 cp/parser.c:33917
+#: c/c-parser.c:14724 cp/parser.c:34064 cp/parser.c:34090
#, gcc-internal-format
msgid "invalid form of %<#pragma omp atomic%>"
msgstr ""
-#: c/c-parser.c:14738 cp/parser.c:33948 cp/parser.c:33964
+#: c/c-parser.c:14728 cp/parser.c:34121 cp/parser.c:34137
#, gcc-internal-format
msgid "invalid operator for %<#pragma omp atomic%>"
msgstr ""
-#: c/c-parser.c:14787 cp/semantics.c:8525 cp/semantics.c:8535
+#: c/c-parser.c:14777 cp/semantics.c:8570 cp/semantics.c:8580
#, gcc-internal-format
msgid ""
"%<#pragma omp atomic capture%> uses two different expressions for memory"
msgstr ""
-#: c/c-parser.c:14852 c/c-parser.c:14874
+#: c/c-parser.c:14842 c/c-parser.c:14864
#, gcc-internal-format
msgid "expected %<(%> or end of line"
msgstr ""
-#: c/c-parser.c:14918 cp/parser.c:34495
+#: c/c-parser.c:14908 cp/parser.c:34668
#, gcc-internal-format
msgid "%<ordered%> clause parameter is less than %<collapse%>"
msgstr ""
-#: c/c-parser.c:14929 cp/parser.c:34506
+#: c/c-parser.c:14919 cp/parser.c:34679
#, gcc-internal-format
msgid ""
"%<linear%> clause may not be specified together with %<ordered%> clause with "
"a parameter"
msgstr ""
-#: c/c-parser.c:14948 cp/parser.c:34534 cp/parser.c:38744
+#: c/c-parser.c:14938 cp/parser.c:34707 cp/parser.c:38918
#, gcc-internal-format
msgid "for statement expected"
msgstr ""
-#: c/c-parser.c:14954 cp/parser.c:34541
+#: c/c-parser.c:14944 cp/parser.c:34714
#, gcc-internal-format
msgid "_Cilk_for statement expected"
msgstr ""
-#: c/c-parser.c:15023 cp/semantics.c:8074 cp/semantics.c:8161
+#: c/c-parser.c:15013 cp/semantics.c:8119 cp/semantics.c:8206
#, gcc-internal-format
msgid "expected iteration declaration or initialization"
msgstr ""
-#: c/c-parser.c:15108
+#: c/c-parser.c:15098
#, gcc-internal-format
msgid "not enough perfectly nested loops"
msgstr ""
-#: c/c-parser.c:15167 cp/parser.c:34767
+#: c/c-parser.c:15157 cp/parser.c:34940
#, gcc-internal-format
msgid "collapsed loops not perfectly nested"
msgstr ""
-#: c/c-parser.c:15214 cp/parser.c:34584 cp/parser.c:34626 cp/pt.c:15511
+#: c/c-parser.c:15204 cp/parser.c:34757 cp/parser.c:34799 cp/pt.c:15567
#, gcc-internal-format
msgid "iteration variable %qD should not be firstprivate"
msgstr ""
-#: c/c-parser.c:15305 cp/parser.c:34840
+#: c/c-parser.c:15295 cp/parser.c:35013
#, gcc-internal-format
msgid "%<ordered%> clause with parameter may not be specified on %qs construct"
msgstr ""
-#: c/c-parser.c:15466 cp/parser.c:34998
+#: c/c-parser.c:15456 cp/parser.c:35171
#, gcc-internal-format
msgid ""
"%<#pragma omp ordered%> with %<depend%> clause may only be used in compound "
"statements"
msgstr ""
-#: c/c-parser.c:15669 cp/parser.c:35191
+#: c/c-parser.c:15659 cp/parser.c:35364
#, gcc-internal-format
msgid "expected %<for%> after %qs"
msgstr ""
-#: c/c-parser.c:15868 cp/parser.c:35387
+#: c/c-parser.c:15858 cp/parser.c:35560
#, gcc-internal-format
msgid "expected %<point%>"
msgstr ""
-#: c/c-parser.c:16088 cp/parser.c:35624
+#: c/c-parser.c:16078 cp/parser.c:35797
#, 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:16101 cp/parser.c:35637
+#: c/c-parser.c:16091 cp/parser.c:35810
#, gcc-internal-format
msgid "%<#pragma omp target data%> must contain at least one %<map%> clause"
msgstr ""
-#: c/c-parser.c:16148 cp/parser.c:35862
+#: c/c-parser.c:16138 cp/parser.c:36035
#, gcc-internal-format
msgid ""
"%<#pragma omp target update%> must contain at least one %<from%> or %<to%> "
"clauses"
msgstr ""
-#: c/c-parser.c:16220 cp/parser.c:35717
+#: c/c-parser.c:16210 cp/parser.c:35890
#, 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:16232 cp/parser.c:35729
+#: c/c-parser.c:16222 cp/parser.c:35902
#, gcc-internal-format
msgid ""
"%<#pragma omp target enter data%> must contain at least one %<map%> clause"
msgstr ""
-#: c/c-parser.c:16306 cp/parser.c:35806
+#: c/c-parser.c:16296 cp/parser.c:35979
#, 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:16319 cp/parser.c:35819
+#: c/c-parser.c:16309 cp/parser.c:35992
#, gcc-internal-format
msgid ""
"%<#pragma omp target exit data%> must contain at least one %<map%> clause"
msgstr ""
-#: c/c-parser.c:16533 cp/parser.c:36072
+#: c/c-parser.c:16523 cp/parser.c:36245
#, 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:16583
+#: c/c-parser.c:16573
#, 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:16632 c/c-parser.c:16660
+#: c/c-parser.c:16622 c/c-parser.c:16650
#, gcc-internal-format
msgid ""
"%<#pragma omp declare simd%> must be followed by function declaration or "
"definition"
msgstr ""
-#: c/c-parser.c:16680 cp/parser.c:36664
+#: c/c-parser.c:16670 cp/parser.c:36840
#, 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:16694
+#: c/c-parser.c:16684
#, gcc-internal-format
msgid ""
"%<#pragma omp declare simd%> not immediately followed by a function "
"declaration or definition"
msgstr ""
-#: c/c-parser.c:16702 cp/parser.c:36723
+#: c/c-parser.c:16692 cp/parser.c:36899
#, gcc-internal-format
msgid ""
"%<#pragma omp declare simd%> not immediately followed by a single function "
"declaration or definition"
msgstr ""
-#: c/c-parser.c:16818 cp/parser.c:36793
+#: c/c-parser.c:16808 cp/parser.c:36969
#, 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:16837 cp/parser.c:36812
+#: c/c-parser.c:16827 cp/parser.c:36988
#, gcc-internal-format
msgid "%qD specified both in declare target %<link%> and %<to%> clauses"
msgstr ""
-#: c/c-parser.c:16878 cp/parser.c:36859
+#: c/c-parser.c:16868 cp/parser.c:37035
#, gcc-internal-format
msgid "expected %<target%>"
msgstr ""
-#: c/c-parser.c:16885 cp/parser.c:36866
+#: c/c-parser.c:16875 cp/parser.c:37042
#, gcc-internal-format
msgid "expected %<declare%>"
msgstr ""
-#: c/c-parser.c:16891 cp/parser.c:36873
+#: c/c-parser.c:16881 cp/parser.c:37049
#, gcc-internal-format
msgid ""
"%<#pragma omp end declare target%> without corresponding %<#pragma omp "
"declare target%>"
msgstr ""
-#: c/c-parser.c:16919
+#: c/c-parser.c:16909
#, gcc-internal-format
msgid "%<#pragma omp declare reduction%> not at file or block scope"
msgstr ""
-#: c/c-parser.c:16996
+#: c/c-parser.c:16986
#, gcc-internal-format
msgid "predeclared arithmetic type in %<#pragma omp declare reduction%>"
msgstr ""
-#: c/c-parser.c:17000
+#: c/c-parser.c:16990
#, gcc-internal-format
msgid "function or array type in %<#pragma omp declare reduction%>"
msgstr ""
-#: c/c-parser.c:17003
+#: c/c-parser.c:16993
#, gcc-internal-format
msgid "%<_Atomic%> qualified type in %<#pragma omp declare reduction%>"
msgstr ""
-#: c/c-parser.c:17006
+#: c/c-parser.c:16996
#, gcc-internal-format
msgid ""
"const, volatile or restrict qualified type in %<#pragma omp declare reduction"
"%>"
msgstr ""
-#: c/c-parser.c:17014
+#: c/c-parser.c:17004
#, gcc-internal-format
msgid "redeclaration of %qs %<#pragma omp declare reduction%> for type %qT"
msgstr ""
-#: c/c-parser.c:17023
+#: c/c-parser.c:17013
#, gcc-internal-format
msgid "previous %<#pragma omp declare reduction%>"
msgstr ""
-#: c/c-parser.c:17140
+#: c/c-parser.c:17130
#, gcc-internal-format
msgid "expected %<omp_priv%> or function-name"
msgstr ""
-#: c/c-parser.c:17151
+#: c/c-parser.c:17141
#, gcc-internal-format
msgid "expected function-name %<(%>"
msgstr ""
-#: c/c-parser.c:17170
+#: c/c-parser.c:17160
#, gcc-internal-format
msgid "one of the initializer call arguments should be %<&omp_priv%>"
msgstr ""
-#: c/c-parser.c:17291 cp/parser.c:37318
+#: c/c-parser.c:17281 cp/parser.c:37492
#, gcc-internal-format
msgid "expected %<simd%> or %<reduction%> or %<target%>"
msgstr ""
-#: c/c-parser.c:17506 cp/semantics.c:7539
+#: c/c-parser.c:17496 cp/semantics.c:7584
#, gcc-internal-format
msgid "%qE declared %<threadprivate%> after first use"
msgstr ""
-#: c/c-parser.c:17508 cp/semantics.c:7541
+#: c/c-parser.c:17498 cp/semantics.c:7586
#, gcc-internal-format
msgid "automatic variable %qE cannot be %<threadprivate%>"
msgstr ""
-#: c/c-parser.c:17512 cp/semantics.c:7543
+#: c/c-parser.c:17502 cp/semantics.c:7588
#, gcc-internal-format
msgid "%<threadprivate%> %qE has incomplete type"
msgstr ""
-#: c/c-parser.c:17543
+#: c/c-parser.c:17533
#, gcc-internal-format
msgid "pragma simd ignored because -fcilkplus is not enabled"
msgstr ""
-#: c/c-parser.c:17549
+#: c/c-parser.c:17539
#, gcc-internal-format
msgid "pragma simd must be inside a function"
msgstr ""
-#: c/c-parser.c:17593 cp/parser.c:38515
+#: c/c-parser.c:17583 cp/parser.c:38689
#, gcc-internal-format
msgid "vectorlength must be an integer constant"
msgstr ""
-#: c/c-parser.c:17595 cp/parser.c:38518
+#: c/c-parser.c:17585 cp/parser.c:38692
#, gcc-internal-format
msgid "vectorlength must be a power of 2"
msgstr ""
-#: c/c-parser.c:17678 cp/parser.c:38625
+#: c/c-parser.c:17668 cp/parser.c:38799
#, gcc-internal-format
msgid "step size must be an integer constant expression or an integer variable"
msgstr ""
-#: c/c-parser.c:17777 cp/parser.c:38718
+#: c/c-parser.c:17767 cp/parser.c:38892
#, gcc-internal-format
msgid "expected %<#pragma simd%> clause"
msgstr ""
-#: c/c-parser.c:17821 cp/parser.c:38121
+#: c/c-parser.c:17811 cp/parser.c:38295
#, gcc-internal-format
msgid "%<#pragma cilk grainsize%> is not followed by %<_Cilk_for%>"
msgstr ""
-#: c/c-parser.c:18121 cp/parser.c:38013
+#: c/c-parser.c:18111 cp/parser.c:38187
#, gcc-internal-format
msgid "%<__transaction_cancel%> without transactional memory support enabled"
msgstr ""
-#: c/c-parser.c:18127 cp/parser.c:38019
+#: c/c-parser.c:18117 cp/parser.c:38193
#, gcc-internal-format
msgid "%<__transaction_cancel%> within a %<__transaction_relaxed%>"
msgstr ""
-#: c/c-parser.c:18136 cp/parser.c:38028
+#: c/c-parser.c:18126 cp/parser.c:38202
#, gcc-internal-format
msgid ""
"outer %<__transaction_cancel%> not within outer %<__transaction_atomic%>"
msgstr ""
-#: c/c-parser.c:18138 cp/parser.c:38031
+#: c/c-parser.c:18128 cp/parser.c:38205
#, gcc-internal-format
msgid " or a %<transaction_may_cancel_outer%> function"
msgstr ""
-#: c/c-parser.c:18144 cp/parser.c:38037
+#: c/c-parser.c:18134 cp/parser.c:38211
#, gcc-internal-format
msgid "%<__transaction_cancel%> not within %<__transaction_atomic%>"
msgstr ""
-#: c/c-parser.c:18212 cp/cp-array-notation.c:1411
+#: c/c-parser.c:18202 cp/cp-array-notation.c:1411
#, gcc-internal-format
msgid "base of array section must be pointer or array type"
msgstr ""
-#: c/c-parser.c:18221 cp/parser.c:7107
+#: c/c-parser.c:18211 cp/parser.c:7146
#, gcc-internal-format
msgid "expected %<:%> or numeral"
msgstr ""
-#: c/c-parser.c:18232
+#: c/c-parser.c:18222
#, gcc-internal-format
msgid ""
"start-index and length fields necessary for using array notations in pointers"
msgstr ""
-#: c/c-parser.c:18239 c/c-parser.c:18282
+#: c/c-parser.c:18229 c/c-parser.c:18272
#, gcc-internal-format
msgid "array notations cannot be used with function type"
msgstr ""
-#: c/c-parser.c:18248
+#: c/c-parser.c:18238
#, gcc-internal-format
msgid ""
"start-index and length fields necessary for using array notations in "
"dimensionless arrays"
msgstr ""
-#: c/c-parser.c:18260
+#: c/c-parser.c:18250
#, gcc-internal-format
msgid ""
"start-index and length fields necessary for using array notations in "
"variable-length arrays"
msgstr ""
-#: c/c-parser.c:18310 c/c-parser.c:18313
+#: c/c-parser.c:18300 c/c-parser.c:18303
#, gcc-internal-format
msgid "expected array notation expression"
msgstr ""
-#: c/c-parser.c:18364
+#: c/c-parser.c:18354
#, gcc-internal-format
msgid "no closing brace"
msgstr ""
-#: c/c-typeck.c:220
+#: c/c-typeck.c:222
#, gcc-internal-format
msgid "%qD has an incomplete type %qT"
msgstr ""
-#: c/c-typeck.c:234 c/c-typeck.c:9741 c/c-typeck.c:9783 cp/call.c:4090
+#: c/c-typeck.c:236 c/c-typeck.c:9749 c/c-typeck.c:9791 cp/call.c:4140
#, gcc-internal-format
msgid "invalid use of void expression"
msgstr ""
-#: c/c-typeck.c:242
+#: c/c-typeck.c:244
#, gcc-internal-format
msgid "invalid use of flexible array member"
msgstr ""
-#: c/c-typeck.c:248 cp/typeck2.c:503
+#: c/c-typeck.c:250 cp/typeck2.c:503
#, gcc-internal-format
msgid "invalid use of array with unspecified bounds"
msgstr ""
-#: c/c-typeck.c:256
+#: c/c-typeck.c:258
#, gcc-internal-format
msgid "invalid use of undefined type %qT"
msgstr ""
#. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL.
-#: c/c-typeck.c:259
+#: c/c-typeck.c:261
#, gcc-internal-format
msgid "invalid use of incomplete typedef %qT"
msgstr ""
-#: c/c-typeck.c:332
+#: c/c-typeck.c:334
#, gcc-internal-format
msgid "%qT and %qT are in disjoint named address spaces"
msgstr ""
-#: c/c-typeck.c:573 c/c-typeck.c:598
+#: c/c-typeck.c:575 c/c-typeck.c:600
#, gcc-internal-format
msgid "function types not truly compatible in ISO C"
msgstr ""
-#: c/c-typeck.c:742
+#: c/c-typeck.c:744
#, gcc-internal-format
msgid "can%'t mix operands of decimal float and vector types"
msgstr ""
-#: c/c-typeck.c:747
+#: c/c-typeck.c:749
#, gcc-internal-format
msgid "can%'t mix operands of decimal float and complex types"
msgstr ""
-#: c/c-typeck.c:752
+#: c/c-typeck.c:754
#, gcc-internal-format
msgid "can%'t mix operands of decimal float and other float types"
msgstr ""
-#: c/c-typeck.c:1290
+#: c/c-typeck.c:1292
#, gcc-internal-format
msgid "pointers to arrays with different qualifiers are incompatible in ISO C"
msgstr ""
-#: c/c-typeck.c:1294
+#: c/c-typeck.c:1296
#, gcc-internal-format
msgid "types are not quite compatible"
msgstr ""
-#: c/c-typeck.c:1298
+#: c/c-typeck.c:1300
#, gcc-internal-format
msgid "pointer target types incompatible in C++"
msgstr ""
-#: c/c-typeck.c:1630
+#: c/c-typeck.c:1633
#, gcc-internal-format
msgid "function return types not compatible due to %<volatile%>"
msgstr ""
-#: c/c-typeck.c:1880
+#: c/c-typeck.c:1883
#, gcc-internal-format
msgid "converting an array compound literal to a pointer is ill-formed in C++"
msgstr ""
-#: c/c-typeck.c:2404 c/c-typeck.c:8388
+#: c/c-typeck.c:2407 c/c-typeck.c:8395
#, gcc-internal-format
msgid "%qT has no member named %qE; did you mean %qE?"
msgstr ""
-#: c/c-typeck.c:2408 c/c-typeck.c:8392
+#: c/c-typeck.c:2411 c/c-typeck.c:8399
#, gcc-internal-format
msgid "%qT has no member named %qE"
msgstr ""
-#: c/c-typeck.c:2417
+#: c/c-typeck.c:2420
#, gcc-internal-format
msgid "accessing a member %qE of an atomic structure %qE"
msgstr ""
-#: c/c-typeck.c:2420
+#: c/c-typeck.c:2423
#, gcc-internal-format
msgid "accessing a member %qE of an atomic union %qE"
msgstr ""
-#: c/c-typeck.c:2480
+#: c/c-typeck.c:2483
#, gcc-internal-format
msgid "%qE is a pointer; did you mean to use %<->%>?"
msgstr ""
-#: c/c-typeck.c:2486
+#: c/c-typeck.c:2489
#, gcc-internal-format
msgid "request for member %qE in something not a structure or union"
msgstr ""
-#: c/c-typeck.c:2537
+#: c/c-typeck.c:2540
#, gcc-internal-format
msgid "dereferencing pointer to incomplete type %qT"
msgstr ""
-#: c/c-typeck.c:2544
+#: c/c-typeck.c:2547
#, gcc-internal-format
msgid "dereferencing %<void *%> pointer"
msgstr ""
-#: c/c-typeck.c:2597
+#: c/c-typeck.c:2600
#, gcc-internal-format
msgid "rank of the array's index is greater than 1"
msgstr ""
-#: c/c-typeck.c:2610
+#: c/c-typeck.c:2613
#, gcc-internal-format
msgid "subscripted value is neither array nor pointer nor vector"
msgstr ""
-#: c/c-typeck.c:2620 cp/typeck.c:3200 cp/typeck.c:3287
+#: c/c-typeck.c:2623 cp/typeck.c:3230 cp/typeck.c:3317
#, gcc-internal-format
msgid "array subscript is not an integer"
msgstr ""
-#: c/c-typeck.c:2626
+#: c/c-typeck.c:2629
#, gcc-internal-format
msgid "subscripted value is pointer to function"
msgstr ""
-#: c/c-typeck.c:2680
+#: c/c-typeck.c:2683
#, gcc-internal-format
msgid "ISO C forbids subscripting %<register%> array"
msgstr ""
-#: c/c-typeck.c:2683
+#: c/c-typeck.c:2686
#, gcc-internal-format
msgid "ISO C90 forbids subscripting non-lvalue array"
msgstr ""
-#: c/c-typeck.c:2797
+#: c/c-typeck.c:2800
#, gcc-internal-format
msgid "enum constant defined here"
msgstr ""
-#: c/c-typeck.c:2903 cp/typeck.c:1646
+#: c/c-typeck.c:2906 cp/typeck.c:1638
#, gcc-internal-format
msgid "%<sizeof%> on array function parameter %qE will return size of %qT"
msgstr ""
-#: c/c-typeck.c:3053
+#: c/c-typeck.c:3058
#, gcc-internal-format
msgid "called object %qE is not a function or function pointer"
msgstr ""
-#: c/c-typeck.c:3058
+#: c/c-typeck.c:3063
#, gcc-internal-format
msgid "called object %qD is not a function or function pointer"
msgstr ""
-#: c/c-typeck.c:3064
+#: c/c-typeck.c:3069
#, gcc-internal-format
msgid "called object is not a function or function pointer"
msgstr ""
@@ -35975,403 +36663,403 @@ msgstr ""
#. This situation leads to run-time undefined behavior. We can't,
#. therefore, simply error unless we can prove that all possible
#. executions of the program must execute the code.
-#: c/c-typeck.c:3094
+#: c/c-typeck.c:3099
#, gcc-internal-format
msgid "function called through a non-compatible type"
msgstr ""
-#: c/c-typeck.c:3099 c/c-typeck.c:3152
+#: c/c-typeck.c:3104 c/c-typeck.c:3157
#, gcc-internal-format
msgid "function with qualified void return type called"
msgstr ""
-#: c/c-typeck.c:3284
+#: c/c-typeck.c:3289
#, gcc-internal-format
msgid "too many arguments to method %qE"
msgstr ""
-#: c/c-typeck.c:3346
+#: c/c-typeck.c:3351
#, gcc-internal-format, gfc-internal-format
msgid "type of formal parameter %d is incomplete"
msgstr ""
-#: c/c-typeck.c:3363
+#: c/c-typeck.c:3368
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as integer rather than floating due to prototype"
msgstr ""
-#: c/c-typeck.c:3369
+#: c/c-typeck.c:3374
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as integer rather than complex due to prototype"
msgstr ""
-#: c/c-typeck.c:3375
+#: c/c-typeck.c:3380
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as complex rather than floating due to prototype"
msgstr ""
-#: c/c-typeck.c:3381
+#: c/c-typeck.c:3386
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as floating rather than integer due to prototype"
msgstr ""
-#: c/c-typeck.c:3387
+#: c/c-typeck.c:3392
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as complex rather than integer due to prototype"
msgstr ""
-#: c/c-typeck.c:3393
+#: c/c-typeck.c:3398
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as floating rather than complex due to prototype"
msgstr ""
-#: c/c-typeck.c:3407
+#: c/c-typeck.c:3412
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as %<float%> rather than %<double%> due to "
"prototype"
msgstr ""
-#: c/c-typeck.c:3433
+#: c/c-typeck.c:3438
#, gcc-internal-format
msgid "passing argument %d of %qE as %qT rather than %qT due to prototype"
msgstr ""
-#: c/c-typeck.c:3458
+#: c/c-typeck.c:3463
#, gcc-internal-format
msgid "passing argument %d of %qE with different width due to prototype"
msgstr ""
-#: c/c-typeck.c:3482
+#: c/c-typeck.c:3487
#, gcc-internal-format
msgid "passing argument %d of %qE as unsigned due to prototype"
msgstr ""
-#: c/c-typeck.c:3487
+#: c/c-typeck.c:3492
#, gcc-internal-format
msgid "passing argument %d of %qE as signed due to prototype"
msgstr ""
-#: c/c-typeck.c:3518 cp/call.c:7086
+#: c/c-typeck.c:3523
#, gcc-internal-format
msgid "implicit conversion from %qT to %qT when passing argument to function"
msgstr ""
-#: c/c-typeck.c:3732 c/c-typeck.c:3752 cp/typeck.c:4597 cp/typeck.c:4851
+#: c/c-typeck.c:3737 c/c-typeck.c:3757 cp/typeck.c:4650 cp/typeck.c:4904
#, gcc-internal-format
msgid "comparison with string literal results in unspecified behavior"
msgstr ""
-#: c/c-typeck.c:3738 c/c-typeck.c:3745 cp/typeck.c:4620 cp/typeck.c:4640
+#: c/c-typeck.c:3743 c/c-typeck.c:3750 cp/typeck.c:4673 cp/typeck.c:4693
#, gcc-internal-format
msgid "comparison between pointer and zero character constant"
msgstr ""
-#: c/c-typeck.c:3740 c/c-typeck.c:3747 cp/typeck.c:4623 cp/typeck.c:4643
+#: c/c-typeck.c:3745 c/c-typeck.c:3752 cp/typeck.c:4676 cp/typeck.c:4696
#, gcc-internal-format
msgid "did you mean to dereference the pointer?"
msgstr ""
-#: c/c-typeck.c:3766
+#: c/c-typeck.c:3771
#, gcc-internal-format
msgid "comparison between %qT and %qT"
msgstr ""
-#: c/c-typeck.c:3815
+#: c/c-typeck.c:3820
#, gcc-internal-format
msgid "pointer of type %<void *%> used in subtraction"
msgstr ""
-#: c/c-typeck.c:3818
+#: c/c-typeck.c:3823
#, gcc-internal-format
msgid "pointer to a function used in subtraction"
msgstr ""
-#: c/c-typeck.c:3830
+#: c/c-typeck.c:3835
#, gcc-internal-format
msgid "arithmetic on pointer to an incomplete type"
msgstr ""
-#: c/c-typeck.c:3835 cp/typeck.c:5371
+#: c/c-typeck.c:3840 cp/typeck.c:5424
#, gcc-internal-format
msgid "arithmetic on pointer to an empty aggregate"
msgstr ""
-#: c/c-typeck.c:4244
+#: c/c-typeck.c:4249
#, gcc-internal-format
msgid "%<~%> on a boolean expression"
msgstr ""
-#: c/c-typeck.c:4248
+#: c/c-typeck.c:4253
#, gcc-internal-format
msgid "did you mean to use logical not?"
msgstr ""
-#: c/c-typeck.c:4258
+#: c/c-typeck.c:4263
#, gcc-internal-format
msgid "ISO C does not support %<~%> for complex conjugation"
msgstr ""
-#: c/c-typeck.c:4297
+#: c/c-typeck.c:4302
#, gcc-internal-format
msgid "wrong type argument to unary exclamation mark"
msgstr ""
-#: c/c-typeck.c:4355
+#: c/c-typeck.c:4360
#, gcc-internal-format
msgid "increment of enumeration value is invalid in C++"
msgstr ""
-#: c/c-typeck.c:4358
+#: c/c-typeck.c:4363
#, gcc-internal-format
msgid "decrement of enumeration value is invalid in C++"
msgstr ""
-#: c/c-typeck.c:4365
+#: c/c-typeck.c:4370
#, gcc-internal-format
msgid "increment of a boolean expression"
msgstr ""
-#: c/c-typeck.c:4368
+#: c/c-typeck.c:4373
#, gcc-internal-format
msgid "decrement of a boolean expression"
msgstr ""
-#: c/c-typeck.c:4384
+#: c/c-typeck.c:4389
#, gcc-internal-format
msgid "ISO C does not support %<++%> and %<--%> on complex types"
msgstr ""
-#: c/c-typeck.c:4409 c/c-typeck.c:4443
+#: c/c-typeck.c:4414 c/c-typeck.c:4448
#, gcc-internal-format
msgid "wrong type argument to increment"
msgstr ""
-#: c/c-typeck.c:4411 c/c-typeck.c:4446
+#: c/c-typeck.c:4416 c/c-typeck.c:4451
#, gcc-internal-format
msgid "wrong type argument to decrement"
msgstr ""
-#: c/c-typeck.c:4431
+#: c/c-typeck.c:4436
#, gcc-internal-format
msgid "increment of pointer to an incomplete type %qT"
msgstr ""
-#: c/c-typeck.c:4435
+#: c/c-typeck.c:4440
#, gcc-internal-format
msgid "decrement of pointer to an incomplete type %qT"
msgstr ""
-#: c/c-typeck.c:4539
+#: c/c-typeck.c:4544
#, gcc-internal-format
msgid "taking address of expression of type %<void%>"
msgstr ""
-#: c/c-typeck.c:4598
+#: c/c-typeck.c:4603
#, gcc-internal-format
msgid "cannot take address of bit-field %qD"
msgstr ""
-#: c/c-typeck.c:4611
+#: c/c-typeck.c:4616
#, gcc-internal-format
msgid "cannot take address of scalar with reverse storage order"
msgstr ""
-#: c/c-typeck.c:4619
+#: c/c-typeck.c:4624
#, gcc-internal-format
msgid "address of array with reverse scalar storage order requested"
msgstr ""
-#: c/c-typeck.c:4801
+#: c/c-typeck.c:4806
#, gcc-internal-format
msgid "global register variable %qD used in nested function"
msgstr ""
-#: c/c-typeck.c:4804
+#: c/c-typeck.c:4809
#, gcc-internal-format
msgid "register variable %qD used in nested function"
msgstr ""
-#: c/c-typeck.c:4809
+#: c/c-typeck.c:4814
#, gcc-internal-format
msgid "address of global register variable %qD requested"
msgstr ""
-#: c/c-typeck.c:4811
+#: c/c-typeck.c:4816
#, gcc-internal-format
msgid "address of register variable %qD requested"
msgstr ""
-#: c/c-typeck.c:4912
+#: c/c-typeck.c:4917
#, gcc-internal-format
msgid "non-lvalue array in conditional expression"
msgstr ""
-#: c/c-typeck.c:4970 cp/call.c:5232
+#: c/c-typeck.c:4975
#, gcc-internal-format
msgid ""
"implicit conversion from %qT to %qT to match other result of conditional"
msgstr ""
-#: c/c-typeck.c:5044
+#: c/c-typeck.c:5049
#, gcc-internal-format
msgid "ISO C forbids conditional expr with only one void side"
msgstr ""
-#: c/c-typeck.c:5061
+#: c/c-typeck.c:5066
#, gcc-internal-format
msgid "pointers to disjoint address spaces used in conditional expression"
msgstr ""
-#: c/c-typeck.c:5072 c/c-typeck.c:5089
+#: c/c-typeck.c:5077 c/c-typeck.c:5094
#, gcc-internal-format
msgid "pointer to array loses qualifier in conditional expression"
msgstr ""
-#: c/c-typeck.c:5077 c/c-typeck.c:5094
+#: c/c-typeck.c:5082 c/c-typeck.c:5099
#, gcc-internal-format
msgid "ISO C forbids conditional expr between %<void *%> and function pointer"
msgstr ""
-#: c/c-typeck.c:5107
+#: c/c-typeck.c:5112
#, gcc-internal-format
msgid "pointer type mismatch in conditional expression"
msgstr ""
-#: c/c-typeck.c:5116 c/c-typeck.c:5127
+#: c/c-typeck.c:5121 c/c-typeck.c:5132
#, gcc-internal-format
msgid "pointer/integer type mismatch in conditional expression"
msgstr ""
-#: c/c-typeck.c:5239 cp/typeck.c:6546
+#: c/c-typeck.c:5244 cp/typeck.c:6599
#, gcc-internal-format
msgid "spawned function call cannot be part of a comma expression"
msgstr ""
-#: c/c-typeck.c:5273
+#: c/c-typeck.c:5278
#, gcc-internal-format
msgid "left-hand operand of comma expression has no effect"
msgstr ""
-#: c/c-typeck.c:5291 c/c-typeck.c:10432
+#: c/c-typeck.c:5296 c/c-typeck.c:10441
#, gcc-internal-format
msgid "right-hand operand of comma expression has no effect"
msgstr ""
-#: c/c-typeck.c:5360
+#: c/c-typeck.c:5365
msgid "cast adds %q#v qualifier to function type"
msgstr ""
-#: c/c-typeck.c:5366
+#: c/c-typeck.c:5371
msgid "cast discards %qv qualifier from pointer target type"
msgstr ""
-#: c/c-typeck.c:5401
+#: c/c-typeck.c:5406
#, 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:5438
+#: c/c-typeck.c:5443
#, gcc-internal-format
msgid "cast specifies array type"
msgstr ""
-#: c/c-typeck.c:5444
+#: c/c-typeck.c:5449
#, gcc-internal-format
msgid "cast specifies function type"
msgstr ""
-#: c/c-typeck.c:5459
+#: c/c-typeck.c:5464
#, gcc-internal-format
msgid "ISO C forbids casting nonscalar to the same type"
msgstr ""
-#: c/c-typeck.c:5479
+#: c/c-typeck.c:5484
#, gcc-internal-format
msgid "ISO C forbids casts to union type"
msgstr ""
-#: c/c-typeck.c:5489
+#: c/c-typeck.c:5494
#, gcc-internal-format
msgid "cast to union type from type not present in union"
msgstr ""
-#: c/c-typeck.c:5524
+#: c/c-typeck.c:5529
#, gcc-internal-format, gfc-internal-format
msgid ""
"cast to %s address space pointer from disjoint generic address space pointer"
msgstr ""
-#: c/c-typeck.c:5529
+#: c/c-typeck.c:5534
#, gcc-internal-format, gfc-internal-format
msgid ""
"cast to generic address space pointer from disjoint %s address space pointer"
msgstr ""
-#: c/c-typeck.c:5534
+#: c/c-typeck.c:5539
#, gcc-internal-format, gfc-internal-format
msgid "cast to %s address space pointer from disjoint %s address space pointer"
msgstr ""
-#: c/c-typeck.c:5553
+#: c/c-typeck.c:5558
#, gcc-internal-format
msgid "cast increases required alignment of target type"
msgstr ""
-#: c/c-typeck.c:5564
+#: c/c-typeck.c:5569
#, gcc-internal-format
msgid "cast from pointer to integer of different size"
msgstr ""
-#: c/c-typeck.c:5569
+#: c/c-typeck.c:5574
#, gcc-internal-format
msgid "cast from function call of type %qT to non-matching type %qT"
msgstr ""
-#: c/c-typeck.c:5578 cp/typeck.c:7515
+#: c/c-typeck.c:5583 cp/typeck.c:7603
#, gcc-internal-format
msgid "cast to pointer from integer of different size"
msgstr ""
-#: c/c-typeck.c:5592
+#: c/c-typeck.c:5597
#, gcc-internal-format
msgid "ISO C forbids conversion of function pointer to object pointer type"
msgstr ""
-#: c/c-typeck.c:5601
+#: c/c-typeck.c:5606
#, gcc-internal-format
msgid "ISO C forbids conversion of object pointer to function pointer type"
msgstr ""
-#: c/c-typeck.c:5688
+#: c/c-typeck.c:5693
#, gcc-internal-format
msgid "defining a type in a cast is invalid in C++"
msgstr ""
-#: c/c-typeck.c:5730
+#: c/c-typeck.c:5735
#, gcc-internal-format
msgid "assignment to expression with array type"
msgstr ""
-#: c/c-typeck.c:5853 c/c-typeck.c:6303
+#: c/c-typeck.c:5858 c/c-typeck.c:6308
#, gcc-internal-format
msgid "enum conversion in assignment is invalid in C++"
msgstr ""
-#: c/c-typeck.c:6045 c/c-typeck.c:6068 c/c-typeck.c:6092
+#: c/c-typeck.c:6050 c/c-typeck.c:6073 c/c-typeck.c:6097
#, gcc-internal-format
msgid "(near initialization for %qs)"
msgstr ""
-#: c/c-typeck.c:6107
+#: c/c-typeck.c:6112
#, gcc-internal-format
msgid "array initialized from parenthesized string constant"
msgstr ""
@@ -36387,2234 +37075,2405 @@ 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:6183 c/c-typeck.c:6212 c/c-typeck.c:6241 c/c-typeck.c:6819
+#: c/c-typeck.c:6188 c/c-typeck.c:6217 c/c-typeck.c:6246 c/c-typeck.c:6824
#, gcc-internal-format
msgid "expected %qT but argument is of type %qT"
msgstr ""
-#: c/c-typeck.c:6301
+#: c/c-typeck.c:6306
#, gcc-internal-format
msgid "enum conversion when passing argument %d of %qE is invalid in C++"
msgstr ""
-#: c/c-typeck.c:6305 c/c-typeck.c:8956
+#: c/c-typeck.c:6310 c/c-typeck.c:8963
#, gcc-internal-format
msgid "enum conversion in initialization is invalid in C++"
msgstr ""
-#: c/c-typeck.c:6307
+#: c/c-typeck.c:6312
#, gcc-internal-format
msgid "enum conversion in return is invalid in C++"
msgstr ""
-#: c/c-typeck.c:6338
+#: c/c-typeck.c:6343
#, gcc-internal-format
msgid "cannot pass rvalue to reference parameter"
msgstr ""
-#: c/c-typeck.c:6471 c/c-typeck.c:6736
+#: c/c-typeck.c:6476 c/c-typeck.c:6741
msgid ""
"passing argument %d of %qE makes %q#v qualified function pointer from "
"unqualified"
msgstr ""
-#: c/c-typeck.c:6474 c/c-typeck.c:6739
+#: c/c-typeck.c:6479 c/c-typeck.c:6744
msgid "assignment makes %q#v qualified function pointer from unqualified"
msgstr ""
-#: c/c-typeck.c:6477 c/c-typeck.c:6741
+#: c/c-typeck.c:6482 c/c-typeck.c:6746
msgid "initialization makes %q#v qualified function pointer from unqualified"
msgstr ""
-#: c/c-typeck.c:6480 c/c-typeck.c:6743
+#: c/c-typeck.c:6485 c/c-typeck.c:6748
msgid "return makes %q#v qualified function pointer from unqualified"
msgstr ""
-#: c/c-typeck.c:6488 c/c-typeck.c:6655 c/c-typeck.c:6698
+#: c/c-typeck.c:6493 c/c-typeck.c:6660 c/c-typeck.c:6703
msgid ""
"passing argument %d of %qE discards %qv qualifier from pointer target type"
msgstr ""
-#: c/c-typeck.c:6490 c/c-typeck.c:6657 c/c-typeck.c:6700
+#: c/c-typeck.c:6495 c/c-typeck.c:6662 c/c-typeck.c:6705
msgid "assignment discards %qv qualifier from pointer target type"
msgstr ""
-#: c/c-typeck.c:6492 c/c-typeck.c:6659 c/c-typeck.c:6702
+#: c/c-typeck.c:6497 c/c-typeck.c:6664 c/c-typeck.c:6707
msgid "initialization discards %qv qualifier from pointer target type"
msgstr ""
-#: c/c-typeck.c:6494 c/c-typeck.c:6661 c/c-typeck.c:6704
+#: c/c-typeck.c:6499 c/c-typeck.c:6666 c/c-typeck.c:6709
msgid "return discards %qv qualifier from pointer target type"
msgstr ""
-#: c/c-typeck.c:6503
+#: c/c-typeck.c:6508
#, gcc-internal-format
msgid "ISO C prohibits argument conversion to union type"
msgstr ""
-#: c/c-typeck.c:6565
+#: c/c-typeck.c:6570
#, gcc-internal-format
msgid "request for implicit conversion from %qT to %qT not permitted in C++"
msgstr ""
-#: c/c-typeck.c:6577
+#: c/c-typeck.c:6582
#, gcc-internal-format
msgid "passing argument %d of %qE from pointer to non-enclosed address space"
msgstr ""
-#: c/c-typeck.c:6581
+#: c/c-typeck.c:6586
#, gcc-internal-format
msgid "assignment from pointer to non-enclosed address space"
msgstr ""
-#: c/c-typeck.c:6585
+#: c/c-typeck.c:6590
#, gcc-internal-format
msgid "initialization from pointer to non-enclosed address space"
msgstr ""
-#: c/c-typeck.c:6589
+#: c/c-typeck.c:6594
#, gcc-internal-format
msgid "return from pointer to non-enclosed address space"
msgstr ""
-#: c/c-typeck.c:6607
+#: c/c-typeck.c:6612
#, gcc-internal-format
msgid "argument %d of %qE might be a candidate for a format attribute"
msgstr ""
-#: c/c-typeck.c:6613
+#: c/c-typeck.c:6618
#, gcc-internal-format
msgid "assignment left-hand side might be a candidate for a format attribute"
msgstr ""
-#: c/c-typeck.c:6618
+#: c/c-typeck.c:6623
#, gcc-internal-format
msgid ""
"initialization left-hand side might be a candidate for a format attribute"
msgstr ""
-#: c/c-typeck.c:6623 cp/typeck.c:8583
+#: c/c-typeck.c:6628 cp/typeck.c:8676
#, gcc-internal-format
msgid "return type might be a candidate for a format attribute"
msgstr ""
-#: c/c-typeck.c:6672
+#: c/c-typeck.c:6677
#, gcc-internal-format
msgid ""
"ISO C forbids passing argument %d of %qE between function pointer and %<void "
"*%>"
msgstr ""
-#: c/c-typeck.c:6675
+#: c/c-typeck.c:6680
#, gcc-internal-format
msgid "ISO C forbids assignment between function pointer and %<void *%>"
msgstr ""
-#: c/c-typeck.c:6677
+#: c/c-typeck.c:6682
#, gcc-internal-format
msgid "ISO C forbids initialization between function pointer and %<void *%>"
msgstr ""
-#: c/c-typeck.c:6679
+#: c/c-typeck.c:6684
#, gcc-internal-format
msgid "ISO C forbids return between function pointer and %<void *%>"
msgstr ""
-#: c/c-typeck.c:6716
+#: c/c-typeck.c:6721
#, gcc-internal-format
msgid "pointer targets in passing argument %d of %qE differ in signedness"
msgstr ""
-#: c/c-typeck.c:6718
+#: c/c-typeck.c:6723
#, gcc-internal-format
msgid "pointer targets in assignment differ in signedness"
msgstr ""
-#: c/c-typeck.c:6720
+#: c/c-typeck.c:6725
#, gcc-internal-format
msgid "pointer targets in initialization differ in signedness"
msgstr ""
-#: c/c-typeck.c:6722
+#: c/c-typeck.c:6727
#, gcc-internal-format
msgid "pointer targets in return differ in signedness"
msgstr ""
-#: c/c-typeck.c:6753
+#: c/c-typeck.c:6758
#, gcc-internal-format
msgid "passing argument %d of %qE from incompatible pointer type"
msgstr ""
-#: c/c-typeck.c:6755
+#: c/c-typeck.c:6760
#, gcc-internal-format
msgid "assignment from incompatible pointer type"
msgstr ""
-#: c/c-typeck.c:6756
+#: c/c-typeck.c:6761
#, gcc-internal-format
msgid "initialization from incompatible pointer type"
msgstr ""
-#: c/c-typeck.c:6758
+#: c/c-typeck.c:6763
#, 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:6766 c/c-typeck.c:7260 cp/typeck.c:2008
+#: c/c-typeck.c:6771 c/c-typeck.c:7265 cp/typeck.c:2000
#, gcc-internal-format
msgid "invalid use of non-lvalue array"
msgstr ""
-#: c/c-typeck.c:6777
+#: c/c-typeck.c:6782
#, gcc-internal-format
msgid "passing argument %d of %qE makes pointer from integer without a cast"
msgstr ""
-#: c/c-typeck.c:6779
+#: c/c-typeck.c:6784
#, gcc-internal-format
msgid "assignment makes pointer from integer without a cast"
msgstr ""
-#: c/c-typeck.c:6781
+#: c/c-typeck.c:6786
#, gcc-internal-format
msgid "initialization makes pointer from integer without a cast"
msgstr ""
-#: c/c-typeck.c:6783
+#: c/c-typeck.c:6788
#, gcc-internal-format
msgid "return makes pointer from integer without a cast"
msgstr ""
-#: c/c-typeck.c:6792
+#: c/c-typeck.c:6797
#, gcc-internal-format
msgid "passing argument %d of %qE makes integer from pointer without a cast"
msgstr ""
-#: c/c-typeck.c:6794
+#: c/c-typeck.c:6799
#, gcc-internal-format
msgid "assignment makes integer from pointer without a cast"
msgstr ""
-#: c/c-typeck.c:6796
+#: c/c-typeck.c:6801
#, gcc-internal-format
msgid "initialization makes integer from pointer without a cast"
msgstr ""
-#: c/c-typeck.c:6798
+#: c/c-typeck.c:6803
#, gcc-internal-format
msgid "return makes integer from pointer without a cast"
msgstr ""
-#: c/c-typeck.c:6815
+#: c/c-typeck.c:6820
#, gcc-internal-format
msgid "incompatible type for argument %d of %qE"
msgstr ""
-#: c/c-typeck.c:6822
+#: c/c-typeck.c:6827
#, gcc-internal-format
msgid "incompatible types when assigning to type %qT from type %qT"
msgstr ""
-#: c/c-typeck.c:6827
+#: c/c-typeck.c:6832
#, gcc-internal-format
msgid "incompatible types when initializing type %qT using type %qT"
msgstr ""
-#: c/c-typeck.c:6832
+#: c/c-typeck.c:6837
#, gcc-internal-format
msgid "incompatible types when returning type %qT but %qT was expected"
msgstr ""
-#: c/c-typeck.c:6896
+#: c/c-typeck.c:6901
#, gcc-internal-format
msgid "traditional C rejects automatic aggregate initialization"
msgstr ""
-#: c/c-typeck.c:7133 c/c-typeck.c:8030 cp/typeck2.c:1035
+#: c/c-typeck.c:7138 c/c-typeck.c:8037 cp/typeck2.c:1035
#, gcc-internal-format
msgid "initialization of a flexible array member"
msgstr ""
-#: c/c-typeck.c:7143 cp/typeck2.c:1050
+#: c/c-typeck.c:7148 cp/typeck2.c:1050
#, gcc-internal-format
msgid "char-array initialized from wide string"
msgstr ""
-#: c/c-typeck.c:7152
+#: c/c-typeck.c:7157
#, gcc-internal-format
msgid "wide character array initialized from non-wide string"
msgstr ""
-#: c/c-typeck.c:7158
+#: c/c-typeck.c:7163
#, gcc-internal-format
msgid "wide character array initialized from incompatible wide string"
msgstr ""
-#: c/c-typeck.c:7192
+#: c/c-typeck.c:7197
#, gcc-internal-format
msgid "array of inappropriate type initialized from string constant"
msgstr ""
-#: c/c-typeck.c:7279 c/c-typeck.c:7303 c/c-typeck.c:7306 c/c-typeck.c:7314
-#: c/c-typeck.c:7354 c/c-typeck.c:8879 c/c-typeck.c:8929
+#: c/c-typeck.c:7284 c/c-typeck.c:7308 c/c-typeck.c:7311 c/c-typeck.c:7319
+#: c/c-typeck.c:7359 c/c-typeck.c:8886 c/c-typeck.c:8936
#, gcc-internal-format
msgid "initializer element is not constant"
msgstr ""
-#: c/c-typeck.c:7288
+#: c/c-typeck.c:7293
#, gcc-internal-format
msgid "array initialized from non-constant array expression"
msgstr ""
-#: c/c-typeck.c:7319 c/c-typeck.c:7367 c/c-typeck.c:8939
+#: c/c-typeck.c:7324 c/c-typeck.c:7372 c/c-typeck.c:8946
#, gcc-internal-format
msgid "initializer element is not a constant expression"
msgstr ""
-#: c/c-typeck.c:7361 c/c-typeck.c:8934
+#: c/c-typeck.c:7366 c/c-typeck.c:8941
#, gcc-internal-format
msgid "initializer element is not computable at load time"
msgstr ""
-#: c/c-typeck.c:7380
+#: c/c-typeck.c:7385
#, gcc-internal-format
msgid "invalid initializer"
msgstr ""
-#: c/c-typeck.c:7658 cp/decl.c:6282
+#: c/c-typeck.c:7663 cp/decl.c:6202
#, gcc-internal-format
msgid "opaque vector types cannot be initialized"
msgstr ""
-#: c/c-typeck.c:7878
+#: c/c-typeck.c:7884
#, gcc-internal-format
msgid "extra brace group at end of initializer"
msgstr ""
-#: c/c-typeck.c:7961
+#: c/c-typeck.c:7968
#, gcc-internal-format
msgid "braces around scalar initializer"
msgstr ""
-#: c/c-typeck.c:8027 c/c-typeck.c:9361
+#: c/c-typeck.c:8034 c/c-typeck.c:9369
#, gcc-internal-format
msgid "initialization of flexible array member in a nested context"
msgstr ""
-#: c/c-typeck.c:8064
+#: c/c-typeck.c:8071
#, gcc-internal-format
msgid "missing braces around initializer"
msgstr ""
-#: c/c-typeck.c:8087
+#: c/c-typeck.c:8094
#, gcc-internal-format
msgid "missing initializer for field %qD of %qT"
msgstr ""
-#: c/c-typeck.c:8111
+#: c/c-typeck.c:8118
#, gcc-internal-format
msgid "empty scalar initializer"
msgstr ""
-#: c/c-typeck.c:8116
+#: c/c-typeck.c:8123
#, gcc-internal-format
msgid "extra elements in scalar initializer"
msgstr ""
-#: c/c-typeck.c:8229 c/c-typeck.c:8311
+#: c/c-typeck.c:8236 c/c-typeck.c:8318
#, gcc-internal-format
msgid "array index in non-array initializer"
msgstr ""
-#: c/c-typeck.c:8234 c/c-typeck.c:8373
+#: c/c-typeck.c:8241 c/c-typeck.c:8380
#, gcc-internal-format
msgid "field name not in record or union initializer"
msgstr ""
-#: c/c-typeck.c:8284
+#: c/c-typeck.c:8291
#, gcc-internal-format
msgid "array index in initializer not of integer type"
msgstr ""
-#: c/c-typeck.c:8293 c/c-typeck.c:8302
+#: c/c-typeck.c:8300 c/c-typeck.c:8309
#, gcc-internal-format
msgid "array index in initializer is not an integer constant expression"
msgstr ""
-#: c/c-typeck.c:8307 c/c-typeck.c:8309
+#: c/c-typeck.c:8314 c/c-typeck.c:8316
#, gcc-internal-format
msgid "nonconstant array index in initializer"
msgstr ""
-#: c/c-typeck.c:8313 c/c-typeck.c:8316
+#: c/c-typeck.c:8320 c/c-typeck.c:8323
#, gcc-internal-format
msgid "array index in initializer exceeds array bounds"
msgstr ""
-#: c/c-typeck.c:8335
+#: c/c-typeck.c:8342
#, gcc-internal-format
msgid "empty index range in initializer"
msgstr ""
-#: c/c-typeck.c:8344
+#: c/c-typeck.c:8351
#, gcc-internal-format
msgid "array index range in initializer exceeds array bounds"
msgstr ""
-#: c/c-typeck.c:8447 c/c-typeck.c:8477 c/c-typeck.c:9020
+#: c/c-typeck.c:8454 c/c-typeck.c:8484 c/c-typeck.c:9027
#, gcc-internal-format
msgid "initialized field with side-effects overwritten"
msgstr ""
-#: c/c-typeck.c:8451 c/c-typeck.c:8481 c/c-typeck.c:9023
+#: c/c-typeck.c:8458 c/c-typeck.c:8488 c/c-typeck.c:9030
#, gcc-internal-format
msgid "initialized field overwritten"
msgstr ""
-#: c/c-typeck.c:9242
+#: c/c-typeck.c:9250
#, gcc-internal-format
msgid "excess elements in char array initializer"
msgstr ""
-#: c/c-typeck.c:9249 c/c-typeck.c:9320
+#: c/c-typeck.c:9257 c/c-typeck.c:9328
#, gcc-internal-format
msgid "excess elements in struct initializer"
msgstr ""
-#: c/c-typeck.c:9264
+#: c/c-typeck.c:9272
#, gcc-internal-format
msgid ""
"positional initialization of field in %<struct%> declared with "
"%<designated_init%> attribute"
msgstr ""
-#: c/c-typeck.c:9335
+#: c/c-typeck.c:9343
#, gcc-internal-format
msgid "non-static initialization of a flexible array member"
msgstr ""
-#: c/c-typeck.c:9434
+#: c/c-typeck.c:9442
#, gcc-internal-format
msgid "excess elements in union initializer"
msgstr ""
-#: c/c-typeck.c:9456
+#: c/c-typeck.c:9464
#, gcc-internal-format
msgid "traditional C rejects initialization of unions"
msgstr ""
-#: c/c-typeck.c:9524
+#: c/c-typeck.c:9532
#, gcc-internal-format
msgid "excess elements in array initializer"
msgstr ""
-#: c/c-typeck.c:9558
+#: c/c-typeck.c:9566
#, gcc-internal-format
msgid "excess elements in vector initializer"
msgstr ""
-#: c/c-typeck.c:9590
+#: c/c-typeck.c:9598
#, gcc-internal-format
msgid "excess elements in scalar initializer"
msgstr ""
-#: c/c-typeck.c:9832
+#: c/c-typeck.c:9841
#, gcc-internal-format
msgid "ISO C forbids %<goto *expr;%>"
msgstr ""
-#: c/c-typeck.c:9860 c/gimple-parser.c:1544 cp/typeck.c:8812
+#: c/c-typeck.c:9869 c/gimple-parser.c:1587 cp/typeck.c:8905
#, gcc-internal-format
msgid "function declared %<noreturn%> has a %<return%> statement"
msgstr ""
-#: c/c-typeck.c:9870 cp/cp-array-notation.c:1087
+#: c/c-typeck.c:9879 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:9877 cp/typeck.c:8803
+#: c/c-typeck.c:9886 cp/typeck.c:8896
#, gcc-internal-format
msgid "use of %<_Cilk_spawn%> in a return statement is not allowed"
msgstr ""
-#: c/c-typeck.c:9905 c/c-typeck.c:9909
+#: c/c-typeck.c:9914 c/c-typeck.c:9918
#, gcc-internal-format
msgid "%<return%> with no value, in function returning non-void"
msgstr ""
-#: c/c-typeck.c:9923 c/gimple-parser.c:1554
+#: c/c-typeck.c:9932 c/gimple-parser.c:1597
#, gcc-internal-format
msgid "%<return%> with a value, in function returning void"
msgstr ""
-#: c/c-typeck.c:9926
+#: c/c-typeck.c:9935
#, gcc-internal-format
msgid "ISO C forbids %<return%> with expression, in function returning void"
msgstr ""
-#: c/c-typeck.c:10002
+#: c/c-typeck.c:10011
#, gcc-internal-format
msgid "function returns address of label"
msgstr ""
-#: c/c-typeck.c:10093 cp/semantics.c:1154
+#: c/c-typeck.c:10102 cp/semantics.c:1161
#, gcc-internal-format
msgid "switch quantity not an integer"
msgstr ""
-#: c/c-typeck.c:10118
+#: c/c-typeck.c:10127
#, gcc-internal-format
msgid "%<long%> switch expression not converted to %<int%> in ISO C"
msgstr ""
-#: c/c-typeck.c:10156 c/c-typeck.c:10164
+#: c/c-typeck.c:10165 c/c-typeck.c:10173
#, gcc-internal-format
msgid "case label is not an integer constant expression"
msgstr ""
-#: c/c-typeck.c:10170 cp/parser.c:10839
+#: c/c-typeck.c:10179 cp/parser.c:10983
#, gcc-internal-format
msgid "case label not within a switch statement"
msgstr ""
-#: c/c-typeck.c:10172
+#: c/c-typeck.c:10181
#, gcc-internal-format
msgid "%<default%> label not within a switch statement"
msgstr ""
-#: c/c-typeck.c:10243
+#: c/c-typeck.c:10252
#, gcc-internal-format
msgid "rank-mismatch between if-statement%'s condition and the then-block"
msgstr ""
-#: c/c-typeck.c:10249
+#: c/c-typeck.c:10258
#, gcc-internal-format
msgid "rank-mismatch between if-statement%'s condition and the else-block"
msgstr ""
-#: c/c-typeck.c:10374 cp/parser.c:12109
+#: c/c-typeck.c:10383 cp/parser.c:12253
#, gcc-internal-format
msgid "break statement not within loop or switch"
msgstr ""
-#: c/c-typeck.c:10376 cp/parser.c:12135
+#: c/c-typeck.c:10385 cp/parser.c:12279
#, gcc-internal-format
msgid "continue statement not within a loop"
msgstr ""
-#: c/c-typeck.c:10381 cp/parser.c:12122
+#: c/c-typeck.c:10390 cp/parser.c:12266
#, gcc-internal-format
msgid "break statement used with OpenMP for loop"
msgstr ""
-#: c/c-typeck.c:10386
+#: c/c-typeck.c:10395
#, gcc-internal-format
msgid "break statement within %<#pragma simd%> loop body"
msgstr ""
-#: c/c-typeck.c:10388 cp/parser.c:12139
+#: c/c-typeck.c:10397 cp/parser.c:12283
#, gcc-internal-format
msgid "continue statement within %<#pragma simd%> loop body"
msgstr ""
-#: c/c-typeck.c:10414 cp/cp-gimplify.c:445
+#: c/c-typeck.c:10423 cp/cp-gimplify.c:427
#, gcc-internal-format
msgid "statement with no effect"
msgstr ""
-#: c/c-typeck.c:10458
+#: c/c-typeck.c:10467
#, gcc-internal-format
msgid "expression statement has incomplete type"
msgstr ""
-#: c/c-typeck.c:11273 c/c-typeck.c:11432 cp/typeck.c:4865
+#: c/c-typeck.c:11282 c/c-typeck.c:11441 cp/typeck.c:4918
#, gcc-internal-format
msgid "comparing vectors with different element types"
msgstr ""
-#: c/c-typeck.c:11280 c/c-typeck.c:11439 cp/typeck.c:4877
+#: c/c-typeck.c:11289 c/c-typeck.c:11448 cp/typeck.c:4930
#, gcc-internal-format
msgid "comparing vectors with different number of elements"
msgstr ""
-#: c/c-typeck.c:11311 cp/typeck.c:4591
+#: c/c-typeck.c:11320 cp/typeck.c:4644
#, gcc-internal-format
msgid "comparing floating point with == or != is unsafe"
msgstr ""
-#: c/c-typeck.c:11329 c/c-typeck.c:11350
+#: c/c-typeck.c:11338 c/c-typeck.c:11359
#, 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:11335 c/c-typeck.c:11356
+#: c/c-typeck.c:11344 c/c-typeck.c:11365
#, 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:11377 c/c-typeck.c:11497
+#: c/c-typeck.c:11386 c/c-typeck.c:11506
#, gcc-internal-format
msgid "comparison of pointers to disjoint address spaces"
msgstr ""
-#: c/c-typeck.c:11384 c/c-typeck.c:11390
+#: c/c-typeck.c:11393 c/c-typeck.c:11399
#, gcc-internal-format
msgid "ISO C forbids comparison of %<void *%> with function pointer"
msgstr ""
-#: c/c-typeck.c:11397 c/c-typeck.c:11507
+#: c/c-typeck.c:11406 c/c-typeck.c:11516
#, gcc-internal-format
msgid "comparison of distinct pointer types lacks a cast"
msgstr ""
-#: c/c-typeck.c:11409 c/c-typeck.c:11414 c/c-typeck.c:11533 c/c-typeck.c:11538
+#: c/c-typeck.c:11418 c/c-typeck.c:11423 c/c-typeck.c:11542 c/c-typeck.c:11547
#, gcc-internal-format
msgid "comparison between pointer and integer"
msgstr ""
-#: c/c-typeck.c:11485
+#: c/c-typeck.c:11494
#, gcc-internal-format
msgid "comparison of complete and incomplete pointers"
msgstr ""
-#: c/c-typeck.c:11487
+#: c/c-typeck.c:11496
#, gcc-internal-format
msgid "ISO C forbids ordered comparisons of pointers to functions"
msgstr ""
-#: c/c-typeck.c:11492
+#: c/c-typeck.c:11501
#, gcc-internal-format
msgid "ordered comparison of pointer with null pointer"
msgstr ""
-#: c/c-typeck.c:11515 c/c-typeck.c:11518 c/c-typeck.c:11525 c/c-typeck.c:11528
-#: cp/typeck.c:4928 cp/typeck.c:4935
+#: c/c-typeck.c:11524 c/c-typeck.c:11527 c/c-typeck.c:11534 c/c-typeck.c:11537
+#: cp/typeck.c:4981 cp/typeck.c:4988
#, gcc-internal-format
msgid "ordered comparison of pointer with integer zero"
msgstr ""
-#: c/c-typeck.c:11579 cp/typeck.c:5014
+#: c/c-typeck.c:11588
#, gcc-internal-format
msgid ""
"implicit conversion from %qT to %qT to match other operand of binary "
"expression"
msgstr ""
-#: c/c-typeck.c:11894
+#: c/c-typeck.c:11903
#, gcc-internal-format
msgid "used array that cannot be converted to pointer where scalar is required"
msgstr ""
-#: c/c-typeck.c:11898
+#: c/c-typeck.c:11907
#, gcc-internal-format
msgid "used struct type value where scalar is required"
msgstr ""
-#: c/c-typeck.c:11902
+#: c/c-typeck.c:11911
#, gcc-internal-format
msgid "used union type value where scalar is required"
msgstr ""
-#: c/c-typeck.c:11918
+#: c/c-typeck.c:11927
#, gcc-internal-format
msgid "used vector type where scalar is required"
msgstr ""
-#: c/c-typeck.c:12108 cp/semantics.c:8632
+#: c/c-typeck.c:12117 cp/semantics.c:8677
#, gcc-internal-format
msgid ""
"%<#pragma omp cancel%> must specify one of %<parallel%>, %<for%>, %<sections"
"%> or %<taskgroup%> clauses"
msgstr ""
-#: c/c-typeck.c:12147 cp/semantics.c:8669
+#: c/c-typeck.c:12156 cp/semantics.c:8714
#, gcc-internal-format
msgid ""
"%<#pragma omp cancellation point%> must specify one of %<parallel%>, %<for"
"%>, %<sections%> or %<taskgroup%> clauses"
msgstr ""
-#: c/c-typeck.c:12191 c/c-typeck.c:13366 c/c-typeck.c:13427 c/c-typeck.c:13489
+#: c/c-typeck.c:12200 c/c-typeck.c:13375 c/c-typeck.c:13436 c/c-typeck.c:13498
#, gcc-internal-format
msgid "%<_Atomic%> %qE in %qs clause"
msgstr ""
-#: c/c-typeck.c:12204 c/c-typeck.c:13413 cp/semantics.c:4535
-#: cp/semantics.c:6724
+#: c/c-typeck.c:12213 c/c-typeck.c:13422 cp/semantics.c:4574
+#: cp/semantics.c:6769
#, gcc-internal-format
msgid "bit-field %qE in %qs clause"
msgstr ""
-#: c/c-typeck.c:12213 c/c-typeck.c:13437 cp/semantics.c:4545
-#: cp/semantics.c:6742
+#: c/c-typeck.c:12222 c/c-typeck.c:13446 cp/semantics.c:4584
+#: cp/semantics.c:6787
#, gcc-internal-format
msgid "%qE is a member of a union"
msgstr ""
-#: c/c-typeck.c:12223 cp/semantics.c:4559 cp/semantics.c:6767
+#: c/c-typeck.c:12232 cp/semantics.c:4598 cp/semantics.c:6812
#, gcc-internal-format
msgid "%qD is not a variable in %qs clause"
msgstr ""
-#: c/c-typeck.c:12227 c/c-typeck.c:13454 cp/semantics.c:4563
-#: cp/semantics.c:6770
+#: c/c-typeck.c:12236 c/c-typeck.c:13463 cp/semantics.c:4602
+#: cp/semantics.c:6815
#, gcc-internal-format
msgid "%qE is not a variable in %qs clause"
msgstr ""
-#: c/c-typeck.c:12234
+#: c/c-typeck.c:12243
#, gcc-internal-format
msgid "%<_Atomic%> %qD in %qs clause"
msgstr ""
-#: c/c-typeck.c:12243 c/c-typeck.c:13461 c/c-typeck.c:13563 cp/semantics.c:4580
-#: cp/semantics.c:6776 cp/semantics.c:6938
+#: c/c-typeck.c:12252 c/c-typeck.c:13470 c/c-typeck.c:13572 cp/semantics.c:4619
+#: cp/semantics.c:6821 cp/semantics.c:6983
#, gcc-internal-format
msgid "%qD is threadprivate variable in %qs clause"
msgstr ""
-#: c/c-typeck.c:12279 cp/semantics.c:4612
+#: c/c-typeck.c:12288 cp/semantics.c:4651
#, gcc-internal-format
msgid "low bound %qE of array section does not have integral type"
msgstr ""
-#: c/c-typeck.c:12286 cp/semantics.c:4619
+#: c/c-typeck.c:12295 cp/semantics.c:4658
#, gcc-internal-format
msgid "length %qE of array section does not have integral type"
msgstr ""
-#: c/c-typeck.c:12313 c/c-typeck.c:12377 c/c-typeck.c:12635 cp/semantics.c:4655
-#: cp/semantics.c:4719
+#: c/c-typeck.c:12322 c/c-typeck.c:12386 c/c-typeck.c:12644 cp/semantics.c:4694
+#: cp/semantics.c:4758
#, gcc-internal-format
msgid "zero length array section in %qs clause"
msgstr ""
-#: c/c-typeck.c:12332 cp/semantics.c:4674
+#: c/c-typeck.c:12341 cp/semantics.c:4713
#, gcc-internal-format
msgid "for unknown bound array type length expression must be specified"
msgstr ""
-#: c/c-typeck.c:12340 cp/semantics.c:4682
+#: c/c-typeck.c:12349 cp/semantics.c:4721
#, gcc-internal-format
msgid "negative low bound in array section in %qs clause"
msgstr ""
-#: c/c-typeck.c:12349 c/c-typeck.c:12459 cp/semantics.c:4691
-#: cp/semantics.c:4801
+#: c/c-typeck.c:12358 c/c-typeck.c:12468 cp/semantics.c:4730
+#: cp/semantics.c:4840
#, gcc-internal-format
msgid "negative length in array section in %qs clause"
msgstr ""
-#: c/c-typeck.c:12366 cp/semantics.c:4708
+#: c/c-typeck.c:12375 cp/semantics.c:4747
#, gcc-internal-format
msgid "low bound %qE above array section size in %qs clause"
msgstr ""
-#: c/c-typeck.c:12403 cp/semantics.c:4745
+#: c/c-typeck.c:12412 cp/semantics.c:4784
#, gcc-internal-format
msgid "length %qE above array section size in %qs clause"
msgstr ""
-#: c/c-typeck.c:12418 cp/semantics.c:4760
+#: c/c-typeck.c:12427 cp/semantics.c:4799
#, gcc-internal-format
msgid "high bound %qE above array section size in %qs clause"
msgstr ""
-#: c/c-typeck.c:12451 cp/semantics.c:4793
+#: c/c-typeck.c:12460 cp/semantics.c:4832
#, gcc-internal-format
msgid "for pointer type length expression must be specified"
msgstr ""
-#: c/c-typeck.c:12469 c/c-typeck.c:12578 cp/semantics.c:4811
-#: cp/semantics.c:4923
+#: c/c-typeck.c:12478 c/c-typeck.c:12587 cp/semantics.c:4850
+#: cp/semantics.c:4962
#, gcc-internal-format
msgid "array section is not contiguous in %qs clause"
msgstr ""
-#: c/c-typeck.c:12477 cp/semantics.c:4819
+#: c/c-typeck.c:12486 cp/semantics.c:4858
#, gcc-internal-format
msgid "%qE does not have pointer or array type"
msgstr ""
-#: c/c-typeck.c:12871 c/c-typeck.c:12881
+#: c/c-typeck.c:12880 c/c-typeck.c:12890
#, gcc-internal-format
msgid "%qD in %<reduction%> clause is a zero size array"
msgstr ""
-#: c/c-typeck.c:12898
+#: c/c-typeck.c:12907
#, gcc-internal-format
msgid "%<_Atomic%> %qE in %<reduction%> clause"
msgstr ""
-#: c/c-typeck.c:12946
+#: c/c-typeck.c:12955
#, gcc-internal-format
msgid "%qE has invalid type for %<reduction(%s)%>"
msgstr ""
-#: c/c-typeck.c:12955 cp/semantics.c:5734
+#: c/c-typeck.c:12964 cp/semantics.c:5779
#, gcc-internal-format
msgid "user defined reduction not found for %qE"
msgstr ""
-#: c/c-typeck.c:13043
+#: c/c-typeck.c:13052
#, gcc-internal-format
msgid "variable length element type in array %<reduction%> clause"
msgstr ""
-#: c/c-typeck.c:13061 c/c-typeck.c:13621 cp/semantics.c:7257
+#: c/c-typeck.c:13070 c/c-typeck.c:13630 cp/semantics.c:7302
#, gcc-internal-format
msgid "%<nowait%> clause must not be used together with %<copyprivate%>"
msgstr ""
-#: c/c-typeck.c:13073 cp/semantics.c:7297
+#: c/c-typeck.c:13082 cp/semantics.c:7342
#, gcc-internal-format
msgid "%qE must be %<threadprivate%> for %<copyin%>"
msgstr ""
-#: c/c-typeck.c:13087 cp/semantics.c:5908
+#: c/c-typeck.c:13096 cp/semantics.c:5953
#, gcc-internal-format
msgid ""
"modifier should not be specified in %<linear%> clause on %<simd%> or %<for%> "
"constructs"
msgstr ""
-#: c/c-typeck.c:13098
+#: c/c-typeck.c:13107
#, gcc-internal-format
msgid ""
"linear clause applied to non-integral, non-floating, non-pointer variable "
"with type %qT"
msgstr ""
-#: c/c-typeck.c:13111
+#: c/c-typeck.c:13120
#, gcc-internal-format
msgid ""
"linear clause applied to non-integral non-pointer variable with type %qT"
msgstr ""
-#: c/c-typeck.c:13119
+#: c/c-typeck.c:13128
#, gcc-internal-format
msgid "%<_Atomic%> %qD in %<linear%> clause"
msgstr ""
-#: c/c-typeck.c:13139 cp/semantics.c:5991
+#: c/c-typeck.c:13148 cp/semantics.c:6036
#, gcc-internal-format
msgid "%<linear%> clause step %qE is neither constant nor a parameter"
msgstr ""
-#: c/c-typeck.c:13169 c/c-typeck.c:13556 cp/semantics.c:6075
-#: cp/semantics.c:6931
+#: c/c-typeck.c:13178 c/c-typeck.c:13565 cp/semantics.c:6120
+#: cp/semantics.c:6976
#, gcc-internal-format
msgid "%qE is not a variable in clause %qs"
msgstr ""
-#: c/c-typeck.c:13178 cp/semantics.c:6084
+#: c/c-typeck.c:13187 cp/semantics.c:6129
#, gcc-internal-format
msgid "%qD appears more than once in reduction clauses"
msgstr ""
-#: c/c-typeck.c:13189 c/c-typeck.c:13219 c/c-typeck.c:13248
+#: c/c-typeck.c:13198 c/c-typeck.c:13228 c/c-typeck.c:13257
#, gcc-internal-format
msgid "%qE appears more than once in data clauses"
msgstr ""
-#: c/c-typeck.c:13196 c/c-typeck.c:13225 c/c-typeck.c:13385 c/c-typeck.c:13499
-#: c/c-typeck.c:13505 c/c-typeck.c:13518 c/c-typeck.c:13527 cp/semantics.c:6094
-#: cp/semantics.c:6101 cp/semantics.c:6152 cp/semantics.c:6158
-#: cp/semantics.c:6195 cp/semantics.c:6687 cp/semantics.c:6824
-#: cp/semantics.c:6830 cp/semantics.c:6843 cp/semantics.c:6852
+#: c/c-typeck.c:13205 c/c-typeck.c:13234 c/c-typeck.c:13394 c/c-typeck.c:13508
+#: c/c-typeck.c:13514 c/c-typeck.c:13527 c/c-typeck.c:13536 cp/semantics.c:6139
+#: cp/semantics.c:6146 cp/semantics.c:6197 cp/semantics.c:6203
+#: cp/semantics.c:6240 cp/semantics.c:6732 cp/semantics.c:6869
+#: cp/semantics.c:6875 cp/semantics.c:6888 cp/semantics.c:6897
#, gcc-internal-format
msgid "%qD appears more than once in data clauses"
msgstr ""
-#: c/c-typeck.c:13198 c/c-typeck.c:13227 c/c-typeck.c:13507 c/c-typeck.c:13529
-#: cp/semantics.c:6103 cp/semantics.c:6160 cp/semantics.c:6832
-#: cp/semantics.c:6854
+#: c/c-typeck.c:13207 c/c-typeck.c:13236 c/c-typeck.c:13516 c/c-typeck.c:13538
+#: cp/semantics.c:6148 cp/semantics.c:6205 cp/semantics.c:6877
+#: cp/semantics.c:6899
#, gcc-internal-format
msgid "%qD appears both in data and map clauses"
msgstr ""
-#: c/c-typeck.c:13212 cp/semantics.c:6146
+#: c/c-typeck.c:13221 cp/semantics.c:6191
#, gcc-internal-format
msgid "%qE is not a variable in clause %<firstprivate%>"
msgstr ""
-#: c/c-typeck.c:13241 cp/semantics.c:6189
+#: c/c-typeck.c:13250 cp/semantics.c:6234
#, gcc-internal-format
msgid "%qE is not a variable in clause %<lastprivate%>"
msgstr ""
-#: c/c-typeck.c:13260 cp/semantics.c:6552
+#: c/c-typeck.c:13269 cp/semantics.c:6597
#, gcc-internal-format
msgid "%qE is not a variable in %<aligned%> clause"
msgstr ""
-#: c/c-typeck.c:13267
+#: c/c-typeck.c:13276
#, gcc-internal-format
msgid "%qE in %<aligned%> clause is neither a pointer nor an array"
msgstr ""
-#: c/c-typeck.c:13274
+#: c/c-typeck.c:13283
#, gcc-internal-format
msgid "%<_Atomic%> %qD in %<aligned%> clause"
msgstr ""
-#: c/c-typeck.c:13281
+#: c/c-typeck.c:13290
#, gcc-internal-format
msgid "%qE appears more than once in %<aligned%> clauses"
msgstr ""
-#: c/c-typeck.c:13336 cp/semantics.c:6634
+#: c/c-typeck.c:13345 cp/semantics.c:6679
#, gcc-internal-format
msgid "%qE is not a variable in %<depend%> clause"
msgstr ""
-#: c/c-typeck.c:13358 cp/semantics.c:6665
+#: c/c-typeck.c:13367 cp/semantics.c:6710
#, gcc-internal-format
msgid "array section does not have mappable type in %qs clause"
msgstr ""
-#: c/c-typeck.c:13382 c/c-typeck.c:13516 cp/semantics.c:6684
-#: cp/semantics.c:6841
+#: c/c-typeck.c:13391 c/c-typeck.c:13525 cp/semantics.c:6729
+#: cp/semantics.c:6886
#, gcc-internal-format
msgid "%qD appears more than once in motion clauses"
msgstr ""
-#: c/c-typeck.c:13388 c/c-typeck.c:13520 cp/semantics.c:6690
-#: cp/semantics.c:6845
+#: c/c-typeck.c:13397 c/c-typeck.c:13529 cp/semantics.c:6735
+#: cp/semantics.c:6890
#, gcc-internal-format
msgid "%qD appears more than once in map clauses"
msgstr ""
-#: c/c-typeck.c:13420 cp/semantics.c:6731
+#: c/c-typeck.c:13429 cp/semantics.c:6776
#, gcc-internal-format
msgid "%qE does not have a mappable type in %qs clause"
msgstr ""
-#: c/c-typeck.c:13480 c/c-typeck.c:13570 cp/semantics.c:6806
-#: cp/semantics.c:6945
+#: c/c-typeck.c:13489 c/c-typeck.c:13579 cp/semantics.c:6851
+#: cp/semantics.c:6990
#, gcc-internal-format
msgid "%qD does not have a mappable type in %qs clause"
msgstr ""
-#: c/c-typeck.c:13551 cp/semantics.c:6925
+#: c/c-typeck.c:13560 cp/semantics.c:6970
#, gcc-internal-format
msgid "%qE is neither a variable nor a function name in clause %qs"
msgstr ""
-#: c/c-typeck.c:13579 cp/semantics.c:6954
+#: c/c-typeck.c:13588 cp/semantics.c:6999
#, gcc-internal-format
msgid "%qE appears more than once on the same %<declare target%> directive"
msgstr ""
-#: c/c-typeck.c:13593 cp/semantics.c:6969
+#: c/c-typeck.c:13602 cp/semantics.c:7014
#, gcc-internal-format
msgid "%qD is not an argument in %<uniform%> clause"
msgstr ""
-#: c/c-typeck.c:13596 cp/semantics.c:6971
+#: c/c-typeck.c:13605 cp/semantics.c:7016
#, gcc-internal-format
msgid "%qE is not an argument in %<uniform%> clause"
msgstr ""
-#: c/c-typeck.c:13611
+#: c/c-typeck.c:13620
#, gcc-internal-format
msgid "%qs variable is neither a pointer nor an array"
msgstr ""
-#: c/c-typeck.c:13686 cp/semantics.c:6351
+#: c/c-typeck.c:13695 cp/semantics.c:6396
#, gcc-internal-format
msgid "%<nonmonotonic%> modifier specified for %qs schedule kind"
msgstr ""
-#: c/c-typeck.c:13717 cp/semantics.c:7149
+#: c/c-typeck.c:13726 cp/semantics.c:7194
#, gcc-internal-format
msgid "%<inbranch%> clause is incompatible with %<notinbranch%>"
msgstr ""
-#: c/c-typeck.c:13767 cp/semantics.c:7340
+#: c/c-typeck.c:13776 cp/semantics.c:7385
#, gcc-internal-format
msgid "%qE is predetermined %qs for %qs"
msgstr ""
-#: c/c-typeck.c:13787 cp/semantics.c:7231
+#: c/c-typeck.c:13796 cp/semantics.c:7276
#, gcc-internal-format
msgid "%<simdlen%> clause value is bigger than %<safelen%> clause value"
msgstr ""
-#: c/c-typeck.c:13799 cp/semantics.c:7244
+#: c/c-typeck.c:13808 cp/semantics.c:7289
#, gcc-internal-format
msgid ""
"%<nonmonotonic%> schedule modifier specified together with %<ordered%> clause"
msgstr ""
-#: c/c-typeck.c:13817 cp/semantics.c:7211
+#: c/c-typeck.c:13826 cp/semantics.c:7256
#, gcc-internal-format
msgid ""
"%<linear%> clause step is a parameter %qD not specified in %<uniform%> clause"
msgstr ""
-#: c/c-typeck.c:13990
+#: c/c-typeck.c:13999
#, gcc-internal-format
msgid "cannot use %<va_arg%> with reverse storage order"
msgstr ""
-#: c/c-typeck.c:13995
+#: c/c-typeck.c:14004
#, gcc-internal-format
msgid "second argument to %<va_arg%> is of incomplete type %qT"
msgstr ""
-#: c/c-typeck.c:14001
+#: c/c-typeck.c:14010
#, gcc-internal-format
msgid "C++ requires promoted type, not enum type, in %<va_arg%>"
msgstr ""
-#: c/gimple-parser.c:523
+#: c/gimple-parser.c:522
#, gcc-internal-format
msgid "%<&&%> not valid in GIMPLE"
msgstr ""
-#: c/gimple-parser.c:526
+#: c/gimple-parser.c:525
#, gcc-internal-format
msgid "%<||%> not valid in GIMPLE"
msgstr ""
-#: c/gimple-parser.c:593
+#: c/gimple-parser.c:571
+#, gcc-internal-format
+msgid "expected pointer as argument of unary %<*%>"
+msgstr ""
+
+#: c/gimple-parser.c:597
#, gcc-internal-format
msgid "%<!%> not valid in GIMPLE"
msgstr ""
-#: c/gimple-parser.c:665
+#: c/gimple-parser.c:669
#, gcc-internal-format
msgid "SSA name undeclared"
msgstr ""
-#: c/gimple-parser.c:687
+#: c/gimple-parser.c:691
#, gcc-internal-format
msgid "base variable or SSA name undeclared"
msgstr ""
-#: c/gimple-parser.c:850
+#: c/gimple-parser.c:698
+#, gcc-internal-format
+msgid "invalid base %qE for SSA name"
+msgstr ""
+
+#: c/gimple-parser.c:818
+#, gcc-internal-format
+msgid "invalid type of %<__MEM%> operand"
+msgstr ""
+
+#: c/gimple-parser.c:874 c/gimple-parser.c:882
#, gcc-internal-format
msgid "invalid _Literal"
msgstr ""
-#: c/gimple-parser.c:869
+#: c/gimple-parser.c:902
#, gcc-internal-format
msgid "invalid number of operands to __FMA"
msgstr ""
-#: c/gimple-parser.c:904
+#: c/gimple-parser.c:937
#, gcc-internal-format
msgid "anonymous SSA name cannot have default definition"
msgstr ""
-#: c/gimple-parser.c:1153
+#: c/gimple-parser.c:1186
#, gcc-internal-format
msgid "expected pass name"
msgstr ""
-#: c/gimple-parser.c:1165
+#: c/gimple-parser.c:1198
#, gcc-internal-format
msgid "invalid operation"
msgstr ""
-#: c/gimple-parser.c:1325 c/gimple-parser.c:1349
+#: c/gimple-parser.c:1363 c/gimple-parser.c:1392
#, gcc-internal-format
msgid "expected goto expression"
msgstr ""
-#: c/gimple-parser.c:1333
+#: c/gimple-parser.c:1371
#, gcc-internal-format
msgid "expected else statement"
msgstr ""
-#: c/gimple-parser.c:1478
+#: c/gimple-parser.c:1521
#, gcc-internal-format
msgid "expected semicolon"
msgstr ""
-#: c/gimple-parser.c:1488
+#: c/gimple-parser.c:1531
#, gcc-internal-format
msgid "expected case label or goto statement"
msgstr ""
#. A bad conversion for 'this' must be discarding cv-quals.
-#: cp/call.c:3400
+#: cp/call.c:3401
#, gcc-internal-format
msgid " passing %qT as %<this%> argument discards qualifiers"
msgstr ""
-#: cp/call.c:3404
-#, gcc-internal-format
-msgid " no known conversion for implicit %<this%> parameter from %qT to %qT"
+#: cp/call.c:3405
+msgid " no known conversion for implicit %<this%> parameter from %qH to %qI"
msgstr ""
-#: cp/call.c:3411
+#: cp/call.c:3412
#, 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:3418
-#, gcc-internal-format
-msgid " no known conversion from %qT to %qT"
+#: cp/call.c:3419
+msgid " no known conversion from %qH to %qI"
msgstr ""
-#: cp/call.c:3421
-#, gcc-internal-format
-msgid " no known conversion for argument %d from %qT to %qT"
+#: cp/call.c:3422
+msgid " no known conversion for argument %d from %qH to %qI"
msgstr ""
-#: cp/call.c:3432 cp/pt.c:6232
+#: cp/call.c:3433 cp/pt.c:6291
#, 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:3460
+#: cp/call.c:3461
#, gcc-internal-format
-msgid "%s%D(%T, %T, %T) <built-in>"
+msgid "%s%<%D(%T, %T, %T)%> <built-in>"
msgstr ""
-#: cp/call.c:3465
+#: cp/call.c:3466
#, gcc-internal-format
-msgid "%s%D(%T, %T) <built-in>"
+msgid "%s%<%D(%T, %T)%> <built-in>"
msgstr ""
-#: cp/call.c:3469
+#: cp/call.c:3470
#, gcc-internal-format
-msgid "%s%D(%T) <built-in>"
+msgid "%s%<%D(%T)%> <built-in>"
msgstr ""
-#: cp/call.c:3473
+#: cp/call.c:3474
#, gcc-internal-format
-msgid "%s%T <conversion>"
+msgid "%s%qT <conversion>"
msgstr ""
-#: cp/call.c:3475
+#: cp/call.c:3476
#, gcc-internal-format
-msgid "%s%#D <near match>"
+msgid "%s%#qD <near match>"
msgstr ""
-#: cp/call.c:3477
+#: cp/call.c:3478
#, gcc-internal-format
-msgid "%s%#D <deleted>"
+msgid "%s%#qD <deleted>"
msgstr ""
-#: cp/call.c:3479
+#: cp/call.c:3480
#, gcc-internal-format
-msgid "%s%#D"
+msgid "%s%#qD"
msgstr ""
-#: cp/call.c:3483
+#: cp/call.c:3484
#, gcc-internal-format
msgid " inherited here"
msgstr ""
-#: cp/call.c:3503
+#: cp/call.c:3504
#, gcc-internal-format
msgid ""
" return type %qT of explicit conversion function cannot be converted to %qT "
"with a qualification conversion"
msgstr ""
-#: cp/call.c:3509
+#: cp/call.c:3510
#, 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:3520
+#: cp/call.c:3521
#, gcc-internal-format
msgid ""
" substitution of deduced template arguments resulted in errors seen above"
msgstr ""
#. Re-run template unification with diagnostics.
-#: cp/call.c:3525
+#: cp/call.c:3526
#, gcc-internal-format
msgid " template argument deduction/substitution failed:"
msgstr ""
-#: cp/call.c:3539
+#: cp/call.c:3540
#, gcc-internal-format
msgid ""
" a constructor taking a single argument of its own class type is invalid"
msgstr ""
-#: cp/call.c:3550
+#: cp/call.c:3551
#, gcc-internal-format
msgid ""
" an inherited constructor is not a candidate for initialization from an "
"expression of the same or derived type"
msgstr ""
-#: cp/call.c:3928
-#, gcc-internal-format
-msgid "conversion from %qT to %qT is ambiguous"
+#: cp/call.c:3929
+msgid "conversion from %qH to %qI is ambiguous"
msgstr ""
-#: cp/call.c:4055
-#, gcc-internal-format
+#: cp/call.c:4073
msgid ""
-"conversion from %qT to %qT not considered for non-type template argument"
+"initializing %qH with %qI in converted constant expression does not bind "
+"directly"
msgstr ""
-#: cp/call.c:4181
+#: cp/call.c:4094
+msgid "conversion from %qH to %qI in a converted constant expression"
+msgstr ""
+
+#: cp/call.c:4231
#, gcc-internal-format
msgid "no matching function for call to %<%D(%A)%>"
msgstr ""
-#: cp/call.c:4184
+#: cp/call.c:4234
#, 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:4429
+#: cp/call.c:4464
#, gcc-internal-format
msgid ""
-"pointer-to-member function %E cannot be called without an object; consider "
-"using .* or ->*"
+"pointer-to-member function %qE cannot be called without an object; consider "
+"using %<.*%> or %<->*%>"
msgstr ""
-#: cp/call.c:4500
+#: cp/call.c:4535
#, gcc-internal-format
msgid "no match for call to %<(%T) (%A)%>"
msgstr ""
-#: cp/call.c:4513
+#: cp/call.c:4548
#, gcc-internal-format
msgid "call of %<(%T) (%A)%> is ambiguous"
msgstr ""
-#: cp/call.c:4564
+#: cp/call.c:4599
#, gcc-internal-format
msgid "ambiguous overload for "
msgstr ""
-#: cp/call.c:4565
+#: cp/call.c:4600
#, gcc-internal-format
msgid "no match for "
msgstr ""
-#: cp/call.c:4568
+#: cp/call.c:4603
#, gcc-internal-format
msgid " (operand types are %qT, %qT, and %qT)"
msgstr ""
-#: cp/call.c:4570
+#: cp/call.c:4605
#, gcc-internal-format
msgid " (operand types are %qT and %qT)"
msgstr ""
-#: cp/call.c:4572
+#: cp/call.c:4607
#, gcc-internal-format
msgid " (operand type is %qT)"
msgstr ""
-#: cp/call.c:4592
+#: cp/call.c:4627
#, gcc-internal-format
msgid "ternary %<operator?:%>"
msgstr ""
-#: cp/call.c:4596
+#: cp/call.c:4631
#, gcc-internal-format
msgid "ternary %<operator?:%> in %<%E ? %E : %E%>"
msgstr ""
-#: cp/call.c:4605 cp/call.c:4636 cp/call.c:4645
+#: cp/call.c:4640 cp/call.c:4671 cp/call.c:4680
#, gcc-internal-format
msgid "%<operator%s%>"
msgstr ""
-#: cp/call.c:4608
+#: cp/call.c:4643
#, gcc-internal-format
msgid "%<operator%s%> in %<%E%s%>"
msgstr ""
-#: cp/call.c:4615
+#: cp/call.c:4650
#, gcc-internal-format
msgid "%<operator[]%>"
msgstr ""
-#: cp/call.c:4618
+#: cp/call.c:4653
#, gcc-internal-format
msgid "%<operator[]%> in %<%E[%E]%>"
msgstr ""
-#: cp/call.c:4626
+#: cp/call.c:4661
#, gcc-internal-format
msgid "%qs"
msgstr ""
-#: cp/call.c:4629
+#: cp/call.c:4664
#, gcc-internal-format
msgid "%qs in %<%s %E%>"
msgstr ""
-#: cp/call.c:4639
+#: cp/call.c:4674
#, gcc-internal-format
msgid "%<operator%s%> in %<%E %s %E%>"
msgstr ""
-#: cp/call.c:4648
+#: cp/call.c:4683
#, gcc-internal-format
msgid "%<operator%s%> in %<%s%E%>"
msgstr ""
-#: cp/call.c:4757
+#: cp/call.c:4792
#, gcc-internal-format
msgid "ISO C++ forbids omitting the middle term of a ?: expression"
msgstr ""
-#: cp/call.c:4819
+#: cp/call.c:4854
#, 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:4896
+#: cp/call.c:4871 cp/call.c:4878
+msgid "conversion of scalar %qH to vector %qI involves truncation"
+msgstr ""
+
+#: cp/call.c:4931
#, gcc-internal-format
msgid "incompatible vector types in conditional expression: %qT, %qT and %qT"
msgstr ""
-#: cp/call.c:4986
+#: cp/call.c:5021
#, 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:4991
+#: cp/call.c:5026
#, 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:5041 cp/call.c:5157 cp/call.c:5300
+#: cp/call.c:5076 cp/call.c:5192 cp/call.c:5335
#, gcc-internal-format
msgid "operands to ?: have different types %qT and %qT"
msgstr ""
-#: cp/call.c:5044
+#: cp/call.c:5079
#, gcc-internal-format
msgid " and each type can be converted to the other"
msgstr ""
-#: cp/call.c:5245
+#: cp/call.c:5267
+msgid ""
+"implicit conversion from %qH to %qI to match other result of conditional"
+msgstr ""
+
+#: cp/call.c:5280
#, gcc-internal-format
msgid "enumeral mismatch in conditional expression: %qT vs %qT"
msgstr ""
-#: cp/call.c:5257
+#: cp/call.c:5292
#, gcc-internal-format
msgid "enumeral and non-enumeral type in conditional expression"
msgstr ""
-#: cp/call.c:5761
+#: cp/call.c:5786
#, gcc-internal-format
msgid "no %<%D(int)%> declared for postfix %qs, trying prefix operator instead"
msgstr ""
-#: cp/call.c:5763
+#: cp/call.c:5788
#, gcc-internal-format
msgid "no %<%D(int)%> declared for postfix %qs"
msgstr ""
-#: cp/call.c:5885
+#: cp/call.c:5910
#, gcc-internal-format
msgid "comparison between %q#T and %q#T"
msgstr ""
-#: cp/call.c:6229
+#: cp/call.c:6253
#, gcc-internal-format
msgid ""
"exception cleanup for this placement new selects non-placement operator "
"delete"
msgstr ""
-#: cp/call.c:6232
+#: cp/call.c:6256
#, gcc-internal-format
msgid ""
"%qD is a usual (non-placement) deallocation function in C++14 (or with -"
"fsized-deallocation)"
msgstr ""
-#: cp/call.c:6267
+#: cp/call.c:6291
#, gcc-internal-format
msgid "%qD is a usual (non-placement) deallocation function"
msgstr ""
-#: cp/call.c:6400
+#: cp/call.c:6423
#, gcc-internal-format
msgid "no corresponding deallocation function for %qD"
msgstr ""
-#: cp/call.c:6406
+#: cp/call.c:6429
#, gcc-internal-format
msgid "no suitable %<operator %s%> for %qT"
msgstr ""
-#: cp/call.c:6441
+#: cp/call.c:6464
#, gcc-internal-format
msgid "%q#D is private within this context"
msgstr ""
-#: cp/call.c:6443 cp/decl.c:7233
+#: cp/call.c:6466 cp/decl.c:7153
#, gcc-internal-format
msgid "declared private here"
msgstr ""
-#: cp/call.c:6447
+#: cp/call.c:6472
#, gcc-internal-format
msgid "%q#D is protected within this context"
msgstr ""
-#: cp/call.c:6449 cp/decl.c:7234
+#: cp/call.c:6474 cp/decl.c:7154
#, gcc-internal-format
msgid "declared protected here"
msgstr ""
-#: cp/call.c:6453
+#: cp/call.c:6480
#, gcc-internal-format
msgid "%q#D is inaccessible within this context"
msgstr ""
-#: cp/call.c:6515
+#: cp/call.c:6544
#, gcc-internal-format
msgid "passing NULL to non-pointer argument %P of %qD"
msgstr ""
-#: cp/call.c:6519
+#: cp/call.c:6548
#, gcc-internal-format
msgid "converting to non-pointer type %qT from NULL"
msgstr ""
-#: cp/call.c:6528
+#: cp/call.c:6557
#, gcc-internal-format
msgid "converting %<false%> to pointer type for argument %P of %qD"
msgstr ""
-#: cp/call.c:6532
+#: cp/call.c:6561
#, gcc-internal-format
msgid "converting %<false%> to pointer type %qT"
msgstr ""
-#: cp/call.c:6595
+#: cp/call.c:6624
#, gcc-internal-format
msgid "too many braces around initializer for %qT"
msgstr ""
-#: cp/call.c:6606
-#, gcc-internal-format
-msgid "converting to %qT from %qT requires direct-initialization"
+#: cp/call.c:6635
+msgid "converting to %qH from %qI requires direct-initialization"
msgstr ""
-#: cp/call.c:6614
-#, gcc-internal-format
-msgid "invalid user-defined conversion from %qT to %qT"
+#: cp/call.c:6643
+msgid "invalid user-defined conversion from %qH to %qI"
msgstr ""
-#: cp/call.c:6631 cp/call.c:6655 cp/call.c:6771 cp/call.c:6863 cp/call.c:6913
-#: cp/call.c:6941
+#: cp/call.c:6660 cp/call.c:6684 cp/call.c:6788 cp/call.c:6879 cp/call.c:6929
+#: cp/call.c:6957
#, gcc-internal-format
msgid " initializing argument %P of %qD"
msgstr ""
-#: cp/call.c:6651 cp/cvt.c:224
-#, gcc-internal-format
-msgid "invalid conversion from %qT to %qT"
+#: cp/call.c:6680 cp/cvt.c:224
+msgid "invalid conversion from %qH to %qI"
msgstr ""
-#: cp/call.c:6685 cp/call.c:6692
+#: cp/call.c:6714 cp/call.c:6721
#, gcc-internal-format
msgid ""
"converting to %qT from initializer list would use explicit constructor %qD"
msgstr ""
-#: cp/call.c:6688
+#: cp/call.c:6717
#, gcc-internal-format
msgid "in C++11 and above a default constructor can be explicit"
msgstr ""
-#: cp/call.c:6927
-#, gcc-internal-format
-msgid "cannot bind rvalue reference of type %qT to lvalue of type %qT"
+#: cp/call.c:6943
+msgid "cannot bind rvalue reference of type %qH to lvalue of type %qI"
msgstr ""
-#: cp/call.c:6931
-#, gcc-internal-format
+#: cp/call.c:6947
msgid ""
-"cannot bind non-const lvalue reference of type %qT to an rvalue of type %qT"
+"cannot bind non-const lvalue reference of type %qH to an rvalue of type %qI"
msgstr ""
-#: cp/call.c:6934
-#, gcc-internal-format
-msgid "binding reference of type %qT to %qT discards qualifiers"
+#: cp/call.c:6950
+msgid "binding reference of type %qH to %qI discards qualifiers"
msgstr ""
-#: cp/call.c:6970
+#: cp/call.c:6986
#, gcc-internal-format
msgid "cannot bind bitfield %qE to %qT"
msgstr ""
-#: cp/call.c:6973 cp/call.c:6990
+#: cp/call.c:6989 cp/call.c:7006
#, gcc-internal-format
msgid "cannot bind packed field %qE to %qT"
msgstr ""
-#: cp/call.c:6976
+#: cp/call.c:6992
#, gcc-internal-format
msgid "cannot bind rvalue %qE to %qT"
msgstr ""
-#: cp/call.c:7103 cp/cvt.c:1862
+#: cp/call.c:7102
+msgid "implicit conversion from %qH to %qI when passing argument to function"
+msgstr ""
+
+#: cp/call.c:7119 cp/cvt.c:1864
#, gcc-internal-format
msgid ""
"scoped enum %qT passed through ... as %qT before -fabi-version=6, %qT after"
msgstr ""
-#: cp/call.c:7144
+#: cp/call.c:7160
#, gcc-internal-format
msgid ""
"passing objects of non-trivially-copyable type %q#T through %<...%> is "
"conditionally supported"
msgstr ""
-#: cp/call.c:7175
+#: cp/call.c:7191
#, gcc-internal-format
msgid "cannot receive reference type %qT through %<...%>"
msgstr ""
-#: cp/call.c:7185
+#: cp/call.c:7201
#, gcc-internal-format
msgid ""
"receiving objects of non-trivially-copyable type %q#T through %<...%> is "
"conditionally-supported"
msgstr ""
-#: cp/call.c:7253
+#: cp/call.c:7269
#, gcc-internal-format
msgid "recursive evaluation of default argument for %q#D"
msgstr ""
-#: cp/call.c:7262
+#: cp/call.c:7278
#, gcc-internal-format
msgid ""
"call to %qD uses the default argument for parameter %P, which is not yet "
"defined"
msgstr ""
-#: cp/call.c:7364
+#: cp/call.c:7381
#, gcc-internal-format
msgid "argument of function call might be a candidate for a format attribute"
msgstr ""
-#: cp/call.c:7419
+#: cp/call.c:7439
#, gcc-internal-format
msgid "use of multiversioned function without a default"
msgstr ""
-#: cp/call.c:7710
+#: cp/call.c:7733
#, gcc-internal-format
msgid "passing %qT as %<this%> argument discards qualifiers"
msgstr ""
-#: cp/call.c:7713 cp/call.c:7829 cp/call.c:9587 cp/name-lookup.c:6067
+#: cp/call.c:7736 cp/call.c:7852 cp/call.c:10000
#, gcc-internal-format
msgid " in call to %qD"
msgstr ""
-#: cp/call.c:7743
+#: cp/call.c:7766
#, gcc-internal-format
msgid "%qT is not an accessible base of %qT"
msgstr ""
-#: cp/call.c:7825
+#: cp/call.c:7848
#, gcc-internal-format
msgid "deducing %qT as %qT"
msgstr ""
-#: cp/call.c:7831
+#: cp/call.c:7854
#, gcc-internal-format
msgid " (you can disable this with -fno-deduce-init-list)"
msgstr ""
-#: cp/call.c:7931
+#: cp/call.c:7954
#, gcc-internal-format
msgid "passing arguments to ellipsis of inherited constructor %qD"
msgstr ""
-#: cp/call.c:8275
+#: cp/call.c:8407
+#, gcc-internal-format
+msgid "%qD writing to an object of type %#qT with no trivial copy-assignment"
+msgstr ""
+
+#: cp/call.c:8410
+#, gcc-internal-format
+msgid "%qD writing to an object of non-trivial type %#qT%s"
+msgstr ""
+
+#: cp/call.c:8415
+#, gcc-internal-format
+msgid "%qD writing to an object of type %#qT with %qs member %qD"
+msgstr ""
+
+#: cp/call.c:8420
+#, gcc-internal-format
+msgid ""
+"%qD writing to an object of type %#qT containing a pointer to data member%s"
+msgstr ""
+
+#: cp/call.c:8435
+#, gcc-internal-format
+msgid "; use assignment or value-initialization instead"
+msgstr ""
+
+#: cp/call.c:8437
+#, gcc-internal-format
+msgid "; use assignment instead"
+msgstr ""
+
+#: cp/call.c:8439
+#, gcc-internal-format
+msgid "; use value-initialization instead"
+msgstr ""
+
+#: cp/call.c:8442
+#, gcc-internal-format
+msgid "%qD clearing an object of type %#qT with no trivial copy-assignment%s"
+msgstr ""
+
+#: cp/call.c:8445
+#, gcc-internal-format
+msgid "%qD clearing an object of non-trivial type %#qT%s"
+msgstr ""
+
+#: cp/call.c:8447
+#, gcc-internal-format
+msgid "%qD clearing an object of type %#qT containing a pointer-to-member%s"
+msgstr ""
+
+#: cp/call.c:8465
+#, gcc-internal-format
+msgid "; use copy-assignment or copy-initialization instead"
+msgstr ""
+
+#: cp/call.c:8467
+#, gcc-internal-format
+msgid "; use copy-assignment instead"
+msgstr ""
+
+#: cp/call.c:8469
+#, gcc-internal-format
+msgid "; use copy-initialization instead"
+msgstr ""
+
+#: cp/call.c:8472
+#, gcc-internal-format
+msgid "%qD writing to an object of type %#qT with no trivial copy-assignment%s"
+msgstr ""
+
+#: cp/call.c:8475
+#, gcc-internal-format
+msgid "%qD writing to an object of non-trivially copyable type %#qT%s"
+msgstr ""
+
+#: cp/call.c:8478
+#, gcc-internal-format
+msgid "%qD writing to an object with a deleted copy constructor"
+msgstr ""
+
+#: cp/call.c:8489
+#, gcc-internal-format
+msgid "%qD copying an object of non-trivial type %#qT from an array of %#qT"
+msgstr ""
+
+#: cp/call.c:8501
+#, gcc-internal-format
+msgid ""
+"%qD copying an object of type %#qT with %qs member %qD from an array of "
+"%#qT; use assignment or copy-initialization instead"
+msgstr ""
+
+#: cp/call.c:8515
+#, gcc-internal-format
+msgid ""
+"%qD writing to an object of a non-trivial type %#qT leaves %wu bytes "
+"unchanged"
+msgstr ""
+
+#: cp/call.c:8518
+#, gcc-internal-format
+msgid ""
+"%qD writing to an object of a non-trivial type %#qT leaves %wu byte unchanged"
+msgstr ""
+
+#: cp/call.c:8528
+#, gcc-internal-format
+msgid ""
+"%qD moving an object of non-trivially copyable type %#qT; use %<new%> and "
+"%<delete%> instead"
+msgstr ""
+
+#: cp/call.c:8531
+#, gcc-internal-format
+msgid ""
+"%qD moving an object of type %#qT with deleted copy constructor; use %<new%> "
+"and %<delete%> instead"
+msgstr ""
+
+#: cp/call.c:8534
+#, gcc-internal-format
+msgid "%qD moving an object of type %#qT with deleted destructor"
+msgstr ""
+
+#: cp/call.c:8542
+#, gcc-internal-format
+msgid ""
+"%qD moving an object of non-trivial type %#qT and size %E into a region of "
+"size %E"
+msgstr ""
+
+#: cp/call.c:8567
+#, gcc-internal-format
+msgid "%#qT declared here"
+msgstr ""
+
+#: cp/call.c:8699
#, gcc-internal-format
msgid "constructor delegates to itself"
msgstr ""
-#: cp/call.c:8525
+#: cp/call.c:8941
#, gcc-internal-format
msgid "call to non-function %qD"
msgstr ""
-#: cp/call.c:8571 cp/pt.c:14198 cp/typeck.c:2807
+#: cp/call.c:8988 cp/pt.c:14251 cp/typeck.c:2834
#, gcc-internal-format
msgid "cannot call constructor %<%T::%D%> directly"
msgstr ""
-#: cp/call.c:8573
+#: cp/call.c:8990
#, gcc-internal-format
msgid "for a function-style cast, remove the redundant %<::%D%>"
msgstr ""
-#: cp/call.c:8708
+#: cp/call.c:9120
#, gcc-internal-format
msgid "no matching function for call to %<%T::operator %T(%A)%#V%>"
msgstr ""
-#: cp/call.c:8724
+#: cp/call.c:9137
#, gcc-internal-format
-msgid "no matching function for call to %<%T::%E(%A)%#V%>"
+msgid "no matching function for call to %<%T::%s%E(%A)%#V%>"
msgstr ""
-#: cp/call.c:8748
+#: cp/call.c:9161
#, gcc-internal-format
msgid "no matching function for call to %<%s(%A)%>"
msgstr ""
-#: cp/call.c:8751
+#: cp/call.c:9164
#, gcc-internal-format
msgid "call of overloaded %<%s(%A)%> is ambiguous"
msgstr ""
-#: cp/call.c:8772
+#: cp/call.c:9185
#, gcc-internal-format
msgid "pure virtual %q#D called from non-static data member initializer"
msgstr ""
-#: cp/call.c:8777
+#: cp/call.c:9190
#, gcc-internal-format
msgid "pure virtual %q#D called from constructor"
msgstr ""
-#: cp/call.c:8778
+#: cp/call.c:9191
#, gcc-internal-format
msgid "pure virtual %q#D called from destructor"
msgstr ""
-#: cp/call.c:8801
+#: cp/call.c:9214
#, gcc-internal-format
msgid "cannot call member function %qD without object"
msgstr ""
-#: cp/call.c:9585
+#: cp/call.c:9998
#, gcc-internal-format
msgid "passing %qT chooses %qT over %qT"
msgstr ""
-#: cp/call.c:9645
+#: cp/call.c:10058
#, gcc-internal-format
msgid "choosing %qD over %qD"
msgstr ""
-#: cp/call.c:9646
-#, gcc-internal-format
-msgid " for conversion from %qT to %qT"
+#: cp/call.c:10059
+msgid " for conversion from %qH to %qI"
msgstr ""
-#: cp/call.c:9649
+#: cp/call.c:10062
#, gcc-internal-format
msgid " because conversion sequence for the argument is better"
msgstr ""
-#: cp/call.c:9873
+#: cp/call.c:10286
#, gcc-internal-format
msgid "default argument mismatch in overload resolution"
msgstr ""
-#: cp/call.c:9877
+#: cp/call.c:10290
#, gcc-internal-format
msgid " candidate 1: %q#F"
msgstr ""
-#: cp/call.c:9879
+#: cp/call.c:10292
#, gcc-internal-format
msgid " candidate 2: %q#F"
msgstr ""
-#: cp/call.c:9924
+#: cp/call.c:10337
#, 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:10102
-#, gcc-internal-format
-msgid "could not convert %qE from %qT to %qT"
+#: cp/call.c:10515
+msgid "could not convert %qE from %qH to %qI"
msgstr ""
-#: cp/call.c:10296
+#: cp/call.c:10707
#, gcc-internal-format
msgid "a temporary bound to %qD only persists until the constructor exits"
msgstr ""
-#: cp/call.c:10419
-#, gcc-internal-format
+#: cp/call.c:10830
msgid ""
-"invalid initialization of non-const reference of type %qT from an rvalue of "
-"type %qT"
+"invalid initialization of non-const reference of type %qH from an rvalue of "
+"type %qI"
msgstr ""
-#: cp/call.c:10423
-#, gcc-internal-format
+#: cp/call.c:10834
msgid ""
-"invalid initialization of reference of type %qT from expression of type %qT"
+"invalid initialization of reference of type %qH from expression of type %qI"
msgstr ""
-#: cp/class.c:326
+#: cp/class.c:330
#, gcc-internal-format
msgid ""
"cannot convert from pointer to base class %qT to pointer to derived class "
"%qT because the base is virtual"
msgstr ""
-#: cp/class.c:330
+#: cp/class.c:334
#, gcc-internal-format
msgid ""
"cannot convert from base class %qT to derived class %qT because the base is "
"virtual"
msgstr ""
-#: cp/class.c:337
+#: cp/class.c:341
#, gcc-internal-format
msgid ""
"cannot convert from pointer to base class %qT to pointer to derived class "
"%qT via virtual base %qT"
msgstr ""
-#: cp/class.c:342
+#: cp/class.c:346
#, gcc-internal-format
msgid ""
"cannot convert from base class %qT to derived class %qT via virtual base %qT"
msgstr ""
-#: cp/class.c:1216
+#: cp/class.c:1209
#, gcc-internal-format
-msgid "%q#D"
+msgid "%q#D conflicts with version inherited from %qT"
msgstr ""
-#: cp/class.c:1218
+#: cp/class.c:1212
#, gcc-internal-format
-msgid "conflicts with version inherited from %qT"
+msgid "version inherited from %qT declared here"
msgstr ""
-#: cp/class.c:1239
+#: cp/class.c:1232
#, gcc-internal-format
-msgid "%q+#D cannot be overloaded"
+msgid "%q#D cannot be overloaded with %q#D"
msgstr ""
-#: cp/class.c:1240
+#: cp/class.c:1234 cp/decl.c:1619 cp/decl.c:1640 cp/decl.c:1672
+#: cp/name-lookup.c:1648
#, gcc-internal-format
-msgid "with %q+#D"
+msgid "previous declaration %q#D"
msgstr ""
-#: cp/class.c:1319
+#: cp/class.c:1294
#, gcc-internal-format
msgid "conflicting access specifications for method %q+D, ignored"
msgstr ""
-#: cp/class.c:1322
+#: cp/class.c:1297
#, gcc-internal-format
msgid "conflicting access specifications for field %qE, ignored"
msgstr ""
-#: cp/class.c:1392 cp/class.c:1400
+#: cp/class.c:1366
#, gcc-internal-format
-msgid "%q+D invalid in %q#T"
+msgid "%qD invalid in %q#T because of local method %q#D with same name"
msgstr ""
-#: cp/class.c:1393
+#: cp/class.c:1370
#, gcc-internal-format
-msgid " because of local method %q+#D with same name"
+msgid "local method %q#D declared here"
msgstr ""
-#: cp/class.c:1401
+#: cp/class.c:1376
#, gcc-internal-format
-msgid " because of local member %q+#D with same name"
+msgid "%qD invalid in %q#T because of local member %q#D with same name"
msgstr ""
-#: cp/class.c:1456
+#: cp/class.c:1380
+#, gcc-internal-format
+msgid "local member %q#D declared here"
+msgstr ""
+
+#: cp/class.c:1435
#, gcc-internal-format
msgid "%qD inherits the %E ABI tag that %qT (used in its return type) has"
msgstr ""
-#: cp/class.c:1459 cp/class.c:1465 cp/class.c:1471 cp/class.c:1482
+#: cp/class.c:1438 cp/class.c:1444 cp/class.c:1450 cp/class.c:1461
#: cp/cvt.c:1005
#, gcc-internal-format
msgid "%qT declared here"
msgstr ""
-#: cp/class.c:1463
+#: cp/class.c:1442
#, gcc-internal-format
msgid "%qD inherits the %E ABI tag that %qT (used in its type) has"
msgstr ""
-#: cp/class.c:1469
+#: cp/class.c:1448
#, gcc-internal-format
msgid "%qT does not have the %E ABI tag that base %qT has"
msgstr ""
-#: cp/class.c:1476
+#: cp/class.c:1455
#, gcc-internal-format
msgid "%qT does not have the %E ABI tag that %qT (used in the type of %qD) has"
msgstr ""
-#: cp/class.c:1781
+#: cp/class.c:1760
#, gcc-internal-format
msgid "cannot derive from %<final%> base %qT in derived type %qT"
msgstr ""
-#: cp/class.c:2231
+#: cp/class.c:2211
#, gcc-internal-format
msgid "all member functions in class %qT are private"
msgstr ""
-#: cp/class.c:2243
+#: cp/class.c:2223
#, gcc-internal-format
msgid "%q#T only defines a private destructor and has no friends"
msgstr ""
-#: cp/class.c:2288
+#: cp/class.c:2265
#, gcc-internal-format
msgid "%q#T only defines private constructors and has no friends"
msgstr ""
-#: cp/class.c:2681
+#: cp/class.c:2269
+#, gcc-internal-format
+msgid "%q#D is public, but requires an existing %q#T object"
+msgstr ""
+
+#: cp/class.c:2662
#, gcc-internal-format
msgid "no unique final overrider for %qD in %qT"
msgstr ""
-#: cp/class.c:3042
+#: cp/class.c:3016
#, gcc-internal-format
msgid "%qD can be marked override"
msgstr ""
-#: cp/class.c:3054
+#: cp/class.c:3028
#, gcc-internal-format
msgid "%q+#D marked %<final%>, but is not virtual"
msgstr ""
-#: cp/class.c:3056
+#: cp/class.c:3030
#, gcc-internal-format
msgid "%q+#D marked %<override%>, but does not override"
msgstr ""
-#: cp/class.c:3126
+#: cp/class.c:3098
#, gcc-internal-format
msgid "%qD was hidden"
msgstr ""
-#: cp/class.c:3128
+#: cp/class.c:3100
#, gcc-internal-format
msgid " by %qD"
msgstr ""
-#: cp/class.c:3162 cp/decl2.c:1483
+#: cp/class.c:3134 cp/decl2.c:1454
#, gcc-internal-format
msgid "%q#D invalid; an anonymous union can only have non-static data members"
msgstr ""
-#: cp/class.c:3166
+#: cp/class.c:3138
#, gcc-internal-format
msgid "%q#D invalid; an anonymous struct can only have non-static data members"
msgstr ""
-#: cp/class.c:3178 cp/decl2.c:1490
+#: cp/class.c:3150 cp/decl2.c:1461
#, gcc-internal-format
msgid "private member %q#D in anonymous union"
msgstr ""
-#: cp/class.c:3181
+#: cp/class.c:3153
#, gcc-internal-format
msgid "private member %q#D in anonymous struct"
msgstr ""
-#: cp/class.c:3187 cp/decl2.c:1493
+#: cp/class.c:3159 cp/decl2.c:1464
#, gcc-internal-format
msgid "protected member %q#D in anonymous union"
msgstr ""
-#: cp/class.c:3190
+#: cp/class.c:3162
#, gcc-internal-format
msgid "protected member %q#D in anonymous struct"
msgstr ""
-#: cp/class.c:3378
+#: cp/class.c:3352
#, gcc-internal-format
msgid "the ellipsis in %qD is not inherited"
msgstr ""
-#: cp/class.c:3547
+#: cp/class.c:3523
#, gcc-internal-format
msgid "bit-field %q+#D with non-integral type"
msgstr ""
-#: cp/class.c:3563
+#: cp/class.c:3539
#, gcc-internal-format
msgid "bit-field %q+D width not an integer constant"
msgstr ""
-#: cp/class.c:3568
+#: cp/class.c:3544
#, gcc-internal-format
msgid "negative width in bit-field %q+D"
msgstr ""
-#: cp/class.c:3573
+#: cp/class.c:3549
#, gcc-internal-format
msgid "zero width for bit-field %q+D"
msgstr ""
-#: cp/class.c:3583
+#: cp/class.c:3559
#, gcc-internal-format
msgid "width of %qD exceeds its type"
msgstr ""
-#: cp/class.c:3588
+#: cp/class.c:3564
#, gcc-internal-format
msgid "%qD is too small to hold all values of %q#T"
msgstr ""
-#: cp/class.c:3648
+#: cp/class.c:3624
#, gcc-internal-format
msgid "member %q+#D with constructor not allowed in union"
msgstr ""
-#: cp/class.c:3651
+#: cp/class.c:3627
#, gcc-internal-format
msgid "member %q+#D with destructor not allowed in union"
msgstr ""
-#: cp/class.c:3653
+#: cp/class.c:3629
#, gcc-internal-format
msgid "member %q+#D with copy assignment operator not allowed in union"
msgstr ""
-#: cp/class.c:3657
+#: cp/class.c:3633
#, gcc-internal-format
msgid "unrestricted unions only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/class.c:3781
+#: cp/class.c:3761
#, gcc-internal-format
msgid "in C++98 %q+D may not be static because it is a member of a union"
msgstr ""
-#: cp/class.c:3788
+#: cp/class.c:3768
#, gcc-internal-format
msgid "non-static data member %q+D in a union may not have reference type %qT"
msgstr ""
-#: cp/class.c:3798
+#: cp/class.c:3778
#, gcc-internal-format
msgid "field %q+D invalidly declared function type"
msgstr ""
-#: cp/class.c:3804
+#: cp/class.c:3784
#, gcc-internal-format
msgid "field %q+D invalidly declared method type"
msgstr ""
-#: cp/class.c:3864
+#: cp/class.c:3844
#, gcc-internal-format
msgid "ignoring packed attribute because of unpacked non-POD field %q#D"
msgstr ""
-#: cp/class.c:3912
+#: cp/class.c:3892
#, gcc-internal-format
msgid "member %q+D cannot be declared both %<const%> and %<mutable%>"
msgstr ""
-#: cp/class.c:3918
+#: cp/class.c:3898
#, gcc-internal-format
msgid "member %q+D cannot be declared as a %<mutable%> reference"
msgstr ""
-#: cp/class.c:3944
+#: cp/class.c:3924
#, gcc-internal-format
msgid "multiple fields in union %qT initialized"
msgstr ""
-#: cp/class.c:3985
+#: cp/class.c:3965
#, gcc-internal-format
msgid "field %q#D with same name as class"
msgstr ""
-#: cp/class.c:4008
+#: cp/class.c:3988
#, gcc-internal-format
msgid "%q#T has pointer data members"
msgstr ""
-#: cp/class.c:4013
+#: cp/class.c:3993
#, gcc-internal-format
msgid " but does not override %<%T(const %T&)%>"
msgstr ""
-#: cp/class.c:4015
+#: cp/class.c:3995
#, gcc-internal-format
msgid " or %<operator=(const %T&)%>"
msgstr ""
-#: cp/class.c:4019
+#: cp/class.c:3999
#, gcc-internal-format
msgid " but does not override %<operator=(const %T&)%>"
msgstr ""
-#: cp/class.c:4424
+#: cp/class.c:4404
#, gcc-internal-format
msgid "alignment of %qD increased in -fabi-version=9 (GCC 5.2)"
msgstr ""
-#: cp/class.c:4427
+#: cp/class.c:4407
#, gcc-internal-format
msgid "alignment of %qD will increase in -fabi-version=9"
msgstr ""
-#: cp/class.c:4698
+#: cp/class.c:4679
#, gcc-internal-format
msgid "initializer specified for non-virtual method %q+D"
msgstr ""
-#: cp/class.c:5155
+#: cp/class.c:5119
#, gcc-internal-format
msgid "method overrides both %<transaction_pure%> and %qE methods"
msgstr ""
-#: cp/class.c:5176
+#: cp/class.c:5140
#, gcc-internal-format
msgid "method declared %qE overriding %qE method"
msgstr ""
-#: cp/class.c:5771 cp/constexpr.c:218
+#: cp/class.c:5672 cp/constexpr.c:221
#, gcc-internal-format
msgid ""
"enclosing class of constexpr non-static member function %q+#D is not a "
"literal type"
msgstr ""
-#: cp/class.c:5796
+#: cp/class.c:5696
#, gcc-internal-format
msgid "%q+T is not literal because:"
msgstr ""
-#: cp/class.c:5798
+#: cp/class.c:5698
+#, gcc-internal-format
+msgid " %qT is a closure type, which is only literal in C++1z and later"
+msgstr ""
+
+#: cp/class.c:5701
#, gcc-internal-format
msgid " %q+T has a non-trivial destructor"
msgstr ""
-#: cp/class.c:5803
+#: cp/class.c:5707
#, 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:5838
+#: cp/class.c:5739
#, gcc-internal-format
msgid " base class %qT of %q+T is non-literal"
msgstr ""
-#: cp/class.c:5853
+#: cp/class.c:5754
#, gcc-internal-format
msgid " non-static data member %qD has non-literal type"
msgstr ""
-#: cp/class.c:5860
+#: cp/class.c:5761
#, gcc-internal-format
msgid " non-static data member %qD has volatile type"
msgstr ""
-#: cp/class.c:5978
+#: cp/class.c:5880
#, gcc-internal-format
msgid "base class %q#T has accessible non-virtual destructor"
msgstr ""
-#: cp/class.c:6007
+#: cp/class.c:5909
#, gcc-internal-format
msgid "non-static reference %q#D in class without a constructor"
msgstr ""
-#: cp/class.c:6013
+#: cp/class.c:5915
#, 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:6039
+#: cp/class.c:5943
#, gcc-internal-format
msgid ""
"%q+D declared to take const reference, but implicit declaration would take "
"non-const"
msgstr ""
-#: cp/class.c:6316
+#: cp/class.c:6220
#, gcc-internal-format
msgid "direct base %qT inaccessible in %qT due to ambiguity"
msgstr ""
-#: cp/class.c:6328
+#: cp/class.c:6232
#, gcc-internal-format
msgid "virtual base %qT inaccessible in %qT due to ambiguity"
msgstr ""
-#: cp/class.c:6556
+#: cp/class.c:6457
#, gcc-internal-format
msgid ""
"offset of %qD is not ABI-compliant and may change in a future version of GCC"
msgstr ""
-#: cp/class.c:6711
+#: cp/class.c:6612
#, gcc-internal-format
msgid "size of type %qT is too large (%qE bytes)"
msgstr ""
-#: cp/class.c:7009
+#: cp/class.c:6909
#, gcc-internal-format
msgid "invalid use of %q#T with a zero-size array in %q#D"
msgstr ""
-#: cp/class.c:7011
+#: cp/class.c:6911
#, gcc-internal-format
msgid "invalid use of %q#T with a flexible array member in %q#T"
msgstr ""
-#: cp/class.c:7016
+#: cp/class.c:6916
#, gcc-internal-format
msgid "array member %q#D declared here"
msgstr ""
-#: cp/class.c:7043
+#: cp/class.c:6943
#, gcc-internal-format
msgid "zero-size array member %qD not at end of %q#T"
msgstr ""
-#: cp/class.c:7045
+#: cp/class.c:6945
#, gcc-internal-format
msgid "zero-size array member %qD in an otherwise empty %q#T"
msgstr ""
-#: cp/class.c:7053 cp/class.c:7083
+#: cp/class.c:6953 cp/class.c:6983
#, gcc-internal-format
msgid "in the definition of %q#T"
msgstr ""
-#: cp/class.c:7061
+#: cp/class.c:6961
#, gcc-internal-format
msgid "flexible array member %qD not at end of %q#T"
msgstr ""
-#: cp/class.c:7063
+#: cp/class.c:6963
#, gcc-internal-format
msgid "flexible array member %qD in an otherwise empty %q#T"
msgstr ""
-#: cp/class.c:7081
+#: cp/class.c:6981
#, gcc-internal-format
msgid "next member %q#D declared here"
msgstr ""
-#: cp/class.c:7193 cp/parser.c:22796
+#: cp/class.c:7093 cp/parser.c:22960
#, gcc-internal-format
msgid "redefinition of %q#T"
msgstr ""
-#: cp/class.c:7337
+#: cp/class.c:7237
#, gcc-internal-format
msgid "%q#T has virtual functions and accessible non-virtual destructor"
msgstr ""
-#: cp/class.c:7365
+#: cp/class.c:7265
#, gcc-internal-format
msgid "type transparent %q#T does not have any fields"
msgstr ""
-#: cp/class.c:7371
+#: cp/class.c:7271
#, gcc-internal-format
msgid "type transparent class %qT has base classes"
msgstr ""
-#: cp/class.c:7375
+#: cp/class.c:7275
#, gcc-internal-format
msgid "type transparent class %qT has virtual functions"
msgstr ""
-#: cp/class.c:7381
+#: cp/class.c:7281
#, 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:7545
+#: cp/class.c:7445
#, gcc-internal-format
msgid ""
"definition of std::initializer_list does not match #include "
"<initializer_list>"
msgstr ""
-#: cp/class.c:7556
+#: cp/class.c:7456
#, gcc-internal-format
msgid "trying to finish struct, but kicked out due to previous parse errors"
msgstr ""
-#: cp/class.c:8072
+#: cp/class.c:7972
#, gcc-internal-format
msgid "language string %<\"%E\"%> not recognized"
msgstr ""
-#: cp/class.c:8162
+#: cp/class.c:8062
#, gcc-internal-format
msgid "cannot resolve overloaded function %qD based on conversion to type %qT"
msgstr ""
-#: cp/class.c:8317
+#: cp/class.c:8206
#, gcc-internal-format
msgid "no matches converting function %qD to type %q#T"
msgstr ""
-#: cp/class.c:8345
+#: cp/class.c:8233
#, gcc-internal-format
msgid "converting overloaded function %qD to type %q#T is ambiguous"
msgstr ""
-#: cp/class.c:8372
+#: cp/class.c:8259
#, gcc-internal-format
msgid "assuming pointer to member %qD"
msgstr ""
-#: cp/class.c:8375
+#: cp/class.c:8262
#, gcc-internal-format
msgid "(a pointer to member can only be formed with %<&%E%>)"
msgstr ""
-#: cp/class.c:8450 cp/class.c:8487
+#: cp/class.c:8337 cp/class.c:8374
#, gcc-internal-format
msgid "not enough type information"
msgstr ""
-#: cp/class.c:8470 cp/cvt.c:171 cp/cvt.c:198 cp/cvt.c:247
+#: cp/class.c:8357
#, gcc-internal-format
msgid "cannot convert %qE from type %qT to type %qT"
msgstr ""
@@ -38624,389 +39483,389 @@ 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:8756
+#: cp/class.c:8641
#, gcc-internal-format
msgid "declaration of %q#D"
msgstr ""
-#: cp/class.c:8758
+#: cp/class.c:8643
#, gcc-internal-format
msgid "changes meaning of %qD from %q#D"
msgstr ""
-#: cp/constexpr.c:96
+#: cp/constexpr.c:97
#, gcc-internal-format
msgid "the type %qT of constexpr variable %qD is not literal"
msgstr ""
-#: cp/constexpr.c:104
+#: cp/constexpr.c:105
#, gcc-internal-format
msgid "variable %qD of non-literal type %qT in %<constexpr%> function"
msgstr ""
-#: cp/constexpr.c:179
+#: cp/constexpr.c:180
#, gcc-internal-format
msgid "inherited constructor %qD is not constexpr"
msgstr ""
-#: cp/constexpr.c:191
+#: cp/constexpr.c:192
#, gcc-internal-format
msgid "invalid type for parameter %d of constexpr function %q+#D"
msgstr ""
-#: cp/constexpr.c:206
+#: cp/constexpr.c:207
#, gcc-internal-format
msgid "invalid return type %qT of constexpr function %q+D"
msgstr ""
-#: cp/constexpr.c:228
+#: cp/constexpr.c:230
#, gcc-internal-format
msgid "%q#T has virtual base classes"
msgstr ""
-#: cp/constexpr.c:488
+#: cp/constexpr.c:490
#, gcc-internal-format
msgid "constexpr constructor does not have empty body"
msgstr ""
-#: cp/constexpr.c:594
+#: cp/constexpr.c:596
#, gcc-internal-format
msgid "body of %<constexpr%> constructor cannot be a function-try-block"
msgstr ""
-#: cp/constexpr.c:723
+#: cp/constexpr.c:725
#, gcc-internal-format
msgid ""
"%<constexpr%> constructor for union %qT must initialize exactly one non-"
"static data member"
msgstr ""
-#: cp/constexpr.c:775
+#: cp/constexpr.c:777
#, gcc-internal-format
msgid ""
"member %qD must be initialized by mem-initializer in %<constexpr%> "
"constructor"
msgstr ""
-#: cp/constexpr.c:816
+#: cp/constexpr.c:818
#, gcc-internal-format
msgid "body of constexpr function %qD not a return-statement"
msgstr ""
-#: cp/constexpr.c:876
+#: cp/constexpr.c:878
#, gcc-internal-format
msgid "%qD is not usable as a constexpr function because:"
msgstr ""
-#: cp/constexpr.c:1176 cp/constexpr.c:1185 cp/constexpr.c:1750
+#: cp/constexpr.c:1178 cp/constexpr.c:1187 cp/constexpr.c:1767
#, gcc-internal-format
msgid "%q+E is not a constant expression"
msgstr ""
-#: cp/constexpr.c:1363 cp/constexpr.c:5123
+#: cp/constexpr.c:1365 cp/constexpr.c:5142
#, gcc-internal-format
msgid "call to internal function %qE"
msgstr ""
-#: cp/constexpr.c:1426
+#: cp/constexpr.c:1443
#, gcc-internal-format
msgid "expression %qE does not designate a constexpr function"
msgstr ""
-#: cp/constexpr.c:1444 cp/constexpr.c:5141
+#: cp/constexpr.c:1461 cp/constexpr.c:5160
#, gcc-internal-format
msgid "call to non-constexpr function %qD"
msgstr ""
-#: cp/constexpr.c:1516
+#: cp/constexpr.c:1533
#, gcc-internal-format
msgid "%qD called in a constant expression before its definition is complete"
msgstr ""
-#: cp/constexpr.c:1523
+#: cp/constexpr.c:1540
#, gcc-internal-format
msgid "%qD called in a constant expression"
msgstr ""
-#: cp/constexpr.c:1527
+#: cp/constexpr.c:1544
#, gcc-internal-format
msgid "%qD used before its definition"
msgstr ""
-#: cp/constexpr.c:1567
+#: cp/constexpr.c:1584
#, gcc-internal-format
msgid "call has circular dependency"
msgstr ""
-#: cp/constexpr.c:1578
+#: cp/constexpr.c:1595
#, 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:1661
+#: cp/constexpr.c:1678
#, gcc-internal-format
msgid "constexpr call flows off the end of the function"
msgstr ""
-#: cp/constexpr.c:1790
+#: cp/constexpr.c:1807
#, gcc-internal-format
msgid "right operand of shift expression %q+E is negative"
msgstr ""
-#: cp/constexpr.c:1797
+#: cp/constexpr.c:1814
#, gcc-internal-format
msgid ""
"right operand of shift expression %q+E is >= than the precision of the left "
"operand"
msgstr ""
-#: cp/constexpr.c:1815
+#: cp/constexpr.c:1832
#, gcc-internal-format
msgid "left operand of shift expression %q+E is negative"
msgstr ""
-#: cp/constexpr.c:1834
+#: cp/constexpr.c:1851
#, gcc-internal-format
msgid "shift expression %q+E overflows"
msgstr ""
-#: cp/constexpr.c:1978
+#: cp/constexpr.c:1995
#, gcc-internal-format
msgid "arithmetic involving a null pointer in %qE"
msgstr ""
-#: cp/constexpr.c:2172
+#: cp/constexpr.c:2189
#, gcc-internal-format
msgid ""
"array subscript value %qE is outside the bounds of array %qD of type %qT"
msgstr ""
-#: cp/constexpr.c:2177
+#: cp/constexpr.c:2194
#, gcc-internal-format
msgid "array subscript value %qE is outside the bounds of array type %qT"
msgstr ""
-#: cp/constexpr.c:2324
+#: cp/constexpr.c:2341
#, gcc-internal-format
msgid "accessing uninitialized array element"
msgstr ""
-#: cp/constexpr.c:2355
+#: cp/constexpr.c:2372
#, gcc-internal-format
msgid "dereferencing a null pointer in %qE"
msgstr ""
-#: cp/constexpr.c:2369 cp/constexpr.c:2459 cp/constexpr.c:4011
+#: cp/constexpr.c:2386 cp/constexpr.c:2476 cp/constexpr.c:4028
#, gcc-internal-format
msgid "%qE is not a constant expression"
msgstr ""
-#: cp/constexpr.c:2375
+#: cp/constexpr.c:2392
#, gcc-internal-format
msgid "mutable %qD is not usable in a constant expression"
msgstr ""
-#: cp/constexpr.c:2400
+#: cp/constexpr.c:2417
#, gcc-internal-format
msgid ""
"accessing %qD member instead of initialized %qD member in constant expression"
msgstr ""
-#: cp/constexpr.c:2419
+#: cp/constexpr.c:2436
#, gcc-internal-format
msgid "accessing uninitialized member %qD"
msgstr ""
-#: cp/constexpr.c:3130 cp/constexpr.c:4420
+#: cp/constexpr.c:3147 cp/constexpr.c:4438
#, gcc-internal-format
msgid "dereferencing a null pointer"
msgstr ""
-#: cp/constexpr.c:3149
+#: cp/constexpr.c:3166
#, gcc-internal-format
msgid "accessing value of %qE through a %qT glvalue in a constant expression"
msgstr ""
-#: cp/constexpr.c:3188
+#: cp/constexpr.c:3205
#, gcc-internal-format
msgid "the value of %qD is not usable in a constant expression"
msgstr ""
-#: cp/constexpr.c:3195
+#: cp/constexpr.c:3212
#, gcc-internal-format
msgid "%qD used in its own initializer"
msgstr ""
-#: cp/constexpr.c:3200
+#: cp/constexpr.c:3217
#, gcc-internal-format
msgid "%q#D is not const"
msgstr ""
-#: cp/constexpr.c:3203
+#: cp/constexpr.c:3220
#, gcc-internal-format
msgid "%q#D is volatile"
msgstr ""
-#: cp/constexpr.c:3208 cp/constexpr.c:3215
+#: cp/constexpr.c:3225 cp/constexpr.c:3232
#, gcc-internal-format
msgid "%qD was not initialized with a constant expression"
msgstr ""
-#: cp/constexpr.c:3221
+#: cp/constexpr.c:3238
#, gcc-internal-format
msgid "%qD was not declared %<constexpr%>"
msgstr ""
-#: cp/constexpr.c:3224
+#: cp/constexpr.c:3241
#, gcc-internal-format
msgid "%qD does not have integral or enumeration type"
msgstr ""
-#: cp/constexpr.c:3418
+#: cp/constexpr.c:3435
#, gcc-internal-format
msgid "modification of %qE is not a constant expression"
msgstr ""
-#: cp/constexpr.c:3790
+#: cp/constexpr.c:3807
#, gcc-internal-format, gfc-internal-format
msgid ""
"constexpr loop iteration count exceeds limit of %d (use -fconstexpr-loop-"
"limit= to increase the limit)"
msgstr ""
-#: cp/constexpr.c:3929
+#: cp/constexpr.c:3946
#, gcc-internal-format
msgid "value %qE of type %qT is not a constant expression"
msgstr ""
-#: cp/constexpr.c:4057 cp/constexpr.c:5570
+#: cp/constexpr.c:4074 cp/constexpr.c:5589
#, gcc-internal-format
msgid "temporary of non-literal type %qT in a constant expression"
msgstr ""
-#: cp/constexpr.c:4406
+#: cp/constexpr.c:4424
#, gcc-internal-format
msgid "a reinterpret_cast is not a constant expression"
msgstr ""
-#: cp/constexpr.c:4432
+#: cp/constexpr.c:4450
#, gcc-internal-format
msgid "conversion of %qT null pointer to %qT is not a constant expression"
msgstr ""
-#: cp/constexpr.c:4447
+#: cp/constexpr.c:4465
#, gcc-internal-format
msgid "%<reinterpret_cast<%T>(%E)%> is not a constant expression"
msgstr ""
-#: cp/constexpr.c:4510 cp/constexpr.c:5431 cp/constexpr.c:5746
+#: cp/constexpr.c:4527 cp/constexpr.c:5451 cp/constexpr.c:5765
#, gcc-internal-format
msgid "expression %qE is not a constant expression"
msgstr ""
-#: cp/constexpr.c:4587
+#: cp/constexpr.c:4604
#, gcc-internal-format
msgid "statement is not a constant expression"
msgstr ""
-#: cp/constexpr.c:4590
+#: cp/constexpr.c:4607
#, gcc-internal-format
msgid "unexpected expression %qE of kind %s"
msgstr ""
-#: cp/constexpr.c:4660
+#: cp/constexpr.c:4679
#, gcc-internal-format
msgid ""
"%qE is not a constant expression because it refers to mutable subobjects of "
"%qT"
msgstr ""
-#: cp/constexpr.c:4669
+#: cp/constexpr.c:4688
#, gcc-internal-format
msgid ""
"%qE is not a constant expression because it refers to an incompletely "
"initialized variable"
msgstr ""
-#: cp/constexpr.c:4683
+#: cp/constexpr.c:4702
#, gcc-internal-format
msgid ""
"conversion from pointer type %qT to arithmetic type %qT in a constant "
"expression"
msgstr ""
-#: cp/constexpr.c:5041
+#: cp/constexpr.c:5060
#, gcc-internal-format
msgid "expression %qE has side-effects"
msgstr ""
-#: cp/constexpr.c:5235
+#: cp/constexpr.c:5255
#, gcc-internal-format
msgid "reinterpret_cast from integer to pointer"
msgstr ""
-#: cp/constexpr.c:5267
+#: cp/constexpr.c:5287
#, gcc-internal-format
msgid ""
"address-of an object %qE with thread local or automatic storage is not a "
"constant expression"
msgstr ""
-#: cp/constexpr.c:5301
+#: cp/constexpr.c:5321
#, gcc-internal-format
msgid "use of %<this%> in a constant expression"
msgstr ""
-#: cp/constexpr.c:5443
+#: cp/constexpr.c:5463
#, gcc-internal-format
msgid ""
"typeid-expression is not a constant expression because %qE is of polymorphic "
"type"
msgstr ""
-#: cp/constexpr.c:5504
+#: cp/constexpr.c:5524
#, gcc-internal-format
msgid "cast to non-integral type %qT in a constant expression"
msgstr ""
-#: cp/constexpr.c:5537 cp/decl.c:5163
+#: cp/constexpr.c:5556
#, gcc-internal-format
-msgid "%qD declared %<static%> in %<constexpr%> function"
+msgid "%qD declared %<static%> in %<constexpr%> context"
msgstr ""
-#: cp/constexpr.c:5544 cp/decl.c:5160
+#: cp/constexpr.c:5563
#, gcc-internal-format
-msgid "%qD declared %<thread_local%> in %<constexpr%> function"
+msgid "%qD declared %<thread_local%> in %<constexpr%> context"
msgstr ""
-#: cp/constexpr.c:5551 cp/decl.c:5583
+#: cp/constexpr.c:5570
#, gcc-internal-format
-msgid "uninitialized variable %qD in %<constexpr%> function"
+msgid "uninitialized variable %qD in %<constexpr%> context"
msgstr ""
-#: cp/constexpr.c:5619
+#: cp/constexpr.c:5638
#, gcc-internal-format
msgid "division by zero is not a constant expression"
msgstr ""
-#: cp/constexpr.c:5723
+#: cp/constexpr.c:5742
#, gcc-internal-format
msgid "%<delete[]%> is not a constant expression"
msgstr ""
-#: cp/constexpr.c:5754
+#: cp/constexpr.c:5773
#, gcc-internal-format
msgid "non-constant array initialization"
msgstr ""
-#: cp/constexpr.c:5775
+#: cp/constexpr.c:5795
#, gcc-internal-format
msgid "%<goto%> is not a constant expression"
msgstr ""
-#: cp/constexpr.c:5787
+#: cp/constexpr.c:5807
#, gcc-internal-format, gfc-internal-format
msgid "unexpected AST of kind %s"
msgstr ""
@@ -39081,30 +39940,32 @@ msgstr ""
msgid "try statements are not allowed inside loops marked with #pragma simd"
msgstr ""
-#: cp/cp-gimplify.c:1442
+#: cp/cp-gimplify.c:1419
#, gcc-internal-format
msgid "throw will always call terminate()"
msgstr ""
-#: cp/cp-gimplify.c:1445
+#: cp/cp-gimplify.c:1422
#, gcc-internal-format
msgid "in C++11 destructors default to noexcept"
msgstr ""
-#: cp/cp-gimplify.c:1456
+#: cp/cp-gimplify.c:1433
#, gcc-internal-format
msgid ""
"in C++11 this throw will terminate because destructors default to noexcept"
msgstr ""
#: cp/cvt.c:89
-#, gcc-internal-format
-msgid "can%'t convert from incomplete type %qT to %qT"
+msgid "can%'t convert from incomplete type %qH to %qI"
msgstr ""
#: cp/cvt.c:99
-#, gcc-internal-format
-msgid "conversion of %qE from %qT to %qT is ambiguous"
+msgid "conversion of %qE from %qH to %qI is ambiguous"
+msgstr ""
+
+#: cp/cvt.c:171 cp/cvt.c:198 cp/cvt.c:247
+msgid "cannot convert %qE from type %qH to type %qI"
msgstr ""
#: cp/cvt.c:382
@@ -39128,18 +39989,16 @@ msgid "conversion to non-const reference type %q#T from rvalue of type %qT"
msgstr ""
#: cp/cvt.c:467
-#, gcc-internal-format
-msgid "conversion from %qT to %qT discards qualifiers"
+msgid "conversion from %qH to %qI discards qualifiers"
msgstr ""
-#: cp/cvt.c:489 cp/typeck.c:7096
+#: cp/cvt.c:489 cp/typeck.c:7175
#, gcc-internal-format
msgid "casting %qT to %qT does not dereference pointer"
msgstr ""
#: cp/cvt.c:517
-#, gcc-internal-format
-msgid "cannot convert type %qT to type %qT"
+msgid "cannot convert type %qH to type %qI"
msgstr ""
#: cp/cvt.c:755
@@ -39170,8 +40029,7 @@ msgid "%q#T used where a floating point value was expected"
msgstr ""
#: cp/cvt.c:910
-#, gcc-internal-format
-msgid "conversion from %qT to non-scalar type %qT requested"
+msgid "conversion from %qH to non-scalar type %qI requested"
msgstr ""
#: cp/cvt.c:990
@@ -39332,401 +40190,384 @@ msgid ""
"increment expression"
msgstr ""
-#: cp/cvt.c:1314
+#: cp/cvt.c:1316
#, gcc-internal-format
msgid "conversion to void will not access object %qE of incomplete type %qT"
msgstr ""
-#: cp/cvt.c:1318
+#: cp/cvt.c:1320
#, gcc-internal-format
msgid ""
"variable %qE of incomplete type %qT will not be accessed in second operand "
"of conditional expression"
msgstr ""
-#: cp/cvt.c:1323
+#: cp/cvt.c:1325
#, gcc-internal-format
msgid ""
"variable %qE of incomplete type %qT will not be accessed in third operand of "
"conditional expression"
msgstr ""
-#: cp/cvt.c:1328
+#: cp/cvt.c:1330
#, gcc-internal-format
msgid ""
"variable %qE of incomplete type %qT will not be accessed in right operand of "
"comma operator"
msgstr ""
-#: cp/cvt.c:1333
+#: cp/cvt.c:1335
#, gcc-internal-format
msgid ""
"variable %qE of incomplete type %qT will not be accessed in left operand of "
"comma operator"
msgstr ""
-#: cp/cvt.c:1338
+#: cp/cvt.c:1340
#, gcc-internal-format
msgid "variable %qE of incomplete type %qT will not be accessed in statement"
msgstr ""
-#: cp/cvt.c:1342
+#: cp/cvt.c:1344
#, gcc-internal-format
msgid ""
"variable %qE of incomplete type %qT will not be accessed in for increment "
"expression"
msgstr ""
-#: cp/cvt.c:1394
+#: cp/cvt.c:1396
#, gcc-internal-format
msgid "conversion to void cannot resolve address of overloaded function"
msgstr ""
-#: cp/cvt.c:1398
+#: cp/cvt.c:1400
#, gcc-internal-format
msgid ""
"second operand of conditional expression cannot resolve address of "
"overloaded function"
msgstr ""
-#: cp/cvt.c:1402
+#: cp/cvt.c:1404
#, gcc-internal-format
msgid ""
"third operand of conditional expression cannot resolve address of overloaded "
"function"
msgstr ""
-#: cp/cvt.c:1406
+#: cp/cvt.c:1408
#, gcc-internal-format
msgid ""
"right operand of comma operator cannot resolve address of overloaded function"
msgstr ""
-#: cp/cvt.c:1410
+#: cp/cvt.c:1412
#, gcc-internal-format
msgid ""
"left operand of comma operator cannot resolve address of overloaded function"
msgstr ""
-#: cp/cvt.c:1414
+#: cp/cvt.c:1416
#, gcc-internal-format
msgid "statement cannot resolve address of overloaded function"
msgstr ""
-#: cp/cvt.c:1418
+#: cp/cvt.c:1420
#, gcc-internal-format
msgid "for increment expression cannot resolve address of overloaded function"
msgstr ""
-#: cp/cvt.c:1434
+#: cp/cvt.c:1436
#, gcc-internal-format
msgid ""
"second operand of conditional expression is a reference, not call, to "
"function %qE"
msgstr ""
-#: cp/cvt.c:1439
+#: cp/cvt.c:1441
#, gcc-internal-format
msgid ""
"third operand of conditional expression is a reference, not call, to "
"function %qE"
msgstr ""
-#: cp/cvt.c:1444
+#: cp/cvt.c:1446
#, gcc-internal-format
msgid ""
"right operand of comma operator is a reference, not call, to function %qE"
msgstr ""
-#: cp/cvt.c:1449
+#: cp/cvt.c:1451
#, gcc-internal-format
msgid ""
"left operand of comma operator is a reference, not call, to function %qE"
msgstr ""
-#: cp/cvt.c:1454
+#: cp/cvt.c:1456
#, gcc-internal-format
msgid "statement is a reference, not call, to function %qE"
msgstr ""
-#: cp/cvt.c:1459
+#: cp/cvt.c:1461
#, gcc-internal-format
msgid "for increment expression is a reference, not call, to function %qE"
msgstr ""
-#: cp/cvt.c:1486
+#: cp/cvt.c:1488
#, gcc-internal-format
msgid "second operand of conditional expression has no effect"
msgstr ""
-#: cp/cvt.c:1491
+#: cp/cvt.c:1493
#, gcc-internal-format
msgid "third operand of conditional expression has no effect"
msgstr ""
-#: cp/cvt.c:1496
+#: cp/cvt.c:1498
#, gcc-internal-format
msgid "right operand of comma operator has no effect"
msgstr ""
-#: cp/cvt.c:1500
+#: cp/cvt.c:1502
#, gcc-internal-format
msgid "left operand of comma operator has no effect"
msgstr ""
-#: cp/cvt.c:1504
+#: cp/cvt.c:1506
#, gcc-internal-format
msgid "statement has no effect"
msgstr ""
-#: cp/cvt.c:1508
+#: cp/cvt.c:1510
#, gcc-internal-format
msgid "for increment expression has no effect"
msgstr ""
-#: cp/cvt.c:1663
+#: cp/cvt.c:1665
#, gcc-internal-format
msgid "converting NULL to non-pointer type"
msgstr ""
-#: cp/cvt.c:1778
+#: cp/cvt.c:1780
#, gcc-internal-format
msgid "default type conversion can't deduce template argument for %qD"
msgstr ""
-#: cp/cvt.c:1793
+#: cp/cvt.c:1795
#, gcc-internal-format
msgid "ambiguous default type conversion from %qT"
msgstr ""
-#: cp/cvt.c:1796
+#: cp/cvt.c:1798
#, gcc-internal-format
msgid " candidate conversions include %qD and %qD"
msgstr ""
-#: cp/cxx-pretty-print.c:2220
+#: cp/cxx-pretty-print.c:2203
#, gcc-internal-format
msgid "template-parameter-"
msgstr ""
-#: cp/decl.c:672
+#: cp/decl.c:678
+#, gcc-internal-format
+msgid "unused structured binding declaration"
+msgstr ""
+
+#: cp/decl.c:681
#, gcc-internal-format
msgid "unused variable %qD"
msgstr ""
-#: cp/decl.c:938
+#: cp/decl.c:690
#, gcc-internal-format
-msgid "%qF declared %<static%> but never defined"
+msgid "structured binding declaration set but not used"
msgstr ""
-#: cp/decl.c:963
+#: cp/decl.c:911
#, gcc-internal-format
-msgid "odr-used inline variable %qD is not defined"
+msgid "%qF declared %<static%> but never defined"
msgstr ""
-#: cp/decl.c:1241
+#: cp/decl.c:918
#, gcc-internal-format
-msgid "%qD was declared %<extern%> and later %<static%>"
+msgid "odr-used inline variable %qD is not defined"
msgstr ""
-#: cp/decl.c:1243 cp/decl.c:1982 cp/decl.c:1992 cp/decl.c:2552 cp/decl.c:2967
+#: cp/decl.c:1203
#, gcc-internal-format
-msgid "previous declaration of %qD"
+msgid "%qD was declared %<extern%> and later %<static%>"
msgstr ""
-#: cp/decl.c:1277
+#: cp/decl.c:1239
#, gcc-internal-format
msgid "declaration of %qF has a different exception specifier"
msgstr ""
-#: cp/decl.c:1290
+#: cp/decl.c:1252
#, gcc-internal-format
msgid "from previous declaration %qF"
msgstr ""
-#: cp/decl.c:1325
+#: cp/decl.c:1287
#, gcc-internal-format
msgid "redeclaration %qD differs in %<constexpr%> from previous declaration"
msgstr ""
-#: cp/decl.c:1328 cp/decl.c:13702
+#: cp/decl.c:1290 cp/decl.c:13609
#, gcc-internal-format
msgid "previous declaration %qD"
msgstr ""
-#: cp/decl.c:1357
+#: cp/decl.c:1319
#, gcc-internal-format
msgid "cannot specialize concept %q#D"
msgstr ""
-#: cp/decl.c:1379
+#: cp/decl.c:1341
#, gcc-internal-format
msgid "redeclaration of %q#D may not have default arguments"
msgstr ""
-#: cp/decl.c:1426
+#: cp/decl.c:1388
#, gcc-internal-format
msgid "literal operator template %q+D conflicts with raw literal operator %qD"
msgstr ""
-#: cp/decl.c:1431
+#: cp/decl.c:1393
#, gcc-internal-format
msgid "raw literal operator %q+D conflicts with literal operator template %qD"
msgstr ""
-#: cp/decl.c:1442
+#: cp/decl.c:1404
#, gcc-internal-format
msgid "previous definition of %qD was here"
msgstr ""
-#: cp/decl.c:1445
+#: cp/decl.c:1407
#, gcc-internal-format
msgid "previous declaration of %qD was here"
msgstr ""
-#: cp/decl.c:1467 cp/decl.c:1579
+#: cp/decl.c:1429 cp/decl.c:1529
#, gcc-internal-format
msgid "shadowing built-in function %q#D"
msgstr ""
-#: cp/decl.c:1468 cp/decl.c:1580
+#: cp/decl.c:1430 cp/decl.c:1530
#, gcc-internal-format
msgid "shadowing library function %q#D"
msgstr ""
-#: cp/decl.c:1476
+#: cp/decl.c:1438
#, gcc-internal-format
msgid "library function %q#D redeclared as non-function %q#D"
msgstr ""
-#: cp/decl.c:1479 cp/decl.c:1561
+#: cp/decl.c:1441 cp/decl.c:1511
#, gcc-internal-format
msgid "declaration of %q+#D conflicts with built-in declaration %q#D"
msgstr ""
-#: cp/decl.c:1487
+#: cp/decl.c:1449
#, gcc-internal-format
msgid "redeclaration of %<pragma omp declare reduction%>"
msgstr ""
-#: cp/decl.c:1489
+#: cp/decl.c:1451
#, gcc-internal-format
msgid "previous %<pragma omp declare reduction%> declaration"
msgstr ""
-#: cp/decl.c:1574
+#: cp/decl.c:1524
#, gcc-internal-format
msgid "new declaration %q#D ambiguates built-in declaration %q#D"
msgstr ""
-#: cp/decl.c:1665
+#: cp/decl.c:1615
#, gcc-internal-format
msgid "%q#D redeclared as different kind of symbol"
msgstr ""
-#: cp/decl.c:1669 cp/decl.c:1690 cp/decl.c:1722 cp/name-lookup.c:617
-#, gcc-internal-format
-msgid "previous declaration %q#D"
-msgstr ""
-
-#: cp/decl.c:1688
+#: cp/decl.c:1638
#, gcc-internal-format
msgid "conflicting declaration of template %q+#D"
msgstr ""
-#: cp/decl.c:1707
+#: cp/decl.c:1657
#, gcc-internal-format
msgid "ambiguating new declaration %q+#D"
msgstr ""
-#: cp/decl.c:1709 cp/decl.c:1737
+#: cp/decl.c:1659 cp/decl.c:1687
#, gcc-internal-format
msgid "old declaration %q#D"
msgstr ""
-#: cp/decl.c:1719
+#: cp/decl.c:1669
#, gcc-internal-format
msgid "conflicting declaration of C function %q+#D"
msgstr ""
-#: cp/decl.c:1735
+#: cp/decl.c:1685
#, gcc-internal-format
msgid "ambiguating new declaration of %q+#D"
msgstr ""
-#: cp/decl.c:1745
+#: cp/decl.c:1695
#, gcc-internal-format
msgid "conflicting declaration %q+#D"
msgstr ""
-#: cp/decl.c:1747
+#: cp/decl.c:1697
#, gcc-internal-format
msgid "previous declaration as %q#D"
msgstr ""
-#. [namespace.alias]
-#.
-#. A namespace-name or namespace-alias shall not be declared as
-#. the name of any other entity in the same declarative region.
-#. A namespace-name defined at global scope shall not be
-#. declared as the name of any other entity in any global scope
-#. of the program.
-#: cp/decl.c:1799
-#, gcc-internal-format
-msgid "conflicting declaration of namespace %q+D"
-msgstr ""
-
-#: cp/decl.c:1801
-#, gcc-internal-format
-msgid "previous declaration of namespace %qD here"
-msgstr ""
-
-#: cp/decl.c:1813
+#: cp/decl.c:1755
#, gcc-internal-format
msgid "%q#D previously defined here"
msgstr ""
-#: cp/decl.c:1814 cp/name-lookup.c:1201 cp/name-lookup.c:1224
+#: cp/decl.c:1756 cp/name-lookup.c:2041 cp/name-lookup.c:2063
#, gcc-internal-format
msgid "%q#D previously declared here"
msgstr ""
-#: cp/decl.c:1824
+#: cp/decl.c:1766
#, gcc-internal-format
msgid "prototype specified for %q#D"
msgstr ""
-#: cp/decl.c:1826
+#: cp/decl.c:1768
#, gcc-internal-format
msgid "previous non-prototype definition here"
msgstr ""
-#: cp/decl.c:1865
+#: cp/decl.c:1806
#, gcc-internal-format
msgid "conflicting declaration of %q+#D with %qL linkage"
msgstr ""
-#: cp/decl.c:1868
+#: cp/decl.c:1809
#, gcc-internal-format
msgid "previous declaration with %qL linkage"
msgstr ""
-#: cp/decl.c:1902 cp/decl.c:1910
+#: cp/decl.c:1843 cp/decl.c:1851
#, gcc-internal-format
msgid "default argument given for parameter %d of %q#D"
msgstr ""
-#: cp/decl.c:1905 cp/decl.c:1913
+#: cp/decl.c:1846 cp/decl.c:1854
#, gcc-internal-format
msgid "previous specification in %q#D here"
msgstr ""
-#: cp/decl.c:1979
+#: cp/decl.c:1920
#, gcc-internal-format
msgid "redundant redeclaration of %qD in same scope"
msgstr ""
-#: cp/decl.c:1990
+#: cp/decl.c:1931
#, gcc-internal-format
msgid "deleted definition of %q+D"
msgstr ""
@@ -39739,12 +40580,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:2409
+#: cp/decl.c:2348
#, gcc-internal-format
msgid "explicit specialization of %qD after first use"
msgstr ""
-#: cp/decl.c:2549
+#: cp/decl.c:2488
#, gcc-internal-format
msgid ""
"%qD: visibility attribute ignored because it conflicts with previous "
@@ -39752,27 +40593,27 @@ msgid ""
msgstr ""
#. Reject two definitions.
-#: cp/decl.c:2799 cp/decl.c:2828 cp/decl.c:2861 cp/decl.c:2878 cp/decl.c:2972
+#: cp/decl.c:2738 cp/decl.c:2767 cp/decl.c:2800 cp/decl.c:2817 cp/decl.c:2911
#, gcc-internal-format
msgid "redefinition of %q#D"
msgstr ""
-#: cp/decl.c:2815
+#: cp/decl.c:2754
#, gcc-internal-format
msgid "%qD conflicts with used function"
msgstr ""
-#: cp/decl.c:2825
+#: cp/decl.c:2764
#, gcc-internal-format
msgid "%q#D not declared in class"
msgstr ""
-#: cp/decl.c:2839 cp/decl.c:2888
+#: cp/decl.c:2778 cp/decl.c:2827
#, gcc-internal-format
msgid "%q+D redeclared inline with %<gnu_inline%> attribute"
msgstr ""
-#: cp/decl.c:2842 cp/decl.c:2891
+#: cp/decl.c:2781 cp/decl.c:2830
#, gcc-internal-format
msgid "%q+D redeclared inline without %<gnu_inline%> attribute"
msgstr ""
@@ -39780,1511 +40621,1506 @@ msgstr ""
#. is_primary=
#. is_partial=
#. is_friend_decl=
-#: cp/decl.c:2908
+#: cp/decl.c:2847
#, gcc-internal-format
msgid "redeclaration of friend %q#D may not have default template arguments"
msgstr ""
-#: cp/decl.c:2922
+#: cp/decl.c:2861
#, gcc-internal-format
msgid "thread-local declaration of %q#D follows non-thread-local declaration"
msgstr ""
-#: cp/decl.c:2925
+#: cp/decl.c:2864
#, gcc-internal-format
msgid "non-thread-local declaration of %q#D follows thread-local declaration"
msgstr ""
-#: cp/decl.c:2940 cp/decl.c:2980 cp/name-lookup.c:613 cp/name-lookup.c:1199
-#: cp/name-lookup.c:1222
+#: cp/decl.c:2879 cp/decl.c:2919 cp/name-lookup.c:1644 cp/name-lookup.c:2039
+#: cp/name-lookup.c:2061
#, gcc-internal-format
msgid "redeclaration of %q#D"
msgstr ""
-#: cp/decl.c:2964
+#: cp/decl.c:2903
#, gcc-internal-format
msgid "redundant redeclaration of %<constexpr%> static data member %qD"
msgstr ""
-#: cp/decl.c:3129
+#: cp/decl.c:3068
#, gcc-internal-format
msgid "jump to label %qD"
msgstr ""
-#: cp/decl.c:3130
+#: cp/decl.c:3069
#, gcc-internal-format
msgid "jump to case label"
msgstr ""
-#: cp/decl.c:3132
+#: cp/decl.c:3071
#, gcc-internal-format
msgid " from here"
msgstr ""
-#: cp/decl.c:3155 cp/decl.c:3391
+#: cp/decl.c:3094 cp/decl.c:3330
#, gcc-internal-format
msgid " exits OpenMP structured block"
msgstr ""
-#: cp/decl.c:3182
+#: cp/decl.c:3121
#, gcc-internal-format
msgid " crosses initialization of %q#D"
msgstr ""
-#: cp/decl.c:3185 cp/decl.c:3352
+#: cp/decl.c:3124 cp/decl.c:3291
#, gcc-internal-format
msgid " enters scope of %q#D which has non-trivial destructor"
msgstr ""
-#: cp/decl.c:3203 cp/decl.c:3360
+#: cp/decl.c:3142 cp/decl.c:3299
#, gcc-internal-format
msgid " enters try block"
msgstr ""
-#: cp/decl.c:3205 cp/decl.c:3342 cp/decl.c:3362
+#: cp/decl.c:3144 cp/decl.c:3281 cp/decl.c:3301
#, gcc-internal-format
msgid " enters catch block"
msgstr ""
-#: cp/decl.c:3218 cp/decl.c:3372
+#: cp/decl.c:3157 cp/decl.c:3311
#, gcc-internal-format
msgid " enters OpenMP structured block"
msgstr ""
-#: cp/decl.c:3231 cp/decl.c:3364
+#: cp/decl.c:3170 cp/decl.c:3303
#, gcc-internal-format
msgid " enters synchronized or atomic statement"
msgstr ""
-#: cp/decl.c:3245 cp/decl.c:3366
+#: cp/decl.c:3184 cp/decl.c:3305
#, gcc-internal-format
msgid " enters constexpr if statement"
msgstr ""
-#: cp/decl.c:3349
+#: cp/decl.c:3288
#, gcc-internal-format
msgid " skips initialization of %q#D"
msgstr ""
-#: cp/decl.c:3408 cp/parser.c:12119 cp/parser.c:12146
+#: cp/decl.c:3347 cp/parser.c:12263 cp/parser.c:12290
#, gcc-internal-format
msgid "invalid exit from OpenMP structured block"
msgstr ""
-#: cp/decl.c:3440
+#: cp/decl.c:3379
#, gcc-internal-format
msgid "label named wchar_t"
msgstr ""
-#: cp/decl.c:3759
+#: cp/decl.c:3698
#, gcc-internal-format
msgid "%qD is not a type"
msgstr ""
-#: cp/decl.c:3766 cp/parser.c:6085
+#: cp/decl.c:3705 cp/parser.c:6110
#, gcc-internal-format
msgid "%qD used without template parameters"
msgstr ""
-#: cp/decl.c:3775
+#: cp/decl.c:3714
#, gcc-internal-format
msgid "%q#T is not a class"
msgstr ""
-#: cp/decl.c:3803 cp/decl.c:3896
+#: cp/decl.c:3742 cp/decl.c:3835
#, gcc-internal-format
msgid "no class template named %q#T in %q#T"
msgstr ""
-#: cp/decl.c:3804
+#: cp/decl.c:3743
#, gcc-internal-format
msgid "no type named %q#T in %q#T"
msgstr ""
-#: cp/decl.c:3817
+#: cp/decl.c:3756
#, gcc-internal-format
msgid "lookup of %qT in %qT is ambiguous"
msgstr ""
-#: cp/decl.c:3826
+#: cp/decl.c:3765
#, gcc-internal-format
msgid "%<typename %T::%D%> names %q#T, which is not a class template"
msgstr ""
-#: cp/decl.c:3833
+#: cp/decl.c:3772
#, gcc-internal-format
msgid "%<typename %T::%D%> names %q#T, which is not a type"
msgstr ""
-#: cp/decl.c:3905
+#: cp/decl.c:3844
#, gcc-internal-format
msgid "template parameters do not match template %qD"
msgstr ""
-#: cp/decl.c:4178
+#: cp/decl.c:4124
#, gcc-internal-format, gfc-internal-format
msgid "-faligned-new=%d is not a power of two"
msgstr ""
-#: cp/decl.c:4641
-#, gcc-internal-format
-msgid "an anonymous struct cannot have function members"
-msgstr ""
-
-#: cp/decl.c:4644
-#, gcc-internal-format
-msgid "an anonymous union cannot have function members"
-msgstr ""
-
-#: cp/decl.c:4662
+#: cp/decl.c:4582
#, gcc-internal-format
msgid "member %q+#D with constructor not allowed in anonymous aggregate"
msgstr ""
-#: cp/decl.c:4665
+#: cp/decl.c:4585
#, gcc-internal-format
msgid "member %q+#D with destructor not allowed in anonymous aggregate"
msgstr ""
-#: cp/decl.c:4668
+#: cp/decl.c:4588
#, gcc-internal-format
msgid ""
"member %q+#D with copy assignment operator not allowed in anonymous aggregate"
msgstr ""
-#: cp/decl.c:4686
+#: cp/decl.c:4606
#, gcc-internal-format
msgid "attribute ignored in declaration of %q#T"
msgstr ""
-#: cp/decl.c:4689
+#: cp/decl.c:4609
#, gcc-internal-format
msgid "attribute for %q#T must follow the %qs keyword"
msgstr ""
-#: cp/decl.c:4712
+#: cp/decl.c:4632
#, gcc-internal-format
msgid "multiple types in one declaration"
msgstr ""
-#: cp/decl.c:4717
+#: cp/decl.c:4637
#, gcc-internal-format
msgid "redeclaration of C++ built-in type %qT"
msgstr ""
-#: cp/decl.c:4735
+#: cp/decl.c:4655
#, gcc-internal-format
msgid "%<auto%> can only be specified for variables or function declarations"
msgstr ""
-#: cp/decl.c:4761
+#: cp/decl.c:4681
#, gcc-internal-format
msgid "missing type-name in typedef-declaration"
msgstr ""
-#: cp/decl.c:4769
+#: cp/decl.c:4689
#, gcc-internal-format
msgid "ISO C++ prohibits anonymous structs"
msgstr ""
-#: cp/decl.c:4776
+#: cp/decl.c:4696
#, gcc-internal-format
msgid "%<inline%> can only be specified for functions"
msgstr ""
-#: cp/decl.c:4779
+#: cp/decl.c:4699
#, gcc-internal-format
msgid "%<virtual%> can only be specified for functions"
msgstr ""
-#: cp/decl.c:4784
+#: cp/decl.c:4704
#, gcc-internal-format
msgid "%<friend%> can only be specified inside a class"
msgstr ""
-#: cp/decl.c:4787
+#: cp/decl.c:4707
#, gcc-internal-format
msgid "%<explicit%> can only be specified for constructors"
msgstr ""
-#: cp/decl.c:4790
+#: cp/decl.c:4710
#, gcc-internal-format
msgid "a storage class can only be specified for objects and functions"
msgstr ""
-#: cp/decl.c:4794
+#: cp/decl.c:4714
#, gcc-internal-format
msgid "%<const%> can only be specified for objects and functions"
msgstr ""
-#: cp/decl.c:4798
+#: cp/decl.c:4718
#, gcc-internal-format
msgid "%<volatile%> can only be specified for objects and functions"
msgstr ""
-#: cp/decl.c:4802
+#: cp/decl.c:4722
#, gcc-internal-format
msgid "%<__restrict%> can only be specified for objects and functions"
msgstr ""
-#: cp/decl.c:4806
+#: cp/decl.c:4726
#, gcc-internal-format
msgid "%<__thread%> can only be specified for objects and functions"
msgstr ""
-#: cp/decl.c:4810
+#: cp/decl.c:4730
#, gcc-internal-format
msgid "%<typedef%> was ignored in this declaration"
msgstr ""
-#: cp/decl.c:4813
+#: cp/decl.c:4733
#, gcc-internal-format
msgid "%<constexpr%> cannot be used for type declarations"
msgstr ""
-#: cp/decl.c:4835
+#: cp/decl.c:4755
#, gcc-internal-format
msgid "attribute ignored in explicit instantiation %q#T"
msgstr ""
-#: cp/decl.c:4838
+#: cp/decl.c:4758
#, gcc-internal-format
msgid "no attribute can be applied to an explicit instantiation"
msgstr ""
-#: cp/decl.c:4910
+#: cp/decl.c:4830
#, 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:4914
+#: cp/decl.c:4834
#, gcc-internal-format
msgid ""
"ignoring attributes applied to dependent type %qT without an associated "
"declaration"
msgstr ""
-#: cp/decl.c:4983 cp/decl2.c:815
+#: cp/decl.c:4903 cp/decl2.c:785
#, gcc-internal-format
msgid "typedef %qD is initialized (use decltype instead)"
msgstr ""
-#: cp/decl.c:4991
+#: cp/decl.c:4911
#, gcc-internal-format
msgid "declaration of %q#D has %<extern%> and is initialized"
msgstr ""
-#: cp/decl.c:5020
+#: cp/decl.c:4940
#, gcc-internal-format
msgid "definition of %q#D is marked %<dllimport%>"
msgstr ""
-#: cp/decl.c:5044
+#: cp/decl.c:4964
#, gcc-internal-format
msgid "%q+#D is not a static data member of %q#T"
msgstr ""
-#: cp/decl.c:5053
+#: cp/decl.c:4973
#, gcc-internal-format
msgid "non-member-template declaration of %qD"
msgstr ""
-#: cp/decl.c:5054
+#: cp/decl.c:4974
#, gcc-internal-format
msgid "does not match member template declaration here"
msgstr ""
-#: cp/decl.c:5067
+#: cp/decl.c:4987
#, gcc-internal-format
msgid "ISO C++ does not permit %<%T::%D%> to be defined as %<%T::%D%>"
msgstr ""
-#: cp/decl.c:5079
+#: cp/decl.c:4999
#, gcc-internal-format
msgid "duplicate initialization of %qD"
msgstr ""
-#: cp/decl.c:5084
+#: cp/decl.c:5004
#, gcc-internal-format
msgid "%qD declared %<constexpr%> outside its class"
msgstr ""
-#: cp/decl.c:5127
+#: cp/decl.c:5047
#, gcc-internal-format
msgid "declaration of %q#D outside of class is not definition"
msgstr ""
-#: cp/decl.c:5228
+#: cp/decl.c:5080
+#, gcc-internal-format
+msgid "%qD declared %<thread_local%> in %<constexpr%> function"
+msgstr ""
+
+#: cp/decl.c:5083
+#, gcc-internal-format
+msgid "%qD declared %<static%> in %<constexpr%> function"
+msgstr ""
+
+#: cp/decl.c:5148
#, gcc-internal-format
msgid "variable %q#D has initializer but incomplete type"
msgstr ""
-#: cp/decl.c:5234 cp/decl.c:6146
+#: cp/decl.c:5154 cp/decl.c:6066
#, gcc-internal-format
msgid "elements of array %q#D have incomplete type"
msgstr ""
-#: cp/decl.c:5244
+#: cp/decl.c:5164
#, gcc-internal-format
msgid "aggregate %q#D has incomplete type and cannot be defined"
msgstr ""
-#: cp/decl.c:5279
+#: cp/decl.c:5199
#, gcc-internal-format
msgid "%qD declared as reference but not initialized"
msgstr ""
-#: cp/decl.c:5336
+#: cp/decl.c:5256
#, gcc-internal-format
msgid "name used in a GNU-style designated initializer for an array"
msgstr ""
-#: cp/decl.c:5342
+#: cp/decl.c:5262
#, gcc-internal-format
msgid "name %qD used in a GNU-style designated initializer for an array"
msgstr ""
-#: cp/decl.c:5358 cp/typeck2.c:1298 cp/typeck2.c:1411
+#: cp/decl.c:5278 cp/typeck2.c:1298 cp/typeck2.c:1411
#, gcc-internal-format
msgid "non-trivial designated initializers not supported"
msgstr ""
-#: cp/decl.c:5361
+#: cp/decl.c:5281
#, gcc-internal-format
msgid "C99 designator %qE is not an integral constant-expression"
msgstr ""
-#: cp/decl.c:5411
+#: cp/decl.c:5331
#, gcc-internal-format
msgid "initializer fails to determine size of %qD"
msgstr ""
-#: cp/decl.c:5418
+#: cp/decl.c:5338
#, gcc-internal-format
msgid "array size missing in %qD"
msgstr ""
-#: cp/decl.c:5430
+#: cp/decl.c:5350
#, gcc-internal-format
msgid "zero-size array %qD"
msgstr ""
-#: cp/decl.c:5470
+#: cp/decl.c:5390
#, gcc-internal-format
msgid "storage size of %qD isn%'t known"
msgstr ""
-#: cp/decl.c:5494
+#: cp/decl.c:5414
#, gcc-internal-format
msgid "storage size of %qD isn%'t constant"
msgstr ""
-#: cp/decl.c:5542
+#: cp/decl.c:5462
#, gcc-internal-format
msgid ""
"sorry: semantics of inline variable %q#D are wrong (you%'ll wind up with "
"multiple copies)"
msgstr ""
-#: cp/decl.c:5546
+#: cp/decl.c:5466
#, 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:5552
+#: cp/decl.c:5472
#, gcc-internal-format
msgid "you can work around this by removing the initializer"
msgstr ""
-#: cp/decl.c:5579
+#: cp/decl.c:5499
#, gcc-internal-format
msgid "uninitialized const %qD"
msgstr ""
-#: cp/decl.c:5593
+#: cp/decl.c:5503
+#, gcc-internal-format
+msgid "uninitialized variable %qD in %<constexpr%> function"
+msgstr ""
+
+#: cp/decl.c:5513
#, gcc-internal-format
msgid "%q#T has no user-provided default constructor"
msgstr ""
-#: cp/decl.c:5597
+#: cp/decl.c:5517
#, gcc-internal-format
msgid ""
"constructor is not user-provided because it is explicitly defaulted in the "
"class body"
msgstr ""
-#: cp/decl.c:5600
+#: cp/decl.c:5520
#, gcc-internal-format
msgid "and the implicitly-defined constructor does not initialize %q#D"
msgstr ""
-#: cp/decl.c:5740
+#: cp/decl.c:5660
#, gcc-internal-format
msgid "invalid type %qT as initializer for a vector of type %qT"
msgstr ""
-#: cp/decl.c:5781
+#: cp/decl.c:5701
#, gcc-internal-format
msgid "initializer for %qT must be brace-enclosed"
msgstr ""
-#: cp/decl.c:5807
+#: cp/decl.c:5727
#, gcc-internal-format
msgid "%<[%E] =%> used in a GNU-style designated initializer for class %qT"
msgstr ""
-#: cp/decl.c:5815
+#: cp/decl.c:5735
#, gcc-internal-format
msgid "%qT has no non-static data member named %qD"
msgstr ""
-#: cp/decl.c:5835
+#: cp/decl.c:5755
#, gcc-internal-format
msgid "invalid initializer for %q#D"
msgstr ""
-#: cp/decl.c:5865
+#: cp/decl.c:5785
#, gcc-internal-format
msgid "C99 designator %qE outside aggregate initializer"
msgstr ""
-#: cp/decl.c:5902 cp/decl.c:6120 cp/typeck2.c:1285 cp/typeck2.c:1497
+#: cp/decl.c:5822 cp/decl.c:6041 cp/typeck2.c:1285 cp/typeck2.c:1497
#: cp/typeck2.c:1542 cp/typeck2.c:1589
#, gcc-internal-format
msgid "too many initializers for %qT"
msgstr ""
-#: cp/decl.c:5941
+#: cp/decl.c:5861
#, gcc-internal-format
msgid "braces around scalar initializer for type %qT"
msgstr ""
-#: cp/decl.c:6050
+#: cp/decl.c:5970
#, gcc-internal-format
msgid "missing braces around initializer for %qT"
msgstr ""
-#: cp/decl.c:6148
+#: cp/decl.c:6068
#, gcc-internal-format
msgid "elements of array %q#T have incomplete type"
msgstr ""
-#: cp/decl.c:6156
+#: cp/decl.c:6076
#, gcc-internal-format
msgid "variable-sized compound literal"
msgstr ""
-#: cp/decl.c:6211
+#: cp/decl.c:6131
#, gcc-internal-format
msgid "%q#D has incomplete type"
msgstr ""
-#: cp/decl.c:6232
+#: cp/decl.c:6152
#, gcc-internal-format
msgid "scalar object %qD requires one element in initializer"
msgstr ""
-#: cp/decl.c:6276
+#: cp/decl.c:6196
#, gcc-internal-format
msgid "in C++98 %qD must be initialized by constructor, not by %<{...}%>"
msgstr ""
-#: cp/decl.c:6373
+#: cp/decl.c:6293
#, gcc-internal-format
msgid "array %qD initialized by parenthesized string literal %qE"
msgstr ""
-#: cp/decl.c:6406
+#: cp/decl.c:6326
#, gcc-internal-format
msgid "initializer invalid for static member with constructor"
msgstr ""
-#: cp/decl.c:6408
+#: cp/decl.c:6328
#, gcc-internal-format
msgid "non-constant in-class initialization invalid for static member %qD"
msgstr ""
-#: cp/decl.c:6411
+#: cp/decl.c:6331
#, gcc-internal-format
msgid ""
"non-constant in-class initialization invalid for non-inline static member %qD"
msgstr ""
-#: cp/decl.c:6416
+#: cp/decl.c:6336
#, gcc-internal-format
msgid "(an out of class initialization is required)"
msgstr ""
-#: cp/decl.c:6595
+#: cp/decl.c:6515
#, gcc-internal-format
msgid "reference %qD is initialized with itself"
msgstr ""
-#: cp/decl.c:6767
+#: cp/decl.c:6687
#, gcc-internal-format
msgid "assignment (not initialization) in declaration"
msgstr ""
-#: cp/decl.c:6785 cp/decl.c:12397
+#: cp/decl.c:6705 cp/decl.c:12310
#, gcc-internal-format
msgid "ISO C++1z does not allow %<register%> storage class specifier"
msgstr ""
-#: cp/decl.c:6789 cp/decl.c:12401
+#: cp/decl.c:6709 cp/decl.c:12314
#, gcc-internal-format
msgid "%<register%> storage class specifier used"
msgstr ""
-#: cp/decl.c:6842
+#: cp/decl.c:6762
#, gcc-internal-format
msgid ""
"initializer for %<decltype(auto) %D%> has function type (did you forget the "
"%<()%> ?)"
msgstr ""
-#: cp/decl.c:6945
+#: cp/decl.c:6865
#, gcc-internal-format
msgid "variable concept has no initializer"
msgstr ""
-#: cp/decl.c:6973
+#: cp/decl.c:6893
#, gcc-internal-format
msgid "shadowing previous type declaration of %q#D"
msgstr ""
-#: cp/decl.c:7159
+#: cp/decl.c:7079
#, gcc-internal-format
msgid "function %q#D is initialized like a variable"
msgstr ""
-#: cp/decl.c:7219
+#: cp/decl.c:7139
#, gcc-internal-format
msgid ""
"cannot decompose class type %qT because it has an anonymous struct member"
msgstr ""
-#: cp/decl.c:7222
+#: cp/decl.c:7142
#, gcc-internal-format
msgid ""
"cannot decompose class type %qT because it has an anonymous union member"
msgstr ""
-#: cp/decl.c:7229
+#: cp/decl.c:7149
#, gcc-internal-format
msgid "cannot decompose non-public member %qD of %qT"
msgstr ""
-#: cp/decl.c:7255
+#: cp/decl.c:7175
#, gcc-internal-format
msgid ""
"cannot decompose class type %qT: both it and its base class %qT have non-"
"static data members"
msgstr ""
-#: cp/decl.c:7267
+#: cp/decl.c:7187
#, gcc-internal-format
msgid ""
"cannot decompose class type %qT: its base classes %qT and %qT have non-"
"static data members"
msgstr ""
-#: cp/decl.c:7456
+#: cp/decl.c:7372
#, gcc-internal-format
msgid "cannot decompose variable length array %qT"
msgstr ""
-#: cp/decl.c:7464
+#: cp/decl.c:7380
#, gcc-internal-format
msgid "%u names provided while %qT decomposes into %wu elements"
msgstr ""
-#: cp/decl.c:7467
+#: cp/decl.c:7383
#, gcc-internal-format
msgid "only %u names provided while %qT decomposes into %wu elements"
msgstr ""
-#: cp/decl.c:7533
+#: cp/decl.c:7449
#, gcc-internal-format
msgid "%<std::tuple_size<%T>::value%> is not an integral constant expression"
msgstr ""
-#: cp/decl.c:7553
+#: cp/decl.c:7470
#, gcc-internal-format
-msgid "in initialization of decomposition variable %qD"
+msgid "in initialization of structured binding variable %qD"
msgstr ""
-#: cp/decl.c:7575
+#: cp/decl.c:7496
#, gcc-internal-format
msgid "cannot decompose union type %qT"
msgstr ""
-#: cp/decl.c:7580
+#: cp/decl.c:7501
#, gcc-internal-format
msgid "cannot decompose non-array non-class type %qT"
msgstr ""
-#: cp/decl.c:7585
+#: cp/decl.c:7506
#, gcc-internal-format
msgid "cannot decompose lambda closure type %qT"
msgstr ""
-#: cp/decl.c:7595
+#: cp/decl.c:7516
#, gcc-internal-format
msgid "cannot decompose class type %qT without non-static data members"
msgstr ""
-#: cp/decl.c:8038
+#: cp/decl.c:7953
#, gcc-internal-format
msgid ""
"non-local variable %qD declared %<__thread%> needs dynamic initialization"
msgstr ""
-#: cp/decl.c:8041
+#: cp/decl.c:7956
#, gcc-internal-format
msgid ""
"non-local variable %qD declared %<__thread%> has a non-trivial destructor"
msgstr ""
-#: cp/decl.c:8047
+#: cp/decl.c:7962
#, gcc-internal-format
msgid "C++11 %<thread_local%> allows dynamic initialization and destruction"
msgstr ""
-#: cp/decl.c:8275
+#: cp/decl.c:8190
#, gcc-internal-format
msgid "initializer fails to determine size of %qT"
msgstr ""
-#: cp/decl.c:8279
+#: cp/decl.c:8194
#, gcc-internal-format
msgid "array size missing in %qT"
msgstr ""
-#: cp/decl.c:8282
+#: cp/decl.c:8197
#, gcc-internal-format
msgid "zero-size array %qT"
msgstr ""
-#: cp/decl.c:8298
+#: cp/decl.c:8213
#, gcc-internal-format
msgid "destructor for alien class %qT cannot be a member"
msgstr ""
-#: cp/decl.c:8300
+#: cp/decl.c:8215
#, gcc-internal-format
msgid "constructor for alien class %qT cannot be a member"
msgstr ""
-#: cp/decl.c:8324
+#: cp/decl.c:8239
#, gcc-internal-format
msgid "%qD declared as a %<virtual%> variable"
msgstr ""
-#: cp/decl.c:8326
+#: cp/decl.c:8241
#, gcc-internal-format
msgid ""
"%<const%> and %<volatile%> function specifiers on %qD invalid in variable "
"declaration"
msgstr ""
-#: cp/decl.c:8331
+#: cp/decl.c:8246
#, gcc-internal-format
msgid "%qD declared as a %<virtual%> parameter"
msgstr ""
-#: cp/decl.c:8333
+#: cp/decl.c:8248
#, gcc-internal-format
msgid "%qD declared as an %<inline%> parameter"
msgstr ""
-#: cp/decl.c:8335
+#: cp/decl.c:8250
#, gcc-internal-format
msgid ""
"%<const%> and %<volatile%> function specifiers on %qD invalid in parameter "
"declaration"
msgstr ""
-#: cp/decl.c:8340
+#: cp/decl.c:8255
#, gcc-internal-format
msgid "%qD declared as a %<virtual%> type"
msgstr ""
-#: cp/decl.c:8342
+#: cp/decl.c:8257
#, gcc-internal-format
msgid "%qD declared as an %<inline%> type"
msgstr ""
-#: cp/decl.c:8344
+#: cp/decl.c:8259
#, gcc-internal-format
msgid ""
"%<const%> and %<volatile%> function specifiers on %qD invalid in type "
"declaration"
msgstr ""
-#: cp/decl.c:8349
+#: cp/decl.c:8264
#, gcc-internal-format
msgid "%qD declared as a %<virtual%> field"
msgstr ""
-#: cp/decl.c:8351
+#: cp/decl.c:8266
#, gcc-internal-format
msgid "%qD declared as an %<inline%> field"
msgstr ""
-#: cp/decl.c:8353
+#: cp/decl.c:8268
#, gcc-internal-format
msgid ""
"%<const%> and %<volatile%> function specifiers on %qD invalid in field "
"declaration"
msgstr ""
-#: cp/decl.c:8360
+#: cp/decl.c:8275
#, gcc-internal-format
msgid "%q+D declared as a friend"
msgstr ""
-#: cp/decl.c:8367
+#: cp/decl.c:8282
#, gcc-internal-format
msgid "%q+D declared with an exception specification"
msgstr ""
-#: cp/decl.c:8399
+#: cp/decl.c:8314
#, gcc-internal-format
msgid "definition of %qD is not in namespace enclosing %qT"
msgstr ""
-#: cp/decl.c:8439
+#: cp/decl.c:8354
#, gcc-internal-format
msgid "static member function %q#D declared with type qualifiers"
msgstr ""
-#: cp/decl.c:8449
+#: cp/decl.c:8364
#, gcc-internal-format
msgid "concept %q#D declared with function parameters"
msgstr ""
-#: cp/decl.c:8455
+#: cp/decl.c:8370
#, gcc-internal-format
msgid "concept %q#D declared with a deduced return type"
msgstr ""
-#: cp/decl.c:8457
+#: cp/decl.c:8372
#, gcc-internal-format
msgid "concept %q#D with non-%<bool%> return type %qT"
msgstr ""
-#: cp/decl.c:8528
+#: cp/decl.c:8443
#, gcc-internal-format
msgid "concept %qD has no definition"
msgstr ""
-#: cp/decl.c:8596
+#: cp/decl.c:8512
#, gcc-internal-format
msgid "defining explicit specialization %qD in friend declaration"
msgstr ""
#. Something like `template <class T> friend void f<T>()'.
-#: cp/decl.c:8606
+#: cp/decl.c:8522
#, gcc-internal-format
msgid "invalid use of template-id %qD in declaration of primary template"
msgstr ""
-#: cp/decl.c:8624
+#: cp/decl.c:8540
#, gcc-internal-format
msgid ""
"default arguments are not allowed in declaration of friend template "
"specialization %qD"
msgstr ""
-#: cp/decl.c:8632
+#: cp/decl.c:8548
#, gcc-internal-format
msgid ""
"%<inline%> is not allowed in declaration of friend template specialization "
"%qD"
msgstr ""
-#: cp/decl.c:8679
+#: cp/decl.c:8597
#, gcc-internal-format
msgid "cannot declare %<::main%> to be a template"
msgstr ""
-#: cp/decl.c:8681
+#: cp/decl.c:8599
#, gcc-internal-format
msgid "cannot declare %<::main%> to be inline"
msgstr ""
-#: cp/decl.c:8683
+#: cp/decl.c:8601
#, gcc-internal-format
msgid "cannot declare %<::main%> to be constexpr"
msgstr ""
-#: cp/decl.c:8685
+#: cp/decl.c:8603
#, gcc-internal-format
msgid "cannot declare %<::main%> to be static"
msgstr ""
-#: cp/decl.c:8742
+#: cp/decl.c:8660
#, gcc-internal-format
msgid "static member function %qD cannot have cv-qualifier"
msgstr ""
-#: cp/decl.c:8743
+#: cp/decl.c:8661
#, gcc-internal-format
msgid "non-member function %qD cannot have cv-qualifier"
msgstr ""
-#: cp/decl.c:8751
+#: cp/decl.c:8669
#, gcc-internal-format
msgid "static member function %qD cannot have ref-qualifier"
msgstr ""
-#: cp/decl.c:8752
+#: cp/decl.c:8670
#, gcc-internal-format
msgid "non-member function %qD cannot have ref-qualifier"
msgstr ""
-#: cp/decl.c:8762
+#: cp/decl.c:8680
#, gcc-internal-format
msgid "deduction guide %qD must be declared at namespace scope"
msgstr ""
-#: cp/decl.c:8768
+#: cp/decl.c:8686
#, gcc-internal-format
msgid "deduction guide %qD must not have a function body"
msgstr ""
-#: cp/decl.c:8781
+#: cp/decl.c:8699
#, gcc-internal-format
msgid "literal operator with C linkage"
msgstr ""
-#: cp/decl.c:8790
+#: cp/decl.c:8708
#, gcc-internal-format
msgid "%qD has invalid argument list"
msgstr ""
-#: cp/decl.c:8798
+#: cp/decl.c:8716
#, gcc-internal-format
msgid "integer suffix %qs shadowed by implementation"
msgstr ""
-#: cp/decl.c:8804
+#: cp/decl.c:8722
#, gcc-internal-format
msgid "floating point suffix %qs shadowed by implementation"
msgstr ""
-#: cp/decl.c:8810
+#: cp/decl.c:8728
#, gcc-internal-format
msgid "%qD must be a non-member function"
msgstr ""
-#: cp/decl.c:8889
+#: cp/decl.c:8807
#, gcc-internal-format
msgid "%<::main%> must return %<int%>"
msgstr ""
-#: cp/decl.c:8929
+#: cp/decl.c:8847
#, gcc-internal-format
msgid "definition of implicitly-declared %qD"
msgstr ""
-#: cp/decl.c:8934
+#: cp/decl.c:8852
#, gcc-internal-format
msgid "definition of explicitly-defaulted %q+D"
msgstr ""
-#: cp/decl.c:8936
+#: cp/decl.c:8854
#, gcc-internal-format
msgid "%q#D explicitly defaulted here"
msgstr ""
-#: cp/decl.c:8953 cp/decl2.c:713
+#: cp/decl.c:8871
#, gcc-internal-format
msgid "no %q#D member function declared in class %qT"
msgstr ""
-#: cp/decl.c:9142
+#: cp/decl.c:9060
#, gcc-internal-format
msgid "cannot declare %<::main%> to be a global variable"
msgstr ""
-#: cp/decl.c:9150
+#: cp/decl.c:9068
#, gcc-internal-format
msgid "a non-template variable cannot be %<concept%>"
msgstr ""
-#: cp/decl.c:9157
+#: cp/decl.c:9075
#, gcc-internal-format
msgid "concept must have type %<bool%>"
msgstr ""
-#: cp/decl.c:9276
+#: cp/decl.c:9195
#, gcc-internal-format
msgid "in-class initialization of static data member %q#D of incomplete type"
msgstr ""
-#: cp/decl.c:9280
+#: cp/decl.c:9199
#, gcc-internal-format
msgid ""
"%<constexpr%> needed for in-class initialization of static data member %q#D "
"of non-integral type"
msgstr ""
-#: cp/decl.c:9284
+#: cp/decl.c:9203
#, gcc-internal-format
msgid "in-class initialization of static data member %q#D of non-literal type"
msgstr ""
-#: cp/decl.c:9298
+#: cp/decl.c:9217
#, gcc-internal-format
msgid ""
"invalid in-class initialization of static data member of non-integral type "
"%qT"
msgstr ""
-#: cp/decl.c:9305
+#: cp/decl.c:9224
#, gcc-internal-format
msgid "ISO C++ forbids in-class initialization of non-const static member %qD"
msgstr ""
-#: cp/decl.c:9310
+#: cp/decl.c:9229
#, gcc-internal-format
msgid ""
"ISO C++ forbids initialization of member constant %qD of non-integral type "
"%qT"
msgstr ""
-#: cp/decl.c:9405 cp/decl.c:9432
+#: cp/decl.c:9324 cp/decl.c:9351
#, gcc-internal-format
msgid "size of array %qD has non-integral type %qT"
msgstr ""
-#: cp/decl.c:9408 cp/decl.c:9434
+#: cp/decl.c:9327 cp/decl.c:9353
#, gcc-internal-format
msgid "size of array has non-integral type %qT"
msgstr ""
-#: cp/decl.c:9465 cp/decl.c:9518
+#: cp/decl.c:9384 cp/decl.c:9437
#, gcc-internal-format
msgid "size of array is not an integral constant-expression"
msgstr ""
-#: cp/decl.c:9484
+#: cp/decl.c:9403
#, gcc-internal-format
msgid "size of array %qD is negative"
msgstr ""
-#: cp/decl.c:9486 cp/init.c:3602
+#: cp/decl.c:9405 cp/init.c:3608
#, gcc-internal-format
msgid "size of array is negative"
msgstr ""
-#: cp/decl.c:9500
+#: cp/decl.c:9419
#, gcc-internal-format
msgid "ISO C++ forbids zero-size array %qD"
msgstr ""
-#: cp/decl.c:9502
+#: cp/decl.c:9421
#, gcc-internal-format
msgid "ISO C++ forbids zero-size array"
msgstr ""
-#: cp/decl.c:9515
+#: cp/decl.c:9434
#, gcc-internal-format
msgid "size of array %qD is not an integral constant-expression"
msgstr ""
-#: cp/decl.c:9524
+#: cp/decl.c:9443
#, gcc-internal-format
msgid "ISO C++ forbids variable length array %qD"
msgstr ""
-#: cp/decl.c:9526
+#: cp/decl.c:9445
#, gcc-internal-format
msgid "ISO C++ forbids variable length array"
msgstr ""
-#: cp/decl.c:9532
+#: cp/decl.c:9451
#, gcc-internal-format
msgid "variable length array %qD is used"
msgstr ""
-#: cp/decl.c:9535
+#: cp/decl.c:9454
#, gcc-internal-format
msgid "variable length array is used"
msgstr ""
-#: cp/decl.c:9586
+#: cp/decl.c:9505
#, gcc-internal-format
msgid "overflow in array dimension"
msgstr ""
-#: cp/decl.c:9639
+#: cp/decl.c:9558
#, gcc-internal-format
msgid "%qD declared as array of %qT"
msgstr ""
-#: cp/decl.c:9649
+#: cp/decl.c:9568
#, gcc-internal-format
msgid "declaration of %qD as array of void"
msgstr ""
-#: cp/decl.c:9651
+#: cp/decl.c:9570
#, gcc-internal-format
msgid "creating array of void"
msgstr ""
-#: cp/decl.c:9656
+#: cp/decl.c:9575
#, gcc-internal-format
msgid "declaration of %qD as array of functions"
msgstr ""
-#: cp/decl.c:9658
+#: cp/decl.c:9577
#, gcc-internal-format
msgid "creating array of functions"
msgstr ""
-#: cp/decl.c:9663
+#: cp/decl.c:9582
#, gcc-internal-format
msgid "declaration of %qD as array of references"
msgstr ""
-#: cp/decl.c:9665
+#: cp/decl.c:9584
#, gcc-internal-format
msgid "creating array of references"
msgstr ""
-#: cp/decl.c:9670
+#: cp/decl.c:9589
#, gcc-internal-format
msgid "declaration of %qD as array of function members"
msgstr ""
-#: cp/decl.c:9672
+#: cp/decl.c:9591
#, gcc-internal-format
msgid "creating array of function members"
msgstr ""
-#: cp/decl.c:9686
+#: cp/decl.c:9605
#, gcc-internal-format
msgid ""
"declaration of %qD as multidimensional array must have bounds for all "
"dimensions except the first"
msgstr ""
-#: cp/decl.c:9690
+#: cp/decl.c:9609
#, gcc-internal-format
msgid ""
"multidimensional array must have bounds for all dimensions except the first"
msgstr ""
-#: cp/decl.c:9749
+#: cp/decl.c:9668
#, gcc-internal-format
msgid "return type specification for constructor invalid"
msgstr ""
-#: cp/decl.c:9752
+#: cp/decl.c:9671
#, gcc-internal-format
msgid "qualifiers are not allowed on constructor declaration"
msgstr ""
-#: cp/decl.c:9762
+#: cp/decl.c:9681
#, gcc-internal-format
msgid "return type specification for destructor invalid"
msgstr ""
-#: cp/decl.c:9765
+#: cp/decl.c:9684
#, gcc-internal-format
msgid "qualifiers are not allowed on destructor declaration"
msgstr ""
-#: cp/decl.c:9777
+#: cp/decl.c:9696
#, gcc-internal-format
msgid "return type specified for %<operator %T%>"
msgstr ""
-#: cp/decl.c:9780
+#: cp/decl.c:9699
#, gcc-internal-format
msgid "qualifiers are not allowed on declaration of %<operator %T%>"
msgstr ""
-#: cp/decl.c:9788
+#: cp/decl.c:9707
#, gcc-internal-format
msgid "return type specified for deduction guide"
msgstr ""
-#: cp/decl.c:9791
+#: cp/decl.c:9710
#, gcc-internal-format
msgid "qualifiers are not allowed on declaration of deduction guide"
msgstr ""
-#: cp/decl.c:9797
+#: cp/decl.c:9716
#, gcc-internal-format
msgid "decl-specifier in declaration of deduction guide"
msgstr ""
-#: cp/decl.c:9818
+#: cp/decl.c:9737
#, gcc-internal-format
msgid "unnamed variable or field declared void"
msgstr ""
-#: cp/decl.c:9825
+#: cp/decl.c:9744
#, gcc-internal-format
msgid "variable or field declared void"
msgstr ""
-#: cp/decl.c:9840
+#: cp/decl.c:9759
#, gcc-internal-format
msgid "%<inline%> specifier invalid for variable %qD declared at block scope"
msgstr ""
-#: cp/decl.c:9846
+#: cp/decl.c:9765
#, gcc-internal-format
msgid "inline variables are only available with -std=c++1z or -std=gnu++1z"
msgstr ""
-#: cp/decl.c:10099
+#: cp/decl.c:10020
#, gcc-internal-format
msgid "invalid use of qualified-name %<::%D%>"
msgstr ""
-#: cp/decl.c:10102 cp/decl.c:10122
+#: cp/decl.c:10023 cp/decl.c:10043
#, gcc-internal-format
msgid "invalid use of qualified-name %<%T::%D%>"
msgstr ""
-#: cp/decl.c:10105
+#: cp/decl.c:10026
#, gcc-internal-format
msgid "invalid use of qualified-name %<%D::%D%>"
msgstr ""
-#: cp/decl.c:10114
+#: cp/decl.c:10035
#, gcc-internal-format
msgid "%q#T is not a class or a namespace"
msgstr ""
-#: cp/decl.c:10138 cp/decl.c:10238 cp/decl.c:10247 cp/decl.c:11763
+#: cp/decl.c:10057 cp/decl.c:10150 cp/decl.c:10159 cp/decl.c:11678
#, gcc-internal-format
msgid "declaration of %qD as non-function"
msgstr ""
-#: cp/decl.c:10144
+#: cp/decl.c:10063
#, gcc-internal-format
msgid "declaration of %qD as non-member"
msgstr ""
-#: cp/decl.c:10180
+#: cp/decl.c:10091
#, gcc-internal-format
msgid "declarator-id missing; using reserved word %qD"
msgstr ""
-#: cp/decl.c:10230
+#: cp/decl.c:10142
#, gcc-internal-format
msgid "function definition does not declare parameters"
msgstr ""
-#: cp/decl.c:10255
+#: cp/decl.c:10167
#, gcc-internal-format
msgid "declaration of %qD as %<typedef%>"
msgstr ""
-#: cp/decl.c:10260
+#: cp/decl.c:10172
#, gcc-internal-format
msgid "declaration of %qD as parameter"
msgstr ""
-#: cp/decl.c:10293
+#: cp/decl.c:10206
#, gcc-internal-format
msgid "%<concept%> cannot appear in a typedef declaration"
msgstr ""
-#: cp/decl.c:10299
+#: cp/decl.c:10212
#, gcc-internal-format
msgid "%<constexpr%> cannot appear in a typedef declaration"
msgstr ""
-#: cp/decl.c:10307
+#: cp/decl.c:10220
#, gcc-internal-format
msgid "two or more data types in declaration of %qs"
msgstr ""
-#: cp/decl.c:10313
+#: cp/decl.c:10226
#, gcc-internal-format
msgid "conflicting specifiers in declaration of %qs"
msgstr ""
-#: cp/decl.c:10354
+#: cp/decl.c:10267
#, gcc-internal-format
msgid "ISO C++ does not support plain %<complex%> meaning %<double complex%>"
msgstr ""
-#: cp/decl.c:10403 cp/decl.c:10406 cp/decl.c:10409
+#: cp/decl.c:10316 cp/decl.c:10319 cp/decl.c:10322
#, gcc-internal-format
msgid "ISO C++ forbids declaration of %qs with no type"
msgstr ""
-#: cp/decl.c:10425
+#: cp/decl.c:10338
#, gcc-internal-format
msgid "%<__int%d%> is not supported by this target"
msgstr ""
-#: cp/decl.c:10431
+#: cp/decl.c:10344
#, gcc-internal-format
msgid "ISO C++ does not support %<__int%d%> for %qs"
msgstr ""
-#: cp/decl.c:10453 cp/decl.c:10473
+#: cp/decl.c:10366 cp/decl.c:10386
#, gcc-internal-format
msgid "%<signed%> or %<unsigned%> invalid for %qs"
msgstr ""
-#: cp/decl.c:10455
+#: cp/decl.c:10368
#, gcc-internal-format
msgid "%<signed%> and %<unsigned%> specified together for %qs"
msgstr ""
-#: cp/decl.c:10457
+#: cp/decl.c:10370
#, gcc-internal-format
msgid "%<long long%> invalid for %qs"
msgstr ""
-#: cp/decl.c:10459
+#: cp/decl.c:10372
#, gcc-internal-format
msgid "%<long%> invalid for %qs"
msgstr ""
-#: cp/decl.c:10461
+#: cp/decl.c:10374
#, gcc-internal-format
msgid "%<short%> invalid for %qs"
msgstr ""
-#: cp/decl.c:10463
+#: cp/decl.c:10376
#, gcc-internal-format
msgid "%<long%> or %<short%> invalid for %qs"
msgstr ""
-#: cp/decl.c:10465
+#: cp/decl.c:10378
#, gcc-internal-format
msgid "%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs"
msgstr ""
-#: cp/decl.c:10467
+#: cp/decl.c:10380
#, gcc-internal-format
msgid "%<long%> or %<short%> specified with char for %qs"
msgstr ""
-#: cp/decl.c:10469
+#: cp/decl.c:10382
#, gcc-internal-format
msgid "%<long%> and %<short%> specified together for %qs"
msgstr ""
-#: cp/decl.c:10475
+#: cp/decl.c:10388
#, gcc-internal-format
msgid "%<short%> or %<long%> invalid for %qs"
msgstr ""
-#: cp/decl.c:10483
+#: cp/decl.c:10396
#, gcc-internal-format
msgid "long, short, signed or unsigned used invalidly for %qs"
msgstr ""
-#: cp/decl.c:10551
+#: cp/decl.c:10464
#, gcc-internal-format
msgid "complex invalid for %qs"
msgstr ""
-#: cp/decl.c:10590
+#: cp/decl.c:10503
#, gcc-internal-format
msgid ""
"template placeholder type %qT must be followed by a simple declarator-id"
msgstr ""
-#: cp/decl.c:10608
+#: cp/decl.c:10521
#, gcc-internal-format
msgid "member %qD cannot be declared both %<virtual%> and %<static%>"
msgstr ""
-#: cp/decl.c:10614
+#: cp/decl.c:10527
#, gcc-internal-format
msgid "member %qD cannot be declared both %<virtual%> and %<constexpr%>"
msgstr ""
-#: cp/decl.c:10624
+#: cp/decl.c:10537
#, gcc-internal-format
msgid "typedef declaration invalid in parameter declaration"
msgstr ""
-#: cp/decl.c:10629
+#: cp/decl.c:10542
#, gcc-internal-format
msgid "storage class specified for template parameter %qs"
msgstr ""
-#: cp/decl.c:10635
+#: cp/decl.c:10548
#, gcc-internal-format
msgid "storage class specifiers invalid in parameter declarations"
msgstr ""
-#: cp/decl.c:10639
+#: cp/decl.c:10552
#, gcc-internal-format
msgid "a parameter cannot be declared %<concept%>"
msgstr ""
-#: cp/decl.c:10644
+#: cp/decl.c:10557
#, gcc-internal-format
msgid "a parameter cannot be declared %<constexpr%>"
msgstr ""
-#: cp/decl.c:10654
+#: cp/decl.c:10567
#, gcc-internal-format
msgid "%<virtual%> outside class declaration"
msgstr ""
-#: cp/decl.c:10664
+#: cp/decl.c:10577
#, gcc-internal-format
-msgid "decomposition declaration cannot be declared %<inline%>"
+msgid "structured binding declaration cannot be %<inline%>"
msgstr ""
-#: cp/decl.c:10667
+#: cp/decl.c:10580
#, gcc-internal-format
-msgid "decomposition declaration cannot be declared %<typedef%>"
+msgid "structured binding declaration cannot be %<typedef%>"
msgstr ""
-#: cp/decl.c:10669
+#: cp/decl.c:10582
#, gcc-internal-format
-msgid "decomposition declaration cannot be declared %<constexpr%>"
+msgid "structured binding declaration cannot be %<constexpr%>"
msgstr ""
-#: cp/decl.c:10673
+#: cp/decl.c:10586
#, gcc-internal-format
-msgid "decomposition declaration cannot be declared %qs"
+msgid "structured binding declaration cannot be %qs"
msgstr ""
-#: cp/decl.c:10678
+#: cp/decl.c:10591
#, gcc-internal-format
-msgid "decomposition declaration cannot be declared %<concept%>"
+msgid "structured binding declaration cannot be %<concept%>"
msgstr ""
-#: cp/decl.c:10684
+#: cp/decl.c:10597
#, gcc-internal-format
-msgid "decomposition declaration cannot be declared %<register%>"
+msgid "structured binding declaration cannot be %<register%>"
msgstr ""
-#: cp/decl.c:10688
+#: cp/decl.c:10601
#, gcc-internal-format
-msgid "decomposition declaration cannot be declared %<static%>"
+msgid "structured binding declaration cannot be %<static%>"
msgstr ""
-#: cp/decl.c:10692
+#: cp/decl.c:10605
#, gcc-internal-format
-msgid "decomposition declaration cannot be declared %<extern%>"
+msgid "structured binding declaration cannot be %<extern%>"
msgstr ""
-#: cp/decl.c:10696
+#: cp/decl.c:10609
#, gcc-internal-format
-msgid "decomposition declaration cannot be declared %<mutable%>"
+msgid "structured binding declaration cannot be %<mutable%>"
msgstr ""
-#: cp/decl.c:10700
+#: cp/decl.c:10613
#, gcc-internal-format
-msgid "decomposition declaration cannot be declared C++98 %<auto%>"
+msgid "structured binding declaration cannot be C++98 %<auto%>"
msgstr ""
-#: cp/decl.c:10711
+#: cp/decl.c:10624
#, gcc-internal-format
-msgid "decomposition declaration cannot be declared with type %qT"
+msgid "structured binding declaration cannot have type %qT"
msgstr ""
-#: cp/decl.c:10714
+#: cp/decl.c:10627
#, gcc-internal-format
msgid ""
"type must be cv-qualified %<auto%> or reference to cv-qualified %<auto%>"
msgstr ""
-#: cp/decl.c:10745
+#: cp/decl.c:10658
#, gcc-internal-format
msgid "multiple storage classes in declaration of %qs"
msgstr ""
-#: cp/decl.c:10768
+#: cp/decl.c:10681
#, gcc-internal-format
msgid "storage class specified for %qs"
msgstr ""
-#: cp/decl.c:10772
+#: cp/decl.c:10685
#, gcc-internal-format
msgid "storage class specified for parameter %qs"
msgstr ""
-#: cp/decl.c:10785
+#: cp/decl.c:10698
#, gcc-internal-format
msgid "nested function %qs declared %<extern%>"
msgstr ""
-#: cp/decl.c:10789
+#: cp/decl.c:10702
#, gcc-internal-format
msgid "top-level declaration of %qs specifies %<auto%>"
msgstr ""
-#: cp/decl.c:10796
+#: cp/decl.c:10709
#, gcc-internal-format
msgid "function-scope %qs implicitly auto and declared %<__thread%>"
msgstr ""
-#: cp/decl.c:10808
+#: cp/decl.c:10721
#, gcc-internal-format
msgid "storage class specifiers invalid in friend function declarations"
msgstr ""
-#: cp/decl.c:10916
-#, gcc-internal-format
-msgid "%qs declared as function returning a function"
-msgstr ""
-
-#: cp/decl.c:10921
-#, gcc-internal-format
-msgid "%qs declared as function returning an array"
-msgstr ""
-
-#: cp/decl.c:10945
+#: cp/decl.c:10832
#, gcc-internal-format
msgid "requires-clause on return type"
msgstr ""
-#: cp/decl.c:10965
+#: cp/decl.c:10852
#, gcc-internal-format
msgid "%qs function uses %<auto%> type specifier without trailing return type"
msgstr ""
-#: cp/decl.c:10968
+#: cp/decl.c:10855
#, gcc-internal-format
msgid "deduced return type only available with -std=c++14 or -std=gnu++14"
msgstr ""
-#: cp/decl.c:10974
+#: cp/decl.c:10861
#, gcc-internal-format
msgid "virtual function cannot have deduced return type"
msgstr ""
-#: cp/decl.c:10981
+#: cp/decl.c:10868
#, gcc-internal-format
msgid ""
"%qs function with trailing return type has %qT as its type rather than plain "
"%<auto%>"
msgstr ""
-#: cp/decl.c:10991
+#: cp/decl.c:10878
#, gcc-internal-format
msgid "deduction guide for %qT must have trailing return type"
msgstr ""
-#: cp/decl.c:10995
+#: cp/decl.c:10882
#, gcc-internal-format
msgid "deduced class type %qT in function return type"
msgstr ""
-#: cp/decl.c:11007
+#: cp/decl.c:10894
#, gcc-internal-format
msgid ""
"trailing return type %qT of deduction guide is not a specialization of %qT"
@@ -41292,536 +42128,546 @@ msgstr ""
#. Not using maybe_warn_cpp0x because this should
#. always be an error.
-#: cp/decl.c:11018
+#: cp/decl.c:10905
#, gcc-internal-format
msgid "trailing return type only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/decl.c:11021
+#: cp/decl.c:10908
#, gcc-internal-format
msgid ""
"%qs function with trailing return type not declared with %<auto%> type "
"specifier"
msgstr ""
-#: cp/decl.c:11057
+#: cp/decl.c:10937
+#, gcc-internal-format
+msgid "%qs declared as function returning a function"
+msgstr ""
+
+#: cp/decl.c:10943
+#, gcc-internal-format
+msgid "%qs declared as function returning an array"
+msgstr ""
+
+#: cp/decl.c:10972
#, gcc-internal-format
msgid "destructor cannot be static member function"
msgstr ""
-#: cp/decl.c:11058
+#: cp/decl.c:10973
#, gcc-internal-format
msgid "constructor cannot be static member function"
msgstr ""
-#: cp/decl.c:11062
+#: cp/decl.c:10977
#, gcc-internal-format
msgid "destructors may not be cv-qualified"
msgstr ""
-#: cp/decl.c:11063
+#: cp/decl.c:10978
#, gcc-internal-format
msgid "constructors may not be cv-qualified"
msgstr ""
-#: cp/decl.c:11071
+#: cp/decl.c:10986
#, gcc-internal-format
msgid "destructors may not be ref-qualified"
msgstr ""
-#: cp/decl.c:11072
+#: cp/decl.c:10987
#, gcc-internal-format
msgid "constructors may not be ref-qualified"
msgstr ""
-#: cp/decl.c:11090
+#: cp/decl.c:11005
#, gcc-internal-format
msgid "constructors cannot be declared %<virtual%>"
msgstr ""
#. Cannot be both friend and virtual.
-#: cp/decl.c:11105
+#: cp/decl.c:11020
#, gcc-internal-format
msgid "virtual functions cannot be friends"
msgstr ""
-#: cp/decl.c:11109
+#: cp/decl.c:11024
#, gcc-internal-format
msgid "friend declaration not in class definition"
msgstr ""
-#: cp/decl.c:11111
+#: cp/decl.c:11026
#, gcc-internal-format
msgid "can%'t define friend function %qs in a local class definition"
msgstr ""
-#: cp/decl.c:11123
+#: cp/decl.c:11038
#, gcc-internal-format
msgid "a conversion function cannot have a trailing return type"
msgstr ""
-#: cp/decl.c:11139
+#: cp/decl.c:11054
#, gcc-internal-format
msgid "destructors may not have parameters"
msgstr ""
-#: cp/decl.c:11179
+#: cp/decl.c:11094
#, gcc-internal-format
msgid "cannot declare pointer to %q#T"
msgstr ""
-#: cp/decl.c:11192 cp/decl.c:11199
+#: cp/decl.c:11107 cp/decl.c:11114
#, gcc-internal-format
msgid "cannot declare reference to %q#T"
msgstr ""
-#: cp/decl.c:11201
+#: cp/decl.c:11116
#, gcc-internal-format
msgid "cannot declare pointer to %q#T member"
msgstr ""
-#: cp/decl.c:11230
+#: cp/decl.c:11145
#, gcc-internal-format
msgid "cannot declare reference to qualified function type %qT"
msgstr ""
-#: cp/decl.c:11231
+#: cp/decl.c:11146
#, gcc-internal-format
msgid "cannot declare pointer to qualified function type %qT"
msgstr ""
-#: cp/decl.c:11304
+#: cp/decl.c:11219
#, gcc-internal-format
msgid ""
"cannot declare reference to %q#T, which is not a typedef or a template type "
"argument"
msgstr ""
-#: cp/decl.c:11374
+#: cp/decl.c:11289
#, gcc-internal-format
msgid "template-id %qD used as a declarator"
msgstr ""
-#: cp/decl.c:11399
+#: cp/decl.c:11314
#, gcc-internal-format
msgid "member functions are implicitly friends of their class"
msgstr ""
-#: cp/decl.c:11405
+#: cp/decl.c:11320
#, gcc-internal-format
msgid "extra qualification %<%T::%> on member %qs"
msgstr ""
-#: cp/decl.c:11435
+#: cp/decl.c:11350
#, gcc-internal-format
msgid "cannot define member function %<%T::%s%> within %qT"
msgstr ""
-#: cp/decl.c:11437
+#: cp/decl.c:11352
#, gcc-internal-format
msgid "cannot declare member function %<%T::%s%> within %qT"
msgstr ""
-#: cp/decl.c:11445
+#: cp/decl.c:11360
#, gcc-internal-format
msgid "cannot declare member %<%T::%s%> within %qT"
msgstr ""
-#: cp/decl.c:11479
+#: cp/decl.c:11394
#, gcc-internal-format
msgid "non-parameter %qs cannot be a parameter pack"
msgstr ""
-#: cp/decl.c:11487
+#: cp/decl.c:11402
#, gcc-internal-format
msgid "data member may not have variably modified type %qT"
msgstr ""
-#: cp/decl.c:11489
+#: cp/decl.c:11404
#, gcc-internal-format
msgid "parameter may not have variably modified type %qT"
msgstr ""
-#: cp/decl.c:11500
+#: cp/decl.c:11415
#, gcc-internal-format
msgid "%<explicit%> outside class declaration"
msgstr ""
-#: cp/decl.c:11503
+#: cp/decl.c:11418
#, gcc-internal-format
msgid "%<explicit%> in friend declaration"
msgstr ""
-#: cp/decl.c:11506
+#: cp/decl.c:11421
#, gcc-internal-format
msgid ""
"only declarations of constructors and conversion operators can be %<explicit"
"%>"
msgstr ""
-#: cp/decl.c:11515
+#: cp/decl.c:11430
#, gcc-internal-format
msgid "non-member %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:11520
+#: cp/decl.c:11435
#, gcc-internal-format
msgid "non-object member %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:11526
+#: cp/decl.c:11441
#, gcc-internal-format
msgid "function %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:11531
+#: cp/decl.c:11446
#, gcc-internal-format
msgid "static %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:11536
+#: cp/decl.c:11451
#, gcc-internal-format
msgid "const %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:11541
+#: cp/decl.c:11456
#, gcc-internal-format
msgid "reference %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:11572
+#: cp/decl.c:11487
#, gcc-internal-format
msgid "typedef declared %<auto%>"
msgstr ""
-#: cp/decl.c:11577
+#: cp/decl.c:11492
#, gcc-internal-format
msgid "requires-clause on typedef"
msgstr ""
-#: cp/decl.c:11585
+#: cp/decl.c:11500
#, gcc-internal-format
msgid "typedef name may not be a nested-name-specifier"
msgstr ""
-#: cp/decl.c:11606
+#: cp/decl.c:11521
#, gcc-internal-format
msgid "ISO C++ forbids nested type %qD with same name as enclosing class"
msgstr ""
-#: cp/decl.c:11692
+#: cp/decl.c:11608
#, gcc-internal-format
msgid "%<inline%> specified for friend class declaration"
msgstr ""
-#: cp/decl.c:11700
+#: cp/decl.c:11616
#, gcc-internal-format
msgid "template parameters cannot be friends"
msgstr ""
-#: cp/decl.c:11702
+#: cp/decl.c:11618
#, gcc-internal-format
msgid "friend declaration requires class-key, i.e. %<friend class %T::%D%>"
msgstr ""
-#: cp/decl.c:11706
+#: cp/decl.c:11622
#, gcc-internal-format
msgid "friend declaration requires class-key, i.e. %<friend %#T%>"
msgstr ""
-#: cp/decl.c:11719
+#: cp/decl.c:11635
#, gcc-internal-format
msgid "trying to make class %qT a friend of global scope"
msgstr ""
-#: cp/decl.c:11739
+#: cp/decl.c:11655
#, gcc-internal-format
msgid "invalid qualifiers on non-member function type"
msgstr ""
-#: cp/decl.c:11743
+#: cp/decl.c:11659
#, gcc-internal-format
msgid "requires-clause on type-id"
msgstr ""
-#: cp/decl.c:11753
+#: cp/decl.c:11669
#, gcc-internal-format
msgid "abstract declarator %qT used as declaration"
msgstr ""
-#: cp/decl.c:11771
+#: cp/decl.c:11684
#, gcc-internal-format
msgid "requires-clause on declaration of non-function type %qT"
msgstr ""
-#: cp/decl.c:11789
+#: cp/decl.c:11703
#, gcc-internal-format
msgid "cannot use %<::%> in parameter declaration"
msgstr ""
-#: cp/decl.c:11795
+#: cp/decl.c:11709
#, gcc-internal-format
msgid "%<auto%> parameter not permitted in this context"
msgstr ""
-#: cp/decl.c:11797
+#: cp/decl.c:11711
#, gcc-internal-format
msgid "parameter declared %<auto%>"
msgstr ""
-#: cp/decl.c:11845 cp/parser.c:3161
+#: cp/decl.c:11760 cp/parser.c:3163
#, gcc-internal-format
msgid "invalid use of template-name %qE without an argument list"
msgstr ""
-#: cp/decl.c:11849
+#: cp/decl.c:11764
#, gcc-internal-format
msgid "non-static data member declared with placeholder %qT"
msgstr ""
-#: cp/decl.c:11873
+#: cp/decl.c:11788
#, gcc-internal-format
msgid "ISO C++ forbids flexible array member %qs"
msgstr ""
-#: cp/decl.c:11876
+#: cp/decl.c:11791
#, gcc-internal-format
msgid "ISO C++ forbids flexible array members"
msgstr ""
#. Something like struct S { int N::j; };
-#: cp/decl.c:11892
+#: cp/decl.c:11807
#, gcc-internal-format
msgid "invalid use of %<::%>"
msgstr ""
-#: cp/decl.c:11914
+#: cp/decl.c:11829
#, gcc-internal-format
msgid "declaration of function %qD in invalid context"
msgstr ""
-#: cp/decl.c:11923
+#: cp/decl.c:11838
#, gcc-internal-format
msgid "function %qD declared %<virtual%> inside a union"
msgstr ""
-#: cp/decl.c:11932
+#: cp/decl.c:11847
#, gcc-internal-format
msgid "%qD cannot be declared %<virtual%>, since it is always static"
msgstr ""
-#: cp/decl.c:11948
+#: cp/decl.c:11861
#, gcc-internal-format
msgid "expected qualified name in friend declaration for destructor %qD"
msgstr ""
-#: cp/decl.c:11955
+#: cp/decl.c:11868
#, gcc-internal-format
msgid "declaration of %qD as member of %qT"
msgstr ""
-#: cp/decl.c:11961
+#: cp/decl.c:11874
#, gcc-internal-format
msgid "a destructor cannot be %<concept%>"
msgstr ""
-#: cp/decl.c:11966
+#: cp/decl.c:11879
#, gcc-internal-format
msgid "a destructor cannot be %<constexpr%>"
msgstr ""
-#: cp/decl.c:11972
+#: cp/decl.c:11885
#, gcc-internal-format
msgid "expected qualified name in friend declaration for constructor %qD"
msgstr ""
-#: cp/decl.c:11980
+#: cp/decl.c:11893
#, gcc-internal-format
msgid "a constructor cannot be %<concept%>"
msgstr ""
-#: cp/decl.c:11985
+#: cp/decl.c:11898
#, gcc-internal-format
msgid "a concept cannot be a member function"
msgstr ""
-#: cp/decl.c:11994
+#: cp/decl.c:11907
#, gcc-internal-format
msgid "specialization of variable template %qD declared as function"
msgstr ""
-#: cp/decl.c:11997
+#: cp/decl.c:11910
#, gcc-internal-format
msgid "variable template declared here"
msgstr ""
-#: cp/decl.c:12052
+#: cp/decl.c:11965
#, gcc-internal-format
msgid "field %qD has incomplete type %qT"
msgstr ""
-#: cp/decl.c:12057
+#: cp/decl.c:11970
#, gcc-internal-format
msgid "name %qT has incomplete type"
msgstr ""
-#: cp/decl.c:12067
+#: cp/decl.c:11980
#, gcc-internal-format
msgid "%qE is neither function nor member function; cannot be declared friend"
msgstr ""
-#: cp/decl.c:12113
+#: cp/decl.c:12026
#, gcc-internal-format
msgid "static data member %qE declared %<concept%>"
msgstr ""
-#: cp/decl.c:12117
+#: cp/decl.c:12030
#, gcc-internal-format
msgid "constexpr static data member %qD must have an initializer"
msgstr ""
-#: cp/decl.c:12145
+#: cp/decl.c:12058
#, gcc-internal-format
msgid "non-static data member %qE declared %<concept%>"
msgstr ""
-#: cp/decl.c:12149
+#: cp/decl.c:12062
#, gcc-internal-format
msgid "non-static data member %qE declared %<constexpr%>"
msgstr ""
-#: cp/decl.c:12200
+#: cp/decl.c:12114
#, gcc-internal-format
msgid "storage class %<auto%> invalid for function %qs"
msgstr ""
-#: cp/decl.c:12202
+#: cp/decl.c:12116
#, gcc-internal-format
msgid "storage class %<register%> invalid for function %qs"
msgstr ""
-#: cp/decl.c:12206
+#: cp/decl.c:12120
#, gcc-internal-format
msgid "storage class %<__thread%> invalid for function %qs"
msgstr ""
-#: cp/decl.c:12209
+#: cp/decl.c:12123
#, gcc-internal-format
msgid "storage class %<thread_local%> invalid for function %qs"
msgstr ""
-#: cp/decl.c:12214
+#: cp/decl.c:12128
#, gcc-internal-format
msgid "virt-specifiers in %qs not allowed outside a class definition"
msgstr ""
-#: cp/decl.c:12225
+#: cp/decl.c:12139
#, gcc-internal-format
msgid ""
"%<static%> specifier invalid for function %qs declared out of global scope"
msgstr ""
-#: cp/decl.c:12229
+#: cp/decl.c:12143
#, gcc-internal-format
msgid ""
"%<inline%> specifier invalid for function %qs declared out of global scope"
msgstr ""
-#: cp/decl.c:12237
+#: cp/decl.c:12151
#, gcc-internal-format
msgid "virtual non-class function %qs"
msgstr ""
-#: cp/decl.c:12244
+#: cp/decl.c:12158
#, gcc-internal-format
msgid "%qs defined in a non-class scope"
msgstr ""
-#: cp/decl.c:12245
+#: cp/decl.c:12159
#, gcc-internal-format
msgid "%qs declared in a non-class scope"
msgstr ""
-#: cp/decl.c:12280
+#: cp/decl.c:12194
#, gcc-internal-format
msgid "cannot declare member function %qD to have static linkage"
msgstr ""
#. 7.1.1: There can be no static function declarations within a
#. block.
-#: cp/decl.c:12288
+#: cp/decl.c:12202
#, gcc-internal-format
msgid "cannot declare static function inside another function"
msgstr ""
-#: cp/decl.c:12324
+#: cp/decl.c:12238
#, gcc-internal-format
msgid ""
"%<static%> may not be used when defining (as opposed to declaring) a static "
"data member"
msgstr ""
-#: cp/decl.c:12331
+#: cp/decl.c:12245
#, gcc-internal-format
msgid "static member %qD declared %<register%>"
msgstr ""
-#: cp/decl.c:12337
+#: cp/decl.c:12251
#, gcc-internal-format
msgid "cannot explicitly declare member %q#D to have extern linkage"
msgstr ""
-#: cp/decl.c:12344
+#: cp/decl.c:12258
#, gcc-internal-format
msgid "declaration of constexpr variable %qD is not a definition"
msgstr ""
-#: cp/decl.c:12366
+#: cp/decl.c:12279
#, gcc-internal-format
msgid "declaration of %q#D has no initializer"
msgstr ""
-#: cp/decl.c:12377
+#: cp/decl.c:12290
#, gcc-internal-format
msgid "%qs initialized and declared %<extern%>"
msgstr ""
-#: cp/decl.c:12381
+#: cp/decl.c:12294
#, gcc-internal-format
msgid "%qs has both %<extern%> and initializer"
msgstr ""
-#: cp/decl.c:12541
+#: cp/decl.c:12457
#, gcc-internal-format
msgid "default argument %qE uses %qD"
msgstr ""
-#: cp/decl.c:12544
+#: cp/decl.c:12460
#, gcc-internal-format
msgid "default argument %qE uses local variable %qD"
msgstr ""
-#: cp/decl.c:12628
+#: cp/decl.c:12544
#, gcc-internal-format
msgid "invalid use of cv-qualified type %qT in parameter declaration"
msgstr ""
-#: cp/decl.c:12632
+#: cp/decl.c:12548
#, gcc-internal-format
msgid "invalid use of type %<void%> in parameter declaration"
msgstr ""
-#: cp/decl.c:12655
+#: cp/decl.c:12571
#, gcc-internal-format
msgid "parameter %qD invalidly declared method type"
msgstr ""
-#: cp/decl.c:12680
+#: cp/decl.c:12599
#, gcc-internal-format
msgid "parameter %qD includes pointer to array of unknown bound %qT"
msgstr ""
-#: cp/decl.c:12682
+#: cp/decl.c:12601
#, gcc-internal-format
msgid "parameter %qD includes reference to array of unknown bound %qT"
msgstr ""
@@ -41841,174 +42687,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:12932
+#: cp/decl.c:12851
#, gcc-internal-format
msgid "invalid constructor; you probably meant %<%T (const %T&)%>"
msgstr ""
-#: cp/decl.c:13054
+#: cp/decl.c:12971
#, gcc-internal-format
msgid "%qD may not be declared within a namespace"
msgstr ""
-#: cp/decl.c:13059
+#: cp/decl.c:12976
#, gcc-internal-format
msgid "%qD may not be declared as static"
msgstr ""
-#: cp/decl.c:13085
+#: cp/decl.c:13002
#, gcc-internal-format
msgid "%qD must be a nonstatic member function"
msgstr ""
-#: cp/decl.c:13094
+#: cp/decl.c:13011
#, gcc-internal-format
msgid ""
"%qD must be either a non-static member function or a non-member function"
msgstr ""
-#: cp/decl.c:13116
+#: cp/decl.c:13033
#, gcc-internal-format
msgid "%qD must have an argument of class or enumerated type"
msgstr ""
-#: cp/decl.c:13145
+#: cp/decl.c:13062
#, gcc-internal-format
msgid ""
"conversion to a reference to void will never use a type conversion operator"
msgstr ""
-#: cp/decl.c:13147
+#: cp/decl.c:13064
#, gcc-internal-format
msgid "conversion to void will never use a type conversion operator"
msgstr ""
-#: cp/decl.c:13154
+#: cp/decl.c:13071
#, gcc-internal-format
msgid ""
"conversion to a reference to the same type will never use a type conversion "
"operator"
msgstr ""
-#: cp/decl.c:13156
+#: cp/decl.c:13073
#, gcc-internal-format
msgid "conversion to the same type will never use a type conversion operator"
msgstr ""
-#: cp/decl.c:13164
+#: cp/decl.c:13081
#, gcc-internal-format
msgid ""
"conversion to a reference to a base class will never use a type conversion "
"operator"
msgstr ""
-#: cp/decl.c:13166
+#: cp/decl.c:13083
#, gcc-internal-format
msgid "conversion to a base class will never use a type conversion operator"
msgstr ""
#. 13.4.0.3
-#: cp/decl.c:13175
+#: cp/decl.c:13092
#, gcc-internal-format
msgid "ISO C++ prohibits overloading operator ?:"
msgstr ""
-#: cp/decl.c:13180
+#: cp/decl.c:13097
#, gcc-internal-format
msgid "%qD must not have variable number of arguments"
msgstr ""
-#: cp/decl.c:13231
+#: cp/decl.c:13148
#, gcc-internal-format
msgid "postfix %qD must take %<int%> as its argument"
msgstr ""
-#: cp/decl.c:13234
+#: cp/decl.c:13151
#, gcc-internal-format
msgid "postfix %qD must take %<int%> as its second argument"
msgstr ""
-#: cp/decl.c:13242
+#: cp/decl.c:13159
#, gcc-internal-format
msgid "%qD must take either zero or one argument"
msgstr ""
-#: cp/decl.c:13244
+#: cp/decl.c:13161
#, gcc-internal-format
msgid "%qD must take either one or two arguments"
msgstr ""
-#: cp/decl.c:13266
+#: cp/decl.c:13183
#, gcc-internal-format
msgid "prefix %qD should return %qT"
msgstr ""
-#: cp/decl.c:13272
+#: cp/decl.c:13189
#, gcc-internal-format
msgid "postfix %qD should return %qT"
msgstr ""
-#: cp/decl.c:13281
+#: cp/decl.c:13198
#, gcc-internal-format
msgid "%qD must take %<void%>"
msgstr ""
-#: cp/decl.c:13283 cp/decl.c:13292
+#: cp/decl.c:13200 cp/decl.c:13209
#, gcc-internal-format
msgid "%qD must take exactly one argument"
msgstr ""
-#: cp/decl.c:13294
+#: cp/decl.c:13211
#, gcc-internal-format
msgid "%qD must take exactly two arguments"
msgstr ""
-#: cp/decl.c:13303
+#: cp/decl.c:13220
#, gcc-internal-format
msgid "user-defined %qD always evaluates both arguments"
msgstr ""
-#: cp/decl.c:13317
+#: cp/decl.c:13234
#, gcc-internal-format
msgid "%qD should return by value"
msgstr ""
-#: cp/decl.c:13328 cp/decl.c:13333
+#: cp/decl.c:13245 cp/decl.c:13250
#, gcc-internal-format
msgid "%qD cannot have default arguments"
msgstr ""
-#: cp/decl.c:13391
+#: cp/decl.c:13308
#, gcc-internal-format
msgid "using template type parameter %qT after %qs"
msgstr ""
-#: cp/decl.c:13414
+#: cp/decl.c:13331
#, gcc-internal-format
msgid "using alias template specialization %qT after %qs"
msgstr ""
-#: cp/decl.c:13417
+#: cp/decl.c:13334
#, gcc-internal-format
msgid "using typedef-name %qD after %qs"
msgstr ""
-#: cp/decl.c:13419
+#: cp/decl.c:13336
#, gcc-internal-format
msgid "%qD has a previous declaration here"
msgstr ""
-#: cp/decl.c:13427
+#: cp/decl.c:13344
#, gcc-internal-format
msgid "%qT referred to as %qs"
msgstr ""
-#: cp/decl.c:13428 cp/decl.c:13435
+#: cp/decl.c:13345 cp/decl.c:13352
#, gcc-internal-format
msgid "%qT has a previous declaration here"
msgstr ""
-#: cp/decl.c:13434
+#: cp/decl.c:13351
#, gcc-internal-format
msgid "%qT referred to as enum"
msgstr ""
@@ -42020,99 +42866,99 @@ msgstr ""
#. void f(class C); // No template header here
#.
#. then the required template argument is missing.
-#: cp/decl.c:13449
+#: cp/decl.c:13366
#, gcc-internal-format
msgid "template argument required for %<%s %T%>"
msgstr ""
-#: cp/decl.c:13503 cp/name-lookup.c:3252
+#: cp/decl.c:13420 cp/name-lookup.c:3972
#, gcc-internal-format
msgid "%qD has the same name as the class in which it is declared"
msgstr ""
-#: cp/decl.c:13533 cp/friend.c:304 cp/parser.c:2987 cp/parser.c:6144
-#: cp/pt.c:8574
+#: cp/decl.c:13450 cp/friend.c:304 cp/parser.c:2989 cp/parser.c:6169
+#: cp/pt.c:8669
#, gcc-internal-format
msgid "%qT is not a template"
msgstr ""
-#: cp/decl.c:13534 cp/friend.c:305 cp/tree.c:4036
+#: cp/decl.c:13451 cp/friend.c:305 cp/tree.c:4439
#, gcc-internal-format
msgid "previous declaration here"
msgstr ""
-#: cp/decl.c:13538
+#: cp/decl.c:13455
#, gcc-internal-format
msgid "perhaps you want to explicitly add %<%T::%>"
msgstr ""
-#: cp/decl.c:13547 cp/name-lookup.c:2742 cp/name-lookup.c:3582
-#: cp/name-lookup.c:3627 cp/parser.c:6095 cp/parser.c:25735
+#: cp/decl.c:13464 cp/name-lookup.c:3413 cp/name-lookup.c:3420
+#: cp/name-lookup.c:4281 cp/parser.c:6120 cp/parser.c:25901
#, gcc-internal-format
msgid "reference to %qD is ambiguous"
msgstr ""
-#: cp/decl.c:13668
+#: cp/decl.c:13576
#, gcc-internal-format
msgid "use of enum %q#D without previous declaration"
msgstr ""
-#: cp/decl.c:13701
+#: cp/decl.c:13608
#, gcc-internal-format
msgid "redeclaration of %qT as a non-template"
msgstr ""
-#: cp/decl.c:13837
+#: cp/decl.c:13746
#, gcc-internal-format
msgid "derived union %qT invalid"
msgstr ""
-#: cp/decl.c:13842
+#: cp/decl.c:13751
#, gcc-internal-format
msgid "%qT defined with multiple direct bases"
msgstr ""
-#: cp/decl.c:13853
+#: cp/decl.c:13762
#, gcc-internal-format
msgid "%qT defined with direct virtual base"
msgstr ""
-#: cp/decl.c:13878
+#: cp/decl.c:13787
#, gcc-internal-format
msgid "base type %qT fails to be a struct or class type"
msgstr ""
-#: cp/decl.c:13908
+#: cp/decl.c:13817
#, gcc-internal-format
msgid "recursive type %qT undefined"
msgstr ""
-#: cp/decl.c:13910
+#: cp/decl.c:13819
#, gcc-internal-format
msgid "duplicate base type %qT invalid"
msgstr ""
-#: cp/decl.c:14055
+#: cp/decl.c:13964
#, gcc-internal-format
msgid "scoped/unscoped mismatch in enum %q#T"
msgstr ""
-#: cp/decl.c:14058 cp/decl.c:14066 cp/decl.c:14078 cp/parser.c:17935
+#: cp/decl.c:13967 cp/decl.c:13975 cp/decl.c:13987 cp/parser.c:18114
#, gcc-internal-format
msgid "previous definition here"
msgstr ""
-#: cp/decl.c:14063
+#: cp/decl.c:13972
#, gcc-internal-format
msgid "underlying type mismatch in enum %q#T"
msgstr ""
-#: cp/decl.c:14075
+#: cp/decl.c:13984
#, gcc-internal-format
msgid "different underlying type in enum %q#T"
msgstr ""
-#: cp/decl.c:14153
+#: cp/decl.c:14062
#, gcc-internal-format
msgid "underlying type %qT of %qT must be an integral type"
msgstr ""
@@ -42121,125 +42967,125 @@ msgstr ""
#.
#. IF no integral type can represent all the enumerator values, the
#. enumeration is ill-formed.
-#: cp/decl.c:14300
+#: cp/decl.c:14209
#, gcc-internal-format
msgid "no integral type can represent all of the enumerator values for %qT"
msgstr ""
-#: cp/decl.c:14472
+#: cp/decl.c:14381
#, gcc-internal-format
msgid ""
"enumerator value for %qD must have integral or unscoped enumeration type"
msgstr ""
-#: cp/decl.c:14482
+#: cp/decl.c:14391
#, gcc-internal-format
msgid "enumerator value for %qD is not an integer constant"
msgstr ""
-#: cp/decl.c:14531
+#: cp/decl.c:14440
#, gcc-internal-format
msgid "incremented enumerator value is too large for %<unsigned long%>"
msgstr ""
-#: cp/decl.c:14532
+#: cp/decl.c:14441
#, gcc-internal-format
msgid "incremented enumerator value is too large for %<long%>"
msgstr ""
-#: cp/decl.c:14543
+#: cp/decl.c:14452
#, gcc-internal-format
msgid "overflow in enumeration values at %qD"
msgstr ""
-#: cp/decl.c:14563
+#: cp/decl.c:14472
#, gcc-internal-format
msgid "enumerator value %qE is outside the range of underlying type %qT"
msgstr ""
-#: cp/decl.c:14674
+#: cp/decl.c:14583
#, gcc-internal-format
msgid "return type %q#T is incomplete"
msgstr ""
-#: cp/decl.c:14846 cp/typeck.c:8980
+#: cp/decl.c:14759 cp/typeck.c:9073
#, gcc-internal-format
msgid "%<operator=%> should return a reference to %<*this%>"
msgstr ""
-#: cp/decl.c:15189
+#: cp/decl.c:15099
#, gcc-internal-format
msgid "invalid function declaration"
msgstr ""
-#: cp/decl.c:15613
+#: cp/decl.c:15528
#, gcc-internal-format
msgid "no return statements in function returning %qT"
msgstr ""
-#: cp/decl.c:15615 cp/typeck.c:8861
+#: cp/decl.c:15530 cp/typeck.c:8954
#, gcc-internal-format
msgid "only plain %<auto%> return type can be deduced to %<void%>"
msgstr ""
-#: cp/decl.c:15825
+#: cp/decl.c:15738
#, gcc-internal-format
msgid "invalid member function declaration"
msgstr ""
-#: cp/decl.c:15839
+#: cp/decl.c:15752
#, gcc-internal-format
msgid "%qD is already defined in class %qT"
msgstr ""
-#: cp/decl.c:16213
+#: cp/decl.c:16126
#, gcc-internal-format
msgid "use of %qD before deduction of %<auto%>"
msgstr ""
-#: cp/decl2.c:332
+#: cp/decl2.c:337
#, gcc-internal-format
msgid "name missing for member function"
msgstr ""
-#: cp/decl2.c:409 cp/decl2.c:423
+#: cp/decl2.c:414 cp/decl2.c:428
#, gcc-internal-format
msgid "ambiguous conversion for array subscript"
msgstr ""
-#: cp/decl2.c:417
+#: cp/decl2.c:422
#, gcc-internal-format
msgid "invalid types %<%T[%T]%> for array subscript"
msgstr ""
-#: cp/decl2.c:466
+#: cp/decl2.c:471
#, gcc-internal-format
msgid "deleting array %q#E"
msgstr ""
-#: cp/decl2.c:472
+#: cp/decl2.c:477
#, gcc-internal-format
msgid "type %q#T argument given to %<delete%>, expected pointer"
msgstr ""
-#: cp/decl2.c:484
+#: cp/decl2.c:489
#, gcc-internal-format
msgid ""
"cannot delete a function. Only pointer-to-objects are valid arguments to "
"%<delete%>"
msgstr ""
-#: cp/decl2.c:492
+#: cp/decl2.c:497
#, gcc-internal-format
msgid "deleting %qT is undefined"
msgstr ""
-#: cp/decl2.c:540 cp/pt.c:5297
+#: cp/decl2.c:545 cp/pt.c:5344
#, gcc-internal-format
msgid "template declaration of %q#D"
msgstr ""
-#: cp/decl2.c:584
+#: cp/decl2.c:585
#, gcc-internal-format
msgid ""
"template parameter lists provided don%'t match the template parameters of %qD"
@@ -42248,117 +43094,132 @@ msgstr ""
#. [temp.mem]
#.
#. A destructor shall not be a member template.
-#: cp/decl2.c:599 cp/pt.c:5256
+#: cp/decl2.c:600 cp/pt.c:5303
#, gcc-internal-format
msgid "destructor %qD declared as member template"
msgstr ""
+#: cp/decl2.c:670
+#, gcc-internal-format
+msgid "no declaration matches %q#D"
+msgstr ""
+
#: cp/decl2.c:675
#, gcc-internal-format
-msgid "prototype for %q#D does not match any in class %qT"
+msgid "no conversion operators declared"
msgstr ""
-#: cp/decl2.c:761
+#: cp/decl2.c:678
+#, gcc-internal-format
+msgid "no functions named %qD"
+msgstr ""
+
+#: cp/decl2.c:680
+#, gcc-internal-format
+msgid "%#qT defined here"
+msgstr ""
+
+#: cp/decl2.c:731
#, gcc-internal-format
msgid "local class %q#T shall not have static data member %q#D"
msgstr ""
-#: cp/decl2.c:769
+#: cp/decl2.c:739
#, gcc-internal-format
msgid "static data member %qD in unnamed class"
msgstr ""
-#: cp/decl2.c:771
+#: cp/decl2.c:741
#, gcc-internal-format
msgid "unnamed class defined here"
msgstr ""
-#: cp/decl2.c:830
+#: cp/decl2.c:800
#, gcc-internal-format
msgid "explicit template argument list not allowed"
msgstr ""
-#: cp/decl2.c:836
+#: cp/decl2.c:806
#, gcc-internal-format
msgid "member %qD conflicts with virtual function table field name"
msgstr ""
-#: cp/decl2.c:878
+#: cp/decl2.c:848
#, gcc-internal-format
msgid "%qD is already defined in %qT"
msgstr ""
-#: cp/decl2.c:905 cp/decl2.c:913
+#: cp/decl2.c:875 cp/decl2.c:883
#, gcc-internal-format
msgid "invalid initializer for member function %qD"
msgstr ""
-#: cp/decl2.c:920
+#: cp/decl2.c:890
#, gcc-internal-format
msgid "initializer specified for friend function %qD"
msgstr ""
-#: cp/decl2.c:923
+#: cp/decl2.c:893
#, gcc-internal-format
msgid "initializer specified for static member function %qD"
msgstr ""
-#: cp/decl2.c:967
+#: cp/decl2.c:937
#, gcc-internal-format
msgid "%<asm%> specifiers are not permitted on non-static data members"
msgstr ""
-#: cp/decl2.c:1020
+#: cp/decl2.c:990
#, gcc-internal-format
msgid "bit-field %qD with non-integral type"
msgstr ""
-#: cp/decl2.c:1026
+#: cp/decl2.c:996
#, gcc-internal-format
msgid "cannot declare %qD to be a bit-field type"
msgstr ""
-#: cp/decl2.c:1036
+#: cp/decl2.c:1006
#, gcc-internal-format
msgid "cannot declare bit-field %qD with function type"
msgstr ""
-#: cp/decl2.c:1043
+#: cp/decl2.c:1013
#, gcc-internal-format
msgid "%qD is already defined in the class %qT"
msgstr ""
-#: cp/decl2.c:1050
+#: cp/decl2.c:1020
#, gcc-internal-format
msgid "static member %qD cannot be a bit-field"
msgstr ""
-#: cp/decl2.c:1060
+#: cp/decl2.c:1030
#, gcc-internal-format
msgid "width of bit-field %qD has non-integral type %qT"
msgstr ""
-#: cp/decl2.c:1403
+#: cp/decl2.c:1374
#, gcc-internal-format
msgid "%q+D static data member inside of declare target directive"
msgstr ""
-#: cp/decl2.c:1467
+#: cp/decl2.c:1438
#, gcc-internal-format
msgid "anonymous struct not inside named type"
msgstr ""
-#: cp/decl2.c:1558
+#: cp/decl2.c:1529
#, gcc-internal-format
msgid "namespace-scope anonymous aggregates must be static"
msgstr ""
-#: cp/decl2.c:1567
+#: cp/decl2.c:1538
#, gcc-internal-format
msgid "anonymous union with no members"
msgstr ""
-#: cp/decl2.c:1600
+#: cp/decl2.c:1571
#, gcc-internal-format
msgid "%<operator new%> must return type %qT"
msgstr ""
@@ -42367,69 +43228,69 @@ msgstr ""
#.
#. The first parameter shall not have an associated default
#. argument.
-#: cp/decl2.c:1611
+#: cp/decl2.c:1582
#, gcc-internal-format
msgid "the first parameter of %<operator new%> cannot have a default argument"
msgstr ""
-#: cp/decl2.c:1627
+#: cp/decl2.c:1598
#, gcc-internal-format
msgid "%<operator new%> takes type %<size_t%> (%qT) as first parameter"
msgstr ""
-#: cp/decl2.c:1656
+#: cp/decl2.c:1627
#, gcc-internal-format
msgid "%<operator delete%> must return type %qT"
msgstr ""
-#: cp/decl2.c:1665
+#: cp/decl2.c:1636
#, gcc-internal-format
msgid "%<operator delete%> takes type %qT as first parameter"
msgstr ""
-#: cp/decl2.c:2527
+#: cp/decl2.c:2500
#, gcc-internal-format
msgid "%qT has a field %qD whose type has no linkage"
msgstr ""
-#: cp/decl2.c:2531
+#: cp/decl2.c:2504
#, gcc-internal-format
msgid ""
"%qT has a field %qD whose type depends on the type %qT which has no linkage"
msgstr ""
-#: cp/decl2.c:2536
+#: cp/decl2.c:2509
#, gcc-internal-format
msgid "%qT has a field %qD whose type uses the anonymous namespace"
msgstr ""
-#: cp/decl2.c:2544
+#: cp/decl2.c:2517
#, gcc-internal-format
msgid "%qT declared with greater visibility than the type of its field %qD"
msgstr ""
-#: cp/decl2.c:2562
+#: cp/decl2.c:2535
#, gcc-internal-format
msgid "%qT has a base %qT whose type has no linkage"
msgstr ""
-#: cp/decl2.c:2566
+#: cp/decl2.c:2539
#, gcc-internal-format
msgid ""
"%qT has a base %qT whose type depends on the type %qT which has no linkage"
msgstr ""
-#: cp/decl2.c:2571
+#: cp/decl2.c:2544
#, gcc-internal-format
msgid "%qT has a base %qT whose type uses the anonymous namespace"
msgstr ""
-#: cp/decl2.c:2578
+#: cp/decl2.c:2551
#, gcc-internal-format
msgid "%qT declared with greater visibility than its base %qT"
msgstr ""
-#: cp/decl2.c:4187
+#: cp/decl2.c:4149
#, gcc-internal-format
msgid "%q#D, declared using unnamed type, is used but never defined"
msgstr ""
@@ -42438,230 +43299,245 @@ msgstr ""
#. no linkage can only be used to declare extern "C"
#. entities. Since it's not always an error in the
#. ISO C++ 90 Standard, we only issue a warning.
-#: cp/decl2.c:4196
+#: cp/decl2.c:4158
#, gcc-internal-format
msgid "unnamed type with no linkage used to declare variable %q#D with linkage"
msgstr ""
-#: cp/decl2.c:4200
+#: cp/decl2.c:4162
#, gcc-internal-format
msgid "unnamed type with no linkage used to declare function %q#D with linkage"
msgstr ""
-#: cp/decl2.c:4204
+#: cp/decl2.c:4166
#, gcc-internal-format
msgid ""
"%q#D does not refer to the unqualified type, so it is not used for linkage"
msgstr ""
-#: cp/decl2.c:4212
+#: cp/decl2.c:4174
#, gcc-internal-format
msgid "%q#D, declared using local type %qT, is used but never defined"
msgstr ""
-#: cp/decl2.c:4216
+#: cp/decl2.c:4178
#, gcc-internal-format
msgid "type %qT with no linkage used to declare variable %q#D with linkage"
msgstr ""
-#: cp/decl2.c:4219
+#: cp/decl2.c:4181
#, gcc-internal-format
msgid "type %qT with no linkage used to declare function %q#D with linkage"
msgstr ""
-#: cp/decl2.c:4407 cp/decl2.c:4410
+#: cp/decl2.c:4367 cp/decl2.c:4370
#, gcc-internal-format
msgid "the program should also define %qD"
msgstr ""
-#: cp/decl2.c:4775
+#: cp/decl2.c:4714
#, gcc-internal-format
msgid "inline function %qD used but never defined"
msgstr ""
-#: cp/decl2.c:4963
+#: cp/decl2.c:4901
#, 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:5063
+#: cp/decl2.c:5002
#, gcc-internal-format
msgid "converting lambda which uses %<...%> to function pointer"
msgstr ""
-#: cp/decl2.c:5070
+#: cp/decl2.c:5005
#, gcc-internal-format
msgid "use of deleted function %qD"
msgstr ""
-#: cp/error.c:1492
+#: cp/decl2.c:5058
+#, gcc-internal-format
+msgid "use of built-in parameter pack %qD outside of a template"
+msgstr ""
+
+#: cp/error.c:1534
#, gcc-internal-format
msgid "with"
msgstr ""
-#: cp/error.c:3658
+#: cp/error.c:3656
+#, gcc-internal-format
+msgid "(no argument)"
+msgstr ""
+
+#: cp/error.c:3748
+#, gcc-internal-format
+msgid "[...]"
+msgstr ""
+
+#: cp/error.c:4095
#, gcc-internal-format
msgid ""
"extended initializer lists only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/error.c:3663
+#: cp/error.c:4100
#, gcc-internal-format
msgid ""
"explicit conversion operators only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/error.c:3668
+#: cp/error.c:4105
#, gcc-internal-format
msgid "variadic templates only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/error.c:3673
+#: cp/error.c:4110
#, gcc-internal-format
msgid "lambda expressions only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/error.c:3678
+#: cp/error.c:4115
#, gcc-internal-format
msgid "C++11 auto only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/error.c:3682
+#: cp/error.c:4119
#, gcc-internal-format
msgid "scoped enums only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/error.c:3686
+#: cp/error.c:4123
#, gcc-internal-format
msgid ""
"defaulted and deleted functions only available with -std=c++11 or -std=gnu+"
"+11"
msgstr ""
-#: cp/error.c:3691
+#: cp/error.c:4128
#, gcc-internal-format
msgid "inline namespaces only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/error.c:3696
+#: cp/error.c:4133
#, gcc-internal-format
msgid ""
"override controls (override/final) only available with -std=c++11 or -std=gnu"
"++11"
msgstr ""
-#: cp/error.c:3701
+#: cp/error.c:4138
#, gcc-internal-format
msgid ""
"non-static data member initializers only available with -std=c++11 or -"
"std=gnu++11"
msgstr ""
-#: cp/error.c:3706
+#: cp/error.c:4143
#, gcc-internal-format
msgid "user-defined literals only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/error.c:3711
+#: cp/error.c:4148
#, gcc-internal-format
msgid "delegating constructors only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/error.c:3716
+#: cp/error.c:4153
#, gcc-internal-format
msgid "inheriting constructors only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/error.c:3721
+#: cp/error.c:4158
#, gcc-internal-format
msgid "c++11 attributes only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/error.c:3726
+#: cp/error.c:4163
#, gcc-internal-format
msgid "ref-qualifiers only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/error.c:3776
+#: cp/error.c:4213
#, gcc-internal-format
msgid "incomplete type %qT used in nested name specifier"
msgstr ""
-#: cp/error.c:3780
+#: cp/error.c:4217
#, gcc-internal-format
msgid "reference to %<%T::%D%> is ambiguous"
msgstr ""
-#: cp/error.c:3785 cp/typeck.c:2354
+#: cp/error.c:4222 cp/typeck.c:2346
#, gcc-internal-format
msgid "%qD is not a member of %qT"
msgstr ""
-#: cp/error.c:3789 cp/typeck.c:2791
+#: cp/error.c:4226 cp/typeck.c:2818
#, gcc-internal-format
msgid "%qD is not a member of %qD"
msgstr ""
-#: cp/error.c:3795
+#: cp/error.c:4232
#, gcc-internal-format
msgid "%<::%D%> has not been declared"
msgstr ""
-#: cp/except.c:355
+#: cp/except.c:350
#, gcc-internal-format
msgid "exception handling disabled, use -fexceptions to enable"
msgstr ""
-#: cp/except.c:606
+#: cp/except.c:575
#, gcc-internal-format
msgid "throwing NULL, which has integral, not pointer type"
msgstr ""
-#: cp/except.c:714
+#: cp/except.c:688
#, gcc-internal-format
msgid " in thrown expression"
msgstr ""
-#: cp/except.c:853
+#: cp/except.c:828
#, gcc-internal-format
msgid "cannot declare catch parameter to be of rvalue reference type %qT"
msgstr ""
-#: cp/except.c:860
+#: cp/except.c:835
#, gcc-internal-format
msgid ""
"cannot throw expression of type %qT because it involves types of variable "
"size"
msgstr ""
-#: cp/except.c:863
+#: cp/except.c:838
#, gcc-internal-format
msgid "cannot catch type %qT because it involves types of variable size"
msgstr ""
-#: cp/except.c:959
+#: cp/except.c:934
#, gcc-internal-format
msgid "exception of type %qT will be caught"
msgstr ""
-#: cp/except.c:962
+#: cp/except.c:937
#, gcc-internal-format
msgid " by earlier handler for %qT"
msgstr ""
-#: cp/except.c:991
+#: cp/except.c:966
#, gcc-internal-format
msgid "%<...%> handler must be the last handler for its try block"
msgstr ""
-#: cp/except.c:1072
+#: cp/except.c:1047
#, gcc-internal-format
msgid "noexcept-expression evaluates to %<false%> because of a call to %qD"
msgstr ""
-#: cp/except.c:1075
+#: cp/except.c:1050
#, gcc-internal-format
msgid "but %qD does not throw; perhaps it should be declared %<noexcept%>"
msgstr ""
@@ -42741,477 +43617,472 @@ msgstr ""
msgid "friend declaration %qD may not have virt-specifiers"
msgstr ""
-#: cp/friend.c:577
+#: cp/friend.c:576
#, gcc-internal-format
msgid "member %qD declared as friend before type %qT defined"
msgstr ""
-#: cp/friend.c:626
-#, gcc-internal-format
-msgid "friend declaration %qD in local class without prior declaration"
-msgstr ""
-
-#: cp/friend.c:649
+#: cp/friend.c:631
#, gcc-internal-format
msgid "friend declaration %q#D declares a non-template function"
msgstr ""
-#: cp/friend.c:653
+#: cp/friend.c:635
#, gcc-internal-format
msgid ""
"(if this is not what you intended, make sure the function template has "
"already been declared and add <> after the function name here) "
msgstr ""
-#: cp/init.c:384
+#: cp/init.c:387
#, gcc-internal-format
msgid "value-initialization of incomplete type %qT"
msgstr ""
-#: cp/init.c:453
+#: cp/init.c:456
#, gcc-internal-format
msgid "cannot value-initialize array of unknown bound %qT"
msgstr ""
-#: cp/init.c:492
+#: cp/init.c:495
#, gcc-internal-format
msgid "value-initialization of function type %qT"
msgstr ""
-#: cp/init.c:498
+#: cp/init.c:501
#, gcc-internal-format
msgid "value-initialization of reference type %qT"
msgstr ""
-#: cp/init.c:557
+#: cp/init.c:560
#, gcc-internal-format
msgid "recursive instantiation of non-static data member initializer for %qD"
msgstr ""
-#: cp/init.c:581
+#: cp/init.c:584
#, gcc-internal-format
msgid ""
"constructor required before non-static data member for %qD has been parsed"
msgstr ""
-#: cp/init.c:625
+#: cp/init.c:628
#, gcc-internal-format
msgid "initializer for flexible array member %q#D"
msgstr ""
-#: cp/init.c:651
+#: cp/init.c:654
#, gcc-internal-format
msgid "%qD should be initialized in the member initialization list"
msgstr ""
-#: cp/init.c:672
+#: cp/init.c:675
#, gcc-internal-format
msgid "%qD is initialized with itself"
msgstr ""
-#: cp/init.c:783
+#: cp/init.c:786
#, gcc-internal-format
msgid "invalid initializer for array member %q#D"
msgstr ""
-#: cp/init.c:797 cp/init.c:821 cp/init.c:2367 cp/method.c:1345
+#: cp/init.c:800 cp/init.c:824 cp/init.c:2368 cp/method.c:1374
#, gcc-internal-format
msgid "uninitialized const member in %q#T"
msgstr ""
-#: cp/init.c:799 cp/init.c:816 cp/init.c:823 cp/init.c:2352 cp/init.c:2380
-#: cp/method.c:1348 cp/method.c:1359
+#: cp/init.c:802 cp/init.c:819 cp/init.c:826 cp/init.c:2353 cp/init.c:2381
+#: cp/method.c:1377 cp/method.c:1388
#, gcc-internal-format
msgid "%q#D should be initialized"
msgstr ""
-#: cp/init.c:814 cp/init.c:2339 cp/method.c:1356
+#: cp/init.c:817 cp/init.c:2340 cp/method.c:1385
#, gcc-internal-format
msgid "uninitialized reference member in %q#T"
msgstr ""
-#: cp/init.c:993
+#: cp/init.c:996
#, gcc-internal-format
msgid "%qD will be initialized after"
msgstr ""
-#: cp/init.c:996
+#: cp/init.c:999
#, gcc-internal-format
msgid "base %qT will be initialized after"
msgstr ""
-#: cp/init.c:1000
+#: cp/init.c:1003
#, gcc-internal-format
msgid " %q#D"
msgstr ""
-#: cp/init.c:1002
+#: cp/init.c:1005
#, gcc-internal-format
msgid " base %qT"
msgstr ""
-#: cp/init.c:1004
+#: cp/init.c:1007
#, gcc-internal-format
msgid " when initialized here"
msgstr ""
-#: cp/init.c:1021
+#: cp/init.c:1024
#, gcc-internal-format
msgid "multiple initializations given for %qD"
msgstr ""
-#: cp/init.c:1025
+#: cp/init.c:1028
#, gcc-internal-format
msgid "multiple initializations given for base %qT"
msgstr ""
-#: cp/init.c:1110
+#: cp/init.c:1113
#, gcc-internal-format
msgid "initializations for multiple members of %qT"
msgstr ""
-#: cp/init.c:1207
+#: cp/init.c:1210
#, gcc-internal-format
msgid ""
"base class %q#T should be explicitly initialized in the copy constructor"
msgstr ""
-#: cp/init.c:1436 cp/init.c:1455
+#: cp/init.c:1439 cp/init.c:1458
#, gcc-internal-format
msgid "class %qT does not have any field named %qD"
msgstr ""
-#: cp/init.c:1442
+#: cp/init.c:1445
#, gcc-internal-format
msgid ""
"%q#D is a static data member; it can only be initialized at its definition"
msgstr ""
-#: cp/init.c:1449
+#: cp/init.c:1452
#, gcc-internal-format
msgid "%q#D is not a non-static data member of %qT"
msgstr ""
-#: cp/init.c:1488
+#: cp/init.c:1491
#, gcc-internal-format
msgid "unnamed initializer for %qT, which has no base classes"
msgstr ""
-#: cp/init.c:1496
+#: cp/init.c:1499
#, gcc-internal-format
msgid "unnamed initializer for %qT, which uses multiple inheritance"
msgstr ""
-#: cp/init.c:1543
+#: cp/init.c:1546
#, gcc-internal-format
msgid "%qD is both a direct base and an indirect virtual base"
msgstr ""
-#: cp/init.c:1551
+#: cp/init.c:1554
#, gcc-internal-format
msgid "type %qT is not a direct or virtual base of %qT"
msgstr ""
-#: cp/init.c:1554
+#: cp/init.c:1557
#, gcc-internal-format
msgid "type %qT is not a direct base of %qT"
msgstr ""
-#: cp/init.c:1652
+#: cp/init.c:1655
#, gcc-internal-format
msgid "bad array initializer"
msgstr ""
-#: cp/init.c:1668 cp/typeck2.c:1159
+#: cp/init.c:1671 cp/typeck2.c:1159
#, gcc-internal-format
msgid "array must be initialized with a brace-enclosed initializer"
msgstr ""
-#: cp/init.c:1980 cp/semantics.c:3192
+#: cp/init.c:1981 cp/semantics.c:3231
#, gcc-internal-format
msgid "%qT is not a class type"
msgstr ""
-#: cp/init.c:2036
+#: cp/init.c:2037
#, gcc-internal-format
msgid "incomplete type %qT does not have member %qD"
msgstr ""
-#: cp/init.c:2050
+#: cp/init.c:2051
#, gcc-internal-format
msgid "invalid pointer to bit-field %qD"
msgstr ""
-#: cp/init.c:2136 cp/typeck.c:1841
+#: cp/init.c:2137 cp/typeck.c:1833
#, gcc-internal-format
msgid "invalid use of non-static member function %qD"
msgstr ""
-#: cp/init.c:2143 cp/semantics.c:1763
+#: cp/init.c:2144 cp/semantics.c:1791
#, gcc-internal-format
msgid "invalid use of non-static data member %qD"
msgstr ""
-#: cp/init.c:2336
+#: cp/init.c:2337
#, gcc-internal-format
msgid ""
"uninitialized reference member in %q#T using %<new%> without new-initializer"
msgstr ""
-#: cp/init.c:2344
+#: cp/init.c:2345
#, gcc-internal-format
msgid ""
"uninitialized reference member in base %q#T of %q#T using %<new%> without "
"new-initializer"
msgstr ""
-#: cp/init.c:2348
+#: cp/init.c:2349
#, gcc-internal-format
msgid "uninitialized reference member in base %q#T of %q#T"
msgstr ""
-#: cp/init.c:2364
+#: cp/init.c:2365
#, gcc-internal-format
msgid ""
"uninitialized const member in %q#T using %<new%> without new-initializer"
msgstr ""
-#: cp/init.c:2372
+#: cp/init.c:2373
#, gcc-internal-format
msgid ""
"uninitialized const member in base %q#T of %q#T using %<new%> without new-"
"initializer"
msgstr ""
-#: cp/init.c:2376
+#: cp/init.c:2377
#, gcc-internal-format
msgid "uninitialized const member in base %q#T of %q#T"
msgstr ""
-#: cp/init.c:2657
+#: cp/init.c:2663
#, 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:2669
+#: cp/init.c:2675
#, 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:2680
+#: cp/init.c:2686
#, 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:2828
+#: cp/init.c:2834
#, gcc-internal-format
msgid "integer overflow in array size"
msgstr ""
-#: cp/init.c:2838
+#: cp/init.c:2844
#, gcc-internal-format
msgid "array size in new-expression must be constant"
msgstr ""
-#: cp/init.c:2852
+#: cp/init.c:2858
#, gcc-internal-format
msgid "variably modified type not allowed in new-expression"
msgstr ""
-#: cp/init.c:2868
+#: cp/init.c:2874
#, gcc-internal-format
msgid ""
"non-constant array new length must be specified directly, not by typedef"
msgstr ""
-#: cp/init.c:2870
+#: cp/init.c:2876
#, gcc-internal-format
msgid ""
"non-constant array new length must be specified without parentheses around "
"the type-id"
msgstr ""
-#: cp/init.c:2880
+#: cp/init.c:2886
#, gcc-internal-format
msgid "invalid type %<void%> for new"
msgstr ""
-#: cp/init.c:2923
+#: cp/init.c:2929
#, gcc-internal-format
msgid "uninitialized const in %<new%> of %q#T"
msgstr ""
-#: cp/init.c:3049
+#: cp/init.c:3055
#, gcc-internal-format
msgid "no suitable %qD found in class %qT"
msgstr ""
-#: cp/init.c:3056 cp/search.c:1183
+#: cp/init.c:3062 cp/search.c:1186
#, gcc-internal-format
msgid "request for member %qD is ambiguous"
msgstr ""
-#: cp/init.c:3129
+#: cp/init.c:3135
#, gcc-internal-format
msgid "%<new%> of type %qT with extended alignment %d"
msgstr ""
-#: cp/init.c:3132
+#: cp/init.c:3138
#, gcc-internal-format
msgid "uses %qD, which does not have an alignment parameter"
msgstr ""
-#: cp/init.c:3135
+#: cp/init.c:3141
#, gcc-internal-format
msgid "use %<-faligned-new%> to enable C++17 over-aligned new support"
msgstr ""
-#: cp/init.c:3319
+#: cp/init.c:3325
#, gcc-internal-format
msgid "parenthesized initializer in array new"
msgstr ""
-#: cp/init.c:3584
+#: cp/init.c:3590
#, gcc-internal-format
msgid "size in array new must have integral type"
msgstr ""
-#: cp/init.c:3616
+#: cp/init.c:3622
#, gcc-internal-format
msgid "new cannot be applied to a reference type"
msgstr ""
-#: cp/init.c:3625
+#: cp/init.c:3631
#, gcc-internal-format
msgid "new cannot be applied to a function type"
msgstr ""
-#: cp/init.c:3694
+#: cp/init.c:3700
#, gcc-internal-format
msgid "possible problem detected in invocation of delete [] operator:"
msgstr ""
-#: cp/init.c:3698
+#: cp/init.c:3704
#, 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:4246
+#: cp/init.c:4252
#, gcc-internal-format
msgid "initializer ends prematurely"
msgstr ""
-#: cp/init.c:4333
+#: cp/init.c:4339
#, gcc-internal-format
msgid "cannot initialize multi-dimensional array with initializer"
msgstr ""
-#: cp/init.c:4540
+#: cp/init.c:4546
#, gcc-internal-format
msgid "unknown array size in delete"
msgstr ""
-#: cp/init.c:4564
+#: cp/init.c:4570
#, gcc-internal-format
msgid "possible problem detected in invocation of delete operator:"
msgstr ""
-#: cp/init.c:4569
+#: cp/init.c:4575
#, 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:4584
+#: cp/init.c:4589
#, gcc-internal-format
msgid ""
"deleting object of abstract class type %qT which has non-virtual destructor "
"will cause undefined behavior"
msgstr ""
-#: cp/init.c:4589
+#: cp/init.c:4594
#, gcc-internal-format
msgid ""
"deleting object of polymorphic class type %qT which has non-virtual "
"destructor might cause undefined behavior"
msgstr ""
-#: cp/init.c:4897
+#: cp/init.c:4902
#, gcc-internal-format
msgid "type to vector delete is neither pointer or array type"
msgstr ""
-#: cp/lambda.c:498
+#: cp/lambda.c:489
#, gcc-internal-format
msgid "array of runtime bound cannot be captured by copy, only by reference"
msgstr ""
-#: cp/lambda.c:513
+#: cp/lambda.c:504
#, gcc-internal-format
msgid ""
"capture of variable-size type %qT that is not an N3639 array of runtime bound"
msgstr ""
-#: cp/lambda.c:517
+#: cp/lambda.c:508
#, gcc-internal-format
msgid "because the array element type %qT has variable size"
msgstr ""
-#: cp/lambda.c:541
+#: cp/lambda.c:533
#, gcc-internal-format
msgid "cannot capture %qE by reference"
msgstr ""
-#: cp/lambda.c:549
+#: cp/lambda.c:543
#, gcc-internal-format
msgid "capture by copy of incomplete type %qT"
msgstr ""
-#: cp/lambda.c:573
+#: cp/lambda.c:567
#, gcc-internal-format
msgid "already captured %qD in lambda expression"
msgstr ""
-#: cp/lambda.c:772
+#: cp/lambda.c:766
#, gcc-internal-format
msgid "%<this%> was not captured for this lambda function"
msgstr ""
-#: cp/lex.c:320
+#: cp/lex.c:350
#, gcc-internal-format, gfc-internal-format
msgid "junk at end of #pragma %s"
msgstr ""
-#: cp/lex.c:327
+#: cp/lex.c:357
#, gcc-internal-format, gfc-internal-format
msgid "invalid #pragma %s"
msgstr ""
-#: cp/lex.c:335
+#: cp/lex.c:365
#, gcc-internal-format
msgid "#pragma vtable no longer supported"
msgstr ""
-#: cp/lex.c:407
+#: cp/lex.c:437
#, gcc-internal-format
msgid "#pragma implementation for %qs appears after file is included"
msgstr ""
-#: cp/lex.c:437
+#: cp/lex.c:467
#, gcc-internal-format
msgid "%qD not defined"
msgstr ""
-#: cp/lex.c:443
+#: cp/lex.c:473
#, gcc-internal-format
msgid "%qD was not declared in this scope"
msgstr ""
@@ -43226,14 +44097,14 @@ msgstr ""
#. Note that we have the exact wording of the following message in
#. the manual (trouble.texi, node "Name lookup"), so they need to
#. be kept in synch.
-#: cp/lex.c:487
+#: cp/lex.c:513
#, gcc-internal-format
msgid ""
"there are no arguments to %qD that depend on a template parameter, so a "
"declaration of %qD must be available"
msgstr ""
-#: cp/lex.c:496
+#: cp/lex.c:522
#, gcc-internal-format
msgid ""
"(if you use %<-fpermissive%>, G++ will accept your code, but allowing the "
@@ -43255,35 +44126,35 @@ msgstr ""
msgid "mangling unknown fixed point type"
msgstr ""
-#: cp/mangle.c:3233
+#: cp/mangle.c:3231
#, gcc-internal-format
msgid ""
"use of built-in trait %qE in function signature; use library traits instead"
msgstr ""
-#: cp/mangle.c:3238
+#: cp/mangle.c:3236
#, gcc-internal-format, gfc-internal-format
msgid "mangling %C"
msgstr ""
-#: cp/mangle.c:3315
+#: cp/mangle.c:3313
#, gcc-internal-format
msgid "omitted middle operand to %<?:%> operand cannot be mangled"
msgstr ""
-#: cp/mangle.c:3402
+#: cp/mangle.c:3400
#, gcc-internal-format
msgid "string literal in function template signature"
msgstr ""
-#: cp/mangle.c:3860
+#: cp/mangle.c:3858
#, gcc-internal-format
msgid ""
"mangled name for %qD will change in C++17 because the exception "
"specification is part of a function type"
msgstr ""
-#: cp/mangle.c:3894
+#: cp/mangle.c:3892
#, gcc-internal-format
msgid ""
"a later -fabi-version= (or =0) avoids this error with a change in mangling"
@@ -43292,481 +44163,450 @@ msgstr ""
#: cp/mangle.c:3923
#, gcc-internal-format
msgid ""
-"the mangled name of %qD changed between -fabi-version=%d (%D) and -fabi-"
-"version=%d (%D)"
+"the mangled name of %qD changed between %<%s=%d%> (%qD) and %<%s=%d%> (%qD)"
msgstr ""
#: cp/mangle.c:3929
#, gcc-internal-format
msgid ""
-"the mangled name of %qD changes between -fabi-version=%d (%D) and -fabi-"
-"version=%d (%D)"
+"the mangled name of %qD changes between %<%s=%d%> (%qD) and %<%s=%d%> (%qD)"
msgstr ""
-#: cp/mangle.c:4271
+#: cp/mangle.c:4201
#, gcc-internal-format
msgid ""
"the mangled name of a thunk for %qD changes between -fabi-version=%d and -"
"fabi-version=%d"
msgstr ""
-#: cp/mangle.c:4276
+#: cp/mangle.c:4206
#, gcc-internal-format
msgid ""
"the mangled name of %qD changes between -fabi-version=%d and -fabi-version=%d"
msgstr ""
-#: cp/mangle.c:4281
+#: cp/mangle.c:4211
#, 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:845 cp/method.c:1301
+#: cp/method.c:844 cp/method.c:1330
#, gcc-internal-format
msgid "non-static const member %q#D, can%'t use default assignment operator"
msgstr ""
-#: cp/method.c:851 cp/method.c:1307
+#: cp/method.c:850 cp/method.c:1336
#, gcc-internal-format
msgid ""
"non-static reference member %q#D, can%'t use default assignment operator"
msgstr ""
-#: cp/method.c:969
+#: cp/method.c:968
#, gcc-internal-format
msgid "synthesized method %qD first required here "
msgstr ""
-#: cp/method.c:1256
+#: cp/method.c:1285
#, gcc-internal-format
msgid "union member %q+D with non-trivial %qD"
msgstr ""
-#: cp/method.c:1266
+#: cp/method.c:1295
#, gcc-internal-format
msgid "defaulted constructor calls non-constexpr %qD"
msgstr ""
-#: cp/method.c:1324
+#: cp/method.c:1353
#, gcc-internal-format
msgid "initializer for %q#D is invalid"
msgstr ""
-#: cp/method.c:1376
+#: cp/method.c:1405
#, gcc-internal-format
msgid "defaulted default constructor does not initialize %q#D"
msgstr ""
-#: cp/method.c:1387
+#: cp/method.c:1416
#, 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:1616
+#: cp/method.c:1645
#, gcc-internal-format
msgid ""
"defaulted default constructor does not initialize any non-static data member"
msgstr ""
-#: cp/method.c:1657
+#: cp/method.c:1686
#, gcc-internal-format
msgid ""
"defaulted move assignment for %qT calls a non-trivial move assignment "
"operator for virtual base %qT"
msgstr ""
-#: cp/method.c:1774
+#: cp/method.c:1803
#, gcc-internal-format
msgid "a lambda closure type has a deleted default constructor"
msgstr ""
-#: cp/method.c:1777
+#: cp/method.c:1806
#, gcc-internal-format
msgid "a lambda closure type has a deleted copy assignment operator"
msgstr ""
-#: cp/method.c:1788
+#: cp/method.c:1815
#, 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:1799
+#: cp/method.c:1826
#, gcc-internal-format
msgid "%q#D inherits from multiple base subobjects"
msgstr ""
-#: cp/method.c:1819
+#: cp/method.c:1846
#, gcc-internal-format
msgid ""
"%q#D is implicitly deleted because the default definition would be ill-"
"formed:"
msgstr ""
-#: cp/method.c:1828
+#: cp/method.c:1855
msgid ""
"%q#F is implicitly deleted because its exception-specification does not "
"match the implicit exception-specification %qX"
msgstr ""
-#: cp/method.c:2148
+#: cp/method.c:2171
#, gcc-internal-format
msgid "defaulted declaration %q+D"
msgstr ""
-#: cp/method.c:2150
+#: cp/method.c:2173
#, gcc-internal-format
msgid "does not match expected signature %qD"
msgstr ""
-#: cp/method.c:2182
+#: cp/method.c:2205
msgid ""
"function %q+D defaulted on its redeclaration with an exception-specification "
"that differs from the implicit exception-specification %qX"
msgstr ""
-#: cp/method.c:2204
+#: cp/method.c:2227
#, 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:2250
+#: cp/method.c:2275
#, gcc-internal-format
msgid "a template cannot be defaulted"
msgstr ""
-#: cp/method.c:2278
+#: cp/method.c:2303
#, gcc-internal-format
msgid "%qD cannot be defaulted"
msgstr ""
-#: cp/method.c:2287
+#: cp/method.c:2312
#, gcc-internal-format
msgid "defaulted function %q+D with default argument"
msgstr ""
-#: cp/name-lookup.c:615
+#: cp/name-lookup.c:1646
#, gcc-internal-format
msgid "%q#D conflicts with a previous declaration"
msgstr ""
-#: cp/name-lookup.c:828
+#: cp/name-lookup.c:1798
#, gcc-internal-format
-msgid "redeclaration of %<wchar_t%> as %qT"
+msgid "%q#D hides constructor for %q#D"
msgstr ""
-#. A redeclaration of main, but not a duplicate of the
-#. previous one.
-#.
-#. [basic.start.main]
-#.
-#. This function shall not be overloaded.
-#: cp/name-lookup.c:858
-#, gcc-internal-format
-msgid "invalid redeclaration of %q+D"
-msgstr ""
-
-#: cp/name-lookup.c:859
-#, gcc-internal-format
-msgid "as %qD"
-msgstr ""
-
-#: cp/name-lookup.c:900 cp/name-lookup.c:916
+#: cp/name-lookup.c:1931
#, gcc-internal-format
msgid "declaration of %q#D with C language linkage"
msgstr ""
-#: cp/name-lookup.c:903 cp/name-lookup.c:918
+#: cp/name-lookup.c:1933
#, gcc-internal-format
msgid "conflicts with previous declaration %q#D"
msgstr ""
-#: cp/name-lookup.c:906
+#: cp/name-lookup.c:1936
#, gcc-internal-format
msgid "due to different exception specifications"
msgstr ""
-#: cp/name-lookup.c:1017
-#, gcc-internal-format
-msgid "type mismatch with previous external decl of %q#D"
-msgstr ""
-
-#: cp/name-lookup.c:1020
+#: cp/name-lookup.c:2014
#, gcc-internal-format
-msgid "previous external decl of %q#D"
+msgid "declaration of %q#D shadows a parameter"
msgstr ""
-#: cp/name-lookup.c:1108
+#: cp/name-lookup.c:2127
#, gcc-internal-format
-msgid "extern declaration of %q#D doesn%'t match"
+msgid "declaration of %qD shadows a member of %qT"
msgstr ""
-#: cp/name-lookup.c:1110
+#: cp/name-lookup.c:2285
#, gcc-internal-format
-msgid "global declaration %q#D"
+msgid "local external declaration %q#D"
msgstr ""
-#: cp/name-lookup.c:1164 cp/name-lookup.c:1256
+#: cp/name-lookup.c:2287
#, gcc-internal-format
-msgid "declaration of %q#D shadows a parameter"
+msgid "does not match previous declaration %q#D"
msgstr ""
-#: cp/name-lookup.c:1259
+#. In a local class, a friend function declaration must
+#. find a matching decl in the innermost non-class scope.
+#. [class.friend/11]
+#: cp/name-lookup.c:2406
#, gcc-internal-format
-msgid "declaration of %qD shadows a lambda capture"
+msgid "friend declaration %qD in local class without prior local declaration"
msgstr ""
-#: cp/name-lookup.c:1306
-#, gcc-internal-format
-msgid "declaration of %qD shadows a member of %qT"
-msgstr ""
-
-#: cp/name-lookup.c:1461
+#: cp/name-lookup.c:2576
#, gcc-internal-format
msgid "name lookup of %qD changed"
msgstr ""
-#: cp/name-lookup.c:1463
+#: cp/name-lookup.c:2578
#, gcc-internal-format
msgid " matches this %qD under ISO standard rules"
msgstr ""
-#: cp/name-lookup.c:1466
+#: cp/name-lookup.c:2581
#, gcc-internal-format
msgid " matches this %qD under old rules"
msgstr ""
-#: cp/name-lookup.c:1484 cp/name-lookup.c:1492
+#: cp/name-lookup.c:2599 cp/name-lookup.c:2607
#, gcc-internal-format
msgid "name lookup of %qD changed for ISO %<for%> scoping"
msgstr ""
-#: cp/name-lookup.c:1486
+#: cp/name-lookup.c:2601
#, gcc-internal-format
msgid " cannot use obsolete binding at %q+D because it has a destructor"
msgstr ""
-#: cp/name-lookup.c:1496
+#: cp/name-lookup.c:2611
#, gcc-internal-format
msgid " using obsolete binding at %qD"
msgstr ""
-#: cp/name-lookup.c:1502
+#: cp/name-lookup.c:2617
#, gcc-internal-format
msgid "(if you use %<-fpermissive%> G++ will accept your code)"
msgstr ""
-#: cp/name-lookup.c:1557
+#: cp/name-lookup.c:2672
#, gcc-internal-format
-msgid "%s %s(%E) %p %d\n"
+msgid "%s %<%s(%E)%> %p %d\n"
msgstr ""
-#: cp/name-lookup.c:1560
+#: cp/name-lookup.c:2675
#, gcc-internal-format
msgid "%s %s %p %d\n"
msgstr ""
-#: cp/name-lookup.c:2433
-#, gcc-internal-format
-msgid "%q#D hides constructor for %q#T"
-msgstr ""
-
-#: cp/name-lookup.c:2471
-#, gcc-internal-format
-msgid "previous non-function declaration %q+#D"
-msgstr ""
-
-#: cp/name-lookup.c:2472
-#, gcc-internal-format
-msgid "conflicts with function declaration %q#D"
-msgstr ""
-
-#: cp/name-lookup.c:2564
+#: cp/name-lookup.c:3353
#, gcc-internal-format
msgid "%qT is not a namespace or unscoped enum"
msgstr ""
#. 7.3.3/5
#. A using-declaration shall not name a template-id.
-#: cp/name-lookup.c:2574
+#: cp/name-lookup.c:3363
#, gcc-internal-format
msgid "a using-declaration cannot specify a template-id. Try %<using %D%>"
msgstr ""
-#: cp/name-lookup.c:2581
+#: cp/name-lookup.c:3370
#, gcc-internal-format
msgid "namespace %qD not allowed in using-declaration"
msgstr ""
#. It's a nested name with template parameter dependent scope.
#. This can only be using-declaration for class member.
-#: cp/name-lookup.c:2589
+#: cp/name-lookup.c:3378
#, gcc-internal-format
msgid "%qT is not a namespace"
msgstr ""
#. C++11 7.3.3/10.
-#: cp/name-lookup.c:2605 cp/name-lookup.c:2652 cp/name-lookup.c:2734
-#: cp/name-lookup.c:2749
+#: cp/name-lookup.c:3391
#, gcc-internal-format
msgid "%qD is already declared in this scope"
msgstr ""
-#: cp/name-lookup.c:2625
+#: cp/name-lookup.c:3408
#, gcc-internal-format
msgid "%qD not declared"
msgstr ""
-#: cp/name-lookup.c:3399
+#: cp/name-lookup.c:4119
#, gcc-internal-format
msgid "using-declaration for non-member at class scope"
msgstr ""
-#: cp/name-lookup.c:3406
+#: cp/name-lookup.c:4126
#, gcc-internal-format
msgid "%<%T::%D%> names destructor"
msgstr ""
-#: cp/name-lookup.c:3420
+#: cp/name-lookup.c:4140
#, gcc-internal-format
msgid "%<%T::%D%> names constructor in %qT"
msgstr ""
-#: cp/name-lookup.c:3460
+#: cp/name-lookup.c:4179
#, gcc-internal-format
msgid "cannot inherit constructors from indirect base %qT"
msgstr ""
-#: cp/name-lookup.c:3468
+#: cp/name-lookup.c:4187
#, gcc-internal-format
msgid "no members matching %<%T::%D%> in %q#T"
msgstr ""
-#: cp/name-lookup.c:3560
+#: cp/name-lookup.c:4261
#, gcc-internal-format
msgid "declaration of %qD not in a namespace surrounding %qD"
msgstr ""
-#: cp/name-lookup.c:3568
+#: cp/name-lookup.c:4300
#, gcc-internal-format
msgid "explicit qualification in declaration of %qD"
msgstr ""
-#: cp/name-lookup.c:3641
+#: cp/name-lookup.c:4352
#, gcc-internal-format
-msgid "%qD has not been declared within %D"
+msgid "%qD has not been declared within %qD"
msgstr ""
-#: cp/name-lookup.c:3642
+#: cp/name-lookup.c:4354
#, gcc-internal-format
-msgid "only here as a friend"
+msgid "only here as a %<friend%>"
msgstr ""
-#: cp/name-lookup.c:3658
+#: cp/name-lookup.c:4363
#, gcc-internal-format
msgid "%qD should have been declared inside %qD"
msgstr ""
-#: cp/name-lookup.c:3703
+#: cp/name-lookup.c:4408
#, gcc-internal-format
msgid "%qD attribute requires a single NTBS argument"
msgstr ""
-#: cp/name-lookup.c:3710
+#: cp/name-lookup.c:4415
#, gcc-internal-format
msgid ""
"%qD attribute is meaningless since members of the anonymous namespace get "
"local symbols"
msgstr ""
-#: cp/name-lookup.c:3720
+#: cp/name-lookup.c:4425
#, gcc-internal-format
-msgid "ignoring %qD attribute on non-inline namespace"
+msgid "ignoring %qD attribute on anonymous namespace"
msgstr ""
-#: cp/name-lookup.c:3726
+#: cp/name-lookup.c:4431
#, gcc-internal-format
-msgid "ignoring %qD attribute on anonymous namespace"
+msgid "ignoring %qD attribute on non-inline namespace"
msgstr ""
-#: cp/name-lookup.c:3745 cp/name-lookup.c:4166
+#: cp/name-lookup.c:4450 cp/name-lookup.c:6084
#, gcc-internal-format
msgid "%qD attribute directive ignored"
msgstr ""
-#: cp/name-lookup.c:3810
+#: cp/name-lookup.c:4723
#, gcc-internal-format
-msgid "namespace alias %qD not allowed here, assuming %qD"
+msgid "maximum limit of %d namespaces searched for %qE"
msgstr ""
-#: cp/name-lookup.c:4151
+#: cp/name-lookup.c:4738
#, gcc-internal-format
-msgid "strong using is deprecated; use inline namespaces instead"
+msgid "suggested alternative:"
+msgid_plural "suggested alternatives:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: cp/name-lookup.c:4744
+#, gcc-internal-format
+msgid " %qE"
msgstr ""
-#: cp/name-lookup.c:4154
+#: cp/name-lookup.c:4756 cp/name-lookup.c:4894
#, gcc-internal-format
-msgid "strong using only meaningful at namespace scope"
+msgid "suggested alternative: %qs"
msgstr ""
-#: cp/name-lookup.c:4158
+#: cp/name-lookup.c:4865
#, gcc-internal-format
-msgid "current namespace %qD does not enclose strongly used namespace %qD"
+msgid ""
+"%<std::%s%> is defined in header %qs; did you forget to %<#include %s%>?"
msgstr ""
-#: cp/name-lookup.c:4507
+#: cp/name-lookup.c:5705
#, gcc-internal-format
-msgid "maximum limit of %d namespaces searched for %qE"
+msgid ""
+"declaration of std::initializer_list does not match #include "
+"<initializer_list>, isn't a template"
msgstr ""
-#: cp/name-lookup.c:4523 cp/name-lookup.c:4670
+#: cp/name-lookup.c:6078
#, gcc-internal-format
-msgid "suggested alternative: %qs"
+msgid "strong using directive no longer supported"
msgstr ""
-#: cp/name-lookup.c:4531
+#: cp/name-lookup.c:6081
#, gcc-internal-format
-msgid "suggested alternative:"
-msgid_plural "suggested alternatives:"
-msgstr[0] ""
-msgstr[1] ""
+msgid "you may use an inline namespace instead"
+msgstr ""
-#: cp/name-lookup.c:4535
+#: cp/name-lookup.c:6098
#, gcc-internal-format
-msgid " %qE"
+msgid "attributes ignored on local using directive"
msgstr ""
-#: cp/name-lookup.c:4642
+#: cp/name-lookup.c:6185
#, gcc-internal-format
-msgid ""
-"%<std::%s%> is defined in header %<<%s>%>; did you forget to %<#include <%s>"
-"%>?"
+msgid "namespace alias %qD not allowed here, assuming %qD"
+msgstr ""
+
+#. We only allow depth 255.
+#: cp/name-lookup.c:6205
+#, gcc-internal-format, gfc-internal-format
+msgid "cannot nest more than %d namespaces"
msgstr ""
-#: cp/name-lookup.c:6066
+#: cp/name-lookup.c:6242
#, gcc-internal-format
-msgid "argument dependent lookup finds %q+D"
+msgid "inline namespace must be specified at initial definition"
msgstr ""
-#: cp/name-lookup.c:6319
+#: cp/name-lookup.c:6243
#, gcc-internal-format
-msgid ""
-"declaration of std::initializer_list does not match #include "
-"<initializer_list>, isn't a template"
+msgid "%qD defined here"
msgstr ""
-#: cp/name-lookup.c:6630
+#: cp/name-lookup.c:6316
#, gcc-internal-format
msgid "XXX entering pop_everything ()\n"
msgstr ""
-#: cp/name-lookup.c:6639
+#: cp/name-lookup.c:6325
#, gcc-internal-format
msgid "XXX leaving pop_everything ()\n"
msgstr ""
@@ -43786,7 +44626,7 @@ msgstr ""
msgid "LEXER_DEBUGGING_ENABLED_P is not set to true"
msgstr ""
-#: cp/parser.c:1359 cp/parser.c:36643
+#: cp/parser.c:1359 cp/parser.c:36819
#, gcc-internal-format
msgid ""
"%<#pragma omp declare simd%> not immediately followed by function "
@@ -43813,7 +44653,7 @@ msgstr ""
msgid "request for member %qE in non-class type %qT"
msgstr ""
-#: cp/parser.c:2842 cp/parser.c:17873
+#: cp/parser.c:2842 cp/parser.c:18052
#, gcc-internal-format
msgid "%<%T::%E%> has not been declared"
msgstr ""
@@ -43873,1610 +44713,1629 @@ msgstr ""
msgid "(perhaps a semicolon is missing after the definition of %qT)"
msgstr ""
-#: cp/parser.c:2991
+#: cp/parser.c:2993
#, gcc-internal-format
msgid "%qE is not a class template"
msgstr ""
-#: cp/parser.c:2993
+#: cp/parser.c:2995
#, gcc-internal-format
msgid "%qE is not a template"
msgstr ""
-#: cp/parser.c:2996
+#: cp/parser.c:2998
#, gcc-internal-format
msgid "invalid template-id"
msgstr ""
-#: cp/parser.c:3030
+#: cp/parser.c:3032
#, gcc-internal-format
msgid "ISO C++ forbids using a floating-point literal in a constant-expression"
msgstr ""
-#: cp/parser.c:3034 cp/pt.c:16744
+#: cp/parser.c:3036 cp/pt.c:16804
#, gcc-internal-format
msgid ""
"a cast to a type other than an integral or enumeration type cannot appear in "
"a constant-expression"
msgstr ""
-#: cp/parser.c:3039
+#: cp/parser.c:3041
#, gcc-internal-format
msgid "%<typeid%> operator cannot appear in a constant-expression"
msgstr ""
-#: cp/parser.c:3043
+#: cp/parser.c:3045
#, gcc-internal-format
msgid "non-constant compound literals cannot appear in a constant-expression"
msgstr ""
-#: cp/parser.c:3047
+#: cp/parser.c:3049
#, gcc-internal-format
msgid "a function call cannot appear in a constant-expression"
msgstr ""
-#: cp/parser.c:3051
+#: cp/parser.c:3053
#, gcc-internal-format
msgid "an increment cannot appear in a constant-expression"
msgstr ""
-#: cp/parser.c:3055
+#: cp/parser.c:3057
#, gcc-internal-format
msgid "an decrement cannot appear in a constant-expression"
msgstr ""
-#: cp/parser.c:3059
+#: cp/parser.c:3061
#, gcc-internal-format
msgid "an array reference cannot appear in a constant-expression"
msgstr ""
-#: cp/parser.c:3063
+#: cp/parser.c:3065
#, gcc-internal-format
msgid "the address of a label cannot appear in a constant-expression"
msgstr ""
-#: cp/parser.c:3067
+#: cp/parser.c:3069
#, gcc-internal-format
msgid "calls to overloaded operators cannot appear in a constant-expression"
msgstr ""
-#: cp/parser.c:3071
+#: cp/parser.c:3073
#, gcc-internal-format
msgid "an assignment cannot appear in a constant-expression"
msgstr ""
-#: cp/parser.c:3074
+#: cp/parser.c:3076
#, gcc-internal-format
msgid "a comma operator cannot appear in a constant-expression"
msgstr ""
-#: cp/parser.c:3078
+#: cp/parser.c:3080
#, gcc-internal-format
msgid "a call to a constructor cannot appear in a constant-expression"
msgstr ""
-#: cp/parser.c:3082
+#: cp/parser.c:3084
#, gcc-internal-format
msgid "a transaction expression cannot appear in a constant-expression"
msgstr ""
-#: cp/parser.c:3128
+#: cp/parser.c:3130
#, gcc-internal-format
msgid "%qs cannot appear in a constant-expression"
msgstr ""
-#: cp/parser.c:3164
+#: cp/parser.c:3166
#, gcc-internal-format
msgid ""
"class template argument deduction is only available with -std=c++1z or -"
"std=gnu++1z"
msgstr ""
-#: cp/parser.c:3169
+#: cp/parser.c:3171
#, gcc-internal-format
msgid "invalid use of destructor %qD as a type"
msgstr ""
#. Something like 'unsigned A a;'
-#: cp/parser.c:3172
+#: cp/parser.c:3174
#, gcc-internal-format
msgid "invalid combination of multiple type-specifiers"
msgstr ""
-#: cp/parser.c:3184
+#: cp/parser.c:3186
#, gcc-internal-format
msgid "%qE does not name a type; did you mean %qs?"
msgstr ""
-#: cp/parser.c:3188
+#: cp/parser.c:3190
#, gcc-internal-format
msgid "%qE does not name a type"
msgstr ""
-#: cp/parser.c:3197
+#: cp/parser.c:3199
#, gcc-internal-format
msgid "C++11 %<constexpr%> only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/parser.c:3200
+#: cp/parser.c:3202
#, gcc-internal-format
msgid "C++11 %<noexcept%> only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/parser.c:3205
+#: cp/parser.c:3207
#, gcc-internal-format
msgid "C++11 %<thread_local%> only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/parser.c:3208
+#: cp/parser.c:3210
#, gcc-internal-format
msgid "%<concept%> only available with -fconcepts"
msgstr ""
-#: cp/parser.c:3234
+#: cp/parser.c:3236
#, gcc-internal-format
msgid "(perhaps %<typename %T::%E%> was intended)"
msgstr ""
-#: cp/parser.c:3252
+#: cp/parser.c:3254 cp/parser.c:3258
#, gcc-internal-format
msgid "%qE in namespace %qE does not name a template type"
msgstr ""
-#: cp/parser.c:3256
+#: cp/parser.c:3262
#, gcc-internal-format
msgid "%qE in namespace %qE does not name a type"
msgstr ""
#. A<T>::A<T>()
-#: cp/parser.c:3265
+#: cp/parser.c:3271
#, gcc-internal-format
msgid "%<%T::%E%> names the constructor, not the type"
msgstr ""
-#: cp/parser.c:3268
+#: cp/parser.c:3274
#, gcc-internal-format
msgid "and %qT has no template constructors"
msgstr ""
-#: cp/parser.c:3273
+#: cp/parser.c:3282
+#, gcc-internal-format
+msgid ""
+"need %<typename%> before %<%T::%D::%E%> because %<%T::%D%> is a dependent "
+"scope"
+msgstr ""
+
+#: cp/parser.c:3290
#, gcc-internal-format
msgid "need %<typename%> before %<%T::%E%> because %qT is a dependent scope"
msgstr ""
-#: cp/parser.c:3283
+#: cp/parser.c:3301 cp/parser.c:3305
#, gcc-internal-format
msgid "%qE in %q#T does not name a template type"
msgstr ""
-#: cp/parser.c:3287
+#: cp/parser.c:3309
#, gcc-internal-format
msgid "%qE in %q#T does not name a type"
msgstr ""
-#: cp/parser.c:3890
+#: cp/parser.c:3912
#, gcc-internal-format
msgid "expected string-literal"
msgstr ""
-#: cp/parser.c:3955
+#: cp/parser.c:3977
#, gcc-internal-format
msgid ""
"inconsistent user-defined literal suffixes %qD and %qD in string literal"
msgstr ""
-#: cp/parser.c:4009
+#: cp/parser.c:4031
#, gcc-internal-format
msgid "a wide string is invalid in this context"
msgstr ""
-#: cp/parser.c:4124
+#: cp/parser.c:4146
#, gcc-internal-format
msgid "unable to find character literal operator %qD with %qT argument"
msgstr ""
-#: cp/parser.c:4225
+#: cp/parser.c:4245
#, gcc-internal-format
msgid "integer literal exceeds range of %qT type"
msgstr ""
-#: cp/parser.c:4232
+#: cp/parser.c:4252
#, gcc-internal-format
msgid "floating literal exceeds range of %qT type"
msgstr ""
-#: cp/parser.c:4236
+#: cp/parser.c:4256
#, gcc-internal-format
msgid "floating literal truncated to zero"
msgstr ""
-#: cp/parser.c:4276
+#: cp/parser.c:4296
#, gcc-internal-format
msgid "unable to find numeric literal operator %qD"
msgstr ""
-#: cp/parser.c:4278
+#: cp/parser.c:4298
#, gcc-internal-format
msgid ""
"use -std=gnu++11 or -fext-numeric-literals to enable more built-in suffixes"
msgstr ""
-#: cp/parser.c:4330
+#: cp/parser.c:4350
#, gcc-internal-format
msgid "unable to find string literal operator %qD with %qT, %qT arguments"
msgstr ""
-#: cp/parser.c:4390 cp/parser.c:12683
+#: cp/parser.c:4410 cp/parser.c:12842
#, gcc-internal-format
msgid "expected declaration"
msgstr ""
-#: cp/parser.c:4652 cp/parser.c:4667
+#: cp/parser.c:4672 cp/parser.c:4687
#, gcc-internal-format
msgid "expected binary operator"
msgstr ""
-#: cp/parser.c:4673
+#: cp/parser.c:4693
#, gcc-internal-format
msgid "expected ..."
msgstr ""
-#: cp/parser.c:4685
+#: cp/parser.c:4705
#, gcc-internal-format
msgid "binary expression in operand of fold-expression"
msgstr ""
-#: cp/parser.c:4688
+#: cp/parser.c:4708
#, gcc-internal-format
msgid "conditional expression in operand of fold-expression"
msgstr ""
-#: cp/parser.c:4696
+#: cp/parser.c:4716
#, gcc-internal-format
msgid "mismatched operator in fold-expression"
msgstr ""
-#: cp/parser.c:4800
+#: cp/parser.c:4820
#, gcc-internal-format
msgid "fixed-point types not supported in C++"
msgstr ""
-#: cp/parser.c:4881
+#: cp/parser.c:4901
#, gcc-internal-format
msgid "ISO C++ forbids braced-groups within expressions"
msgstr ""
-#: cp/parser.c:4893
+#: cp/parser.c:4913
#, gcc-internal-format
msgid ""
"statement-expressions are not allowed outside functions nor in template-"
"argument lists"
msgstr ""
-#: cp/parser.c:4932
+#: cp/parser.c:4952
#, gcc-internal-format
msgid "fold-expressions only available with -std=c++1z or -std=gnu++1z"
msgstr ""
-#: cp/parser.c:4990 cp/parser.c:5164 cp/parser.c:5342 cp/semantics.c:3530
+#: cp/parser.c:5010 cp/parser.c:5186 cp/parser.c:5364 cp/semantics.c:3569
#, gcc-internal-format
msgid "expected primary-expression"
msgstr ""
-#: cp/parser.c:5020
+#: cp/parser.c:5040
#, gcc-internal-format
msgid "%<this%> may not be used in this context"
msgstr ""
-#: cp/parser.c:5158
+#: cp/parser.c:5180
#, gcc-internal-format
msgid "a template declaration cannot appear at block scope"
msgstr ""
-#: cp/parser.c:5317
+#: cp/parser.c:5339
#, gcc-internal-format
msgid "local variable %qD may not appear in this context"
msgstr ""
-#: cp/parser.c:5494
+#: cp/parser.c:5521
#, gcc-internal-format
msgid "expected id-expression"
msgstr ""
-#: cp/parser.c:5626
+#: cp/parser.c:5653
#, gcc-internal-format
msgid "scope %qT before %<~%> is not a class-name"
msgstr ""
-#: cp/parser.c:5655 cp/parser.c:7678
+#: cp/parser.c:5682 cp/parser.c:7717
#, gcc-internal-format
msgid "%<~auto%> only available with -std=c++14 or -std=gnu++14"
msgstr ""
-#: cp/parser.c:5766
+#: cp/parser.c:5793
#, gcc-internal-format
msgid "declaration of %<~%T%> as member of %qT"
msgstr ""
-#: cp/parser.c:5781
+#: cp/parser.c:5808
#, gcc-internal-format
msgid "typedef-name %qD used as destructor declarator"
msgstr ""
-#: cp/parser.c:5817
+#: cp/parser.c:5844
#, gcc-internal-format
msgid ""
"literal operator suffixes not preceded by %<_%> are reserved for future "
"standardization"
msgstr ""
-#: cp/parser.c:5828 cp/parser.c:19903
+#: cp/parser.c:5855 cp/parser.c:20062
#, gcc-internal-format
msgid "expected unqualified-id"
msgstr ""
-#: cp/parser.c:5937
+#: cp/parser.c:5964
#, gcc-internal-format
msgid "found %<:%> in nested-name-specifier, expected %<::%>"
msgstr ""
-#: cp/parser.c:6007
+#: cp/parser.c:6032
#, gcc-internal-format
msgid "decltype evaluates to %qT, which is not a class or enumeration type"
msgstr ""
-#: cp/parser.c:6033
+#: cp/parser.c:6058
#, gcc-internal-format
msgid "function template-id %qD in nested-name-specifier"
msgstr ""
-#: cp/parser.c:6041
+#: cp/parser.c:6066
#, gcc-internal-format
msgid "variable template-id %qD in nested-name-specifier"
msgstr ""
-#: cp/parser.c:6145 cp/typeck.c:2625 cp/typeck.c:2628 cp/typeck.c:2648
+#: cp/parser.c:6170 cp/typeck.c:2617 cp/typeck.c:2620 cp/typeck.c:2637
#, gcc-internal-format
msgid "%qD is not a template"
msgstr ""
-#: cp/parser.c:6223
+#: cp/parser.c:6248
#, gcc-internal-format
msgid "expected nested-name-specifier"
msgstr ""
-#: cp/parser.c:6424 cp/parser.c:8670
+#: cp/parser.c:6449 cp/parser.c:8788
#, gcc-internal-format
msgid "types may not be defined in casts"
msgstr ""
-#: cp/parser.c:6508
+#: cp/parser.c:6533
#, gcc-internal-format
msgid "types may not be defined in a %<typeid%> expression"
msgstr ""
-#: cp/parser.c:6566
+#: cp/parser.c:6605
#, gcc-internal-format
msgid "%<_Cilk_spawn%> must be followed by an expression"
msgstr ""
-#: cp/parser.c:6650
+#: cp/parser.c:6689
#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_addressof%>"
msgstr ""
-#: cp/parser.c:6662 cp/pt.c:17317
+#: cp/parser.c:6701 cp/pt.c:17376
#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_launder%>"
msgstr ""
-#: cp/parser.c:6754
+#: cp/parser.c:6793
#, gcc-internal-format
msgid "ISO C++ forbids compound-literals"
msgstr ""
-#: cp/parser.c:6813
+#: cp/parser.c:6852
#, gcc-internal-format
msgid "two consecutive %<[%> shall only introduce an attribute"
msgstr ""
-#: cp/parser.c:7213
+#: cp/parser.c:7252
#, gcc-internal-format
msgid "braced list index is not allowed with array notation"
msgstr ""
-#: cp/parser.c:7423 cp/typeck.c:2513
+#: cp/parser.c:7462 cp/typeck.c:2505
#, gcc-internal-format
msgid "invalid use of %qD"
msgstr ""
-#: cp/parser.c:7432
+#: cp/parser.c:7471
#, gcc-internal-format
msgid "%<%D::%D%> is not a class member"
msgstr ""
-#: cp/parser.c:7730
+#: cp/parser.c:7769
#, gcc-internal-format
msgid "non-scalar type"
msgstr ""
-#: cp/parser.c:7828
+#: cp/parser.c:7867
#, gcc-internal-format
msgid "ISO C++ does not allow %<alignof%> with a non-type"
msgstr ""
-#: cp/parser.c:7925
+#: cp/parser.c:7964
#, gcc-internal-format
msgid "types may not be defined in %<noexcept%> expressions"
msgstr ""
-#: cp/parser.c:8203
+#: cp/parser.c:8242
#, gcc-internal-format
msgid "types may not be defined in a new-expression"
msgstr ""
-#: cp/parser.c:8219
+#: cp/parser.c:8258
#, gcc-internal-format
msgid "array bound forbidden after parenthesized type-id"
msgstr ""
-#: cp/parser.c:8221
+#: cp/parser.c:8260
#, gcc-internal-format
msgid "try removing the parentheses around the type-id"
msgstr ""
-#: cp/parser.c:8253
+#: cp/parser.c:8292
#, gcc-internal-format
msgid ""
"initialization of new-expression for type %<auto%> requires exactly one "
"element"
msgstr ""
-#: cp/parser.c:8301
+#: cp/parser.c:8340
#, gcc-internal-format
msgid "expected expression-list or type-id"
msgstr ""
-#: cp/parser.c:8330
+#: cp/parser.c:8369
#, gcc-internal-format
msgid "types may not be defined in a new-type-id"
msgstr ""
-#: cp/parser.c:8458
+#: cp/parser.c:8497
#, gcc-internal-format
msgid "expression in new-declarator must have integral or enumeration type"
msgstr ""
-#: cp/parser.c:8767
+#: cp/parser.c:8893
#, gcc-internal-format
-msgid "use of old-style cast to %qT"
+msgid "use of old-style cast to %q#T"
msgstr ""
-#: cp/parser.c:8914
+#: cp/parser.c:9041
#, gcc-internal-format
msgid "%<>>%> operator is treated as two right angle brackets in C++11"
msgstr ""
-#: cp/parser.c:8917
+#: cp/parser.c:9044
#, gcc-internal-format
msgid "suggest parentheses around %<>>%> expression"
msgstr ""
-#: cp/parser.c:9113
+#: cp/parser.c:9240
#, gcc-internal-format
msgid "ISO C++ does not allow ?: with omitted middle operand"
msgstr ""
-#: cp/parser.c:9828
+#: cp/parser.c:9967
#, gcc-internal-format
msgid "lambda-expression in unevaluated context"
msgstr ""
-#: cp/parser.c:9837
+#: cp/parser.c:9976
#, gcc-internal-format
msgid "lambda-expression in template-argument"
msgstr ""
-#: cp/parser.c:9990
+#: cp/parser.c:10129
#, gcc-internal-format
msgid "expected end of capture-list"
msgstr ""
-#: cp/parser.c:10004
+#: cp/parser.c:10143
#, gcc-internal-format
msgid ""
"explicit by-copy capture of %<this%> redundant with by-copy capture default"
msgstr ""
-#: cp/parser.c:10021
+#: cp/parser.c:10160
#, gcc-internal-format
msgid "%<*this%> capture only available with -std=c++1z or -std=gnu++1z"
msgstr ""
-#: cp/parser.c:10066
+#: cp/parser.c:10205
#, gcc-internal-format
msgid ""
"lambda capture initializers only available with -std=c++14 or -std=gnu++14"
msgstr ""
-#: cp/parser.c:10073
+#: cp/parser.c:10212
#, gcc-internal-format
msgid "empty initializer for lambda init-capture"
msgstr ""
-#: cp/parser.c:10096
+#: cp/parser.c:10235
#, gcc-internal-format
msgid "capture of non-variable %qD "
msgstr ""
-#: cp/parser.c:10099 cp/parser.c:10109 cp/semantics.c:3371 cp/semantics.c:3383
+#: cp/parser.c:10238 cp/parser.c:10248 cp/semantics.c:3410 cp/semantics.c:3422
#, gcc-internal-format
msgid "%q#D declared here"
msgstr ""
-#: cp/parser.c:10105
+#: cp/parser.c:10244
#, gcc-internal-format
msgid "capture of variable %qD with non-automatic storage duration"
msgstr ""
-#: cp/parser.c:10143
+#: cp/parser.c:10282
#, gcc-internal-format
msgid "explicit by-copy capture of %qD redundant with by-copy capture default"
msgstr ""
-#: cp/parser.c:10148
+#: cp/parser.c:10287
#, gcc-internal-format
msgid ""
"explicit by-reference capture of %qD redundant with by-reference capture "
"default"
msgstr ""
-#: cp/parser.c:10197
+#: cp/parser.c:10336
#, gcc-internal-format
msgid "lambda templates are only available with -std=c++14 or -std=gnu++14"
msgstr ""
-#: cp/parser.c:10201
+#: cp/parser.c:10340
#, gcc-internal-format
msgid "ISO C++ does not support lambda templates"
msgstr ""
-#: cp/parser.c:10231
+#: cp/parser.c:10370
#, gcc-internal-format
msgid "default argument specified for lambda parameter"
msgstr ""
-#: cp/parser.c:10249
+#: cp/parser.c:10388
#, gcc-internal-format
msgid "duplicate %<mutable%>"
msgstr ""
-#: cp/parser.c:10297
+#: cp/parser.c:10436
#, gcc-internal-format
msgid "%<constexpr%> lambda only available with -std=c++1z or -std=gnu++1z"
msgstr ""
-#: cp/parser.c:10749 cp/parser.c:10930
+#: cp/parser.c:10893 cp/parser.c:11074
#, gcc-internal-format
msgid "attributes at the beginning of statement are ignored"
msgstr ""
-#: cp/parser.c:10777
+#: cp/parser.c:10921
#, gcc-internal-format
msgid "expected labeled-statement"
msgstr ""
-#: cp/parser.c:10823
+#: cp/parser.c:10967
#, gcc-internal-format
msgid "case label %qE not within a switch statement"
msgstr ""
-#: cp/parser.c:10937
+#: cp/parser.c:11081
#, gcc-internal-format
msgid "need %<typename%> before %qE because %qT is a dependent scope"
msgstr ""
-#: cp/parser.c:10946
+#: cp/parser.c:11090
#, gcc-internal-format
msgid "%<%T::%D%> names the constructor, not the type"
msgstr ""
-#: cp/parser.c:10993
+#: cp/parser.c:11137
#, gcc-internal-format
msgid "compound-statement in constexpr function"
msgstr ""
-#: cp/parser.c:11120
+#: cp/parser.c:11264
#, gcc-internal-format
msgid "%<if constexpr%> only available with -std=c++1z or -std=gnu++1z"
msgstr ""
-#: cp/parser.c:11146
+#: cp/parser.c:11290
#, gcc-internal-format
msgid ""
"init-statement in selection statements only available with -std=c++1z or -"
"std=gnu++1z"
msgstr ""
-#: cp/parser.c:11316 cp/parser.c:27913
+#: cp/parser.c:11460 cp/parser.c:28079
#, gcc-internal-format
msgid "expected selection-statement"
msgstr ""
-#: cp/parser.c:11349
+#: cp/parser.c:11493
#, gcc-internal-format
msgid "types may not be defined in conditions"
msgstr ""
-#: cp/parser.c:11772
+#: cp/parser.c:11916
#, gcc-internal-format
msgid "range-based %<for%> expression of type %qT has incomplete type"
msgstr ""
-#: cp/parser.c:11810
+#: cp/parser.c:11954
#, gcc-internal-format
msgid ""
"range-based %<for%> expression of type %qT has an %<end%> member but not a "
"%<begin%>"
msgstr ""
-#: cp/parser.c:11816
+#: cp/parser.c:11960
#, gcc-internal-format
msgid ""
"range-based %<for%> expression of type %qT has a %<begin%> member but not an "
"%<end%>"
msgstr ""
-#: cp/parser.c:11868
+#: cp/parser.c:12012
#, gcc-internal-format
msgid ""
"inconsistent begin/end types in range-based %<for%> statement: %qT and %qT"
msgstr ""
-#: cp/parser.c:12003 cp/parser.c:27916
+#: cp/parser.c:12147 cp/parser.c:28082
#, gcc-internal-format
msgid "expected iteration-statement"
msgstr ""
-#: cp/parser.c:12051
+#: cp/parser.c:12195
#, gcc-internal-format
msgid ""
"range-based %<for%> loops only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/parser.c:12125
+#: cp/parser.c:12269
#, gcc-internal-format
msgid "break statement used with Cilk Plus for loop"
msgstr ""
-#: cp/parser.c:12185
+#: cp/parser.c:12329
#, gcc-internal-format
msgid "%<goto%> in %<constexpr%> function"
msgstr ""
#. Issue a warning about this use of a GNU extension.
-#: cp/parser.c:12193
+#: cp/parser.c:12337
#, gcc-internal-format
msgid "ISO C++ forbids computed gotos"
msgstr ""
-#: cp/parser.c:12206 cp/parser.c:27919
+#: cp/parser.c:12350 cp/parser.c:28085
#, gcc-internal-format
msgid "expected jump-statement"
msgstr ""
-#: cp/parser.c:12363 cp/parser.c:23141
+#: cp/parser.c:12522 cp/parser.c:23305
#, gcc-internal-format
msgid "extra %<;%>"
msgstr ""
-#: cp/parser.c:12606
+#: cp/parser.c:12765
#, gcc-internal-format
msgid "%<__label__%> not at the beginning of a block"
msgstr ""
-#: cp/parser.c:12820
+#: cp/parser.c:12979
#, gcc-internal-format
msgid ""
"non-variable %qD in declaration with more than one declarator with "
"placeholder type"
msgstr ""
-#: cp/parser.c:12840
+#: cp/parser.c:12999
#, gcc-internal-format
msgid "inconsistent deduction for %qT: %qT and then %qT"
msgstr ""
-#: cp/parser.c:12861
+#: cp/parser.c:13020
#, gcc-internal-format
msgid "mixing declarations and function-definitions is forbidden"
msgstr ""
-#: cp/parser.c:12885
+#: cp/parser.c:13044
#, gcc-internal-format
msgid "types may not be defined in a for-range-declaration"
msgstr ""
-#: cp/parser.c:12940
+#: cp/parser.c:13099
#, gcc-internal-format
msgid "initializer in range-based %<for%> loop"
msgstr ""
-#: cp/parser.c:12943
+#: cp/parser.c:13102
#, gcc-internal-format
msgid "multiple declarations in range-based %<for%> loop"
msgstr ""
-#: cp/parser.c:12994
+#: cp/parser.c:13153
#, gcc-internal-format
-msgid ""
-"decomposition declaration only available with -std=c++1z or -std=gnu++1z"
+msgid "structured bindings only available with -std=c++1z or -std=gnu++1z"
msgstr ""
-#: cp/parser.c:13043
+#: cp/parser.c:13202
#, gcc-internal-format
-msgid "empty decomposition declaration"
+msgid "empty structured binding declaration"
msgstr ""
-#: cp/parser.c:13216
+#: cp/parser.c:13219
+#, gcc-internal-format
+msgid "invalid initializer for structured binding declaration"
+msgstr ""
+
+#: cp/parser.c:13387
#, 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:13280
+#: cp/parser.c:13454
#, gcc-internal-format
msgid "%<auto%> changes meaning in C++11; please remove it"
msgstr ""
-#: cp/parser.c:13316
+#: cp/parser.c:13490
#, gcc-internal-format
msgid "decl-specifier invalid in condition"
msgstr ""
-#: cp/parser.c:13322
+#: cp/parser.c:13496
#, gcc-internal-format
msgid "%qD invalid in lambda"
msgstr ""
-#: cp/parser.c:13415
+#: cp/parser.c:13589
#, gcc-internal-format
msgid "class definition may not be declared a friend"
msgstr ""
-#: cp/parser.c:13485 cp/parser.c:23561
+#: cp/parser.c:13659 cp/parser.c:23725
#, gcc-internal-format
msgid "templates may not be %<virtual%>"
msgstr ""
-#: cp/parser.c:13525
+#: cp/parser.c:13699
#, gcc-internal-format
msgid "invalid linkage-specification"
msgstr ""
-#: cp/parser.c:13612
+#: cp/parser.c:13786
#, gcc-internal-format
msgid ""
"static_assert without a message only available with -std=c++1z or -std=gnu+"
"+1z"
msgstr ""
-#: cp/parser.c:13806
+#: cp/parser.c:13980
#, gcc-internal-format
msgid "types may not be defined in %<decltype%> expressions"
msgstr ""
-#: cp/parser.c:13949
+#: cp/parser.c:14123
#, gcc-internal-format
msgid "types may not be defined in a conversion-type-id"
msgstr ""
-#: cp/parser.c:13976
+#: cp/parser.c:14150
#, gcc-internal-format
msgid "invalid use of %<auto%> in conversion operator"
msgstr ""
-#: cp/parser.c:13980
+#: cp/parser.c:14154
#, gcc-internal-format
msgid ""
"use of %<auto%> in member template conversion operator can never be deduced"
msgstr ""
-#: cp/parser.c:14069
+#: cp/parser.c:14243
#, gcc-internal-format
msgid "only constructors take member initializers"
msgstr ""
-#: cp/parser.c:14091
+#: cp/parser.c:14265
#, gcc-internal-format
msgid "cannot expand initializer for member %qD"
msgstr ""
-#: cp/parser.c:14103
+#: cp/parser.c:14277
#, gcc-internal-format
msgid "mem-initializer for %qD follows constructor delegation"
msgstr ""
-#: cp/parser.c:14115
+#: cp/parser.c:14289
#, gcc-internal-format
msgid "constructor delegation follows mem-initializer for %qD"
msgstr ""
-#: cp/parser.c:14167
+#: cp/parser.c:14341
#, gcc-internal-format
msgid "anachronistic old-style base class initializer"
msgstr ""
-#: cp/parser.c:14237
+#: cp/parser.c:14411
#, gcc-internal-format
msgid ""
"keyword %<typename%> not allowed in this context (a qualified member "
"initializer is implicitly a type)"
msgstr ""
-#: cp/parser.c:14598
+#: cp/parser.c:14772
#, gcc-internal-format
msgid "unexpected keyword; remove space between quotes and suffix identifier"
msgstr ""
-#: cp/parser.c:14604
+#: cp/parser.c:14778
#, gcc-internal-format
msgid "expected suffix identifier"
msgstr ""
-#: cp/parser.c:14613
+#: cp/parser.c:14787
#, gcc-internal-format
msgid "expected empty string after %<operator%> keyword"
msgstr ""
-#: cp/parser.c:14619
+#: cp/parser.c:14793
#, gcc-internal-format
msgid "invalid encoding prefix in literal operator"
msgstr ""
-#: cp/parser.c:14642
+#: cp/parser.c:14816
#, gcc-internal-format
msgid "expected operator"
msgstr ""
#. Warn that we do not support `export'.
-#: cp/parser.c:14687
+#: cp/parser.c:14861
#, gcc-internal-format
msgid "keyword %<export%> not implemented, and will be ignored"
msgstr ""
-#: cp/parser.c:14857
+#: cp/parser.c:15031
#, gcc-internal-format
msgid "invalid constrained type parameter"
msgstr ""
-#: cp/parser.c:14865
+#: cp/parser.c:15039
#, gcc-internal-format
msgid "cv-qualified type parameter"
msgstr ""
-#: cp/parser.c:14950
+#: cp/parser.c:15124
#, gcc-internal-format
msgid "variadic constraint introduced without %<...%>"
msgstr ""
-#: cp/parser.c:15014
+#: cp/parser.c:15188
#, gcc-internal-format
msgid "invalid use of %<auto%> in default template argument"
msgstr ""
-#: cp/parser.c:15249 cp/parser.c:15335 cp/parser.c:21371
+#: cp/parser.c:15423 cp/parser.c:15509 cp/parser.c:21524
#, gcc-internal-format
msgid "template parameter pack %qD cannot have a default argument"
msgstr ""
-#: cp/parser.c:15253 cp/parser.c:15339
+#: cp/parser.c:15427 cp/parser.c:15513
#, gcc-internal-format
msgid "template parameter packs cannot have default arguments"
msgstr ""
-#: cp/parser.c:15405
+#: cp/parser.c:15579
#, gcc-internal-format
msgid "expected template-id"
msgstr ""
-#: cp/parser.c:15465
+#: cp/parser.c:15639
#, gcc-internal-format
msgid "%<<::%> cannot begin a template-argument list"
msgstr ""
-#: cp/parser.c:15469
+#: cp/parser.c:15643
#, gcc-internal-format
msgid ""
"%<<:%> is an alternate spelling for %<[%>. Insert whitespace between %<<%> "
"and %<::%>"
msgstr ""
-#: cp/parser.c:15473
+#: cp/parser.c:15647
#, 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:15580
+#: cp/parser.c:15757
#, gcc-internal-format
msgid "parse error in template argument list"
msgstr ""
#. The name does not name a template.
-#: cp/parser.c:15649 cp/parser.c:15776 cp/parser.c:15991
+#: cp/parser.c:15825 cp/parser.c:15955 cp/parser.c:16170
#, gcc-internal-format
msgid "expected template-name"
msgstr ""
#. Explain what went wrong.
-#: cp/parser.c:15695
+#: cp/parser.c:15871
#, gcc-internal-format
msgid "non-template %qD used as template"
msgstr ""
-#: cp/parser.c:15697
+#: cp/parser.c:15873
#, gcc-internal-format
msgid "use %<%T::template %D%> to indicate that it is a template"
msgstr ""
-#: cp/parser.c:15843
+#: cp/parser.c:16022
#, gcc-internal-format
msgid "expected parameter pack before %<...%>"
msgstr ""
-#: cp/parser.c:15952 cp/parser.c:15970 cp/parser.c:16137
+#: cp/parser.c:16131 cp/parser.c:16149 cp/parser.c:16316
#, gcc-internal-format
msgid "expected template-argument"
msgstr ""
-#: cp/parser.c:16112
+#: cp/parser.c:16291
#, gcc-internal-format
msgid "invalid non-type template argument"
msgstr ""
-#: cp/parser.c:16239
+#: cp/parser.c:16418
#, gcc-internal-format
msgid "explicit instantiation shall not use %<inline%> specifier"
msgstr ""
-#: cp/parser.c:16243
+#: cp/parser.c:16422
#, gcc-internal-format
msgid "explicit instantiation shall not use %<constexpr%> specifier"
msgstr ""
-#: cp/parser.c:16302
+#: cp/parser.c:16481
#, gcc-internal-format
msgid "template specialization with C linkage"
msgstr ""
-#: cp/parser.c:16522
+#: cp/parser.c:16701
#, gcc-internal-format
msgid "expected type specifier"
msgstr ""
-#: cp/parser.c:16706
+#: cp/parser.c:16885
#, 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:16712
+#: cp/parser.c:16891
#, gcc-internal-format
msgid ""
"use of %<auto%> in parameter declaration only available with -std=c++14 or -"
"std=gnu++14"
msgstr ""
-#: cp/parser.c:16717
+#: cp/parser.c:16896
#, gcc-internal-format
msgid "ISO C++ forbids use of %<auto%> in parameter declaration"
msgstr ""
-#: cp/parser.c:16862
+#: cp/parser.c:17041
#, gcc-internal-format
msgid "expected template-id for type"
msgstr ""
-#: cp/parser.c:16931
+#: cp/parser.c:17110
#, gcc-internal-format
msgid "expected type-name"
msgstr ""
-#: cp/parser.c:17284
+#: cp/parser.c:17463
#, gcc-internal-format
msgid ""
"elaborated-type-specifier for a scoped enum must not use the %qD keyword"
msgstr ""
-#: cp/parser.c:17507
+#: cp/parser.c:17686
#, gcc-internal-format
msgid "declaration %qD does not declare anything"
msgstr ""
-#: cp/parser.c:17594
+#: cp/parser.c:17773
#, gcc-internal-format
msgid "attributes ignored on uninstantiated type"
msgstr ""
-#: cp/parser.c:17598
+#: cp/parser.c:17777
#, gcc-internal-format
msgid "attributes ignored on template instantiation"
msgstr ""
-#: cp/parser.c:17603
+#: cp/parser.c:17782
#, gcc-internal-format
msgid ""
"attributes ignored on elaborated-type-specifier that is not a forward "
"declaration"
msgstr ""
-#: cp/parser.c:17737
+#: cp/parser.c:17916
#, gcc-internal-format
msgid "%qD is an enumeration template"
msgstr ""
-#: cp/parser.c:17748
+#: cp/parser.c:17927
#, gcc-internal-format
msgid "%qD does not name an enumeration in %qT"
msgstr ""
-#: cp/parser.c:17763
+#: cp/parser.c:17942
#, gcc-internal-format
msgid "unnamed scoped enum is not allowed"
msgstr ""
-#: cp/parser.c:17818
+#: cp/parser.c:17997
#, gcc-internal-format
msgid "expected %<;%> or %<{%>"
msgstr ""
-#: cp/parser.c:17867
+#: cp/parser.c:18046
#, gcc-internal-format
msgid "cannot add an enumerator list to a template instantiation"
msgstr ""
-#: cp/parser.c:17881
+#: cp/parser.c:18060
#, gcc-internal-format
msgid ""
"nested name specifier %qT for enum declaration does not name a class or "
"namespace"
msgstr ""
-#: cp/parser.c:17893 cp/parser.c:22628
+#: cp/parser.c:18072 cp/parser.c:22792
#, gcc-internal-format
msgid "declaration of %qD in namespace %qD which does not enclose %qD"
msgstr ""
-#: cp/parser.c:17898 cp/parser.c:22633
+#: cp/parser.c:18077 cp/parser.c:22797
#, gcc-internal-format
msgid "declaration of %qD in %qD which does not enclose %qD"
msgstr ""
-#: cp/parser.c:17910 cp/parser.c:22647
+#: cp/parser.c:18089 cp/parser.c:22811
#, gcc-internal-format
msgid "extra qualification not allowed"
msgstr ""
-#: cp/parser.c:17933
+#: cp/parser.c:18112
#, gcc-internal-format
msgid "multiple definition of %q#T"
msgstr ""
-#: cp/parser.c:17946
+#: cp/parser.c:18125
#, gcc-internal-format
msgid "ISO C++ forbids empty unnamed enum"
msgstr ""
-#: cp/parser.c:17966
+#: cp/parser.c:18145
#, gcc-internal-format
msgid "opaque-enum-specifier without name"
msgstr ""
-#: cp/parser.c:17969
+#: cp/parser.c:18148
#, gcc-internal-format
msgid "opaque-enum-specifier must use a simple identifier"
msgstr ""
-#: cp/parser.c:18147
+#: cp/parser.c:18326
#, gcc-internal-format
msgid "%qD is not a namespace-name"
msgstr ""
-#: cp/parser.c:18148
+#: cp/parser.c:18327
#, gcc-internal-format
msgid "expected namespace-name"
msgstr ""
-#: cp/parser.c:18226
+#: cp/parser.c:18394
#, gcc-internal-format
-msgid "a nested namespace definition cannot have attributes"
+msgid ""
+"nested namespace definitions only available with -std=c++1z or -std=gnu++1z"
msgstr ""
-#: cp/parser.c:18229
+#: cp/parser.c:18402
#, gcc-internal-format
-msgid ""
-"nested namespace definitions only available with -std=c++1z or -std=gnu++1z"
+msgid "nested namespace name required"
msgstr ""
-#: cp/parser.c:18232
+#: cp/parser.c:18407
#, gcc-internal-format
-msgid "a nested namespace definition cannot be inline"
+msgid "namespace name required"
msgstr ""
-#: cp/parser.c:18240
+#: cp/parser.c:18411
#, gcc-internal-format
-msgid "nested identifier required"
+msgid "a nested namespace definition cannot have attributes"
msgstr ""
-#: cp/parser.c:18268
+#: cp/parser.c:18414
+#, gcc-internal-format
+msgid "a nested namespace definition cannot be inline"
+msgstr ""
+
+#: cp/parser.c:18421
#, gcc-internal-format
msgid "namespace %qD entered"
msgstr ""
-#: cp/parser.c:18321
+#: cp/parser.c:18475
#, gcc-internal-format
msgid "%<namespace%> definition is not allowed here"
msgstr ""
-#: cp/parser.c:18472
+#: cp/parser.c:18626
#, gcc-internal-format
msgid ""
"pack expansion in using-declaration only available with -std=c++1z or -"
"std=gnu++1z"
msgstr ""
-#: cp/parser.c:18487
+#: cp/parser.c:18641
#, gcc-internal-format
msgid "a template-id may not appear in a using-declaration"
msgstr ""
-#: cp/parser.c:18534
+#: cp/parser.c:18688
#, gcc-internal-format
msgid ""
"comma-separated list in using-declaration only available with -std=c++1z or -"
"std=gnu++1z"
msgstr ""
-#: cp/parser.c:18544
+#: cp/parser.c:18698
#, gcc-internal-format
msgid ""
"access declarations are deprecated in favour of using-declarations; "
"suggestion: add the %<using%> keyword"
msgstr ""
-#: cp/parser.c:18609
+#: cp/parser.c:18763
#, gcc-internal-format
msgid "types may not be defined in alias template declarations"
msgstr ""
-#: cp/parser.c:18762
+#: cp/parser.c:18921
#, gcc-internal-format
msgid "%<asm%> in %<constexpr%> function"
msgstr ""
-#: cp/parser.c:19149
+#: cp/parser.c:19308
#, gcc-internal-format
msgid "a function-definition is not allowed here"
msgstr ""
-#: cp/parser.c:19160
+#: cp/parser.c:19319
#, gcc-internal-format
msgid "an asm-specification is not allowed on a function-definition"
msgstr ""
-#: cp/parser.c:19164
+#: cp/parser.c:19323
#, gcc-internal-format
msgid "attributes are not allowed on a function-definition"
msgstr ""
-#: cp/parser.c:19215
+#: cp/parser.c:19374
#, gcc-internal-format
msgid "expected constructor, destructor, or type conversion"
msgstr ""
#. Anything else is an error.
-#: cp/parser.c:19254 cp/parser.c:21562
+#: cp/parser.c:19413 cp/parser.c:21715
#, gcc-internal-format
msgid "expected initializer"
msgstr ""
-#: cp/parser.c:19335
+#: cp/parser.c:19494
#, gcc-internal-format
msgid "initializer provided for function"
msgstr ""
-#: cp/parser.c:19369
+#: cp/parser.c:19528
#, gcc-internal-format
msgid "attributes after parenthesized initializer ignored"
msgstr ""
-#: cp/parser.c:19374
+#: cp/parser.c:19533
#, gcc-internal-format
msgid "non-function %qD declared as implicit template"
msgstr ""
-#: cp/parser.c:19823
+#: cp/parser.c:19982
#, gcc-internal-format
msgid "array bound is not an integer constant"
msgstr ""
-#: cp/parser.c:19949
+#: cp/parser.c:20108
#, gcc-internal-format
msgid "cannot define member of dependent typedef %qT"
msgstr ""
-#: cp/parser.c:19953
+#: cp/parser.c:20112
#, gcc-internal-format
msgid "%<%T::%E%> is not a type"
msgstr ""
-#: cp/parser.c:19981
+#. We do not attempt to print the declarator
+#. here because we do not have enough
+#. information about its original syntactic
+#. form.
+#: cp/parser.c:20141
+#, gcc-internal-format
+msgid "invalid declarator"
+msgstr ""
+
+#: cp/parser.c:20149
#, gcc-internal-format
msgid "invalid use of constructor as a template"
msgstr ""
-#: cp/parser.c:19983
+#: cp/parser.c:20151
#, gcc-internal-format
msgid ""
"use %<%T::%D%> instead of %<%T::%D%> to name the constructor in a qualified "
"name"
msgstr ""
-#. We do not attempt to print the declarator
-#. here because we do not have enough
-#. information about its original syntactic
-#. form.
-#: cp/parser.c:20000
-#, gcc-internal-format
-msgid "invalid declarator"
-msgstr ""
-
#. But declarations with qualified-ids can't appear in a
#. function.
-#: cp/parser.c:20070
+#: cp/parser.c:20223
#, gcc-internal-format
msgid "qualified-id in declaration"
msgstr ""
-#: cp/parser.c:20095
+#: cp/parser.c:20248
#, gcc-internal-format
msgid "expected declarator"
msgstr ""
-#: cp/parser.c:20198
+#: cp/parser.c:20351
#, gcc-internal-format
msgid "%qD is a namespace"
msgstr ""
-#: cp/parser.c:20200
+#: cp/parser.c:20353
#, gcc-internal-format
msgid "cannot form pointer to member of non-class %q#T"
msgstr ""
-#: cp/parser.c:20221
+#: cp/parser.c:20374
#, gcc-internal-format
msgid "expected ptr-operator"
msgstr ""
-#: cp/parser.c:20282
+#: cp/parser.c:20435
#, gcc-internal-format
msgid "duplicate cv-qualifier"
msgstr ""
-#: cp/parser.c:20336
+#: cp/parser.c:20489
#, gcc-internal-format
msgid "multiple ref-qualifiers"
msgstr ""
-#: cp/parser.c:20373
+#: cp/parser.c:20526
#, gcc-internal-format
-msgid "%E requires %<-fgnu-tm%>"
+msgid "%qE requires %<-fgnu-tm%>"
msgstr ""
-#: cp/parser.c:20431
+#: cp/parser.c:20584
#, gcc-internal-format
msgid "duplicate virt-specifier"
msgstr ""
-#: cp/parser.c:20702
+#: cp/parser.c:20855
#, gcc-internal-format
msgid "missing template arguments after %qT"
msgstr ""
-#: cp/parser.c:20708 cp/typeck2.c:493 cp/typeck2.c:532 cp/typeck2.c:1976
+#: cp/parser.c:20861 cp/typeck2.c:493 cp/typeck2.c:533 cp/typeck2.c:1976
#, gcc-internal-format
msgid "invalid use of %qT"
msgstr ""
-#: cp/parser.c:20729
+#: cp/parser.c:20882
#, gcc-internal-format
msgid "types may not be defined in template arguments"
msgstr ""
-#: cp/parser.c:20734
+#: cp/parser.c:20887
#, gcc-internal-format
msgid "invalid use of %<auto%> in template argument"
msgstr ""
-#: cp/parser.c:20822
+#: cp/parser.c:20975
#, gcc-internal-format
msgid "expected type-specifier"
msgstr ""
-#: cp/parser.c:21128
+#: cp/parser.c:21281
#, gcc-internal-format
msgid "expected %<,%> or %<...%>"
msgstr ""
-#: cp/parser.c:21203
+#: cp/parser.c:21356
#, gcc-internal-format
msgid "types may not be defined in parameter types"
msgstr ""
-#: cp/parser.c:21355
+#: cp/parser.c:21508
#, gcc-internal-format
msgid "default arguments are only permitted for function parameters"
msgstr ""
-#: cp/parser.c:21373
+#: cp/parser.c:21526
#, gcc-internal-format
msgid "parameter pack %qD cannot have a default argument"
msgstr ""
-#: cp/parser.c:21379
+#: cp/parser.c:21532
#, gcc-internal-format
msgid "template parameter pack cannot have a default argument"
msgstr ""
-#: cp/parser.c:21381
+#: cp/parser.c:21534
#, gcc-internal-format
msgid "parameter pack cannot have a default argument"
msgstr ""
-#: cp/parser.c:21768
+#: cp/parser.c:21921
#, gcc-internal-format
msgid "ISO C++ does not allow designated initializers"
msgstr ""
-#: cp/parser.c:21782
+#: cp/parser.c:21935
#, gcc-internal-format
msgid "ISO C++ does not allow C99 designated initializers"
msgstr ""
-#: cp/parser.c:21902 cp/parser.c:22028
+#: cp/parser.c:22055 cp/parser.c:22181
#, gcc-internal-format
msgid "expected class-name"
msgstr ""
-#: cp/parser.c:22229
+#: cp/parser.c:22382
#, gcc-internal-format
msgid "expected %<;%> after class definition"
msgstr ""
-#: cp/parser.c:22232
+#: cp/parser.c:22385
#, gcc-internal-format
msgid "expected %<;%> after struct definition"
msgstr ""
-#: cp/parser.c:22235
+#: cp/parser.c:22388
#, gcc-internal-format
msgid "expected %<;%> after union definition"
msgstr ""
-#: cp/parser.c:22576
+#: cp/parser.c:22734
#, gcc-internal-format
msgid "expected %<{%> or %<:%>"
msgstr ""
-#: cp/parser.c:22587
+#: cp/parser.c:22745
#, gcc-internal-format
msgid "cannot specify %<override%> for a class"
msgstr ""
-#: cp/parser.c:22595
+#: cp/parser.c:22753
#, gcc-internal-format
msgid "global qualification of class name is invalid"
msgstr ""
-#: cp/parser.c:22602
+#: cp/parser.c:22760
#, gcc-internal-format
msgid "qualified name does not name a class"
msgstr ""
-#: cp/parser.c:22614
+#: cp/parser.c:22772
+#, gcc-internal-format
+msgid "keyword %<template%> not allowed in class-head-name"
+msgstr ""
+
+#: cp/parser.c:22778
#, gcc-internal-format
msgid "invalid class name in declaration of %qD"
msgstr ""
-#: cp/parser.c:22673
+#: cp/parser.c:22837
#, gcc-internal-format
msgid "an explicit specialization must be preceded by %<template <>%>"
msgstr ""
-#: cp/parser.c:22703
+#: cp/parser.c:22867
#, gcc-internal-format
msgid "function template %qD redeclared as a class template"
msgstr ""
-#: cp/parser.c:22739
+#: cp/parser.c:22903
#, gcc-internal-format
msgid "could not resolve typename type"
msgstr ""
-#: cp/parser.c:22798
+#: cp/parser.c:22962
#, gcc-internal-format
msgid "previous definition of %q#T"
msgstr ""
-#: cp/parser.c:22888 cp/parser.c:27922
+#: cp/parser.c:23052 cp/parser.c:28088
#, gcc-internal-format
msgid "expected class-key"
msgstr ""
-#: cp/parser.c:22912
+#: cp/parser.c:23076
#, 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:22916
+#: cp/parser.c:23080
#, gcc-internal-format
msgid "expected %<class%> or %<typename%>"
msgstr ""
-#: cp/parser.c:23162
+#: cp/parser.c:23326
#, gcc-internal-format
msgid "in C++03 a class-key must be used when declaring a friend"
msgstr ""
-#: cp/parser.c:23180
+#: cp/parser.c:23344
#, gcc-internal-format
msgid "friend declaration does not name a class or function"
msgstr ""
-#: cp/parser.c:23198
+#: cp/parser.c:23362
#, gcc-internal-format
msgid "a storage class on an anonymous aggregate in class scope is not allowed"
msgstr ""
-#: cp/parser.c:23402
+#: cp/parser.c:23566
#, gcc-internal-format
msgid "pure-specifier on function-definition"
msgstr ""
-#: cp/parser.c:23422
+#: cp/parser.c:23586
#, gcc-internal-format
msgid "extra %<;%> after in-class function definition"
msgstr ""
-#: cp/parser.c:23466
+#: cp/parser.c:23630
#, gcc-internal-format
msgid "stray %<,%> at end of member declaration"
msgstr ""
-#: cp/parser.c:23480
+#: cp/parser.c:23644
#, gcc-internal-format
msgid "expected %<;%> at end of member declaration"
msgstr ""
-#: cp/parser.c:23555
+#: cp/parser.c:23719
#, gcc-internal-format
msgid "invalid pure specifier (only %<= 0%> is allowed)"
msgstr ""
-#: cp/parser.c:23590
+#: cp/parser.c:23754
#, gcc-internal-format
msgid "a brace-enclosed initializer is not allowed here"
msgstr ""
-#: cp/parser.c:23719
+#: cp/parser.c:23883
#, gcc-internal-format
-msgid "%<virtual%> specified more than once in base-specified"
+msgid "%<virtual%> specified more than once in base-specifier"
msgstr ""
-#: cp/parser.c:23739
+#: cp/parser.c:23903
#, gcc-internal-format
-msgid "more than one access specifier in base-specified"
+msgid "more than one access specifier in base-specifier"
msgstr ""
-#: cp/parser.c:23763
+#: cp/parser.c:23927
#, gcc-internal-format
msgid "keyword %<typename%> not allowed outside of templates"
msgstr ""
-#: cp/parser.c:23766
+#: cp/parser.c:23930
#, gcc-internal-format
msgid ""
"keyword %<typename%> not allowed in this context (the base class is "
"implicitly a type)"
msgstr ""
-#: cp/parser.c:23859 cp/parser.c:23936
+#: cp/parser.c:24023 cp/parser.c:24100
#, gcc-internal-format
msgid "types may not be defined in an exception-specification"
msgstr ""
-#: cp/parser.c:23944
+#: cp/parser.c:24108
#, gcc-internal-format
msgid "ISO C++1z does not allow dynamic exception specifications"
msgstr ""
-#: cp/parser.c:23950
+#: cp/parser.c:24114
#, gcc-internal-format
msgid "dynamic exception specifications are deprecated in C++11"
msgstr ""
-#: cp/parser.c:23994
+#: cp/parser.c:24158
#, gcc-internal-format
msgid "invalid use of %<auto%> in exception-specification"
msgstr ""
-#: cp/parser.c:24033
+#: cp/parser.c:24197
#, gcc-internal-format
msgid "%<try%> in %<constexpr%> function"
msgstr ""
-#: cp/parser.c:24146
+#: cp/parser.c:24310
#, gcc-internal-format
msgid "types may not be defined in exception-declarations"
msgstr ""
-#: cp/parser.c:24750
+#: cp/parser.c:24914
#, gcc-internal-format
msgid "attribute using prefix used together with scoped attribute token"
msgstr ""
-#: cp/parser.c:24764
+#: cp/parser.c:24928
#, gcc-internal-format
msgid "expected an identifier for the attribute name"
msgstr ""
-#: cp/parser.c:24845
+#: cp/parser.c:25009
#, gcc-internal-format
msgid "attribute %<noreturn%> can appear at most once in an attribute-list"
msgstr ""
-#: cp/parser.c:24849
+#: cp/parser.c:25013
#, gcc-internal-format
msgid "attribute %<deprecated%> can appear at most once in an attribute-list"
msgstr ""
-#: cp/parser.c:24886
+#: cp/parser.c:25050
#, gcc-internal-format
msgid "expected attribute before %<...%>"
msgstr ""
-#: cp/parser.c:24947
+#: cp/parser.c:25111
#, gcc-internal-format
msgid "attribute using prefix only available with -std=c++1z or -std=gnu++1z"
msgstr ""
-#: cp/parser.c:25161
+#: cp/parser.c:25325
#, gcc-internal-format
msgid "%<requires%> only available with -fconcepts"
msgstr ""
-#: cp/parser.c:25193
+#: cp/parser.c:25357
#, gcc-internal-format
msgid "a requires expression cannot appear outside a template"
msgstr ""
-#: cp/parser.c:25895
+#: cp/parser.c:26061
#, gcc-internal-format
msgid "specializing member %<%T::%E%> requires %<template<>%> syntax"
msgstr ""
-#: cp/parser.c:25900
+#: cp/parser.c:26066
#, gcc-internal-format
msgid "invalid declaration of %<%T::%E%>"
msgstr ""
-#: cp/parser.c:25904
+#: cp/parser.c:26070
#, gcc-internal-format
msgid "too few template-parameter-lists"
msgstr ""
@@ -45485,525 +46344,525 @@ msgstr ""
#. something like:
#.
#. template <class T> template <class U> void S::f();
-#: cp/parser.c:25911
+#: cp/parser.c:26077
#, gcc-internal-format
msgid "too many template-parameter-lists"
msgstr ""
-#: cp/parser.c:26261
+#: cp/parser.c:26427
#, gcc-internal-format
msgid "named return values are no longer supported"
msgstr ""
-#: cp/parser.c:26427
+#: cp/parser.c:26593
#, 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:26432
+#: cp/parser.c:26598
#, gcc-internal-format
msgid ""
"literal operator template %qD has invalid parameter list. Expected non-type "
"template argument pack <char...>"
msgstr ""
-#: cp/parser.c:26501
+#: cp/parser.c:26667
#, gcc-internal-format
msgid "empty introduction-list"
msgstr ""
-#: cp/parser.c:26525
+#: cp/parser.c:26691
#, gcc-internal-format
msgid "no matching concept for template-introduction"
msgstr ""
-#: cp/parser.c:26547
+#: cp/parser.c:26713
#, gcc-internal-format
msgid "invalid declaration of member template in local class"
msgstr ""
-#: cp/parser.c:26556
+#: cp/parser.c:26722
#, gcc-internal-format
msgid "template with C linkage"
msgstr ""
-#: cp/parser.c:26575
+#: cp/parser.c:26741
#, gcc-internal-format
msgid "invalid explicit specialization"
msgstr ""
-#: cp/parser.c:26679
+#: cp/parser.c:26845
#, gcc-internal-format
msgid "template declaration of %<typedef%>"
msgstr ""
-#: cp/parser.c:26730
+#: cp/parser.c:26896
#, gcc-internal-format
msgid "a class template declaration must not declare anything else"
msgstr ""
-#: cp/parser.c:26776
+#: cp/parser.c:26942
#, gcc-internal-format
msgid "explicit template specialization cannot have a storage class"
msgstr ""
-#: cp/parser.c:27084
+#: cp/parser.c:27250
#, gcc-internal-format
msgid "%<>>%> should be %<> >%> within a nested template argument list"
msgstr ""
-#: cp/parser.c:27097
+#: cp/parser.c:27263
#, gcc-internal-format
msgid "spurious %<>>%>, use %<>%> to terminate a template argument list"
msgstr ""
-#: cp/parser.c:27396
+#: cp/parser.c:27562
#, gcc-internal-format
msgid "%<sizeof...%> argument must be surrounded by parentheses"
msgstr ""
-#: cp/parser.c:27552
+#: cp/parser.c:27718
#, gcc-internal-format
msgid "invalid use of %qD in linkage specification"
msgstr ""
-#: cp/parser.c:27567
+#: cp/parser.c:27733
#, gcc-internal-format
msgid "%<__thread%> before %qD"
msgstr ""
-#: cp/parser.c:27701
+#: cp/parser.c:27867
#, gcc-internal-format
msgid "ISO C++ 1998 does not support %<long long%>"
msgstr ""
-#: cp/parser.c:27709
+#: cp/parser.c:27875
#, gcc-internal-format
msgid "both %<__thread%> and %<thread_local%> specified"
msgstr ""
-#: cp/parser.c:27714
+#: cp/parser.c:27880
#, gcc-internal-format
msgid "duplicate %qD"
msgstr ""
-#: cp/parser.c:27738
+#: cp/parser.c:27904
#, gcc-internal-format
msgid "duplicate %qs"
msgstr ""
-#: cp/parser.c:27780
+#: cp/parser.c:27946
#, gcc-internal-format
msgid "expected %<new%>"
msgstr ""
-#: cp/parser.c:27783
+#: cp/parser.c:27949
#, gcc-internal-format
msgid "expected %<delete%>"
msgstr ""
-#: cp/parser.c:27786
+#: cp/parser.c:27952
#, gcc-internal-format
msgid "expected %<return%>"
msgstr ""
-#: cp/parser.c:27792
+#: cp/parser.c:27958
#, gcc-internal-format
msgid "expected %<extern%>"
msgstr ""
-#: cp/parser.c:27795
+#: cp/parser.c:27961
#, gcc-internal-format
msgid "expected %<static_assert%>"
msgstr ""
-#: cp/parser.c:27798
+#: cp/parser.c:27964
#, gcc-internal-format
msgid "expected %<decltype%>"
msgstr ""
-#: cp/parser.c:27801
+#: cp/parser.c:27967
#, gcc-internal-format
msgid "expected %<operator%>"
msgstr ""
-#: cp/parser.c:27804
+#: cp/parser.c:27970
#, gcc-internal-format
msgid "expected %<class%>"
msgstr ""
-#: cp/parser.c:27807
+#: cp/parser.c:27973
#, gcc-internal-format
msgid "expected %<template%>"
msgstr ""
-#: cp/parser.c:27810
+#: cp/parser.c:27976
#, gcc-internal-format
msgid "expected %<namespace%>"
msgstr ""
-#: cp/parser.c:27813
+#: cp/parser.c:27979
#, gcc-internal-format
msgid "expected %<using%>"
msgstr ""
-#: cp/parser.c:27816
+#: cp/parser.c:27982
#, gcc-internal-format
msgid "expected %<asm%>"
msgstr ""
-#: cp/parser.c:27819
+#: cp/parser.c:27985
#, gcc-internal-format
msgid "expected %<try%>"
msgstr ""
-#: cp/parser.c:27822
+#: cp/parser.c:27988
#, gcc-internal-format
msgid "expected %<catch%>"
msgstr ""
-#: cp/parser.c:27825
+#: cp/parser.c:27991
#, gcc-internal-format
msgid "expected %<throw%>"
msgstr ""
-#: cp/parser.c:27828
+#: cp/parser.c:27994
#, gcc-internal-format
msgid "expected %<__label__%>"
msgstr ""
-#: cp/parser.c:27831
+#: cp/parser.c:27997
#, gcc-internal-format
msgid "expected %<@try%>"
msgstr ""
-#: cp/parser.c:27834
+#: cp/parser.c:28000
#, gcc-internal-format
msgid "expected %<@synchronized%>"
msgstr ""
-#: cp/parser.c:27837
+#: cp/parser.c:28003
#, gcc-internal-format
msgid "expected %<@throw%>"
msgstr ""
-#: cp/parser.c:27840
+#: cp/parser.c:28006
#, gcc-internal-format
msgid "expected %<__transaction_atomic%>"
msgstr ""
-#: cp/parser.c:27843
+#: cp/parser.c:28009
#, gcc-internal-format
msgid "expected %<__transaction_relaxed%>"
msgstr ""
-#: cp/parser.c:27874
+#: cp/parser.c:28040
#, gcc-internal-format
msgid "expected %<::%>"
msgstr ""
-#: cp/parser.c:27886
+#: cp/parser.c:28052
#, gcc-internal-format
msgid "expected %<...%>"
msgstr ""
-#: cp/parser.c:27889
+#: cp/parser.c:28055
#, gcc-internal-format
msgid "expected %<*%>"
msgstr ""
-#: cp/parser.c:27892
+#: cp/parser.c:28058
#, gcc-internal-format
msgid "expected %<~%>"
msgstr ""
-#: cp/parser.c:27898
+#: cp/parser.c:28064
#, gcc-internal-format
msgid "expected %<:%> or %<::%>"
msgstr ""
-#: cp/parser.c:27926
+#: cp/parser.c:28092
#, gcc-internal-format
msgid "expected %<class%>, %<typename%>, or %<template%>"
msgstr ""
-#: cp/parser.c:28188
+#: cp/parser.c:28354
#, gcc-internal-format
msgid "%qs tag used in naming %q#T"
msgstr ""
-#: cp/parser.c:28193
+#: cp/parser.c:28359
#, gcc-internal-format
msgid "%q#T was previously declared here"
msgstr ""
-#: cp/parser.c:28214
+#: cp/parser.c:28380
#, gcc-internal-format
msgid "%qD redeclared with different access"
msgstr ""
-#: cp/parser.c:28235
+#: cp/parser.c:28401
#, gcc-internal-format
msgid ""
"in C++98 %<template%> (as a disambiguator) is only allowed within templates"
msgstr ""
-#: cp/parser.c:28478
+#: cp/parser.c:28644
#, gcc-internal-format
msgid "file ends in default argument"
msgstr ""
-#: cp/parser.c:28707 cp/parser.c:30016 cp/parser.c:30202
+#: cp/parser.c:28873 cp/parser.c:30182 cp/parser.c:30368
#, gcc-internal-format
msgid "misplaced %<@%D%> Objective-C++ construct"
msgstr ""
-#: cp/parser.c:28776
+#: cp/parser.c:28942
#, gcc-internal-format
msgid "objective-c++ message receiver expected"
msgstr ""
-#: cp/parser.c:28846
+#: cp/parser.c:29012
#, gcc-internal-format
msgid "objective-c++ message argument(s) are expected"
msgstr ""
-#: cp/parser.c:28876
+#: cp/parser.c:29042
#, gcc-internal-format
msgid "%<@encode%> must specify a type as an argument"
msgstr ""
-#: cp/parser.c:29282
+#: cp/parser.c:29448
#, gcc-internal-format
msgid "invalid Objective-C++ selector name"
msgstr ""
-#: cp/parser.c:29357 cp/parser.c:29375
+#: cp/parser.c:29523 cp/parser.c:29541
#, gcc-internal-format
msgid "objective-c++ method declaration is expected"
msgstr ""
-#: cp/parser.c:29369 cp/parser.c:29434
+#: cp/parser.c:29535 cp/parser.c:29600
#, gcc-internal-format
msgid "method attributes must be specified at the end"
msgstr ""
-#: cp/parser.c:29477
+#: cp/parser.c:29643
#, gcc-internal-format
msgid "stray %qs between Objective-C++ methods"
msgstr ""
-#: cp/parser.c:29683 cp/parser.c:29690 cp/parser.c:29697
+#: cp/parser.c:29849 cp/parser.c:29856 cp/parser.c:29863
#, gcc-internal-format
msgid "invalid type for instance variable"
msgstr ""
-#: cp/parser.c:29810
+#: cp/parser.c:29976
#, gcc-internal-format
msgid "identifier expected after %<@protocol%>"
msgstr ""
-#: cp/parser.c:29981
+#: cp/parser.c:30147
#, gcc-internal-format
msgid ""
"attributes may not be specified before the %<@%D%> Objective-C++ keyword"
msgstr ""
-#: cp/parser.c:29988
+#: cp/parser.c:30154
#, gcc-internal-format
msgid "prefix attributes are ignored before %<@%D%>"
msgstr ""
-#: cp/parser.c:30261 cp/parser.c:30268 cp/parser.c:30275
+#: cp/parser.c:30427 cp/parser.c:30434 cp/parser.c:30441
#, gcc-internal-format
msgid "invalid type for property"
msgstr ""
-#: cp/parser.c:31402
+#: cp/parser.c:31568
#, gcc-internal-format
msgid "%<wait%> expression must be integral"
msgstr ""
-#: cp/parser.c:32097
+#: cp/parser.c:32270
#, gcc-internal-format
msgid "invalid reduction-identifier"
msgstr ""
-#: cp/parser.c:34296
+#: cp/parser.c:34469
#, gcc-internal-format
msgid "parenthesized initialization is not allowed in OpenMP %<for%> loop"
msgstr ""
-#: cp/parser.c:34299
+#: cp/parser.c:34472
#, gcc-internal-format
msgid "parenthesized initialization is not allowed in for-loop"
msgstr ""
-#: cp/parser.c:34395
+#: cp/parser.c:34568
#, gcc-internal-format
msgid ""
"%<_Cilk_for%> allows expression instead of declaration only in C, not in C++"
msgstr ""
-#: cp/parser.c:34631 cp/pt.c:15518
+#: cp/parser.c:34804 cp/pt.c:15574
#, gcc-internal-format
msgid "iteration variable %qD should not be reduction"
msgstr ""
-#: cp/parser.c:34716
+#: cp/parser.c:34889
#, gcc-internal-format
msgid "not enough for loops to collapse"
msgstr ""
-#: cp/parser.c:36674
+#: cp/parser.c:36850
#, gcc-internal-format
msgid ""
"vector attribute not immediately followed by a single function declaration "
"or definition"
msgstr ""
-#: cp/parser.c:36970
+#: cp/parser.c:37146
#, gcc-internal-format
msgid "invalid initializer clause"
msgstr ""
-#: cp/parser.c:36998
+#: cp/parser.c:37174
#, gcc-internal-format
msgid "expected id-expression (arguments)"
msgstr ""
-#: cp/parser.c:37010
+#: cp/parser.c:37186
#, gcc-internal-format
msgid ""
"one of the initializer call arguments should be %<omp_priv%> or %<&omp_priv%>"
msgstr ""
-#: cp/parser.c:37110
+#: cp/parser.c:37286
#, gcc-internal-format
msgid "types may not be defined in declare reduction type list"
msgstr ""
-#: cp/parser.c:37132 cp/semantics.c:5387
+#: cp/parser.c:37306 cp/semantics.c:5433
#, gcc-internal-format
msgid "predeclared arithmetic type %qT in %<#pragma omp declare reduction%>"
msgstr ""
-#: cp/parser.c:37137 cp/semantics.c:5396
+#: cp/parser.c:37311 cp/semantics.c:5442
#, gcc-internal-format
msgid "function or array type %qT in %<#pragma omp declare reduction%>"
msgstr ""
-#: cp/parser.c:37140 cp/pt.c:12311 cp/semantics.c:5402
+#: cp/parser.c:37314 cp/pt.c:12378 cp/semantics.c:5448
#, gcc-internal-format
msgid "reference type %qT in %<#pragma omp declare reduction%>"
msgstr ""
-#: cp/parser.c:37143 cp/semantics.c:5408
+#: cp/parser.c:37317 cp/semantics.c:5454
#, gcc-internal-format
msgid ""
"const, volatile or __restrict qualified type %qT in %<#pragma omp declare "
"reduction%>"
msgstr ""
-#: cp/parser.c:37493
+#: cp/parser.c:37667
#, gcc-internal-format
msgid "%<#pragma acc routine%> names a set of overloads"
msgstr ""
-#: cp/parser.c:37503
+#: cp/parser.c:37677
#, gcc-internal-format
msgid "%qD does not refer to a namespace scope function"
msgstr ""
#. cancel-and-throw is unimplemented.
-#: cp/parser.c:37838
+#: cp/parser.c:38012
#, gcc-internal-format
msgid "atomic_cancel"
msgstr ""
-#: cp/parser.c:37881 cp/semantics.c:8699
+#: cp/parser.c:38055 cp/semantics.c:8744
#, gcc-internal-format
msgid "%<__transaction_relaxed%> without transactional memory support enabled"
msgstr ""
-#: cp/parser.c:37883 cp/semantics.c:8701
+#: cp/parser.c:38057 cp/semantics.c:8746
#, gcc-internal-format
msgid "%<__transaction_atomic%> without transactional memory support enabled"
msgstr ""
-#: cp/parser.c:38079
+#: cp/parser.c:38253
#, gcc-internal-format
msgid "junk at end of %<#pragma GCC pch_preprocess%>"
msgstr ""
-#: cp/parser.c:38112
+#: cp/parser.c:38286
#, gcc-internal-format
msgid "invalid grainsize for _Cilk_for"
msgstr ""
-#: cp/parser.c:38367
+#: cp/parser.c:38541
#, gcc-internal-format
msgid "%<#pragma GCC ivdep%> must be inside a function"
msgstr ""
-#: cp/parser.c:38388
+#: cp/parser.c:38562
#, gcc-internal-format
msgid "%<#pragma simd%> must be inside a function"
msgstr ""
-#: cp/parser.c:38400
+#: cp/parser.c:38574
#, gcc-internal-format
msgid "%<#pragma cilk grainsize%> must be inside a function"
msgstr ""
-#: cp/parser.c:38412
+#: cp/parser.c:38586
#, gcc-internal-format
msgid "-fcilkplus must be enabled to use %<#pragma cilk grainsize%>"
msgstr ""
-#: cp/parser.c:38469
+#: cp/parser.c:38643
#, gcc-internal-format
msgid "inter-module optimizations not implemented for C++"
msgstr ""
-#: cp/parser.c:38579
+#: cp/parser.c:38753
#, gcc-internal-format
msgid "expected variable-name"
msgstr ""
-#: cp/parser.c:38643
+#: cp/parser.c:38817
#, gcc-internal-format
msgid "expected %<,%> or %<)%> after %qE"
msgstr ""
-#: cp/parser.c:39042
+#: cp/parser.c:39206
#, gcc-internal-format
msgid "implicit templates may not be %<virtual%>"
msgstr ""
-#: cp/pt.c:294
+#: cp/pt.c:296
#, gcc-internal-format
msgid "data member %qD cannot be a member template"
msgstr ""
-#: cp/pt.c:306
+#: cp/pt.c:308
#, gcc-internal-format
msgid "invalid member template declaration %qD"
msgstr ""
-#: cp/pt.c:685
+#: cp/pt.c:687
#, gcc-internal-format
msgid "explicit specialization in non-namespace scope %qD"
msgstr ""
-#: cp/pt.c:699
+#: cp/pt.c:701
#, gcc-internal-format
msgid "enclosing class templates are not explicitly specialized"
msgstr ""
-#: cp/pt.c:783
+#: cp/pt.c:785
#, gcc-internal-format
msgid "specialization of %qD must appear at namespace scope"
msgstr ""
@@ -46062,65 +46921,60 @@ msgstr ""
msgid "template specialization of %qD not allowed by ISO C++"
msgstr ""
-#: cp/pt.c:1544
+#: cp/pt.c:1533
#, gcc-internal-format
msgid "specialization of %qD after instantiation"
msgstr ""
-#: cp/pt.c:1946
+#: cp/pt.c:1934 cp/semantics.c:5302
#, gcc-internal-format
-msgid "candidate is: %#D"
+msgid "%s %#qD"
msgstr ""
-#: cp/pt.c:1953 cp/semantics.c:5256
-#, gcc-internal-format
-msgid "%s %#D"
-msgstr ""
-
-#: cp/pt.c:2094
+#: cp/pt.c:2068
#, gcc-internal-format
msgid "%qD is not a function template"
msgstr ""
-#: cp/pt.c:2099
+#: cp/pt.c:2073
#, gcc-internal-format
msgid "%qD is not a variable template"
msgstr ""
-#: cp/pt.c:2353
+#: cp/pt.c:2327
#, gcc-internal-format
msgid "template-id %qD for %q+D does not match any template declaration"
msgstr ""
-#: cp/pt.c:2356
+#: cp/pt.c:2330
#, gcc-internal-format
msgid ""
"saw %d %<template<>%>, need %d for specializing a member function template"
msgstr ""
-#: cp/pt.c:2367
+#: cp/pt.c:2341
#, gcc-internal-format
msgid "ambiguous template specialization %qD for %q+D"
msgstr ""
-#: cp/pt.c:2577
+#: cp/pt.c:2551
#, gcc-internal-format
msgid "variable templates only available with -std=c++14 or -std=gnu++14"
msgstr ""
-#: cp/pt.c:2586
+#: cp/pt.c:2560
#, gcc-internal-format
-msgid "too many template headers for %D (should be %d)"
+msgid "too many template headers for %qD (should be %d)"
msgstr ""
-#: cp/pt.c:2591
+#: cp/pt.c:2566
#, gcc-internal-format
msgid ""
"members of an explicitly specialized class are defined without a template "
"header"
msgstr ""
-#: cp/pt.c:2615
+#: cp/pt.c:2590
#, gcc-internal-format
msgid ""
"explicit specialization of %qD outside its namespace must use a nested-name-"
@@ -46128,7 +46982,7 @@ msgid ""
msgstr ""
#. This was allowed in C++98, so only pedwarn.
-#: cp/pt.c:2620
+#: cp/pt.c:2595
#, gcc-internal-format
msgid ""
"explicit instantiation of %qD outside its namespace must use a nested-name-"
@@ -46137,57 +46991,57 @@ msgstr ""
#. This case handles bogus declarations like template <>
#. template <class T> void f<int>();
-#: cp/pt.c:2710 cp/pt.c:2769
+#: cp/pt.c:2685 cp/pt.c:2744
#, gcc-internal-format
msgid "template-id %qD in declaration of primary template"
msgstr ""
-#: cp/pt.c:2723
+#: cp/pt.c:2698
#, gcc-internal-format
msgid "template parameter list used in explicit instantiation"
msgstr ""
-#: cp/pt.c:2729
+#: cp/pt.c:2704
#, gcc-internal-format
msgid "definition provided for explicit instantiation"
msgstr ""
-#: cp/pt.c:2737
+#: cp/pt.c:2712
#, gcc-internal-format
msgid "too many template parameter lists in declaration of %qD"
msgstr ""
-#: cp/pt.c:2740
+#: cp/pt.c:2715
#, gcc-internal-format
msgid "too few template parameter lists in declaration of %qD"
msgstr ""
-#: cp/pt.c:2742
+#: cp/pt.c:2717
#, gcc-internal-format
msgid "explicit specialization of %qD must be introduced by %<template <>%>"
msgstr ""
-#: cp/pt.c:2748
+#: cp/pt.c:2723
#, gcc-internal-format
msgid "explicit specialization declared %<concept%>"
msgstr ""
-#: cp/pt.c:2779
+#: cp/pt.c:2754
#, gcc-internal-format
msgid "non-type partial specialization %qD is not allowed"
msgstr ""
-#: cp/pt.c:2782
+#: cp/pt.c:2757
#, gcc-internal-format
msgid "non-class, non-variable partial specialization %qD is not allowed"
msgstr ""
-#: cp/pt.c:2815
+#: cp/pt.c:2790
#, gcc-internal-format
msgid "default argument specified in explicit specialization"
msgstr ""
-#: cp/pt.c:2853
+#: cp/pt.c:2828
#, gcc-internal-format
msgid "%qD is not a template function"
msgstr ""
@@ -46200,155 +47054,160 @@ msgstr ""
#. program is ill-formed.
#.
#. Similar language is found in [temp.explicit].
-#: cp/pt.c:2918
+#: cp/pt.c:2890
#, gcc-internal-format
msgid "specialization of implicitly-declared special member function"
msgstr ""
-#: cp/pt.c:2962
+#: cp/pt.c:2910
#, gcc-internal-format
msgid "no member function %qD declared in %qT"
msgstr ""
-#: cp/pt.c:2993
+#: cp/pt.c:2941
#, gcc-internal-format
msgid "friend declaration %qD is not visible to explicit specialization"
msgstr ""
-#: cp/pt.c:2996
+#: cp/pt.c:2944
#, gcc-internal-format
msgid "friend declaration here"
msgstr ""
-#: cp/pt.c:3104
+#: cp/pt.c:3052
#, gcc-internal-format
msgid "explicit specialization of function concept %qD"
msgstr ""
-#: cp/pt.c:3704
+#: cp/pt.c:3451
+#, gcc-internal-format, gfc-internal-format
+msgid "argument to __integer_pack must be between 0 and %d"
+msgstr ""
+
+#: cp/pt.c:3752
#, gcc-internal-format
msgid "base initializer expansion %qT contains no parameter packs"
msgstr ""
-#: cp/pt.c:3768
+#: cp/pt.c:3816
#, gcc-internal-format
msgid "expansion pattern %qT contains no argument packs"
msgstr ""
-#: cp/pt.c:3770
+#: cp/pt.c:3818
#, gcc-internal-format
msgid "expansion pattern %qE contains no argument packs"
msgstr ""
-#: cp/pt.c:3815
+#: cp/pt.c:3863
#, gcc-internal-format
msgid "parameter packs not expanded with %<...%>:"
msgstr ""
-#: cp/pt.c:3830 cp/pt.c:4584
+#: cp/pt.c:3880 cp/pt.c:4631
#, gcc-internal-format
msgid " %qD"
msgstr ""
-#: cp/pt.c:3832
+#: cp/pt.c:3882
#, gcc-internal-format
msgid " <anonymous>"
msgstr ""
-#: cp/pt.c:3959
+#: cp/pt.c:4008
#, gcc-internal-format
msgid "declaration of template parameter %q+D shadows template parameter"
msgstr ""
-#: cp/pt.c:3962
+#: cp/pt.c:4011
#, gcc-internal-format
msgid "declaration of %q+#D shadows template parameter"
msgstr ""
-#: cp/pt.c:3964
+#: cp/pt.c:4013
#, gcc-internal-format
msgid "template parameter %qD declared here"
msgstr ""
-#: cp/pt.c:4520
+#: cp/pt.c:4567
#, gcc-internal-format
msgid "specialization of variable concept %q#D"
msgstr ""
-#: cp/pt.c:4579
+#: cp/pt.c:4626
#, gcc-internal-format
msgid "template parameters not deducible in partial specialization:"
msgstr ""
-#: cp/pt.c:4603
+#: cp/pt.c:4650
#, gcc-internal-format
msgid "partial specialization %q+D does not specialize any template arguments"
msgstr ""
-#: cp/pt.c:4606
+#: cp/pt.c:4653
#, gcc-internal-format
msgid ""
"partial specialization %q+D does not specialize any template arguments and "
"is not more constrained than"
msgstr ""
-#: cp/pt.c:4608 cp/pt.c:4619
+#: cp/pt.c:4655 cp/pt.c:4666
#, gcc-internal-format
msgid "primary template here"
msgstr ""
-#: cp/pt.c:4616
+#: cp/pt.c:4663
#, 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:4631
+#: cp/pt.c:4678
#, gcc-internal-format
msgid "partial specialization %qD is not more specialized than"
msgstr ""
-#: cp/pt.c:4633
+#: cp/pt.c:4680
#, gcc-internal-format
msgid "primary template %qD"
msgstr ""
-#: cp/pt.c:4680
+#: cp/pt.c:4727
#, gcc-internal-format
msgid ""
"parameter pack argument %qE must be at the end of the template argument list"
msgstr ""
-#: cp/pt.c:4683
+#: cp/pt.c:4730
#, gcc-internal-format
msgid ""
"parameter pack argument %qT must be at the end of the template argument list"
msgstr ""
-#: cp/pt.c:4704
+#: cp/pt.c:4751
#, gcc-internal-format
msgid "template argument %qE involves template parameter(s)"
msgstr ""
-#: cp/pt.c:4750
+#: cp/pt.c:4797
#, 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:4812
+#: cp/pt.c:4859
#, gcc-internal-format
msgid "declaration of %qD ambiguates earlier template instantiation for %qD"
msgstr ""
-#: cp/pt.c:4816
+#: cp/pt.c:4863
#, gcc-internal-format
msgid "partial specialization of %qD after instantiation of %qD"
msgstr ""
-#: cp/pt.c:4992
+#: cp/pt.c:5039
#, gcc-internal-format
msgid "no default argument for %qD"
msgstr ""
@@ -46356,53 +47215,53 @@ msgstr ""
#. A primary class template can only have one
#. parameter pack, at the end of the template
#. parameter list.
-#: cp/pt.c:5014
+#: cp/pt.c:5061
#, gcc-internal-format
msgid "parameter pack %q+D must be at the end of the template parameter list"
msgstr ""
-#: cp/pt.c:5050
+#: cp/pt.c:5097
#, gcc-internal-format
msgid ""
"default template arguments may not be used in function template friend re-"
"declaration"
msgstr ""
-#: cp/pt.c:5053
+#: cp/pt.c:5100
#, gcc-internal-format
msgid ""
"default template arguments may not be used in function template friend "
"declarations"
msgstr ""
-#: cp/pt.c:5056
+#: cp/pt.c:5103
#, 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:5059
+#: cp/pt.c:5106
#, gcc-internal-format
msgid "default template arguments may not be used in partial specializations"
msgstr ""
-#: cp/pt.c:5062 cp/pt.c:5120
+#: cp/pt.c:5109 cp/pt.c:5167
#, gcc-internal-format
msgid "default argument for template parameter for class enclosing %qD"
msgstr ""
-#: cp/pt.c:5234
+#: cp/pt.c:5281
#, gcc-internal-format
msgid "template %qD declared"
msgstr ""
-#: cp/pt.c:5241
+#: cp/pt.c:5288
#, gcc-internal-format
msgid "template class without a name"
msgstr ""
-#: cp/pt.c:5249
+#: cp/pt.c:5296
#, gcc-internal-format
msgid "member template %qD may not have virt-specifiers"
msgstr ""
@@ -46412,76 +47271,76 @@ msgstr ""
#. An allocation function can be a function
#. template. ... Template allocation functions shall
#. have two or more parameters.
-#: cp/pt.c:5271
+#: cp/pt.c:5318
#, gcc-internal-format
msgid "invalid template declaration of %qD"
msgstr ""
-#: cp/pt.c:5411
+#: cp/pt.c:5458
#, gcc-internal-format
msgid "template definition of non-template %q#D"
msgstr ""
-#: cp/pt.c:5454
+#: cp/pt.c:5501
#, gcc-internal-format
msgid "expected %d levels of template parms for %q#D, got %d"
msgstr ""
-#: cp/pt.c:5468
+#: cp/pt.c:5515
#, gcc-internal-format
msgid "got %d template parameters for %q#D"
msgstr ""
-#: cp/pt.c:5471
+#: cp/pt.c:5518
#, gcc-internal-format
msgid "got %d template parameters for %q#T"
msgstr ""
-#: cp/pt.c:5473
+#: cp/pt.c:5520
#, gcc-internal-format, gfc-internal-format
msgid " but %d required"
msgstr ""
-#: cp/pt.c:5494
+#: cp/pt.c:5541
#, gcc-internal-format
msgid "template arguments to %qD do not match original template %qD"
msgstr ""
-#: cp/pt.c:5498
+#: cp/pt.c:5545
#, gcc-internal-format
msgid "use template<> for an explicit specialization"
msgstr ""
-#: cp/pt.c:5636
+#: cp/pt.c:5683
#, gcc-internal-format
msgid "%qT is not a template type"
msgstr ""
-#: cp/pt.c:5649
+#: cp/pt.c:5696
#, gcc-internal-format
msgid "template specifiers not specified in declaration of %qD"
msgstr ""
-#: cp/pt.c:5660
+#: cp/pt.c:5707
#, 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:5664
+#: cp/pt.c:5711
#, 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:5701
+#: cp/pt.c:5748
#, gcc-internal-format
msgid "template parameter %q+#D"
msgstr ""
-#: cp/pt.c:5702
+#: cp/pt.c:5749
#, gcc-internal-format
msgid "redeclared here as %q#D"
msgstr ""
@@ -46490,434 +47349,445 @@ msgstr ""
#.
#. A template-parameter may not be given default arguments
#. by two different declarations in the same scope.
-#: cp/pt.c:5712
+#: cp/pt.c:5759
#, gcc-internal-format
msgid "redefinition of default argument for %q#D"
msgstr ""
-#: cp/pt.c:5714
+#: cp/pt.c:5761
#, gcc-internal-format
msgid "original definition appeared here"
msgstr ""
-#: cp/pt.c:5742
+#: cp/pt.c:5789
#, gcc-internal-format
msgid "redeclaration %q#D with different constraints"
msgstr ""
-#: cp/pt.c:5745
+#: cp/pt.c:5792
#, gcc-internal-format
msgid "original declaration appeared here"
msgstr ""
-#: cp/pt.c:6004 cp/pt.c:6061
+#: cp/pt.c:6051 cp/pt.c:6114
#, gcc-internal-format
msgid "%qE is not a valid template argument for type %qT"
msgstr ""
-#: cp/pt.c:6007
+#: cp/pt.c:6054
#, gcc-internal-format
msgid "it must be the address of a function with external linkage"
msgstr ""
-#: cp/pt.c:6010
+#: cp/pt.c:6057
#, gcc-internal-format
msgid "it must be the name of a function with external linkage"
msgstr ""
-#: cp/pt.c:6022
+#: cp/pt.c:6069
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because %qD has no linkage"
msgstr ""
-#: cp/pt.c:6026
+#: cp/pt.c:6073
#, 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:6063
+#: cp/pt.c:6117
#, gcc-internal-format
msgid "it must be a pointer-to-member of the form %<&X::Y%>"
msgstr ""
-#: cp/pt.c:6114
+#: cp/pt.c:6119
+#, gcc-internal-format
+msgid "because it is a member of %qT"
+msgstr ""
+
+#: cp/pt.c:6179
#, gcc-internal-format
msgid " couldn't deduce template parameter %qD"
msgstr ""
-#: cp/pt.c:6129
+#: cp/pt.c:6188
#, gcc-internal-format
msgid " types %qT and %qT have incompatible cv-qualifiers"
msgstr ""
-#: cp/pt.c:6138
+#: cp/pt.c:6197
#, gcc-internal-format
msgid " mismatched types %qT and %qT"
msgstr ""
-#: cp/pt.c:6147
+#: cp/pt.c:6206
#, gcc-internal-format
msgid " template parameter %qD is not a parameter pack, but argument %qD is"
msgstr ""
-#: cp/pt.c:6158
+#: cp/pt.c:6217
#, gcc-internal-format
msgid " template argument %qE does not match pointer-to-member constant %qE"
msgstr ""
-#: cp/pt.c:6168
+#: cp/pt.c:6227
#, gcc-internal-format
msgid " %qE is not equivalent to %qE"
msgstr ""
-#: cp/pt.c:6177
+#: cp/pt.c:6236
#, gcc-internal-format
msgid " inconsistent parameter pack deduction with %qT and %qT"
msgstr ""
-#: cp/pt.c:6189
+#: cp/pt.c:6248
#, gcc-internal-format
msgid " deduced conflicting types for parameter %qT (%qT and %qT)"
msgstr ""
-#: cp/pt.c:6193
+#: cp/pt.c:6252
#, gcc-internal-format
msgid " deduced conflicting values for non-type parameter %qE (%qE and %qE)"
msgstr ""
-#: cp/pt.c:6204
+#: cp/pt.c:6263
#, gcc-internal-format
msgid " variable-sized array type %qT is not a valid template argument"
msgstr ""
-#: cp/pt.c:6215
+#: cp/pt.c:6274
#, gcc-internal-format
msgid " member function type %qT is not a valid template argument"
msgstr ""
-#: cp/pt.c:6227
+#: cp/pt.c:6286
#, 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:6258
+#: cp/pt.c:6317
#, gcc-internal-format
msgid " cannot convert %qE (type %qT) to type %qT"
msgstr ""
-#: cp/pt.c:6271
+#: cp/pt.c:6330
#, gcc-internal-format
msgid " %qT is an ambiguous base class of %qT"
msgstr ""
-#: cp/pt.c:6275
+#: cp/pt.c:6334
#, gcc-internal-format
msgid " %qT is not derived from %qT"
msgstr ""
-#: cp/pt.c:6286
+#: cp/pt.c:6345
#, gcc-internal-format
msgid ""
" template parameters of a template template argument are inconsistent with "
"other deduced template arguments"
msgstr ""
-#: cp/pt.c:6296
+#: cp/pt.c:6355
#, gcc-internal-format
msgid " can't deduce a template for %qT from non-template type %qT"
msgstr ""
-#: cp/pt.c:6306
+#: cp/pt.c:6365
#, gcc-internal-format
msgid " template argument %qE does not match %qE"
msgstr ""
-#: cp/pt.c:6315
+#: cp/pt.c:6374
#, gcc-internal-format
msgid " could not resolve address from overloaded function %qE"
msgstr ""
-#: cp/pt.c:6354
+#: cp/pt.c:6415
#, 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:6521
+#: cp/pt.c:6563
#, gcc-internal-format
msgid "in template argument for type %qT "
msgstr ""
-#: cp/pt.c:6568
+#: cp/pt.c:6626
#, 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:6576
+#: cp/pt.c:6634
#, 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:6594
+#: cp/pt.c:6650
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument of type %qT because %qE is not a "
"variable"
msgstr ""
-#: cp/pt.c:6601
+#: cp/pt.c:6657
#, 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:6609
+#: cp/pt.c:6666
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument of type %qT because %qD has no linkage"
msgstr ""
-#: cp/pt.c:6639
+#: cp/pt.c:6681
+#, gcc-internal-format
+msgid "the address of %qD is not a valid template argument"
+msgstr ""
+
+#: cp/pt.c:6690
+#, gcc-internal-format
+msgid ""
+"the address of the %qT subobject of %qD is not a valid template argument"
+msgstr ""
+
+#: cp/pt.c:6697
+#, gcc-internal-format
+msgid ""
+"the address of %qD is not a valid template argument because it does not have "
+"static storage duration"
+msgstr ""
+
+#: cp/pt.c:6726
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because of conflicts in cv-"
"qualification"
msgstr ""
-#: cp/pt.c:6647
+#: cp/pt.c:6734
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because it is not an lvalue"
msgstr ""
-#: cp/pt.c:6665
+#: cp/pt.c:6752
#, 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:6677
+#: cp/pt.c:6768
#, 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:6688
+#: cp/pt.c:6779
#, 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:6735
+#: cp/pt.c:6829
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because it is a pointer"
msgstr ""
-#: cp/pt.c:6737
+#: cp/pt.c:6831
#, gcc-internal-format
msgid "try using %qE instead"
msgstr ""
-#: cp/pt.c:6783 cp/pt.c:6815
+#: cp/pt.c:6885
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because it is of type %qT"
msgstr ""
-#: cp/pt.c:6789
-#, gcc-internal-format
-msgid "standard conversions are not allowed in this context"
-msgstr ""
-
-#: cp/pt.c:7335
+#: cp/pt.c:7447
#, gcc-internal-format
msgid "ignoring attributes on template argument %qT"
msgstr ""
-#: cp/pt.c:7351
+#: cp/pt.c:7463
#, gcc-internal-format
msgid "ignoring attributes in template argument %qE"
msgstr ""
-#: cp/pt.c:7461
+#: cp/pt.c:7573
#, gcc-internal-format
msgid "injected-class-name %qD used as template template argument"
msgstr ""
-#: cp/pt.c:7490
+#: cp/pt.c:7602
#, gcc-internal-format
msgid "invalid use of destructor %qE as a type"
msgstr ""
-#: cp/pt.c:7495
+#: cp/pt.c:7607
#, gcc-internal-format
msgid "to refer to a type member of a template parameter, use %<typename %E%>"
msgstr ""
-#: cp/pt.c:7511 cp/pt.c:7533 cp/pt.c:7586
+#: cp/pt.c:7623 cp/pt.c:7645 cp/pt.c:7699
#, gcc-internal-format
msgid "type/value mismatch at argument %d in template parameter list for %qD"
msgstr ""
-#: cp/pt.c:7516
+#: cp/pt.c:7628
#, gcc-internal-format
msgid " expected a constant of type %qT, got %qT"
msgstr ""
-#: cp/pt.c:7521
+#: cp/pt.c:7633
#, gcc-internal-format
msgid " expected a class template, got %qE"
msgstr ""
-#: cp/pt.c:7524
+#: cp/pt.c:7636
#, gcc-internal-format
msgid " expected a type, got %qE"
msgstr ""
-#: cp/pt.c:7538
+#: cp/pt.c:7650
#, gcc-internal-format
msgid " expected a type, got %qT"
msgstr ""
-#: cp/pt.c:7541
+#: cp/pt.c:7653
#, gcc-internal-format
msgid " expected a class template, got %qT"
msgstr ""
-#: cp/pt.c:7590
+#: cp/pt.c:7703
#, gcc-internal-format
msgid " expected a template of type %qD, got %qT"
msgstr ""
-#: cp/pt.c:7604
+#: cp/pt.c:7717
#, gcc-internal-format
msgid "constraint mismatch at argument %d in template parameter list for %qD"
msgstr ""
-#: cp/pt.c:7607
+#: cp/pt.c:7720
#, 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:7652
-#, gcc-internal-format
-msgid "type mismatch in nontype parameter pack"
-msgstr ""
-
-#: cp/pt.c:7675
+#: cp/pt.c:7772
#, gcc-internal-format
msgid "could not convert template argument %qE from %qT to %qT"
msgstr ""
-#: cp/pt.c:7812 cp/pt.c:8118
+#: cp/pt.c:7909 cp/pt.c:8213
#, gcc-internal-format, gfc-internal-format
msgid "template argument %d is invalid"
msgstr ""
-#: cp/pt.c:7827 cp/pt.c:7957 cp/pt.c:8143
+#: cp/pt.c:7924 cp/pt.c:8052 cp/pt.c:8238
#, gcc-internal-format, gfc-internal-format
msgid "wrong number of template arguments (%d, should be %d)"
msgstr ""
-#: cp/pt.c:7953
+#: cp/pt.c:8048
#, gcc-internal-format, gfc-internal-format
msgid "wrong number of template arguments (%d, should be at least %d)"
msgstr ""
-#: cp/pt.c:7962
+#: cp/pt.c:8057
#, gcc-internal-format
msgid "provided for %qD"
msgstr ""
-#: cp/pt.c:7987
+#: cp/pt.c:8082
#, gcc-internal-format
msgid ""
"pack expansion argument for non-pack parameter %qD of alias template %qD"
msgstr ""
-#: cp/pt.c:7991
+#: cp/pt.c:8086
#, gcc-internal-format
msgid "pack expansion argument for non-pack parameter %qD of concept %qD"
msgstr ""
-#: cp/pt.c:8084
+#: cp/pt.c:8179
#, gcc-internal-format
msgid ""
"so any instantiation with a non-empty parameter pack would be ill-formed"
msgstr ""
-#: cp/pt.c:8146
+#: cp/pt.c:8241
#, gcc-internal-format
msgid "provided for %q+D"
msgstr ""
-#: cp/pt.c:8419
+#: cp/pt.c:8514
#, gcc-internal-format
msgid "%q#D is not a function template"
msgstr ""
-#: cp/pt.c:8586
+#: cp/pt.c:8681
#, gcc-internal-format
msgid "non-template type %qT used as a template"
msgstr ""
-#: cp/pt.c:8588
+#: cp/pt.c:8683
#, gcc-internal-format
msgid "for template declaration %q+D"
msgstr ""
-#: cp/pt.c:8711
+#: cp/pt.c:8806
#, gcc-internal-format
msgid "template constraint failure"
msgstr ""
-#: cp/pt.c:9056
+#: cp/pt.c:9151
#, gcc-internal-format
msgid "use of invalid variable template %qE"
msgstr ""
-#: cp/pt.c:9492
+#: cp/pt.c:9587
#, 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:11093
+#: cp/pt.c:11179
#, gcc-internal-format
msgid "fold of empty expansion over %O"
msgstr ""
-#: cp/pt.c:11412
+#: cp/pt.c:11506
#, gcc-internal-format
msgid "mismatched argument pack lengths while expanding %qT"
msgstr ""
-#: cp/pt.c:11415
+#: cp/pt.c:11509
#, gcc-internal-format
msgid "mismatched argument pack lengths while expanding %qE"
msgstr ""
-#: cp/pt.c:11981
+#: cp/pt.c:12064
#, gcc-internal-format
-msgid " when instantiating default argument for call to %D"
+msgid " when instantiating default argument for call to %qD"
msgstr ""
#. It may seem that this case cannot occur, since:
@@ -46933,279 +47803,284 @@ msgstr ""
#.
#. is an attempt to declare a variable with function
#. type.
-#: cp/pt.c:12841
+#: cp/pt.c:12904
#, gcc-internal-format
msgid "variable %qD has function type"
msgstr ""
-#: cp/pt.c:13013
+#: cp/pt.c:13074
#, gcc-internal-format
msgid "invalid parameter type %qT"
msgstr ""
-#: cp/pt.c:13015
+#: cp/pt.c:13076
#, gcc-internal-format
msgid "in declaration %q+D"
msgstr ""
-#: cp/pt.c:13126
+#: cp/pt.c:13187
#, gcc-internal-format
msgid "function returning an array"
msgstr ""
-#: cp/pt.c:13128
+#: cp/pt.c:13189
#, gcc-internal-format
msgid "function returning a function"
msgstr ""
-#: cp/pt.c:13168
+#: cp/pt.c:13229
#, gcc-internal-format
msgid "creating pointer to member function of non-class type %qT"
msgstr ""
-#: cp/pt.c:13781
+#: cp/pt.c:13842
#, gcc-internal-format
msgid "forming reference to void"
msgstr ""
-#: cp/pt.c:13783
+#: cp/pt.c:13844
#, gcc-internal-format
msgid "forming pointer to reference type %qT"
msgstr ""
-#: cp/pt.c:13785
+#: cp/pt.c:13846
#, gcc-internal-format
msgid "forming reference to reference type %qT"
msgstr ""
-#: cp/pt.c:13798
+#: cp/pt.c:13859
#, gcc-internal-format
msgid "forming pointer to qualified function type %qT"
msgstr ""
-#: cp/pt.c:13801
+#: cp/pt.c:13862
#, gcc-internal-format
msgid "forming reference to qualified function type %qT"
msgstr ""
-#: cp/pt.c:13849
+#: cp/pt.c:13910
#, gcc-internal-format
msgid "creating pointer to member of non-class type %qT"
msgstr ""
-#: cp/pt.c:13855
+#: cp/pt.c:13916
#, gcc-internal-format
msgid "creating pointer to member reference type %qT"
msgstr ""
-#: cp/pt.c:13861
+#: cp/pt.c:13922
#, gcc-internal-format
msgid "creating pointer to member of type void"
msgstr ""
-#: cp/pt.c:13927
+#: cp/pt.c:13988
#, gcc-internal-format
msgid "creating array of %qT"
msgstr ""
-#: cp/pt.c:13960
+#: cp/pt.c:14021
#, gcc-internal-format
msgid "%qT is not a class, struct, or union type"
msgstr ""
-#: cp/pt.c:13997
+#: cp/pt.c:14058
#, gcc-internal-format
msgid "%qT resolves to %qT, which is not an enumeration type"
msgstr ""
-#: cp/pt.c:14005
+#: cp/pt.c:14066
#, gcc-internal-format
msgid "%qT resolves to %qT, which is is not a class type"
msgstr ""
-#: cp/pt.c:14069
+#: cp/pt.c:14130
#, gcc-internal-format
msgid "empty initializer in lambda init-capture"
msgstr ""
-#: cp/pt.c:14148
+#: cp/pt.c:14205
#, gcc-internal-format
msgid "use of %qs in template"
msgstr ""
-#: cp/pt.c:14312
+#: cp/pt.c:14365
#, gcc-internal-format
msgid "qualifying type %qT does not match destructor name ~%qT"
msgstr ""
-#: cp/pt.c:14327
+#: cp/pt.c:14380
#, gcc-internal-format
msgid ""
"dependent-name %qE is parsed as a non-type, but instantiation yields a type"
msgstr ""
-#: cp/pt.c:14329
+#: cp/pt.c:14382
#, gcc-internal-format
msgid "say %<typename %E%> if a type is meant"
msgstr ""
-#: cp/pt.c:14549
+#: cp/pt.c:14602
#, gcc-internal-format
msgid "using invalid field %qD"
msgstr ""
-#: cp/pt.c:15016 cp/pt.c:16435
+#: cp/pt.c:15071 cp/pt.c:16495
#, gcc-internal-format
msgid "invalid use of pack expansion expression"
msgstr ""
-#: cp/pt.c:15020 cp/pt.c:16439
+#: cp/pt.c:15075 cp/pt.c:16499
#, gcc-internal-format
msgid "use %<...%> to expand argument pack"
msgstr ""
-#: cp/pt.c:17234
+#: cp/pt.c:17294
#, 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:17263
+#: cp/pt.c:17322
#, gcc-internal-format
msgid "declarations in dependent base %qT are not found by unqualified lookup"
msgstr ""
-#: cp/pt.c:17268
+#: cp/pt.c:17327
#, gcc-internal-format
msgid "use %<this->%D%> instead"
msgstr ""
-#: cp/pt.c:17271
+#: cp/pt.c:17330
#, gcc-internal-format
msgid "use %<%T::%D%> instead"
msgstr ""
-#: cp/pt.c:17276
+#: cp/pt.c:17335
#, gcc-internal-format
msgid "%qD declared here, later in the translation unit"
msgstr ""
-#: cp/pt.c:17609
+#: cp/pt.c:17668
#, gcc-internal-format
msgid "%qT is not a class or namespace"
msgstr ""
-#: cp/pt.c:17612
+#: cp/pt.c:17671
#, gcc-internal-format
msgid "%qD is not a class or namespace"
msgstr ""
-#: cp/pt.c:17979
+#: cp/pt.c:18043
#, gcc-internal-format
msgid "%qT is/uses unnamed type"
msgstr ""
-#: cp/pt.c:17981
+#: cp/pt.c:18045
#, gcc-internal-format
msgid "template argument for %qD uses local type %qT"
msgstr ""
-#: cp/pt.c:17991
+#: cp/pt.c:18055
#, gcc-internal-format
msgid "%qT is a variably modified type"
msgstr ""
-#: cp/pt.c:18006
+#: cp/pt.c:18070
#, gcc-internal-format
msgid "integral expression %qE is not constant"
msgstr ""
-#: cp/pt.c:18024
+#: cp/pt.c:18088
#, gcc-internal-format
msgid " trying to instantiate %qD"
msgstr ""
-#: cp/pt.c:21890
+#: cp/pt.c:21970
#, gcc-internal-format
msgid "ambiguous template instantiation for %q#T"
msgstr ""
-#: cp/pt.c:21892
+#: cp/pt.c:21972
#, gcc-internal-format
msgid "ambiguous template instantiation for %q#D"
msgstr ""
-#: cp/pt.c:21898
-msgid "%s %#S"
+#: cp/pt.c:21978
+msgid "%s %#qS"
msgstr ""
-#: cp/pt.c:21922 cp/pt.c:22009
+#: cp/pt.c:22002 cp/pt.c:22089
#, gcc-internal-format
msgid "explicit instantiation of non-template %q#D"
msgstr ""
-#: cp/pt.c:21941
+#: cp/pt.c:22021
#, gcc-internal-format
msgid "%qD is not a static data member of a class template"
msgstr ""
-#: cp/pt.c:21947 cp/pt.c:22004
+#: cp/pt.c:22027 cp/pt.c:22084
#, gcc-internal-format
msgid "no matching template for %qD found"
msgstr ""
-#: cp/pt.c:21952
+#: cp/pt.c:22032
#, gcc-internal-format
msgid ""
"type %qT for explicit instantiation %qD does not match declared type %qT"
msgstr ""
-#: cp/pt.c:21960
+#: cp/pt.c:22040
#, gcc-internal-format
msgid "explicit instantiation of %q#D"
msgstr ""
-#: cp/pt.c:21996
+#: cp/pt.c:22076
#, gcc-internal-format
msgid "duplicate explicit instantiation of %q#D"
msgstr ""
-#: cp/pt.c:22019 cp/pt.c:22116
+#: cp/pt.c:22099 cp/pt.c:22184
#, gcc-internal-format
msgid "ISO C++ 1998 forbids the use of %<extern%> on explicit instantiations"
msgstr ""
-#: cp/pt.c:22024 cp/pt.c:22133
+#: cp/pt.c:22104 cp/pt.c:22201
#, gcc-internal-format
msgid "storage class %qD applied to template instantiation"
msgstr ""
-#: cp/pt.c:22092
+#: cp/pt.c:22160
#, gcc-internal-format
msgid "explicit instantiation of non-class template %qD"
msgstr ""
-#: cp/pt.c:22094
+#: cp/pt.c:22162
#, gcc-internal-format
msgid "explicit instantiation of non-template type %qT"
msgstr ""
-#: cp/pt.c:22103
+#: cp/pt.c:22171
#, gcc-internal-format
msgid "explicit instantiation of %q#T before definition of template"
msgstr ""
-#: cp/pt.c:22121
+#: cp/pt.c:22189
#, gcc-internal-format
msgid "ISO C++ forbids the use of %qE on explicit instantiations"
msgstr ""
-#: cp/pt.c:22167
+#: cp/pt.c:22235
#, gcc-internal-format
msgid "duplicate explicit instantiation of %q#T"
msgstr ""
+#: cp/pt.c:22529
+#, gcc-internal-format
+msgid "exception specification of %qD depends on itself"
+msgstr ""
+
#. [temp.explicit]
#.
#. The definition of a non-exported function template, a
@@ -47213,12 +48088,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:22717
+#: cp/pt.c:22798
#, gcc-internal-format
msgid "explicit instantiation of %qD but no definition available"
msgstr ""
-#: cp/pt.c:22969
+#: cp/pt.c:23050
#, gcc-internal-format
msgid ""
"template instantiation depth exceeds maximum of %d instantiating %q+D, "
@@ -47226,88 +48101,93 @@ msgid ""
"the maximum)"
msgstr ""
-#: cp/pt.c:23311
+#: cp/pt.c:23393
#, gcc-internal-format
msgid "invalid template non-type parameter"
msgstr ""
-#: cp/pt.c:23313
+#: cp/pt.c:23395
#, gcc-internal-format
msgid "%q#T is not a valid type for a template non-type parameter"
msgstr ""
-#: cp/pt.c:24738
+#: cp/pt.c:24630
+#, gcc-internal-format
+msgid "keyword %<template%> not allowed in declarator-id"
+msgstr ""
+
+#: cp/pt.c:24864
#, gcc-internal-format
msgid ""
"deducing from brace-enclosed initializer list requires #include "
"<initializer_list>"
msgstr ""
-#: cp/pt.c:25195
+#: cp/pt.c:25321
#, gcc-internal-format
msgid "non-class template %qT used without template arguments"
msgstr ""
-#: cp/pt.c:25271
+#: cp/pt.c:25465
#, gcc-internal-format
msgid ""
"cannot deduce template arguments for copy-initialization of %qT, as it has "
"no non-explicit deduction guides or user-declared constructors"
msgstr ""
-#: cp/pt.c:25285
+#: cp/pt.c:25480
#, gcc-internal-format
msgid "class template argument deduction failed:"
msgstr ""
-#: cp/pt.c:25289
+#: cp/pt.c:25487
#, gcc-internal-format
msgid "explicit deduction guides not considered for copy-initialization"
msgstr ""
-#: cp/pt.c:25359
+#: cp/pt.c:25556
#, gcc-internal-format
msgid "direct-list-initialization of %<auto%> requires exactly one element"
msgstr ""
-#: cp/pt.c:25362
+#: cp/pt.c:25559
#, gcc-internal-format
msgid ""
"for deduction to %<std::initializer_list%>, use copy-list-initialization (i."
"e. add %<=%> before the %<{%>)"
msgstr ""
-#: cp/pt.c:25394
+#: cp/pt.c:25591
#, gcc-internal-format
msgid "%qT as type rather than plain %<decltype(auto)%>"
msgstr ""
-#: cp/pt.c:25429
+#: cp/pt.c:25626
#, gcc-internal-format
msgid "unable to deduce lambda return type from %qE"
msgstr ""
-#: cp/pt.c:25431
+#: cp/pt.c:25628
#, gcc-internal-format
msgid "unable to deduce %qT from %qE"
msgstr ""
-#: cp/pt.c:25464
+#: cp/pt.c:25661
#, gcc-internal-format
msgid "placeholder constraints not satisfied"
msgstr ""
-#: cp/pt.c:25468
+#: cp/pt.c:25665
#, gcc-internal-format
msgid "deduced initializer does not satisfy placeholder constraints"
msgstr ""
-#: cp/pt.c:25472
+#: cp/pt.c:25669
#, gcc-internal-format
msgid "deduced return type does not satisfy placeholder constraints"
msgstr ""
-#: cp/pt.c:25476
+#: cp/pt.c:25673
#, gcc-internal-format
msgid "deduced expression type does not satisfy placeholder constraints"
msgstr ""
@@ -47327,39 +48207,39 @@ msgstr ""
msgid "can%'t create repository information file %qs"
msgstr ""
-#: cp/rtti.c:288
+#: cp/rtti.c:314
#, gcc-internal-format
-msgid "cannot use typeid with -fno-rtti"
+msgid "cannot use %<typeid%> with -fno-rtti"
msgstr ""
-#: cp/rtti.c:294
+#: cp/rtti.c:323
#, gcc-internal-format
-msgid "must #include <typeinfo> before using typeid"
+msgid "must %<#include <typeinfo>%> before using %<typeid%>"
msgstr ""
-#: cp/rtti.c:396
+#: cp/rtti.c:426
#, gcc-internal-format
msgid ""
"cannot create type information for type %qT because it involves types of "
"variable size"
msgstr ""
-#: cp/rtti.c:486
+#: cp/rtti.c:516
#, gcc-internal-format
msgid "typeid of qualified function type %qT"
msgstr ""
-#: cp/rtti.c:667 cp/rtti.c:682
+#: cp/rtti.c:697 cp/rtti.c:712
#, gcc-internal-format
msgid "dynamic_cast of %q#D to %q#T can never succeed"
msgstr ""
-#: cp/rtti.c:693
+#: cp/rtti.c:723
#, gcc-internal-format
msgid "%<dynamic_cast%> not permitted with -fno-rtti"
msgstr ""
-#: cp/rtti.c:772
+#: cp/rtti.c:802
#, gcc-internal-format
msgid "cannot dynamic_cast %qE (of type %q#T) to type %q#T (%s)"
msgstr ""
@@ -47374,574 +48254,584 @@ msgstr ""
msgid "%qT is an inaccessible base of %qT"
msgstr ""
-#: cp/search.c:2058
+#: cp/search.c:2257
#, gcc-internal-format
msgid "invalid covariant return type for %q#D"
msgstr ""
-#: cp/search.c:2060
+#: cp/search.c:2259
#, gcc-internal-format
msgid " overriding %q#D"
msgstr ""
-#: cp/search.c:2073
+#: cp/search.c:2272
#, gcc-internal-format
msgid "invalid covariant return type for %q+#D"
msgstr ""
-#: cp/search.c:2074 cp/search.c:2079 cp/search.c:2106
+#: cp/search.c:2273 cp/search.c:2278 cp/search.c:2305
#, gcc-internal-format
msgid " overriding %q+#D"
msgstr ""
-#: cp/search.c:2078
+#: cp/search.c:2277
#, gcc-internal-format
msgid "conflicting return type specified for %q+#D"
msgstr ""
-#: cp/search.c:2093
+#: cp/search.c:2292
#, gcc-internal-format
msgid "looser throw specifier for %q+#F"
msgstr ""
-#: cp/search.c:2094
+#: cp/search.c:2293
#, gcc-internal-format
msgid " overriding %q+#F"
msgstr ""
-#: cp/search.c:2105
+#: cp/search.c:2304
#, gcc-internal-format
msgid "conflicting type attributes specified for %q+#D"
msgstr ""
-#: cp/search.c:2121
+#: cp/search.c:2320
#, gcc-internal-format
msgid "%qD declared %<transaction_safe_dynamic%>"
msgstr ""
-#: cp/search.c:2123
+#: cp/search.c:2322
#, gcc-internal-format
msgid "overriding %qD declared %<transaction_safe%>"
msgstr ""
-#: cp/search.c:2130
+#: cp/search.c:2329
#, gcc-internal-format
msgid "deleted function %q+D"
msgstr ""
-#: cp/search.c:2131
+#: cp/search.c:2330
#, gcc-internal-format
msgid "overriding non-deleted function %q+D"
msgstr ""
-#: cp/search.c:2136
+#: cp/search.c:2335
#, gcc-internal-format
msgid "non-deleted function %q+D"
msgstr ""
-#: cp/search.c:2137
+#: cp/search.c:2336
#, gcc-internal-format
msgid "overriding deleted function %q+D"
msgstr ""
-#: cp/search.c:2143
+#: cp/search.c:2342
#, gcc-internal-format
msgid "virtual function %q+D"
msgstr ""
-#: cp/search.c:2144
+#: cp/search.c:2343
#, gcc-internal-format
msgid "overriding final function %q+D"
msgstr ""
#. A static member function cannot match an inherited
#. virtual member function.
-#: cp/search.c:2240
+#: cp/search.c:2425
#, gcc-internal-format
msgid "%q+#D cannot be declared"
msgstr ""
-#: cp/search.c:2241
+#: cp/search.c:2426
#, gcc-internal-format
msgid " since %q+#D declared in base class"
msgstr ""
-#: cp/semantics.c:848
+#: cp/semantics.c:855
#, gcc-internal-format
msgid "suggest explicit braces around empty body in %<do%> statement"
msgstr ""
-#: cp/semantics.c:1516
+#: cp/semantics.c:1343
+#, gcc-internal-format
+msgid "catching polymorphic type %q#T by value"
+msgstr ""
+
+#: cp/semantics.c:1346
+#, gcc-internal-format
+msgid "catching type %q#T by value"
+msgstr ""
+
+#: cp/semantics.c:1350
+#, gcc-internal-format
+msgid "catching non-reference type %q#T"
+msgstr ""
+
+#: cp/semantics.c:1544
#, gcc-internal-format
msgid "type of asm operand %qE could not be determined"
msgstr ""
-#: cp/semantics.c:1581
+#: cp/semantics.c:1609
#, gcc-internal-format
msgid "__label__ declarations are only allowed in function scopes"
msgstr ""
-#: cp/semantics.c:1761
+#: cp/semantics.c:1789
#, gcc-internal-format
msgid "invalid use of member %qD in static member function"
msgstr ""
-#: cp/semantics.c:2447
+#: cp/semantics.c:2490
#, gcc-internal-format
msgid "arguments to destructor are not allowed"
msgstr ""
-#: cp/semantics.c:2544
+#: cp/semantics.c:2572
#, gcc-internal-format
msgid "%<this%> is unavailable for static member functions"
msgstr ""
-#: cp/semantics.c:2546
+#: cp/semantics.c:2574
#, gcc-internal-format
msgid "invalid use of %<this%> in non-member function"
msgstr ""
-#: cp/semantics.c:2548
+#: cp/semantics.c:2576
#, gcc-internal-format
msgid "invalid use of %<this%> at top level"
msgstr ""
-#: cp/semantics.c:2570
+#: cp/semantics.c:2598
#, gcc-internal-format
msgid "invalid qualifying scope in pseudo-destructor name"
msgstr ""
-#: cp/semantics.c:2578 cp/typeck.c:2545
+#: cp/semantics.c:2606 cp/typeck.c:2537
#, gcc-internal-format
msgid "qualified type %qT does not match destructor name ~%qT"
msgstr ""
-#: cp/semantics.c:2600
+#: cp/semantics.c:2628
#, gcc-internal-format
msgid "%qE is not of type %qT"
msgstr ""
-#: cp/semantics.c:2671
+#: cp/semantics.c:2701
#, gcc-internal-format
msgid "compound literal of non-object type %qT"
msgstr ""
-#: cp/semantics.c:2799
+#: cp/semantics.c:2838
#, gcc-internal-format
msgid "template type parameters must use the keyword %<class%> or %<typename%>"
msgstr ""
-#: cp/semantics.c:2849
+#: cp/semantics.c:2888
#, gcc-internal-format
msgid ""
"invalid use of type %qT as a default value for a template template-parameter"
msgstr ""
-#: cp/semantics.c:2852
+#: cp/semantics.c:2891
#, gcc-internal-format
msgid "invalid default argument for a template template parameter"
msgstr ""
-#: cp/semantics.c:2869
+#: cp/semantics.c:2908
#, gcc-internal-format
msgid "definition of %q#T inside template parameter list"
msgstr ""
-#: cp/semantics.c:2900
+#: cp/semantics.c:2939
#, gcc-internal-format
msgid "invalid definition of qualified type %qT"
msgstr ""
-#: cp/semantics.c:3187
+#: cp/semantics.c:3226
#, gcc-internal-format
msgid "invalid base-class specification"
msgstr ""
-#: cp/semantics.c:3348
+#: cp/semantics.c:3387
#, gcc-internal-format
msgid "cannot capture member %qD of anonymous union"
msgstr ""
-#: cp/semantics.c:3361 cp/semantics.c:9407
+#: cp/semantics.c:3400 cp/semantics.c:9444
#, gcc-internal-format
msgid "%qD is not captured"
msgstr ""
-#: cp/semantics.c:3366
+#: cp/semantics.c:3405
#, gcc-internal-format
msgid "the lambda has no capture-default"
msgstr ""
-#: cp/semantics.c:3368
+#: cp/semantics.c:3407
#, gcc-internal-format
msgid ""
"lambda in local class %q+T cannot capture variables from the enclosing "
"context"
msgstr ""
-#: cp/semantics.c:3380
+#: cp/semantics.c:3419
#, gcc-internal-format
msgid "use of local variable with automatic storage from containing function"
msgstr ""
-#: cp/semantics.c:3382
+#: cp/semantics.c:3421
#, gcc-internal-format
msgid "use of parameter from containing function"
msgstr ""
-#: cp/semantics.c:3514
+#: cp/semantics.c:3553
#, gcc-internal-format
msgid "use of parameter outside function body"
msgstr ""
-#: cp/semantics.c:3524
+#: cp/semantics.c:3563
#, gcc-internal-format
msgid "missing template arguments"
msgstr ""
-#: cp/semantics.c:3551
+#: cp/semantics.c:3590
#, 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:3648
+#: cp/semantics.c:3687
#, gcc-internal-format
msgid "use of namespace %qD as expression"
msgstr ""
-#: cp/semantics.c:3653
+#: cp/semantics.c:3692
#, gcc-internal-format
msgid "use of class template %qT as expression"
msgstr ""
#. Ambiguous reference to base members.
-#: cp/semantics.c:3659
+#: cp/semantics.c:3698
#, gcc-internal-format
msgid "request for member %qD is ambiguous in multiple inheritance lattice"
msgstr ""
-#: cp/semantics.c:3685
+#: cp/semantics.c:3724
#, gcc-internal-format
msgid "%qD cannot appear in a constant-expression"
msgstr ""
-#: cp/semantics.c:3818
+#: cp/semantics.c:3856
#, gcc-internal-format
msgid "type of %qE is unknown"
msgstr ""
-#: cp/semantics.c:3847
+#: cp/semantics.c:3885
#, gcc-internal-format
msgid "%qT is not an enumeration type"
msgstr ""
#. Parameter packs can only be used in templates
-#: cp/semantics.c:4002
+#: cp/semantics.c:4040
#, gcc-internal-format
msgid "Parameter pack __bases only valid in template declaration"
msgstr ""
-#: cp/semantics.c:4031
+#: cp/semantics.c:4069
#, gcc-internal-format
msgid "cannot apply %<offsetof%> to destructor %<~%T%>"
msgstr ""
-#: cp/semantics.c:4040
+#: cp/semantics.c:4078
#, 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:4048
+#: cp/semantics.c:4086
#, gcc-internal-format
msgid "cannot apply %<offsetof%> to member function %qD"
msgstr ""
-#: cp/semantics.c:4061
+#: cp/semantics.c:4099
#, gcc-internal-format
msgid "offsetof within non-standard-layout type %qT is undefined"
msgstr ""
-#: cp/semantics.c:4572 cp/semantics.c:6061 cp/semantics.c:6132
-#: cp/semantics.c:6175 cp/semantics.c:6540 cp/semantics.c:6639
-#: cp/semantics.c:6782
+#: cp/semantics.c:4611 cp/semantics.c:6106 cp/semantics.c:6177
+#: cp/semantics.c:6220 cp/semantics.c:6585 cp/semantics.c:6684
+#: cp/semantics.c:6827
#, gcc-internal-format
msgid "%<this%> allowed in OpenMP only in %<declare simd%> clauses"
msgstr ""
-#: cp/semantics.c:5253
+#: cp/semantics.c:5299
#, gcc-internal-format
msgid "user defined reduction lookup is ambiguous"
msgstr ""
-#: cp/semantics.c:5526
+#: cp/semantics.c:5572
#, gcc-internal-format
msgid "%qE in %<reduction%> clause is a zero size array"
msgstr ""
-#: cp/semantics.c:5574
+#: cp/semantics.c:5620
#, gcc-internal-format
msgid "%qE has const type for %<reduction%>"
msgstr ""
-#: cp/semantics.c:5686
+#: cp/semantics.c:5731
#, gcc-internal-format
msgid "user defined reduction with constructor initializer for base class %qT"
msgstr ""
-#: cp/semantics.c:5920
+#: cp/semantics.c:5965
#, gcc-internal-format
msgid ""
"linear clause with %qs modifier applied to non-reference variable with %qT "
"type"
msgstr ""
-#: cp/semantics.c:5935
+#: cp/semantics.c:5980
#, gcc-internal-format
msgid ""
"linear clause applied to non-integral, non-floating, non-pointer variable "
"with %qT type"
msgstr ""
-#: cp/semantics.c:5947
+#: cp/semantics.c:5992
#, gcc-internal-format
msgid ""
"linear clause applied to non-integral non-pointer variable with %qT type"
msgstr ""
-#: cp/semantics.c:5969
+#: cp/semantics.c:6014
#, gcc-internal-format
msgid "linear step expression must be integral"
msgstr ""
-#: cp/semantics.c:6072
+#: cp/semantics.c:6117
#, gcc-internal-format
msgid "%qD is not a variable in clause %qs"
msgstr ""
-#: cp/semantics.c:6144
+#: cp/semantics.c:6189
#, gcc-internal-format
msgid "%qD is not a variable in clause %<firstprivate%>"
msgstr ""
-#: cp/semantics.c:6187
+#: cp/semantics.c:6232
#, gcc-internal-format
msgid "%qD is not a variable in clause %<lastprivate%>"
msgstr ""
-#: cp/semantics.c:6232
+#: cp/semantics.c:6277
#, gcc-internal-format
msgid "%<gang%> static expression must be integral"
msgstr ""
-#: cp/semantics.c:6246
+#: cp/semantics.c:6291
#, gcc-internal-format
msgid "%<gang%> static value must be positive"
msgstr ""
-#: cp/semantics.c:6280
+#: cp/semantics.c:6325
#, gcc-internal-format
msgid "%<gang%> num expression must be integral"
msgstr ""
-#: cp/semantics.c:6283
+#: cp/semantics.c:6328
#, gcc-internal-format
msgid "%<vector%> length expression must be integral"
msgstr ""
-#: cp/semantics.c:6287
+#: cp/semantics.c:6332
#, gcc-internal-format
msgid "%<worker%> num expression must be integral"
msgstr ""
-#: cp/semantics.c:6291
-#, gcc-internal-format
-msgid "%qs expression must be integral"
-msgstr ""
-
-#: cp/semantics.c:6309
+#: cp/semantics.c:6354
#, gcc-internal-format
msgid "%<gang%> num value must be positive"
msgstr ""
-#: cp/semantics.c:6313
+#: cp/semantics.c:6358
#, gcc-internal-format
msgid "%<vector%> length value must be positive"
msgstr ""
-#: cp/semantics.c:6318
+#: cp/semantics.c:6363
#, gcc-internal-format
msgid "%<worker%> num value must be positive"
msgstr ""
-#: cp/semantics.c:6370
+#: cp/semantics.c:6415
#, gcc-internal-format
msgid "schedule chunk size expression must be integral"
msgstr ""
-#: cp/semantics.c:6413
+#: cp/semantics.c:6458
#, gcc-internal-format
msgid "%qs length expression must be integral"
msgstr ""
-#: cp/semantics.c:6426
+#: cp/semantics.c:6471
#, gcc-internal-format
msgid "%qs length expression must be positive constant integer expression"
msgstr ""
-#: cp/semantics.c:6445
+#: cp/semantics.c:6490
#, gcc-internal-format
msgid "%<async%> expression must be integral"
msgstr ""
-#: cp/semantics.c:6473
+#: cp/semantics.c:6518
#, gcc-internal-format
msgid "%<thread_limit%> expression must be integral"
msgstr ""
-#: cp/semantics.c:6502
+#: cp/semantics.c:6547
#, gcc-internal-format
msgid "%<device%> id must be integral"
msgstr ""
-#: cp/semantics.c:6523
+#: cp/semantics.c:6568
#, gcc-internal-format
msgid "%<dist_schedule%> chunk size expression must be integral"
msgstr ""
-#: cp/semantics.c:6550
+#: cp/semantics.c:6595
#, gcc-internal-format
msgid "%qD is not a variable in %<aligned%> clause"
msgstr ""
-#: cp/semantics.c:6564
+#: cp/semantics.c:6609
#, 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:6570
+#: cp/semantics.c:6615
#, gcc-internal-format
msgid "%qD appears more than once in %<aligned%> clauses"
msgstr ""
-#: cp/semantics.c:6583
+#: cp/semantics.c:6628
#, gcc-internal-format
msgid "%<aligned%> clause alignment expression must be integral"
msgstr ""
-#: cp/semantics.c:6632
+#: cp/semantics.c:6677
#, gcc-internal-format
msgid "%qD is not a variable in %<depend%> clause"
msgstr ""
-#: cp/semantics.c:6917
+#: cp/semantics.c:6962
#, gcc-internal-format
-msgid "overloaded function name %qE in clause %qs"
+msgid "template %qE in clause %qs"
msgstr ""
-#: cp/semantics.c:6921
+#: cp/semantics.c:6966
#, gcc-internal-format
-msgid "template %qE in clause %qs"
+msgid "overloaded function name %qE in clause %qs"
msgstr ""
-#: cp/semantics.c:6986
+#: cp/semantics.c:7031
#, gcc-internal-format
msgid "%<grainsize%> expression must be integral"
msgstr ""
-#: cp/semantics.c:7015
+#: cp/semantics.c:7060
#, gcc-internal-format
msgid "%<priority%> expression must be integral"
msgstr ""
-#: cp/semantics.c:7044
+#: cp/semantics.c:7089
#, gcc-internal-format
msgid "%<num_tasks%> expression must be integral"
msgstr ""
-#: cp/semantics.c:7073
+#: cp/semantics.c:7118
#, gcc-internal-format
msgid ""
"%qs variable is neither a pointer, nor an array nor reference to pointer or "
"array"
msgstr ""
-#: cp/semantics.c:7113
+#: cp/semantics.c:7158
#, gcc-internal-format
msgid "%<tile%> argument needs integral type"
msgstr ""
-#: cp/semantics.c:7532
+#: cp/semantics.c:7577
#, gcc-internal-format
msgid "%<threadprivate%> %qD is not file, namespace or block scope variable"
msgstr ""
-#: cp/semantics.c:7546
+#: cp/semantics.c:7591
#, gcc-internal-format
msgid "%<threadprivate%> %qE directive not in %qT definition"
msgstr ""
-#: cp/semantics.c:7751
+#: cp/semantics.c:7796
#, gcc-internal-format
msgid "difference between %qE and %qD does not have integer type"
msgstr ""
-#: cp/semantics.c:8179
+#: cp/semantics.c:8224
#, gcc-internal-format
msgid "%<#pragma omp simd%> used with class iteration variable %qE"
msgstr ""
-#: cp/semantics.c:8522 cp/semantics.c:8532
+#: cp/semantics.c:8567 cp/semantics.c:8577
#, gcc-internal-format
msgid "%<#pragma omp atomic update%> uses two different expressions for memory"
msgstr ""
-#: cp/semantics.c:8825
+#: cp/semantics.c:8870
#, gcc-internal-format
msgid "static assertion failed"
msgstr ""
-#: cp/semantics.c:8827
+#: cp/semantics.c:8872
#, gcc-internal-format, gfc-internal-format
msgid "static assertion failed: %s"
msgstr ""
-#: cp/semantics.c:8832
+#: cp/semantics.c:8877
#, gcc-internal-format
msgid "non-constant condition for static assertion"
msgstr ""
-#: cp/semantics.c:8862
+#: cp/semantics.c:8907
#, gcc-internal-format
msgid "argument to decltype must be an expression"
msgstr ""
-#: cp/semantics.c:8890
+#: cp/semantics.c:8935
#, gcc-internal-format
msgid "decltype cannot resolve address of overloaded function"
msgstr ""
-#: cp/semantics.c:9446
+#: cp/semantics.c:9483
#, gcc-internal-format
msgid "operand of fold expression has no unexpanded parameter packs"
msgstr ""
-#: cp/semantics.c:9499
+#: cp/semantics.c:9536
#, gcc-internal-format
msgid "both arguments in binary fold have unexpanded parameter packs"
msgstr ""
-#: cp/semantics.c:9501
+#: cp/semantics.c:9538
#, gcc-internal-format
msgid "no unexpanded parameter packs in binary fold"
msgstr ""
-#: cp/semantics.c:9519
+#: cp/semantics.c:9556
#, gcc-internal-format
msgid "non-pointer argument to %<__builtin_launder%>"
msgstr ""
@@ -47951,559 +48841,580 @@ msgstr ""
msgid "%qV qualifiers cannot be applied to %qT"
msgstr ""
-#: cp/tree.c:1751
+#: cp/tree.c:1754
#, gcc-internal-format
msgid "lambda-expression in a constant expression"
msgstr ""
-#: cp/tree.c:3893
+#: cp/tree.c:3930
+#, gcc-internal-format
+msgid "the calling convention for %qT changes in -fabi-version=12 (GCC 8)"
+msgstr ""
+
+#: cp/tree.c:3935
+#, gcc-internal-format
+msgid " because all of its copy and move constructors are deleted"
+msgstr ""
+
+#: cp/tree.c:4296
#, gcc-internal-format
msgid "%qE attribute applied to %qD with void return type"
msgstr ""
-#: cp/tree.c:3900
+#: cp/tree.c:4303
#, gcc-internal-format
msgid ""
"%qE attribute can only be applied to functions or to class or enumeration "
"types"
msgstr ""
-#: cp/tree.c:3952
+#: cp/tree.c:4355
#, gcc-internal-format
msgid "requested init_priority is not an integer constant"
msgstr ""
-#: cp/tree.c:3974
+#: cp/tree.c:4377
#, gcc-internal-format
msgid ""
"can only use %qE attribute on file-scope definitions of objects of class type"
msgstr ""
-#: cp/tree.c:3982
+#: cp/tree.c:4385
#, gcc-internal-format
msgid "requested init_priority is out of range"
msgstr ""
-#: cp/tree.c:3992
+#: cp/tree.c:4395
#, gcc-internal-format
msgid "requested init_priority is reserved for internal use"
msgstr ""
-#: cp/tree.c:4003
+#: cp/tree.c:4406
#, gcc-internal-format
msgid "%qE attribute is not supported on this platform"
msgstr ""
-#: cp/tree.c:4030
+#: cp/tree.c:4433
#, gcc-internal-format
-msgid "redeclaration of %qD adds abi tag %E"
+msgid "redeclaration of %qD adds abi tag %qE"
msgstr ""
-#: cp/tree.c:4050
+#: cp/tree.c:4453
#, gcc-internal-format
msgid "the %qE attribute requires arguments"
msgstr ""
-#: cp/tree.c:4061
+#: cp/tree.c:4464
#, gcc-internal-format
msgid "arguments to the %qE attribute must be narrow string literals"
msgstr ""
-#: cp/tree.c:4074 cp/tree.c:4087
+#: cp/tree.c:4477 cp/tree.c:4490
#, gcc-internal-format
msgid "arguments to the %qE attribute must contain valid identifiers"
msgstr ""
-#: cp/tree.c:4076
+#: cp/tree.c:4479
#, gcc-internal-format
msgid "%<%c%> is not a valid first character for an identifier"
msgstr ""
-#: cp/tree.c:4089
+#: cp/tree.c:4492
#, gcc-internal-format
msgid "%<%c%> is not a valid character in an identifier"
msgstr ""
-#: cp/tree.c:4113
+#: cp/tree.c:4516
#, gcc-internal-format
msgid "%qE attribute applied to non-class, non-enum type %qT"
msgstr ""
-#: cp/tree.c:4119
+#: cp/tree.c:4522
#, gcc-internal-format
msgid "%qE attribute applied to %qT after its definition"
msgstr ""
-#: cp/tree.c:4126
+#: cp/tree.c:4529
#, gcc-internal-format
msgid "ignoring %qE attribute applied to template instantiation %qT"
msgstr ""
-#: cp/tree.c:4133
+#: cp/tree.c:4536
#, gcc-internal-format
msgid "ignoring %qE attribute applied to template specialization %qT"
msgstr ""
-#: cp/tree.c:4155
+#: cp/tree.c:4558
#, gcc-internal-format
msgid "%qE attribute applied to non-function, non-variable %qD"
msgstr ""
-#: cp/tree.c:4161
+#: cp/tree.c:4564
#, gcc-internal-format
msgid "%qE attribute applied to extern \"C\" declaration %qD"
msgstr ""
-#: cp/tree.c:4889
+#: cp/tree.c:5287
#, gcc-internal-format
msgid "zero as null pointer constant"
msgstr ""
-#: cp/tree.c:4902
+#: cp/tree.c:5300
#, gcc-internal-format, gfc-internal-format
msgid "lang_* check: failed in %s, at %s:%d"
msgstr ""
-#: cp/typeck.c:463
+#: cp/typeck.c:455
#, gcc-internal-format
msgid "comparison between distinct pointer types %qT and %qT lacks a cast"
msgstr ""
-#: cp/typeck.c:469
+#: cp/typeck.c:461
#, gcc-internal-format
msgid "conversion between distinct pointer types %qT and %qT lacks a cast"
msgstr ""
-#: cp/typeck.c:475
+#: cp/typeck.c:467
#, gcc-internal-format
msgid ""
"conditional expression between distinct pointer types %qT and %qT lacks a "
"cast"
msgstr ""
-#: cp/typeck.c:612
+#: cp/typeck.c:604
#, gcc-internal-format
msgid ""
"ISO C++ forbids comparison between pointer of type %<void *%> and pointer-to-"
"function"
msgstr ""
-#: cp/typeck.c:617
+#: cp/typeck.c:609
#, gcc-internal-format
msgid ""
"ISO C++ forbids conversion between pointer of type %<void *%> and pointer-to-"
"function"
msgstr ""
-#: cp/typeck.c:622
+#: cp/typeck.c:614
#, gcc-internal-format
msgid ""
"ISO C++ forbids conditional expression between pointer of type %<void *%> "
"and pointer-to-function"
msgstr ""
-#: cp/typeck.c:701
+#: cp/typeck.c:693
#, gcc-internal-format
msgid ""
"comparison between distinct pointer-to-member types %qT and %qT lacks a cast"
msgstr ""
-#: cp/typeck.c:706
+#: cp/typeck.c:698
#, gcc-internal-format
msgid ""
"conversion between distinct pointer-to-member types %qT and %qT lacks a cast"
msgstr ""
-#: cp/typeck.c:711
+#: cp/typeck.c:703
#, gcc-internal-format
msgid ""
"conditional expression between distinct pointer-to-member types %qT and %qT "
"lacks a cast"
msgstr ""
-#: cp/typeck.c:1433
+#: cp/typeck.c:1425
#, gcc-internal-format
-msgid "canonical types differ for identical types %T and %T"
+msgid "canonical types differ for identical types %qT and %qT"
msgstr ""
-#: cp/typeck.c:1440
+#: cp/typeck.c:1432
#, gcc-internal-format
-msgid "same canonical type node for different types %T and %T"
+msgid "same canonical type node for different types %qT and %qT"
msgstr ""
-#: cp/typeck.c:1570
+#: cp/typeck.c:1562
#, gcc-internal-format
msgid "invalid application of %qs to a member function"
msgstr ""
-#: cp/typeck.c:1656
+#: cp/typeck.c:1648
#, gcc-internal-format
msgid "invalid application of %<sizeof%> to a bit-field"
msgstr ""
-#: cp/typeck.c:1664
+#: cp/typeck.c:1656
#, gcc-internal-format
msgid "ISO C++ forbids applying %<sizeof%> to an expression of function type"
msgstr ""
-#: cp/typeck.c:1713
+#: cp/typeck.c:1705
#, gcc-internal-format
msgid "invalid application of %<__alignof%> to a bit-field"
msgstr ""
-#: cp/typeck.c:1724
+#: cp/typeck.c:1716
#, gcc-internal-format
msgid ""
"ISO C++ forbids applying %<__alignof%> to an expression of function type"
msgstr ""
-#: cp/typeck.c:1801
+#: cp/typeck.c:1793
#, gcc-internal-format
msgid "%<alignas%> argument has non-integral type %qT"
msgstr ""
-#: cp/typeck.c:1846
+#: cp/typeck.c:1838
#, gcc-internal-format
msgid "invalid use of non-static member function of type %qT"
msgstr ""
-#: cp/typeck.c:2017
+#: cp/typeck.c:2009
#, gcc-internal-format
msgid "taking address of temporary array"
msgstr ""
-#: cp/typeck.c:2179
+#: cp/typeck.c:2171
#, gcc-internal-format
msgid "ISO C++ forbids converting a string constant to %qT"
msgstr ""
-#: cp/typeck.c:2183
+#: cp/typeck.c:2175
#, gcc-internal-format
msgid "deprecated conversion from string constant to %qT"
msgstr ""
-#: cp/typeck.c:2317 cp/typeck.c:2721
+#: cp/typeck.c:2309 cp/typeck.c:2750
#, gcc-internal-format
msgid ""
"request for member %qD in %qE, which is of pointer type %qT (maybe you meant "
"to use %<->%> ?)"
msgstr ""
-#: cp/typeck.c:2321 cp/typeck.c:2725
+#: cp/typeck.c:2313 cp/typeck.c:2754
#, gcc-internal-format
msgid "request for member %qD in %qE, which is of non-class type %qT"
msgstr ""
-#: cp/typeck.c:2352
+#: cp/typeck.c:2344
#, gcc-internal-format
msgid "invalid use of nonstatic data member %qE"
msgstr ""
-#: cp/typeck.c:2411
+#: cp/typeck.c:2403
#, gcc-internal-format
msgid ""
"invalid access to non-static data member %qD in virtual base of NULL object"
msgstr ""
-#: cp/typeck.c:2560
+#: cp/typeck.c:2552
#, gcc-internal-format
msgid "object type %qT does not match destructor name ~%qT"
msgstr ""
-#: cp/typeck.c:2569
+#: cp/typeck.c:2561
#, gcc-internal-format
msgid "the type being destroyed is %qT, but the destructor refers to %qT"
msgstr ""
-#: cp/typeck.c:2755 cp/typeck.c:2783
+#: cp/typeck.c:2678
+#, gcc-internal-format
+msgid "field %q#D can be accessed via %q#D"
+msgstr ""
+
+#: cp/typeck.c:2784 cp/typeck.c:2810
#, gcc-internal-format
msgid "%<%D::%D%> is not a member of %qT"
msgstr ""
-#: cp/typeck.c:2822
+#: cp/typeck.c:2849
#, gcc-internal-format
msgid "%qT is not a base of %qT"
msgstr ""
-#: cp/typeck.c:2856
+#: cp/typeck.c:2886
#, gcc-internal-format
msgid "%q#T has no member named %qE; did you mean %qE?"
msgstr ""
-#: cp/typeck.c:2862
+#: cp/typeck.c:2892
#, gcc-internal-format
msgid "%q#T has no member named %qE"
msgstr ""
-#: cp/typeck.c:2891
+#: cp/typeck.c:2921
#, gcc-internal-format
msgid "%qD is not a member template function"
msgstr ""
-#: cp/typeck.c:3060
+#: cp/typeck.c:3090
#, gcc-internal-format
msgid "%qT is not a pointer-to-object type"
msgstr ""
-#: cp/typeck.c:3091
+#: cp/typeck.c:3121
#, gcc-internal-format
msgid "invalid use of array indexing on pointer to member"
msgstr ""
-#: cp/typeck.c:3094
+#: cp/typeck.c:3124
#, gcc-internal-format
msgid "invalid use of unary %<*%> on pointer to member"
msgstr ""
-#: cp/typeck.c:3097
+#: cp/typeck.c:3127
#, gcc-internal-format
msgid "invalid use of implicit conversion on pointer to member"
msgstr ""
-#: cp/typeck.c:3100
+#: cp/typeck.c:3130
#, gcc-internal-format
msgid ""
"left hand operand of %<->*%> must be a pointer to class, but is a pointer to "
"member of type %qT"
msgstr ""
-#: cp/typeck.c:3136
+#: cp/typeck.c:3166
#, gcc-internal-format
msgid "subscript missing in array reference"
msgstr ""
-#: cp/typeck.c:3152
+#: cp/typeck.c:3182
#, gcc-internal-format
msgid "rank of the array%'s index is greater than 1"
msgstr ""
-#: cp/typeck.c:3247
+#: cp/typeck.c:3277
#, gcc-internal-format
msgid "subscripting array declared %<register%>"
msgstr ""
-#: cp/typeck.c:3281
+#: cp/typeck.c:3311
#, gcc-internal-format
msgid "subscripted value is neither array nor pointer"
msgstr ""
-#: cp/typeck.c:3354
+#: cp/typeck.c:3384
#, gcc-internal-format
msgid "object missing in use of %qE"
msgstr ""
-#: cp/typeck.c:3585
+#: cp/typeck.c:3615
#, gcc-internal-format
msgid "cannot call function %qD"
msgstr ""
-#: cp/typeck.c:3600
+#: cp/typeck.c:3630
#, gcc-internal-format
msgid "ISO C++ forbids calling %<::main%> from within program"
msgstr ""
-#: cp/typeck.c:3621
+#: cp/typeck.c:3651
#, gcc-internal-format
msgid ""
"must use %<.*%> or %<->*%> to call pointer-to-member function in %<%E "
"(...)%>, e.g. %<(... ->* %E) (...)%>"
msgstr ""
-#: cp/typeck.c:3638
+#: cp/typeck.c:3668
#, gcc-internal-format
msgid "%qE cannot be used as a function"
msgstr ""
-#: cp/typeck.c:3641
+#: cp/typeck.c:3671
#, gcc-internal-format
msgid "%qD cannot be used as a function"
msgstr ""
-#: cp/typeck.c:3644
+#: cp/typeck.c:3674
#, gcc-internal-format
msgid "expression cannot be used as a function"
msgstr ""
-#: cp/typeck.c:3701
+#: cp/typeck.c:3731
#, gcc-internal-format
msgid "too many arguments to constructor %q#D"
msgstr ""
-#: cp/typeck.c:3702
+#: cp/typeck.c:3732
#, gcc-internal-format
msgid "too few arguments to constructor %q#D"
msgstr ""
-#: cp/typeck.c:3707
+#: cp/typeck.c:3737
#, gcc-internal-format
msgid "too many arguments to member function %q#D"
msgstr ""
-#: cp/typeck.c:3708
+#: cp/typeck.c:3738
#, gcc-internal-format
msgid "too few arguments to member function %q#D"
msgstr ""
-#: cp/typeck.c:3714
+#: cp/typeck.c:3744
#, gcc-internal-format
msgid "too many arguments to function %q#D"
msgstr ""
-#: cp/typeck.c:3715
+#: cp/typeck.c:3745
#, gcc-internal-format
msgid "too few arguments to function %q#D"
msgstr ""
-#: cp/typeck.c:3725
+#: cp/typeck.c:3755
#, gcc-internal-format
msgid "too many arguments to method %q#D"
msgstr ""
-#: cp/typeck.c:3726
+#: cp/typeck.c:3756
#, gcc-internal-format
msgid "too few arguments to method %q#D"
msgstr ""
-#: cp/typeck.c:3729
+#: cp/typeck.c:3759
#, gcc-internal-format
msgid "too many arguments to function"
msgstr ""
-#: cp/typeck.c:3730
+#: cp/typeck.c:3760
#, gcc-internal-format
msgid "too few arguments to function"
msgstr ""
-#: cp/typeck.c:3809
+#: cp/typeck.c:3839
#, gcc-internal-format
msgid "parameter %P of %qD has incomplete type %qT"
msgstr ""
-#: cp/typeck.c:3812
+#: cp/typeck.c:3842
#, gcc-internal-format
msgid "parameter %P has incomplete type %qT"
msgstr ""
-#: cp/typeck.c:4056
+#: cp/typeck.c:4086
#, gcc-internal-format
msgid "the address of %qD will never be NULL"
msgstr ""
-#: cp/typeck.c:4067
+#: cp/typeck.c:4097
#, gcc-internal-format
msgid "the compiler can assume that the address of %qD will never be NULL"
msgstr ""
-#: cp/typeck.c:4185 cp/typeck.c:4196
+#: cp/typeck.c:4215 cp/typeck.c:4226
#, gcc-internal-format
msgid "assuming cast to type %qT from overloaded function"
msgstr ""
-#: cp/typeck.c:4242
+#: cp/typeck.c:4272
#, gcc-internal-format
msgid "NULL used in arithmetic"
msgstr ""
-#: cp/typeck.c:4566
+#: cp/typeck.c:4619
#, gcc-internal-format
msgid "left rotate count is negative"
msgstr ""
-#: cp/typeck.c:4567
+#: cp/typeck.c:4620
#, gcc-internal-format
msgid "right rotate count is negative"
msgstr ""
-#: cp/typeck.c:4573
+#: cp/typeck.c:4626
#, gcc-internal-format
msgid "left rotate count >= width of type"
msgstr ""
-#: cp/typeck.c:4574
+#: cp/typeck.c:4627
#, gcc-internal-format
msgid "right rotate count >= width of type"
msgstr ""
-#: cp/typeck.c:4657 cp/typeck.c:4665 cp/typeck.c:4944 cp/typeck.c:4952
+#: cp/typeck.c:4710 cp/typeck.c:4718 cp/typeck.c:4997 cp/typeck.c:5005
#, gcc-internal-format
msgid "ISO C++ forbids comparison between pointer and integer"
msgstr ""
-#: cp/typeck.c:4867 cp/typeck.c:4879
+#: cp/typeck.c:4920 cp/typeck.c:4932
#, gcc-internal-format
msgid "operand types are %qT and %qT"
msgstr ""
-#: cp/typeck.c:4905
+#: cp/typeck.c:4958
#, gcc-internal-format
msgid "could not find an integer type of the same size as %qT"
msgstr ""
-#: cp/typeck.c:4969
+#: cp/typeck.c:5022
#, gcc-internal-format
msgid "unordered comparison on non-floating point argument"
msgstr ""
-#: cp/typeck.c:5024
+#: cp/typeck.c:5067
+msgid ""
+"implicit conversion from %qH to %qI to match other operand of binary "
+"expression"
+msgstr ""
+
+#: cp/typeck.c:5077
#, gcc-internal-format
msgid "invalid operands of types %qT and %qT to binary %qO"
msgstr ""
-#: cp/typeck.c:5327
+#: cp/typeck.c:5380
#, gcc-internal-format
msgid "ISO C++ forbids using pointer of type %<void *%> in subtraction"
msgstr ""
-#: cp/typeck.c:5335
+#: cp/typeck.c:5388
#, gcc-internal-format
msgid "ISO C++ forbids using pointer to a function in subtraction"
msgstr ""
-#: cp/typeck.c:5343
+#: cp/typeck.c:5396
#, gcc-internal-format
msgid "ISO C++ forbids using pointer to a method in subtraction"
msgstr ""
-#: cp/typeck.c:5362
+#: cp/typeck.c:5415
#, gcc-internal-format
msgid "invalid use of a pointer to an incomplete type in pointer arithmetic"
msgstr ""
-#: cp/typeck.c:5437
+#: cp/typeck.c:5490
#, gcc-internal-format
-msgid "taking address of constructor %qE"
+msgid "taking address of constructor %qD"
msgstr ""
-#: cp/typeck.c:5438
+#: cp/typeck.c:5491
#, gcc-internal-format
-msgid "taking address of destructor %qE"
+msgid "taking address of destructor %qD"
msgstr ""
-#: cp/typeck.c:5454
+#: cp/typeck.c:5507
#, gcc-internal-format
msgid "invalid use of %qE to form a pointer-to-member-function"
msgstr ""
-#: cp/typeck.c:5457
+#: cp/typeck.c:5510
#, gcc-internal-format
msgid " a qualified-id is required"
msgstr ""
-#: cp/typeck.c:5464
+#: cp/typeck.c:5517
#, gcc-internal-format
msgid ""
"parentheses around %qE cannot be used to form a pointer-to-member-function"
msgstr ""
#. An expression like &memfn.
-#: cp/typeck.c:5635
+#: cp/typeck.c:5688
#, gcc-internal-format
msgid ""
"ISO C++ forbids taking the address of an unqualified or parenthesized non-"
"static member function to form a pointer to member function. Say %<&%T::%D%>"
msgstr ""
-#: cp/typeck.c:5640
+#: cp/typeck.c:5693
#, gcc-internal-format
msgid ""
"ISO C++ forbids taking the address of a bound member function to form a "
@@ -48511,408 +49422,403 @@ msgid ""
msgstr ""
#. Make this a permerror because we used to accept it.
-#: cp/typeck.c:5677
+#: cp/typeck.c:5730
#, gcc-internal-format
msgid "taking address of temporary"
msgstr ""
-#: cp/typeck.c:5679
+#: cp/typeck.c:5732
#, gcc-internal-format
msgid "taking address of xvalue (rvalue reference)"
msgstr ""
-#: cp/typeck.c:5696
+#: cp/typeck.c:5749
#, gcc-internal-format
msgid "ISO C++ forbids taking address of function %<::main%>"
msgstr ""
-#: cp/typeck.c:5766
+#: cp/typeck.c:5819
#, gcc-internal-format
msgid "cannot create pointer to reference member %qD"
msgstr ""
-#: cp/typeck.c:5786
+#: cp/typeck.c:5839
#, gcc-internal-format
msgid "attempt to take address of bit-field"
msgstr ""
-#: cp/typeck.c:5931
+#: cp/typeck.c:5984
#, gcc-internal-format
msgid "%<~%> on an expression of type bool"
msgstr ""
-#: cp/typeck.c:5932
+#: cp/typeck.c:5985
#, gcc-internal-format
msgid "did you mean to use logical not (%<!%>)?"
msgstr ""
-#: cp/typeck.c:6053
+#: cp/typeck.c:6106
#, gcc-internal-format
msgid "ISO C++ forbids incrementing an enum"
msgstr ""
-#: cp/typeck.c:6054
+#: cp/typeck.c:6107
#, gcc-internal-format
msgid "ISO C++ forbids decrementing an enum"
msgstr ""
-#: cp/typeck.c:6070
+#: cp/typeck.c:6123
#, gcc-internal-format
msgid "cannot increment a pointer to incomplete type %qT"
msgstr ""
-#: cp/typeck.c:6071
+#: cp/typeck.c:6124
#, gcc-internal-format
msgid "cannot decrement a pointer to incomplete type %qT"
msgstr ""
-#: cp/typeck.c:6082
+#: cp/typeck.c:6135
#, gcc-internal-format
msgid "ISO C++ forbids incrementing a pointer of type %qT"
msgstr ""
-#: cp/typeck.c:6083
+#: cp/typeck.c:6136
#, gcc-internal-format
msgid "ISO C++ forbids decrementing a pointer of type %qT"
msgstr ""
-#: cp/typeck.c:6118
+#: cp/typeck.c:6171
#, gcc-internal-format
msgid "use of an operand of type %qT in %<operator--%> is forbidden"
msgstr ""
-#: cp/typeck.c:6127
+#: cp/typeck.c:6180
#, gcc-internal-format
msgid "use of an operand of type %qT in %<operator++%> is forbidden in C++1z"
msgstr ""
-#: cp/typeck.c:6134
+#: cp/typeck.c:6187
#, gcc-internal-format
msgid "use of an operand of type %qT in %<operator++%> is deprecated"
msgstr ""
-#: cp/typeck.c:6306
+#: cp/typeck.c:6359
#, gcc-internal-format
msgid "cannot take the address of %<this%>, which is an rvalue expression"
msgstr ""
-#: cp/typeck.c:6328
+#: cp/typeck.c:6381
#, gcc-internal-format
msgid "address of explicit register variable %qD requested"
msgstr ""
-#: cp/typeck.c:6333
+#: cp/typeck.c:6386
#, gcc-internal-format
msgid "address requested for %qD, which is declared %<register%>"
msgstr ""
-#: cp/typeck.c:6412
+#: cp/typeck.c:6465
#, gcc-internal-format
msgid "list-initializer for non-class type must not be parenthesized"
msgstr ""
-#: cp/typeck.c:6424
+#: cp/typeck.c:6477
#, gcc-internal-format
msgid "expression list treated as compound expression in initializer"
msgstr ""
-#: cp/typeck.c:6428
+#: cp/typeck.c:6481
#, gcc-internal-format
msgid "expression list treated as compound expression in mem-initializer"
msgstr ""
-#: cp/typeck.c:6432
+#: cp/typeck.c:6485
#, gcc-internal-format
msgid "expression list treated as compound expression in functional cast"
msgstr ""
-#: cp/typeck.c:6469
+#: cp/typeck.c:6522
#, gcc-internal-format, gfc-internal-format
msgid "%s expression list treated as compound expression"
msgstr ""
-#: cp/typeck.c:6566
+#: cp/typeck.c:6619
#, gcc-internal-format
msgid "no context to resolve type of %qE"
msgstr ""
-#: cp/typeck.c:6599
+#: cp/typeck.c:6652
#, gcc-internal-format
msgid "cast from type %qT to type %qT casts away qualifiers"
msgstr ""
-#: cp/typeck.c:6605
+#: cp/typeck.c:6658
#, gcc-internal-format
msgid "static_cast from type %qT to type %qT casts away qualifiers"
msgstr ""
-#: cp/typeck.c:6611
+#: cp/typeck.c:6664
#, gcc-internal-format
msgid "reinterpret_cast from type %qT to type %qT casts away qualifiers"
msgstr ""
-#: cp/typeck.c:6634
+#: cp/typeck.c:6685
#, gcc-internal-format
-msgid "useless cast to type %qT"
+msgid "useless cast to type %q#T"
msgstr ""
-#: cp/typeck.c:7005
+#: cp/typeck.c:6698
#, gcc-internal-format
-msgid "invalid static_cast from type %qT to type %qT"
+msgid "type qualifiers ignored on cast result type"
msgstr ""
-#: cp/typeck.c:7031
+#: cp/typeck.c:7080
#, gcc-internal-format
-msgid "converting from %qT to %qT"
+msgid "invalid static_cast from type %qT to type %qT"
msgstr ""
-#: cp/typeck.c:7083
+#: cp/typeck.c:7106
+msgid "converting from %qH to %qI"
+msgstr ""
+
+#: cp/typeck.c:7162
#, gcc-internal-format
msgid "invalid cast of an rvalue expression of type %qT to type %qT"
msgstr ""
-#: cp/typeck.c:7153
-#, gcc-internal-format
-msgid "cast from %qT to %qT loses precision"
+#: cp/typeck.c:7232
+msgid "cast from %qH to %qI loses precision"
msgstr ""
-#: cp/typeck.c:7193
-#, gcc-internal-format
-msgid "cast from %qT to %qT increases required alignment of target type"
+#: cp/typeck.c:7272
+msgid "cast from %qH to %qI increases required alignment of target type"
msgstr ""
-#: cp/typeck.c:7211
+#: cp/typeck.c:7290
#, gcc-internal-format
msgid ""
"casting between pointer-to-function and pointer-to-object is conditionally-"
"supported"
msgstr ""
-#: cp/typeck.c:7225
+#: cp/typeck.c:7304
#, gcc-internal-format
msgid "invalid cast from type %qT to type %qT"
msgstr ""
-#: cp/typeck.c:7286
+#: cp/typeck.c:7368
#, 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:7295
+#: cp/typeck.c:7377
#, 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:7333
+#: cp/typeck.c:7418
#, gcc-internal-format
msgid "invalid const_cast of an rvalue of type %qT to type %qT"
msgstr ""
-#: cp/typeck.c:7394
+#: cp/typeck.c:7479
#, gcc-internal-format
msgid "invalid const_cast from type %qT to type %qT"
msgstr ""
-#: cp/typeck.c:7487 cp/typeck.c:7495
+#: cp/typeck.c:7575 cp/typeck.c:7583
#, gcc-internal-format
msgid "ISO C++ forbids casting to an array type %qT"
msgstr ""
-#: cp/typeck.c:7504
+#: cp/typeck.c:7592
#, gcc-internal-format
msgid "invalid cast to function type %qT"
msgstr ""
-#: cp/typeck.c:7817
+#: cp/typeck.c:7909
#, gcc-internal-format
msgid " in evaluation of %<%Q(%#T, %#T)%>"
msgstr ""
-#: cp/typeck.c:7878
+#: cp/typeck.c:7970
#, gcc-internal-format
msgid "assigning to an array from an initializer list"
msgstr ""
-#: cp/typeck.c:7904
+#: cp/typeck.c:7996
#, gcc-internal-format
msgid "incompatible types in assignment of %qT to %qT"
msgstr ""
-#: cp/typeck.c:7918
+#: cp/typeck.c:8010
#, gcc-internal-format
msgid "array used as initializer"
msgstr ""
-#: cp/typeck.c:7920
+#: cp/typeck.c:8012
#, gcc-internal-format
msgid "invalid array assignment"
msgstr ""
-#: cp/typeck.c:8054
+#: cp/typeck.c:8146
#, gcc-internal-format
msgid " in pointer to member function conversion"
msgstr ""
-#: cp/typeck.c:8068
+#: cp/typeck.c:8160
#, gcc-internal-format
msgid "pointer to member conversion via virtual base %qT"
msgstr ""
-#: cp/typeck.c:8115 cp/typeck.c:8134
+#: cp/typeck.c:8207 cp/typeck.c:8226
#, gcc-internal-format
msgid " in pointer to member conversion"
msgstr ""
-#: cp/typeck.c:8215
+#: cp/typeck.c:8307
#, gcc-internal-format
msgid "invalid conversion to type %qT from type %qT"
msgstr ""
-#: cp/typeck.c:8507
-#, gcc-internal-format
-msgid "cannot convert %qT to %qT for argument %qP to %qD"
+#: cp/typeck.c:8600
+msgid "cannot convert %qH to %qI for argument %qP to %qD"
msgstr ""
-#: cp/typeck.c:8513
-#, gcc-internal-format
-msgid "cannot convert %qT to %qT in default argument"
+#: cp/typeck.c:8606
+msgid "cannot convert %qH to %qI in default argument"
msgstr ""
-#: cp/typeck.c:8517
-#, gcc-internal-format
-msgid "cannot convert %qT to %qT in argument passing"
+#: cp/typeck.c:8610
+msgid "cannot convert %qH to %qI in argument passing"
msgstr ""
-#: cp/typeck.c:8521
-#, gcc-internal-format
-msgid "cannot convert %qT to %qT"
+#: cp/typeck.c:8614
+msgid "cannot convert %qH to %qI"
msgstr ""
-#: cp/typeck.c:8525
-#, gcc-internal-format
-msgid "cannot convert %qT to %qT in initialization"
+#: cp/typeck.c:8618
+msgid "cannot convert %qH to %qI in initialization"
msgstr ""
-#: cp/typeck.c:8529
-#, gcc-internal-format
-msgid "cannot convert %qT to %qT in return"
+#: cp/typeck.c:8622
+msgid "cannot convert %qH to %qI in return"
msgstr ""
-#: cp/typeck.c:8533
-#, gcc-internal-format
-msgid "cannot convert %qT to %qT in assignment"
+#: cp/typeck.c:8626
+msgid "cannot convert %qH to %qI in assignment"
msgstr ""
-#: cp/typeck.c:8546
+#: cp/typeck.c:8639
#, gcc-internal-format
msgid "class type %qT is incomplete"
msgstr ""
-#: cp/typeck.c:8564
+#: cp/typeck.c:8657
#, gcc-internal-format
msgid "parameter %qP of %qD might be a candidate for a format attribute"
msgstr ""
-#: cp/typeck.c:8568
+#: cp/typeck.c:8661
#, gcc-internal-format
msgid "parameter might be a candidate for a format attribute"
msgstr ""
-#: cp/typeck.c:8573
+#: cp/typeck.c:8666
#, gcc-internal-format
msgid "target of conversion might be a candidate for a format attribute"
msgstr ""
-#: cp/typeck.c:8578
+#: cp/typeck.c:8671
#, gcc-internal-format
msgid "target of initialization might be a candidate for a format attribute"
msgstr ""
-#: cp/typeck.c:8588
+#: cp/typeck.c:8681
#, gcc-internal-format
msgid ""
"left-hand side of assignment might be a candidate for a format attribute"
msgstr ""
-#: cp/typeck.c:8683
+#: cp/typeck.c:8776
#, gcc-internal-format
msgid "in passing argument %P of %qD"
msgstr ""
-#: cp/typeck.c:8742
+#: cp/typeck.c:8835
#, gcc-internal-format
msgid "returning reference to temporary"
msgstr ""
-#: cp/typeck.c:8749
+#: cp/typeck.c:8842
#, gcc-internal-format
msgid "reference to non-lvalue returned"
msgstr ""
-#: cp/typeck.c:8764
+#: cp/typeck.c:8857
#, gcc-internal-format
msgid "reference to local variable %qD returned"
msgstr ""
-#: cp/typeck.c:8768
+#: cp/typeck.c:8861
#, gcc-internal-format
msgid "address of label %qD returned"
msgstr ""
-#: cp/typeck.c:8772
+#: cp/typeck.c:8865
#, gcc-internal-format
msgid "address of local variable %qD returned"
msgstr ""
-#: cp/typeck.c:8818
+#: cp/typeck.c:8911
#, 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:8826
+#: cp/typeck.c:8919
#, 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:8829
+#: cp/typeck.c:8922
#, gcc-internal-format
msgid "returning a value from a constructor"
msgstr ""
#. Give a helpful error message.
-#: cp/typeck.c:8859 cp/typeck.c:8905
+#: cp/typeck.c:8952 cp/typeck.c:8998
#, gcc-internal-format
msgid "return-statement with no value, in function returning %qT"
msgstr ""
-#: cp/typeck.c:8867
+#: cp/typeck.c:8960
#, gcc-internal-format
msgid "returning initializer list"
msgstr ""
-#: cp/typeck.c:8886
+#: cp/typeck.c:8979
#, gcc-internal-format
msgid "inconsistent types %qT and %qT deduced for lambda return type"
msgstr ""
-#: cp/typeck.c:8889
+#: cp/typeck.c:8982
#, gcc-internal-format
msgid "inconsistent deduction for auto return type: %qT and then %qT"
msgstr ""
-#: cp/typeck.c:8924
+#: cp/typeck.c:9017
#, gcc-internal-format
msgid "return-statement with a value, in function returning 'void'"
msgstr ""
-#: cp/typeck.c:8954
+#: cp/typeck.c:9047
#, gcc-internal-format
msgid ""
"%<operator new%> must not return NULL unless it is declared %<throw()%> (or -"
@@ -48920,12 +49826,12 @@ msgid ""
msgstr ""
#. Make this a permerror because we used to accept it.
-#: cp/typeck.c:9556
+#: cp/typeck.c:9649
#, gcc-internal-format
msgid "using temporary as lvalue"
msgstr ""
-#: cp/typeck.c:9558
+#: cp/typeck.c:9651
#, gcc-internal-format
msgid "using xvalue (rvalue reference) as lvalue"
msgstr ""
@@ -49064,7 +49970,7 @@ msgstr ""
#: cp/typeck2.c:387
#, gcc-internal-format
-msgid "\t%#D"
+msgid "\t%#qD"
msgstr ""
#: cp/typeck2.c:440
@@ -49092,70 +49998,68 @@ msgstr ""
msgid "invalid use of incomplete type %q#T"
msgstr ""
-#: cp/typeck2.c:515
+#: cp/typeck2.c:516
#, gcc-internal-format
msgid "invalid use of member function %qD (did you forget the %<()%> ?)"
msgstr ""
-#: cp/typeck2.c:519
+#: cp/typeck2.c:520
#, gcc-internal-format
msgid "invalid use of member %qD (did you forget the %<&%> ?)"
msgstr ""
-#: cp/typeck2.c:529
+#: cp/typeck2.c:530
#, gcc-internal-format
msgid "invalid use of placeholder %qT"
msgstr ""
-#: cp/typeck2.c:536
+#: cp/typeck2.c:537
#, gcc-internal-format
msgid "invalid use of template type parameter %qT"
msgstr ""
-#: cp/typeck2.c:541
+#: cp/typeck2.c:542
#, gcc-internal-format
msgid "invalid use of template template parameter %qT"
msgstr ""
-#: cp/typeck2.c:548
+#: cp/typeck2.c:549
#, gcc-internal-format
msgid "invalid use of dependent type %qT"
msgstr ""
-#: cp/typeck2.c:555
+#: cp/typeck2.c:556
#, gcc-internal-format
msgid "invalid use of brace-enclosed initializer list"
msgstr ""
-#: cp/typeck2.c:563
+#: cp/typeck2.c:564
#, gcc-internal-format
msgid "address of overloaded function with no contextual type information"
msgstr ""
-#: cp/typeck2.c:567
+#: cp/typeck2.c:568
#, gcc-internal-format
msgid "overloaded function with no contextual type information"
msgstr ""
-#: cp/typeck2.c:570
+#: cp/typeck2.c:571
#, gcc-internal-format
msgid "insufficient contextual information to determine type"
msgstr ""
-#: cp/typeck2.c:795
+#: cp/typeck2.c:796
#, gcc-internal-format
msgid "constructor syntax used, but no constructor declared for type %qT"
msgstr ""
#: cp/typeck2.c:956
-#, gcc-internal-format
msgid ""
-"narrowing conversion of %qE from %qT to %qT inside { } is ill-formed in C++11"
+"narrowing conversion of %qE from %qH to %qI inside { } is ill-formed in C++11"
msgstr ""
#: cp/typeck2.c:967 cp/typeck2.c:981
-#, gcc-internal-format
-msgid "narrowing conversion of %qE from %qT to %qT inside { }"
+msgid "narrowing conversion of %qE from %qH to %qI inside { }"
msgstr ""
#: cp/typeck2.c:971
@@ -49432,31 +50336,31 @@ msgid ""
"%s at %L"
msgstr ""
-#: fortran/arith.c:2050 fortran/arith.c:2159 fortran/arith.c:2219
-#: fortran/arith.c:2271 fortran/arith.c:2331 fortran/arith.c:2400
-#: fortran/arith.c:2467
+#: fortran/arith.c:2051 fortran/arith.c:2160 fortran/arith.c:2220
+#: fortran/arith.c:2272 fortran/arith.c:2332 fortran/arith.c:2401
+#: fortran/arith.c:2468
#, gcc-internal-format
msgid "Conversion from %qs to %qs at %L"
msgstr ""
-#: fortran/arith.c:2079 fortran/arith.c:2112 fortran/arith.c:2151
-#: fortran/arith.c:2209 fortran/arith.c:2261 fortran/arith.c:2321
-#: fortran/arith.c:2390
+#: fortran/arith.c:2080 fortran/arith.c:2113 fortran/arith.c:2152
+#: fortran/arith.c:2210 fortran/arith.c:2262 fortran/arith.c:2322
+#: fortran/arith.c:2391
#, gcc-internal-format
msgid "Change of value in conversion from %qs to %qs at %L"
msgstr ""
-#: fortran/arith.c:2307 fortran/arith.c:2376
+#: fortran/arith.c:2308 fortran/arith.c:2377
#, gcc-internal-format
msgid "Non-zero imaginary part discarded in conversion from %qs to %qs at %L"
msgstr ""
-#: fortran/arith.c:2459
+#: fortran/arith.c:2460
#, gcc-internal-format
msgid "Change of value in conversion from %qs to %qs at %L"
msgstr ""
-#: fortran/arith.c:2532
+#: fortran/arith.c:2533
#, gcc-internal-format
msgid "The Hollerith constant at %L is too long to convert to %qs"
msgstr ""
@@ -49709,27 +50613,38 @@ msgstr ""
msgid "spec_dimen_size(): Bad dimension"
msgstr ""
-#: fortran/array.c:2206
+#: fortran/array.c:2207
#, gcc-internal-format
msgid "gfc_ref_dimen_size(): Bad dimension"
msgstr ""
-#: fortran/array.c:2336
+#: fortran/array.c:2211
+#, gcc-internal-format, gfc-internal-format
+msgid "Bad array dimension at %L"
+msgstr ""
+
+#: fortran/array.c:2237 fortran/data.c:553 fortran/data.c:572
+#: fortran/data.c:586 fortran/data.c:715
+#, gcc-internal-format
+msgid "Simplification error"
+msgstr ""
+
+#: fortran/array.c:2347
#, gcc-internal-format
msgid "gfc_ref_dimen_size(): Bad dimen_type"
msgstr ""
-#: fortran/array.c:2387
+#: fortran/array.c:2398
#, gcc-internal-format
msgid "gfc_array_dimen_size(): Bad dimension"
msgstr ""
-#: fortran/array.c:2432
+#: fortran/array.c:2443
#, gcc-internal-format
msgid "gfc_array_dimen_size(): Bad EXPR_ARRAY expr"
msgstr ""
-#: fortran/array.c:2580
+#: fortran/array.c:2591
#, gcc-internal-format
msgid "gfc_find_array_ref(): No ref found"
msgstr ""
@@ -49737,7 +50652,7 @@ msgstr ""
#. if (c == 0)
#: fortran/bbt.c:119
#, gcc-internal-format
-msgid "insert_bbt(): Duplicate key found!"
+msgid "insert_bbt(): Duplicate key found"
msgstr ""
#: fortran/check.c:46
@@ -50798,7 +51713,7 @@ msgid ""
"because it returns a disassociated pointer"
msgstr ""
-#: fortran/class.c:617
+#: fortran/class.c:616
#, gcc-internal-format, gfc-internal-format
msgid ""
"Assumed size polymorphic objects or components, such as that at %C, have not "
@@ -50807,12 +51722,12 @@ msgstr ""
#. Since the extension field is 8 bit wide, we can only have
#. up to 255 extension levels.
-#: fortran/class.c:728 fortran/decl.c:9003
+#: fortran/class.c:727 fortran/decl.c:9031
#, gcc-internal-format
msgid "Maximum extension level reached with type %qs at %L"
msgstr ""
-#: fortran/class.c:2876 fortran/class.c:2950
+#: fortran/class.c:2875 fortran/class.c:2949
#, gcc-internal-format
msgid "%qs of %qs is PRIVATE at %L"
msgstr ""
@@ -50867,7 +51782,7 @@ msgstr ""
msgid "re-initialization of %qs at %L"
msgstr ""
-#: fortran/data.c:706
+#: fortran/data.c:728
#, gcc-internal-format
msgid "TODO: Vector sections in data statements"
msgstr ""
@@ -51066,1452 +51981,1447 @@ msgid ""
"at %L"
msgstr ""
-#: fortran/decl.c:1412
+#: fortran/decl.c:1432
#, gcc-internal-format
msgid "Symbol %qs at %C also declared as a type at %L"
msgstr ""
-#: fortran/decl.c:1471
+#: fortran/decl.c:1491
#, 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:1505
+#: fortran/decl.c:1525
#, gcc-internal-format, gfc-internal-format
msgid "CHARACTER length must be a constant at %L"
msgstr ""
-#: fortran/decl.c:1520
+#: fortran/decl.c:1540
#, gcc-internal-format, gfc-internal-format
msgid "CHARACTER expression at %L is being truncated (%d/%d)"
msgstr ""
-#: fortran/decl.c:1527
+#: fortran/decl.c:1547
#, 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:1617
+#: fortran/decl.c:1637
#, gcc-internal-format
msgid "Initializer not allowed for PARAMETER %qs at %C"
msgstr ""
-#: fortran/decl.c:1627
+#: fortran/decl.c:1647
#, gcc-internal-format, gfc-internal-format
msgid "PARAMETER at %L is missing an initializer"
msgstr ""
-#: fortran/decl.c:1637
+#: fortran/decl.c:1657
#, gcc-internal-format
msgid ""
"Variable %qs at %C with an initializer already appears in a DATA statement"
msgstr ""
-#: fortran/decl.c:1680
+#: fortran/decl.c:1700
#, gcc-internal-format, gfc-internal-format
msgid "Cannot initialize parameter array at %L with variable length elements"
msgstr ""
-#: fortran/decl.c:1741
+#: fortran/decl.c:1761
#, gcc-internal-format, gfc-internal-format
msgid "Can't initialize implied-shape array at %L with scalar"
msgstr ""
-#: fortran/decl.c:1776
+#: fortran/decl.c:1796
#, gcc-internal-format, gfc-internal-format
msgid "Non-constant lower bound in implied-shape declaration at %L"
msgstr ""
-#: fortran/decl.c:1862 fortran/decl.c:1869
+#: fortran/decl.c:1882 fortran/decl.c:1889
#, gcc-internal-format, gfc-internal-format
msgid "Component at %C must have the POINTER attribute"
msgstr ""
-#: fortran/decl.c:1878
+#: fortran/decl.c:1898
#, gcc-internal-format
msgid "Component %qs with CLASS at %C must be allocatable or pointer"
msgstr ""
-#: fortran/decl.c:1887
+#: fortran/decl.c:1907
#, gcc-internal-format, gfc-internal-format
msgid "Array component of structure at %C must have explicit or deferred shape"
msgstr ""
-#: fortran/decl.c:1911 fortran/symbol.c:2140
+#: fortran/decl.c:1931 fortran/symbol.c:2140
#, gcc-internal-format
msgid "Component %qs at %C already declared at %L"
msgstr ""
-#: fortran/decl.c:1953
+#: fortran/decl.c:1973
#, gcc-internal-format, gfc-internal-format
msgid "Pointer array component of structure at %C must have a deferred shape"
msgstr ""
-#: fortran/decl.c:1962
+#: fortran/decl.c:1982
#, gcc-internal-format, gfc-internal-format
msgid "Allocatable component of structure at %C must have a deferred shape"
msgstr ""
-#: fortran/decl.c:1971
+#: fortran/decl.c:1991
#, gcc-internal-format, gfc-internal-format
msgid "Array component of structure at %C must have an explicit shape"
msgstr ""
-#: fortran/decl.c:2020
+#: fortran/decl.c:2040
#, gcc-internal-format, gfc-internal-format
msgid "NULL() initialization at %C is ambiguous"
msgstr ""
-#: fortran/decl.c:2037
+#: fortran/decl.c:2057
#, gcc-internal-format, gfc-internal-format
msgid "NULL() initialization at %C may not have MOLD"
msgstr ""
-#: fortran/decl.c:2054
+#: fortran/decl.c:2074
#, gcc-internal-format, gfc-internal-format
msgid "Initialization of pointer at %C is not allowed in a PURE procedure"
msgstr ""
-#: fortran/decl.c:2075
+#: fortran/decl.c:2095
#, gcc-internal-format, gfc-internal-format
msgid "Error in pointer initialization at %C"
msgstr ""
-#: fortran/decl.c:2082
+#: fortran/decl.c:2102
#, gcc-internal-format, gfc-internal-format
msgid "non-NULL pointer initialization at %C"
msgstr ""
-#: fortran/decl.c:2105
+#: fortran/decl.c:2125
#, gcc-internal-format
msgid "Function name %qs not allowed at %C"
msgstr ""
-#: fortran/decl.c:2172
+#: fortran/decl.c:2192
#, gcc-internal-format
msgid "Non-PARAMETER symbol %qs at %L can't be implied-shape"
msgstr ""
-#: fortran/decl.c:2182
+#: fortran/decl.c:2202
#, gcc-internal-format, gfc-internal-format
msgid "Implied-shape array at %L"
msgstr ""
-#: fortran/decl.c:2235
+#: fortran/decl.c:2255
#, 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:2264 fortran/decl.c:7362
+#: fortran/decl.c:2284 fortran/decl.c:7385
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate array spec for Cray pointee at %C"
msgstr ""
-#: fortran/decl.c:2272
+#: fortran/decl.c:2292
#, gcc-internal-format
msgid "Couldn't set pointee array spec."
msgstr ""
-#: fortran/decl.c:2335
+#: fortran/decl.c:2355
#, gcc-internal-format, gfc-internal-format
msgid "Old-style initialization at %C"
msgstr ""
-#: fortran/decl.c:2343
+#: fortran/decl.c:2363
#, gcc-internal-format, gfc-internal-format
msgid "Invalid old style initialization for derived type component at %C"
msgstr ""
-#: fortran/decl.c:2356
+#: fortran/decl.c:2376
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in old style initialization of %s at %C"
msgstr ""
-#: fortran/decl.c:2376 fortran/decl.c:5654
+#: fortran/decl.c:2396 fortran/decl.c:5677
#, gcc-internal-format, gfc-internal-format
msgid "Initialization at %C isn't for a pointer variable"
msgstr ""
-#: fortran/decl.c:2389
+#: fortran/decl.c:2409
#, gcc-internal-format
msgid "Pointer initialization at %C requires %<=>%>, not %<=%>"
msgstr ""
-#: fortran/decl.c:2398 fortran/decl.c:9152
+#: fortran/decl.c:2418 fortran/decl.c:9180
#, gcc-internal-format, gfc-internal-format
msgid "Expected an initialization expression at %C"
msgstr ""
-#: fortran/decl.c:2405
+#: fortran/decl.c:2425
#, gcc-internal-format, gfc-internal-format
msgid "Initialization of variable at %C is not allowed in a PURE procedure"
msgstr ""
-#: fortran/decl.c:2422
+#: fortran/decl.c:2442
#, gcc-internal-format, gfc-internal-format
msgid "Initialization of allocatable component at %C is not allowed"
msgstr ""
-#: fortran/decl.c:2482 fortran/decl.c:2518
+#: fortran/decl.c:2502 fortran/decl.c:2538
#, gcc-internal-format, gfc-internal-format
msgid "Old-style type declaration %s*%d not supported at %C"
msgstr ""
-#: fortran/decl.c:2524
+#: fortran/decl.c:2544
#, gcc-internal-format, gfc-internal-format
msgid "Nonstandard type declaration %s*%d at %C"
msgstr ""
-#: fortran/decl.c:2574 fortran/decl.c:2647
+#: fortran/decl.c:2594 fortran/decl.c:2669
#, gcc-internal-format, gfc-internal-format
msgid "Missing right parenthesis at %C"
msgstr ""
-#: fortran/decl.c:2587 fortran/decl.c:2718
+#: fortran/decl.c:2607 fortran/decl.c:2740
#, gcc-internal-format, gfc-internal-format
msgid "Expected initialization expression at %C"
msgstr ""
-#: fortran/decl.c:2595 fortran/decl.c:2724
+#: fortran/decl.c:2615 fortran/decl.c:2746
#, gcc-internal-format, gfc-internal-format
msgid "Expected scalar initialization expression at %C"
msgstr ""
-#: fortran/decl.c:2623
+#: fortran/decl.c:2645
#, gcc-internal-format, gfc-internal-format
msgid "Kind %d not supported for type %s at %C"
msgstr ""
-#: fortran/decl.c:2636
+#: fortran/decl.c:2658
#, 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:2645
+#: fortran/decl.c:2667
#, gcc-internal-format, gfc-internal-format
msgid "Missing right parenthesis or comma at %C"
msgstr ""
-#: fortran/decl.c:2743
+#: fortran/decl.c:2765
#, gcc-internal-format, gfc-internal-format
msgid "Kind %d is not supported for CHARACTER at %C"
msgstr ""
-#: fortran/decl.c:2875
+#: fortran/decl.c:2897
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in CHARACTER declaration at %C"
msgstr ""
-#: fortran/decl.c:2943
+#: fortran/decl.c:2965
#, gcc-internal-format, gfc-internal-format
msgid "RECORD at %C is an extension, enable it with -fdec-structure"
msgstr ""
-#: fortran/decl.c:2956
+#: fortran/decl.c:2978
#, gcc-internal-format, gfc-internal-format
msgid "Structure name expected after RECORD at %C"
msgstr ""
-#: fortran/decl.c:2995
+#: fortran/decl.c:3017
#, gcc-internal-format, gfc-internal-format
msgid "BYTE type at %C"
msgstr ""
-#: fortran/decl.c:3000
+#: fortran/decl.c:3022
#, gcc-internal-format, gfc-internal-format
msgid "BYTE type used at %C is not available on the target machine"
msgstr ""
-#: fortran/decl.c:3022
+#: fortran/decl.c:3044
#, gcc-internal-format, gfc-internal-format
msgid "Assumed type at %C is not allowed for components"
msgstr ""
-#: fortran/decl.c:3025
+#: fortran/decl.c:3047
#, gcc-internal-format, gfc-internal-format
msgid "Assumed type at %C"
msgstr ""
-#: fortran/decl.c:3048 fortran/decl.c:3079 fortran/decl.c:3108
-#: fortran/decl.c:3324
+#: fortran/decl.c:3070 fortran/decl.c:3101 fortran/decl.c:3130
+#: fortran/decl.c:3346
#, gcc-internal-format, gfc-internal-format
msgid "TYPE with intrinsic-type-spec at %C"
msgstr ""
-#: fortran/decl.c:3104
+#: fortran/decl.c:3126
#, gcc-internal-format, gfc-internal-format
msgid "DOUBLE COMPLEX at %C"
msgstr ""
-#: fortran/decl.c:3141 fortran/decl.c:3250 fortran/decl.c:3263
-#: fortran/decl.c:3719 fortran/decl.c:3727
+#: fortran/decl.c:3163 fortran/decl.c:3272 fortran/decl.c:3285
+#: fortran/decl.c:3741 fortran/decl.c:3749
#, gcc-internal-format
msgid "Type name %qs at %C is ambiguous"
msgstr ""
-#: fortran/decl.c:3217
+#: fortran/decl.c:3239
#, gcc-internal-format, gfc-internal-format
msgid "CLASS statement at %C"
msgstr ""
-#: fortran/decl.c:3278
+#: fortran/decl.c:3300
#, 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:3395
+#: fortran/decl.c:3417
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate IMPLICIT NONE statement at %C"
msgstr ""
-#: fortran/decl.c:3404
+#: fortran/decl.c:3426
#, gcc-internal-format, gfc-internal-format
msgid "IMPORT NONE with spec list at %C"
msgstr ""
-#: fortran/decl.c:3463
+#: fortran/decl.c:3485
#, gcc-internal-format, gfc-internal-format
msgid "Missing character range in IMPLICIT at %C"
msgstr ""
-#: fortran/decl.c:3509
+#: fortran/decl.c:3531
#, gcc-internal-format, gfc-internal-format
msgid "Letters must be in alphabetic order in IMPLICIT statement at %C"
msgstr ""
-#: fortran/decl.c:3562
+#: fortran/decl.c:3584
#, gcc-internal-format, gfc-internal-format
msgid "IMPLICIT statement at %C following an IMPLICIT NONE (type) statement"
msgstr ""
-#: fortran/decl.c:3572
+#: fortran/decl.c:3594
#, gcc-internal-format, gfc-internal-format
msgid "Empty IMPLICIT statement at %C"
msgstr ""
-#: fortran/decl.c:3678
+#: fortran/decl.c:3700
#, gcc-internal-format, gfc-internal-format
msgid "IMPORT statement at %C only permitted in an INTERFACE body"
msgstr ""
-#: fortran/decl.c:3685
+#: fortran/decl.c:3707
#, 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:3690
+#: fortran/decl.c:3712
#, gcc-internal-format, gfc-internal-format
msgid "IMPORT statement at %C"
msgstr ""
-#: fortran/decl.c:3704
+#: fortran/decl.c:3726
#, gcc-internal-format, gfc-internal-format
msgid "Expecting list of named entities at %C"
msgstr ""
-#: fortran/decl.c:3733
+#: fortran/decl.c:3755
#, gcc-internal-format
msgid "Cannot IMPORT %qs from host scoping unit at %C - does not exist."
msgstr ""
-#: fortran/decl.c:3740
+#: fortran/decl.c:3762
#, gcc-internal-format
msgid "%qs is already IMPORTed from host scoping unit at %C"
msgstr ""
-#: fortran/decl.c:3781
+#: fortran/decl.c:3803
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in IMPORT statement at %C"
msgstr ""
-#: fortran/decl.c:4107
+#: fortran/decl.c:4129
#, gcc-internal-format, gfc-internal-format
msgid "Missing codimension specification at %C"
msgstr ""
-#: fortran/decl.c:4109
+#: fortran/decl.c:4131
#, gcc-internal-format, gfc-internal-format
msgid "Missing dimension specification at %C"
msgstr ""
-#: fortran/decl.c:4198
+#: fortran/decl.c:4220
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate %s attribute at %L"
msgstr ""
-#: fortran/decl.c:4213
-#, gcc-internal-format, gfc-internal-format
-msgid "%s at %L is a DEC extension, enable with -fdec-static"
+#: fortran/decl.c:4235
+#, gcc-internal-format
+msgid "%s at %L is a DEC extension, enable with %<-fdec-static%>"
msgstr ""
-#: fortran/decl.c:4229
+#: fortran/decl.c:4252
#, gcc-internal-format, gfc-internal-format
msgid "ALLOCATABLE attribute at %C in a TYPE definition"
msgstr ""
-#: fortran/decl.c:4238
+#: fortran/decl.c:4261
#, gcc-internal-format, gfc-internal-format
msgid "Attribute at %L is not allowed in a TYPE definition"
msgstr ""
-#: fortran/decl.c:4256
+#: fortran/decl.c:4279
#, gcc-internal-format, gfc-internal-format
msgid "Attribute %s at %L in a TYPE definition"
msgstr ""
-#: fortran/decl.c:4266
+#: fortran/decl.c:4289
#, 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:4280
+#: fortran/decl.c:4303
#, gcc-internal-format, gfc-internal-format
msgid "ASYNCHRONOUS attribute at %C"
msgstr ""
-#: fortran/decl.c:4291
+#: fortran/decl.c:4314
#, gcc-internal-format, gfc-internal-format
msgid "CONTIGUOUS attribute at %C"
msgstr ""
-#: fortran/decl.c:4338 fortran/decl.c:7666
+#: fortran/decl.c:4361 fortran/decl.c:7689
#, gcc-internal-format, gfc-internal-format
msgid "PROTECTED at %C only allowed in specification part of a module"
msgstr ""
-#: fortran/decl.c:4344
+#: fortran/decl.c:4367
#, gcc-internal-format, gfc-internal-format
msgid "PROTECTED attribute at %C"
msgstr ""
-#: fortran/decl.c:4378
+#: fortran/decl.c:4401
#, gcc-internal-format, gfc-internal-format
msgid "VALUE attribute at %C"
msgstr ""
-#: fortran/decl.c:4385
+#: fortran/decl.c:4408
#, gcc-internal-format, gfc-internal-format
msgid "VOLATILE attribute at %C"
msgstr ""
-#: fortran/decl.c:4392
+#: fortran/decl.c:4415
#, gcc-internal-format
msgid "match_attr_spec(): Bad attribute"
msgstr ""
-#: fortran/decl.c:4432
+#: fortran/decl.c:4455
#, gcc-internal-format, gfc-internal-format
msgid "Multiple identifiers provided with single NAME= specifier at %C"
msgstr ""
-#: fortran/decl.c:4530
+#: fortran/decl.c:4553
#, gcc-internal-format
msgid ""
"Implicitly declared BIND(C) function %qs at %L may not be C interoperable"
msgstr ""
-#: fortran/decl.c:4552
+#: fortran/decl.c:4575
#, 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:4561
+#: fortran/decl.c:4584
#, gcc-internal-format
msgid "Type declaration %qs at %L is not C interoperable but it is BIND(C)"
msgstr ""
-#: fortran/decl.c:4565
+#: fortran/decl.c:4588
#, gcc-internal-format
msgid "Variable %qs at %L may not be a C interoperable kind but it is BIND(C)"
msgstr ""
-#: fortran/decl.c:4577
+#: fortran/decl.c:4600
#, 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:4591
+#: fortran/decl.c:4614
#, gcc-internal-format
msgid "Variable %qs at %L cannot have both the POINTER and BIND(C) attributes"
msgstr ""
-#: fortran/decl.c:4599
+#: fortran/decl.c:4622
#, gcc-internal-format
msgid ""
"Variable %qs at %L cannot have both the ALLOCATABLE and BIND(C) attributes"
msgstr ""
-#: fortran/decl.c:4611
+#: fortran/decl.c:4634
#, gcc-internal-format
msgid "Return type of BIND(C) function %qs at %L cannot be an array"
msgstr ""
-#: fortran/decl.c:4619
+#: fortran/decl.c:4642
#, 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:4630
+#: fortran/decl.c:4653
#, gcc-internal-format
msgid ""
"Symbol %qs at %L is marked PRIVATE but has been given the binding label %qs"
msgstr ""
-#: fortran/decl.c:4704
+#: fortran/decl.c:4727
#, gcc-internal-format, gfc-internal-format
msgid ""
"Need either entity or common block name for attribute specification "
"statement at %C"
msgstr ""
-#: fortran/decl.c:4749
+#: fortran/decl.c:4772
#, gcc-internal-format, gfc-internal-format
msgid ""
"Missing entity or common block name for attribute specification statement at "
"%C"
msgstr ""
-#: fortran/decl.c:4756
+#: fortran/decl.c:4779
#, gcc-internal-format
msgid "Missing symbol"
msgstr ""
-#: fortran/decl.c:4785
+#: fortran/decl.c:4808
#, gcc-internal-format, gfc-internal-format
msgid "BIND(C) statement at %C"
msgstr ""
-#: fortran/decl.c:4869
+#: fortran/decl.c:4892
#, 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:4911
+#: fortran/decl.c:4934
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in anonymous structure declaration at %C"
msgstr ""
-#: fortran/decl.c:4920
+#: fortran/decl.c:4943
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in data declaration at %C"
msgstr ""
-#: fortran/decl.c:4963
+#: fortran/decl.c:4986
#, gcc-internal-format, gfc-internal-format
msgid "MODULE prefix at %C"
msgstr ""
-#: fortran/decl.c:5008
+#: fortran/decl.c:5031
#, gcc-internal-format, gfc-internal-format
msgid "IMPURE procedure at %C"
msgstr ""
-#: fortran/decl.c:5020
+#: fortran/decl.c:5043
#, gcc-internal-format, gfc-internal-format
msgid "PURE and IMPURE must not appear both at %C"
msgstr ""
-#: fortran/decl.c:5066
+#: fortran/decl.c:5089
#, gcc-internal-format, gfc-internal-format
msgid "ELEMENTAL prefix in MODULE PROCEDURE interface is missing at %L"
msgstr ""
-#: fortran/decl.c:5073
+#: fortran/decl.c:5096
#, gcc-internal-format, gfc-internal-format
msgid "PURE prefix in MODULE PROCEDURE interface is missing at %L"
msgstr ""
-#: fortran/decl.c:5080
+#: fortran/decl.c:5103
#, gcc-internal-format, gfc-internal-format
msgid "RECURSIVE prefix in MODULE PROCEDURE interface is missing at %L"
msgstr ""
-#: fortran/decl.c:5143 fortran/primary.c:1783
+#: fortran/decl.c:5166 fortran/primary.c:1783
#, gcc-internal-format, gfc-internal-format
msgid "Alternate-return argument at %C"
msgstr ""
-#: fortran/decl.c:5189
+#: fortran/decl.c:5212
#, gcc-internal-format
msgid "Name %qs at %C is the name of the procedure"
msgstr ""
-#: fortran/decl.c:5201
+#: fortran/decl.c:5224
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk in formal argument list at %C"
msgstr ""
-#: fortran/decl.c:5218
+#: fortran/decl.c:5241
#, gcc-internal-format
msgid "Duplicate symbol %qs in formal argument list at %C"
msgstr ""
-#: fortran/decl.c:5257
+#: fortran/decl.c:5280
#, gcc-internal-format, gfc-internal-format
msgid "Mismatch in MODULE PROCEDURE formal argument names (%s/%s) at %C"
msgstr ""
-#: fortran/decl.c:5263
+#: fortran/decl.c:5286
#, gcc-internal-format, gfc-internal-format
msgid "Mismatch in number of MODULE PROCEDURE formal arguments at %C"
msgstr ""
-#: fortran/decl.c:5302
+#: fortran/decl.c:5325
#, gcc-internal-format, gfc-internal-format
msgid "RESULT variable at %C must be different than function name"
msgstr ""
-#: fortran/decl.c:5379
+#: fortran/decl.c:5402
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after function declaration at %C"
msgstr ""
-#: fortran/decl.c:5389 fortran/decl.c:6487
+#: fortran/decl.c:5412 fortran/decl.c:6510
#, gcc-internal-format, gfc-internal-format
msgid "BIND(C) attribute at %L may not be specified for an internal procedure"
msgstr ""
-#: fortran/decl.c:5593
+#: fortran/decl.c:5616
#, gcc-internal-format, gfc-internal-format
msgid "BIND(C) attribute at %C requires an interface with BIND(C)"
msgstr ""
-#: fortran/decl.c:5600
+#: fortran/decl.c:5623
#, gcc-internal-format, gfc-internal-format
msgid "BIND(C) procedure with NAME may not have POINTER attribute at %C"
msgstr ""
-#: fortran/decl.c:5606
+#: fortran/decl.c:5629
#, gcc-internal-format, gfc-internal-format
msgid "Dummy procedure at %C may not have BIND(C) attribute with NAME"
msgstr ""
-#: fortran/decl.c:5629
+#: fortran/decl.c:5652
#, gcc-internal-format
msgid "Procedure %qs at %L already has basic type of %s"
msgstr ""
-#: fortran/decl.c:5675 fortran/decl.c:5863 fortran/decl.c:9635
+#: fortran/decl.c:5698 fortran/decl.c:5886 fortran/decl.c:9663
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in PROCEDURE statement at %C"
msgstr ""
-#: fortran/decl.c:5724 fortran/decl.c:9535
+#: fortran/decl.c:5747 fortran/decl.c:9563
#, gcc-internal-format
msgid "Expected %<::%> after binding-attributes at %C"
msgstr ""
-#: fortran/decl.c:5731
+#: fortran/decl.c:5754
#, gcc-internal-format, gfc-internal-format
msgid "NOPASS or explicit interface required at %C"
msgstr ""
-#: fortran/decl.c:5735
+#: fortran/decl.c:5758
#, gcc-internal-format, gfc-internal-format
msgid "Procedure pointer component at %C"
msgstr ""
-#: fortran/decl.c:5807
+#: fortran/decl.c:5830
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in procedure pointer component at %C"
msgstr ""
-#: fortran/decl.c:5825
+#: fortran/decl.c:5848
#, gcc-internal-format, gfc-internal-format
msgid "PROCEDURE at %C must be in a generic interface"
msgstr ""
-#: fortran/decl.c:5834 fortran/decl.c:8371
+#: fortran/decl.c:5857 fortran/decl.c:8398
#, gcc-internal-format, gfc-internal-format
msgid "double colon in MODULE PROCEDURE statement at %L"
msgstr ""
-#: fortran/decl.c:5904
+#: fortran/decl.c:5927
#, gcc-internal-format, gfc-internal-format
msgid "PROCEDURE statement at %C"
msgstr ""
-#: fortran/decl.c:5976
+#: fortran/decl.c:5999
#, gcc-internal-format, gfc-internal-format
msgid "Expected formal argument list in function definition at %C"
msgstr ""
-#: fortran/decl.c:6000 fortran/decl.c:6004 fortran/decl.c:6259
-#: fortran/decl.c:6263 fortran/decl.c:6455 fortran/decl.c:6459
+#: fortran/decl.c:6023 fortran/decl.c:6027 fortran/decl.c:6282
+#: fortran/decl.c:6286 fortran/decl.c:6478 fortran/decl.c:6482
#: fortran/symbol.c:1785
#, 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:6157
+#: fortran/decl.c:6180
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C"
msgstr ""
-#: fortran/decl.c:6166
+#: fortran/decl.c:6189
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a PROGRAM"
msgstr ""
-#: fortran/decl.c:6169
+#: fortran/decl.c:6192
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a MODULE"
msgstr ""
-#: fortran/decl.c:6172
+#: fortran/decl.c:6195
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a SUBMODULE"
msgstr ""
-#: fortran/decl.c:6175
+#: fortran/decl.c:6198
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a BLOCK DATA"
msgstr ""
-#: fortran/decl.c:6179 fortran/decl.c:6224
+#: fortran/decl.c:6202 fortran/decl.c:6247
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within an INTERFACE"
msgstr ""
-#: fortran/decl.c:6183
+#: fortran/decl.c:6206
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a STRUCTURE block"
msgstr ""
-#: fortran/decl.c:6187
+#: fortran/decl.c:6210
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a DERIVED TYPE block"
msgstr ""
-#: fortran/decl.c:6191
+#: fortran/decl.c:6214
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within an IF-THEN block"
msgstr ""
-#: fortran/decl.c:6196
+#: fortran/decl.c:6219
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a DO block"
msgstr ""
-#: fortran/decl.c:6200
+#: fortran/decl.c:6223
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a SELECT block"
msgstr ""
-#: fortran/decl.c:6204
+#: fortran/decl.c:6227
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a FORALL block"
msgstr ""
-#: fortran/decl.c:6208
+#: fortran/decl.c:6231
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a WHERE block"
msgstr ""
-#: fortran/decl.c:6212
+#: fortran/decl.c:6235
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a contained subprogram"
msgstr ""
-#: fortran/decl.c:6216
+#: fortran/decl.c:6239
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected ENTRY statement at %C"
msgstr ""
-#: fortran/decl.c:6237
+#: fortran/decl.c:6260
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear in a contained procedure"
msgstr ""
-#: fortran/decl.c:6288 fortran/decl.c:6494
+#: fortran/decl.c:6311 fortran/decl.c:6517
#, gcc-internal-format, gfc-internal-format
msgid "Missing required parentheses before BIND(C) at %C"
msgstr ""
-#: fortran/decl.c:6556 fortran/decl.c:6563
+#: fortran/decl.c:6579 fortran/decl.c:6586
#, gcc-internal-format, gfc-internal-format
msgid "Invalid C identifier in NAME= specifier at %C"
msgstr ""
-#: fortran/decl.c:6603
+#: fortran/decl.c:6626
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in NAME= specifier for binding label at %C"
msgstr ""
-#: fortran/decl.c:6619
+#: fortran/decl.c:6642
#, gcc-internal-format, gfc-internal-format
msgid "NAME= specifier at %C should be a constant expression"
msgstr ""
-#: fortran/decl.c:6627
+#: fortran/decl.c:6650
#, gcc-internal-format, gfc-internal-format
msgid "NAME= specifier at %C should be a scalar of default character kind"
msgstr ""
-#: fortran/decl.c:6646
+#: fortran/decl.c:6669
#, gcc-internal-format, gfc-internal-format
msgid "Missing closing paren for binding label at %C"
msgstr ""
-#: fortran/decl.c:6652
+#: fortran/decl.c:6675
#, gcc-internal-format, gfc-internal-format
msgid "No binding name is allowed in BIND(C) at %C"
msgstr ""
-#: fortran/decl.c:6658
+#: fortran/decl.c:6681
#, 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:6687
+#: fortran/decl.c:6710
#, gcc-internal-format, gfc-internal-format
msgid "NAME not allowed on BIND(C) for ABSTRACT INTERFACE at %C"
msgstr ""
-#: fortran/decl.c:6932
+#: fortran/decl.c:6955
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected END statement at %C"
msgstr ""
-#: fortran/decl.c:6941
+#: fortran/decl.c:6964
#, 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:6950
+#: fortran/decl.c:6973
#, gcc-internal-format, gfc-internal-format
msgid "%s statement expected at %L"
msgstr ""
-#: fortran/decl.c:6961
+#: fortran/decl.c:6984
#, gcc-internal-format, gfc-internal-format
msgid "Expecting %s statement at %L"
msgstr ""
-#: fortran/decl.c:6981
+#: fortran/decl.c:7004
#, gcc-internal-format
msgid "Expected block name of %qs in %s statement at %L"
msgstr ""
-#: fortran/decl.c:6998
+#: fortran/decl.c:7021
#, gcc-internal-format, gfc-internal-format
msgid "Expected terminating name at %C"
msgstr ""
-#: fortran/decl.c:7012 fortran/decl.c:7020
+#: fortran/decl.c:7035 fortran/decl.c:7043
#, gcc-internal-format
msgid "Expected label %qs for %s statement at %C"
msgstr ""
-#: fortran/decl.c:7119
+#: fortran/decl.c:7142
#, gcc-internal-format, gfc-internal-format
msgid "Missing array specification at %L in DIMENSION statement"
msgstr ""
-#: fortran/decl.c:7127
+#: fortran/decl.c:7150
#, gcc-internal-format, gfc-internal-format
msgid "Dimensions specified for %s at %L after its initialization"
msgstr ""
-#: fortran/decl.c:7135
+#: fortran/decl.c:7158
#, gcc-internal-format, gfc-internal-format
msgid "Missing array specification at %L in CODIMENSION statement"
msgstr ""
-#: fortran/decl.c:7144
+#: fortran/decl.c:7167
#, gcc-internal-format, gfc-internal-format
msgid "Array specification must be deferred at %L"
msgstr ""
-#: fortran/decl.c:7242
+#: fortran/decl.c:7265
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected character in variable list at %C"
msgstr ""
-#: fortran/decl.c:7279
+#: fortran/decl.c:7302
#, gcc-internal-format
msgid "Expected %<(%> at %C"
msgstr ""
-#: fortran/decl.c:7293 fortran/decl.c:7333
+#: fortran/decl.c:7316 fortran/decl.c:7356
#, gcc-internal-format, gfc-internal-format
msgid "Expected variable name at %C"
msgstr ""
-#: fortran/decl.c:7309
+#: fortran/decl.c:7332
#, gcc-internal-format, gfc-internal-format
msgid "Cray pointer at %C must be an integer"
msgstr ""
-#: fortran/decl.c:7313
+#: fortran/decl.c:7336
#, 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:7319
+#: fortran/decl.c:7342
#, gcc-internal-format, gfc-internal-format
msgid "Expected \",\" at %C"
msgstr ""
-#: fortran/decl.c:7358
+#: fortran/decl.c:7381
#, gcc-internal-format
msgid "Couldn't set Cray pointee array spec."
msgstr ""
-#: fortran/decl.c:7382
+#: fortran/decl.c:7405
#, gcc-internal-format, gfc-internal-format
msgid "Expected \")\" at %C"
msgstr ""
-#: fortran/decl.c:7394
+#: fortran/decl.c:7417
#, gcc-internal-format
msgid "Expected %<,%> or end of statement at %C"
msgstr ""
-#: fortran/decl.c:7420
+#: fortran/decl.c:7443
#, gcc-internal-format, gfc-internal-format
msgid "INTENT is not allowed inside of BLOCK at %C"
msgstr ""
-#: fortran/decl.c:7452
+#: fortran/decl.c:7475
#, gcc-internal-format, gfc-internal-format
msgid "OPTIONAL is not allowed inside of BLOCK at %C"
msgstr ""
-#: fortran/decl.c:7471
+#: fortran/decl.c:7494
#, gcc-internal-format, gfc-internal-format
msgid "Cray pointer declaration at %C requires -fcray-pointer flag"
msgstr ""
-#: fortran/decl.c:7510
+#: fortran/decl.c:7533
#, gcc-internal-format, gfc-internal-format
msgid "CONTIGUOUS statement at %C"
msgstr ""
-#: fortran/decl.c:7616
+#: fortran/decl.c:7639
#, gcc-internal-format, gfc-internal-format
msgid ""
"Access specification of the %s operator at %C has already been specified"
msgstr ""
-#: fortran/decl.c:7633
+#: fortran/decl.c:7656
#, gcc-internal-format, gfc-internal-format
msgid ""
"Access specification of the .%s. operator at %C has already been specified"
msgstr ""
-#: fortran/decl.c:7672
+#: fortran/decl.c:7695
#, gcc-internal-format, gfc-internal-format
msgid "PROTECTED statement at %C"
msgstr ""
-#: fortran/decl.c:7710
+#: fortran/decl.c:7733
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in PROTECTED statement at %C"
msgstr ""
-#: fortran/decl.c:7734
+#: fortran/decl.c:7757
#, 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:7771
+#: fortran/decl.c:7794
#, 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:7799
+#: fortran/decl.c:7822
#, gcc-internal-format, gfc-internal-format
msgid "Expected variable name at %C in PARAMETER statement"
msgstr ""
-#: fortran/decl.c:7806
+#: fortran/decl.c:7829
#, gcc-internal-format, gfc-internal-format
msgid "Expected = sign in PARAMETER statement at %C"
msgstr ""
-#: fortran/decl.c:7812
+#: fortran/decl.c:7835
#, gcc-internal-format, gfc-internal-format
msgid "Expected expression at %C in PARAMETER statement"
msgstr ""
-#: fortran/decl.c:7832
+#: fortran/decl.c:7855
#, gcc-internal-format, gfc-internal-format
msgid "Initializing already initialized variable at %C"
msgstr ""
#. With legacy PARAMETER statements, don't expect a terminating ')'.
-#: fortran/decl.c:7857
+#: fortran/decl.c:7880
#, gcc-internal-format, gfc-internal-format
msgid "PARAMETER without '()' at %C"
msgstr ""
-#: fortran/decl.c:7873
+#: fortran/decl.c:7896
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected characters in PARAMETER statement at %C"
msgstr ""
-#: fortran/decl.c:7892
-#, gcc-internal-format, gfc-internal-format
-msgid "AUTOMATIC at %C is a DEC extension, enable with -fdec-static"
+#: fortran/decl.c:7915 fortran/decl.c:7971
+#, gcc-internal-format
+msgid "%s at %C is a DEC extension, enable with %<-fdec-static%>"
msgstr ""
-#: fortran/decl.c:7925
+#: fortran/decl.c:7950
#, gcc-internal-format, gfc-internal-format
msgid "Expected entity-list in AUTOMATIC statement at %C"
msgstr ""
-#: fortran/decl.c:7932
+#: fortran/decl.c:7957
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in AUTOMATIC statement at %C"
msgstr ""
-#: fortran/decl.c:7946
-#, gcc-internal-format, gfc-internal-format
-msgid "STATIC at %C is a DEC extension, enable with -fdec-static"
-msgstr ""
-
-#: fortran/decl.c:7979
+#: fortran/decl.c:8006
#, gcc-internal-format, gfc-internal-format
msgid "Expected entity-list in STATIC statement at %C"
msgstr ""
-#: fortran/decl.c:7986
+#: fortran/decl.c:8013
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in STATIC statement at %C"
msgstr ""
-#: fortran/decl.c:8005
+#: fortran/decl.c:8032
#, gcc-internal-format, gfc-internal-format
msgid "Blanket SAVE statement at %C follows previous SAVE statement"
msgstr ""
-#: fortran/decl.c:8016
+#: fortran/decl.c:8043
#, gcc-internal-format, gfc-internal-format
msgid "SAVE statement at %C follows blanket SAVE statement"
msgstr ""
-#: fortran/decl.c:8062
+#: fortran/decl.c:8089
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in SAVE statement at %C"
msgstr ""
-#: fortran/decl.c:8076
+#: fortran/decl.c:8103
#, gcc-internal-format, gfc-internal-format
msgid "VALUE is not allowed inside of BLOCK at %C"
msgstr ""
-#: fortran/decl.c:8080
+#: fortran/decl.c:8107
#, gcc-internal-format, gfc-internal-format
msgid "VALUE statement at %C"
msgstr ""
-#: fortran/decl.c:8118
+#: fortran/decl.c:8145
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in VALUE statement at %C"
msgstr ""
-#: fortran/decl.c:8129
+#: fortran/decl.c:8156
#, gcc-internal-format, gfc-internal-format
msgid "VOLATILE statement at %C"
msgstr ""
-#: fortran/decl.c:8152
+#: fortran/decl.c:8179
#, gcc-internal-format
msgid ""
"Specifying VOLATILE for coarray variable %qs at %C, which is use-/host-"
"associated"
msgstr ""
-#: fortran/decl.c:8177
+#: fortran/decl.c:8204
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in VOLATILE statement at %C"
msgstr ""
-#: fortran/decl.c:8188
+#: fortran/decl.c:8215
#, gcc-internal-format, gfc-internal-format
msgid "ASYNCHRONOUS statement at %C"
msgstr ""
-#: fortran/decl.c:8228
+#: fortran/decl.c:8255
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in ASYNCHRONOUS statement at %C"
msgstr ""
-#: fortran/decl.c:8253
+#: fortran/decl.c:8280
#, gcc-internal-format, gfc-internal-format
msgid "MODULE PROCEDURE declaration at %C"
msgstr ""
-#: fortran/decl.c:8346
+#: fortran/decl.c:8373
#, gcc-internal-format, gfc-internal-format
msgid "MODULE PROCEDURE at %C must be in a generic module interface"
msgstr ""
-#: fortran/decl.c:8404
+#: fortran/decl.c:8431
#, gcc-internal-format, gfc-internal-format
msgid "Intrinsic procedure at %L cannot be a MODULE PROCEDURE"
msgstr ""
-#: fortran/decl.c:8453
+#: fortran/decl.c:8480
#, gcc-internal-format, gfc-internal-format
msgid "Ambiguous symbol in TYPE definition at %C"
msgstr ""
-#: fortran/decl.c:8462
+#: fortran/decl.c:8489
#, gcc-internal-format
msgid "Symbol %qs at %C has not been previously defined"
msgstr ""
-#: fortran/decl.c:8468
+#: fortran/decl.c:8495
#, gcc-internal-format
msgid "%qs in EXTENDS expression at %C is not a derived type"
msgstr ""
-#: fortran/decl.c:8475
+#: fortran/decl.c:8502
#, gcc-internal-format
msgid "%qs cannot be extended at %C because it is BIND(C)"
msgstr ""
-#: fortran/decl.c:8482
+#: fortran/decl.c:8509
#, gcc-internal-format
msgid "%qs cannot be extended at %C because it is a SEQUENCE type"
msgstr ""
-#: fortran/decl.c:8505
+#: fortran/decl.c:8532
#, 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:8517
+#: fortran/decl.c:8544
#, 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:8538
+#: fortran/decl.c:8565
#, gcc-internal-format, gfc-internal-format
msgid "ABSTRACT type at %C"
msgstr ""
-#: fortran/decl.c:8584
+#: fortran/decl.c:8611
#, gcc-internal-format, gfc-internal-format
msgid "Failed to create structure type '%s' at %C"
msgstr ""
-#: fortran/decl.c:8590
+#: fortran/decl.c:8617
#, gcc-internal-format
msgid "Type definition of %qs at %C was already defined at %L"
msgstr ""
-#: fortran/decl.c:8637
+#: fortran/decl.c:8664
#, gcc-internal-format, gfc-internal-format
msgid "Junk after MAP statement at %C"
msgstr ""
-#: fortran/decl.c:8670
+#: fortran/decl.c:8697
#, gcc-internal-format, gfc-internal-format
msgid "Junk after UNION statement at %C"
msgstr ""
-#: fortran/decl.c:8705
-#, gcc-internal-format, gfc-internal-format
-msgid "STRUCTURE at %C is a DEC extension, enable with -fdec-structure"
+#: fortran/decl.c:8732
+#, gcc-internal-format
+msgid "%s at %C is a DEC extension, enable with %<-fdec-structure%>"
msgstr ""
-#: fortran/decl.c:8718
+#: fortran/decl.c:8746
#, gcc-internal-format, gfc-internal-format
msgid "Structure name expected in non-nested structure declaration at %C"
msgstr ""
-#: fortran/decl.c:8736
+#: fortran/decl.c:8764
#, gcc-internal-format, gfc-internal-format
msgid "Junk after non-nested STRUCTURE statement at %C"
msgstr ""
-#: fortran/decl.c:8743
+#: fortran/decl.c:8771
#, gcc-internal-format
msgid "Structure name %qs at %C cannot be the same as an intrinsic type"
msgstr ""
-#: fortran/decl.c:8897
+#: fortran/decl.c:8925
#, gcc-internal-format, gfc-internal-format
msgid "Expected :: in TYPE definition at %C"
msgstr ""
-#: fortran/decl.c:8908
+#: fortran/decl.c:8936
#, gcc-internal-format
msgid "Type name %qs at %C cannot be the same as an intrinsic type"
msgstr ""
-#: fortran/decl.c:8918
+#: fortran/decl.c:8946
#, gcc-internal-format
msgid "Derived type name %qs at %C already has a basic type of %s"
msgstr ""
-#: fortran/decl.c:8935
+#: fortran/decl.c:8963
#, gcc-internal-format
msgid "Derived type definition of %qs at %C has already been defined"
msgstr ""
-#: fortran/decl.c:9038
+#: fortran/decl.c:9066
#, gcc-internal-format, gfc-internal-format
msgid "Cray Pointee at %C cannot be assumed shape array"
msgstr ""
-#: fortran/decl.c:9058
+#: fortran/decl.c:9086
#, gcc-internal-format, gfc-internal-format
msgid "ENUM and ENUMERATOR at %C"
msgstr ""
-#: fortran/decl.c:9090
+#: fortran/decl.c:9118
#, gcc-internal-format, gfc-internal-format
msgid "Enumerator exceeds the C integer type at %C"
msgstr ""
-#: fortran/decl.c:9169
+#: fortran/decl.c:9197
#, gcc-internal-format, gfc-internal-format
msgid "ENUMERATOR %L not initialized with integer expression"
msgstr ""
-#: fortran/decl.c:9217
+#: fortran/decl.c:9245
#, gcc-internal-format, gfc-internal-format
msgid "ENUM definition statement expected before %C"
msgstr ""
-#: fortran/decl.c:9253
+#: fortran/decl.c:9281
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in ENUMERATOR definition at %C"
msgstr ""
-#: fortran/decl.c:9300 fortran/decl.c:9315
+#: fortran/decl.c:9328 fortran/decl.c:9343
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate access-specifier at %C"
msgstr ""
-#: fortran/decl.c:9335
+#: fortran/decl.c:9363
#, gcc-internal-format, gfc-internal-format
msgid "Binding attributes already specify passing, illegal NOPASS at %C"
msgstr ""
-#: fortran/decl.c:9355
+#: fortran/decl.c:9383
#, gcc-internal-format, gfc-internal-format
msgid "Binding attributes already specify passing, illegal PASS at %C"
msgstr ""
-#: fortran/decl.c:9382
+#: fortran/decl.c:9410
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate POINTER attribute at %C"
msgstr ""
-#: fortran/decl.c:9400
+#: fortran/decl.c:9428
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate NON_OVERRIDABLE at %C"
msgstr ""
-#: fortran/decl.c:9416
+#: fortran/decl.c:9444
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate DEFERRED at %C"
msgstr ""
-#: fortran/decl.c:9429
+#: fortran/decl.c:9457
#, gcc-internal-format, gfc-internal-format
msgid "Expected access-specifier at %C"
msgstr ""
-#: fortran/decl.c:9431
+#: fortran/decl.c:9459
#, gcc-internal-format, gfc-internal-format
msgid "Expected binding attribute at %C"
msgstr ""
-#: fortran/decl.c:9439
+#: fortran/decl.c:9467
#, gcc-internal-format, gfc-internal-format
msgid "NON_OVERRIDABLE and DEFERRED can't both appear at %C"
msgstr ""
-#: fortran/decl.c:9451
+#: fortran/decl.c:9479
#, gcc-internal-format, gfc-internal-format
msgid "POINTER attribute is required for procedure pointer component at %C"
msgstr ""
-#: fortran/decl.c:9493
+#: fortran/decl.c:9521
#, gcc-internal-format
msgid "Interface-name expected after %<(%> at %C"
msgstr ""
-#: fortran/decl.c:9499
+#: fortran/decl.c:9527
#, gcc-internal-format
msgid "%<)%> expected at %C"
msgstr ""
-#: fortran/decl.c:9519
+#: fortran/decl.c:9547
#, gcc-internal-format, gfc-internal-format
msgid "Interface must be specified for DEFERRED binding at %C"
msgstr ""
-#: fortran/decl.c:9524
+#: fortran/decl.c:9552
#, gcc-internal-format, gfc-internal-format
msgid "PROCEDURE(interface) at %C should be declared DEFERRED"
msgstr ""
-#: fortran/decl.c:9547
+#: fortran/decl.c:9575
#, gcc-internal-format, gfc-internal-format
msgid "Expected binding name at %C"
msgstr ""
-#: fortran/decl.c:9551
+#: fortran/decl.c:9579
#, gcc-internal-format, gfc-internal-format
msgid "PROCEDURE list at %C"
msgstr ""
-#: fortran/decl.c:9563
+#: fortran/decl.c:9591
#, gcc-internal-format
msgid "%<=> target%> is invalid for DEFERRED binding at %C"
msgstr ""
-#: fortran/decl.c:9569
+#: fortran/decl.c:9597
#, gcc-internal-format
msgid "%<::%> needed in PROCEDURE binding with explicit target at %C"
msgstr ""
-#: fortran/decl.c:9579
+#: fortran/decl.c:9607
#, gcc-internal-format
msgid "Expected binding target after %<=>%> at %C"
msgstr ""
-#: fortran/decl.c:9596
+#: fortran/decl.c:9624
#, gcc-internal-format
msgid "Type %qs containing DEFERRED binding at %C is not ABSTRACT"
msgstr ""
-#: fortran/decl.c:9607
+#: fortran/decl.c:9635
#, gcc-internal-format
msgid ""
"There is already a procedure with binding name %qs for the derived type %qs "
"at %C"
msgstr ""
-#: fortran/decl.c:9658
+#: fortran/decl.c:9686
#, gcc-internal-format, gfc-internal-format
msgid "GENERIC at %C must be inside a derived-type CONTAINS"
msgstr ""
-#: fortran/decl.c:9678
+#: fortran/decl.c:9706
#, gcc-internal-format
msgid "Expected %<::%> at %C"
msgstr ""
-#: fortran/decl.c:9690
+#: fortran/decl.c:9718
#, gcc-internal-format, gfc-internal-format
msgid "Expected generic name or operator descriptor at %C"
msgstr ""
-#: fortran/decl.c:9711
+#: fortran/decl.c:9739
#, gcc-internal-format, gfc-internal-format
msgid "Malformed GENERIC statement at %C"
msgstr ""
-#: fortran/decl.c:9722
+#: fortran/decl.c:9750
#, gcc-internal-format
msgid "Expected %<=>%> at %C"
msgstr ""
-#: fortran/decl.c:9758
+#: fortran/decl.c:9786
#, 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:9766
+#: fortran/decl.c:9794
#, gcc-internal-format
msgid "Binding at %C must have the same access as already defined binding %qs"
msgstr ""
-#: fortran/decl.c:9814
+#: fortran/decl.c:9842
#, gcc-internal-format, gfc-internal-format
msgid "Expected specific binding name at %C"
msgstr ""
-#: fortran/decl.c:9824
+#: fortran/decl.c:9852
#, gcc-internal-format
msgid "%qs already defined as specific binding for the generic %qs at %C"
msgstr ""
-#: fortran/decl.c:9842
+#: fortran/decl.c:9870
#, gcc-internal-format, gfc-internal-format
msgid "Junk after GENERIC binding at %C"
msgstr ""
-#: fortran/decl.c:9877
+#: fortran/decl.c:9905
#, gcc-internal-format, gfc-internal-format
msgid "FINAL declaration at %C must be inside a derived type CONTAINS section"
msgstr ""
-#: fortran/decl.c:9888
+#: fortran/decl.c:9916
#, 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:9910
+#: fortran/decl.c:9938
#, gcc-internal-format, gfc-internal-format
msgid "Empty FINAL at %C"
msgstr ""
-#: fortran/decl.c:9917
+#: fortran/decl.c:9945
#, gcc-internal-format, gfc-internal-format
msgid "Expected module procedure name at %C"
msgstr ""
-#: fortran/decl.c:9927
+#: fortran/decl.c:9955
#, gcc-internal-format
msgid "Expected %<,%> at %C"
msgstr ""
-#: fortran/decl.c:9933
+#: fortran/decl.c:9961
#, gcc-internal-format
msgid "Unknown procedure name %qs at %C"
msgstr ""
-#: fortran/decl.c:9946
+#: fortran/decl.c:9974
#, gcc-internal-format
-msgid "%qs at %C is already defined as FINAL procedure!"
+msgid "%qs at %C is already defined as FINAL procedure"
msgstr ""
-#: fortran/decl.c:10016
+#: fortran/decl.c:10044
#, gcc-internal-format, gfc-internal-format
msgid "Unknown attribute in !GCC$ ATTRIBUTES statement at %C"
msgstr ""
-#: fortran/decl.c:10062
+#: fortran/decl.c:10090
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in !GCC$ ATTRIBUTES statement at %C"
msgstr ""
@@ -52559,7 +53469,7 @@ msgstr ""
#: fortran/dump-parse-tree.c:576
#, gcc-internal-format
-msgid "show_expr(): Bad intrinsic in expression!"
+msgid "show_expr(): Bad intrinsic in expression"
msgstr ""
#: fortran/dump-parse-tree.c:619
@@ -52567,7 +53477,7 @@ msgstr ""
msgid "show_expr(): Don't know how to show expr"
msgstr ""
-#: fortran/dump-parse-tree.c:2756
+#: fortran/dump-parse-tree.c:2760
#, gcc-internal-format
msgid "show_code_node(): Bad statement code"
msgstr ""
@@ -53115,102 +54025,102 @@ msgid ""
"Procedure pointer initialization target at %L may not be a procedure pointer"
msgstr ""
-#: fortran/expr.c:5234
+#: fortran/expr.c:5243
#, gcc-internal-format, gfc-internal-format
msgid ""
"Fortran 2008: Pointer functions in variable definition context (%s) at %L"
msgstr ""
-#: fortran/expr.c:5242
+#: fortran/expr.c:5251
#, gcc-internal-format, gfc-internal-format
msgid "Non-variable expression in variable definition context (%s) at %L"
msgstr ""
-#: fortran/expr.c:5250
+#: fortran/expr.c:5259
#, gcc-internal-format
msgid "Named constant %qs in variable definition context (%s) at %L"
msgstr ""
-#: fortran/expr.c:5259
+#: fortran/expr.c:5268
#, gcc-internal-format
msgid "%qs in variable definition context (%s) at %L is not a variable"
msgstr ""
-#: fortran/expr.c:5270
+#: fortran/expr.c:5279
#, gcc-internal-format, gfc-internal-format
msgid "Non-POINTER in pointer association context (%s) at %L"
msgstr ""
-#: fortran/expr.c:5279
+#: fortran/expr.c:5288
#, gcc-internal-format, gfc-internal-format
msgid "Type inaccessible in variable definition context (%s) at %L"
msgstr ""
-#: fortran/expr.c:5292
+#: fortran/expr.c:5301
#, gcc-internal-format, gfc-internal-format
msgid "LOCK_TYPE in variable definition context (%s) at %L"
msgstr ""
-#: fortran/expr.c:5305
+#: fortran/expr.c:5314
#, gcc-internal-format, gfc-internal-format
msgid "LOCK_EVENT in variable definition context (%s) at %L"
msgstr ""
-#: fortran/expr.c:5335
+#: fortran/expr.c:5344
#, gcc-internal-format
msgid ""
"Dummy argument %qs with INTENT(IN) in pointer association context (%s) at %L"
msgstr ""
-#: fortran/expr.c:5343
+#: fortran/expr.c:5352
#, gcc-internal-format
msgid ""
"Dummy argument %qs with INTENT(IN) in variable definition context (%s) at %L"
msgstr ""
-#: fortran/expr.c:5356
+#: fortran/expr.c:5365
#, gcc-internal-format
msgid ""
"Variable %qs is PROTECTED and can not appear in a pointer association "
"context (%s) at %L"
msgstr ""
-#: fortran/expr.c:5364
+#: fortran/expr.c:5373
#, gcc-internal-format
msgid ""
"Variable %qs is PROTECTED and can not appear in a variable definition "
"context (%s) at %L"
msgstr ""
-#: fortran/expr.c:5376
+#: fortran/expr.c:5385
#, gcc-internal-format
msgid ""
"Variable %qs can not appear in a variable definition context (%s) at %L in "
"PURE procedure"
msgstr ""
-#: fortran/expr.c:5435
+#: fortran/expr.c:5444
#, 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:5439
+#: fortran/expr.c:5448
#, gcc-internal-format
msgid ""
"%qs at %L associated to expression can not be used in a variable definition "
"context (%s)"
msgstr ""
-#: fortran/expr.c:5450
+#: fortran/expr.c:5459
#, 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:5492
+#: fortran/expr.c:5501
#, gcc-internal-format, gfc-internal-format
msgid ""
"Elements with the same value at %L and %L in vector subscript in a variable "
@@ -53222,72 +54132,82 @@ msgstr ""
msgid "can't open input file: %s"
msgstr ""
-#: fortran/frontend-passes.c:167
+#: fortran/frontend-passes.c:173
#, gcc-internal-format
msgid "No location in statement"
msgstr ""
-#: fortran/frontend-passes.c:182
+#: fortran/frontend-passes.c:188
#, gcc-internal-format, gfc-internal-format
msgid "No location in expression near %L"
msgstr ""
-#: fortran/frontend-passes.c:381
+#: fortran/frontend-passes.c:387
#, gcc-internal-format
msgid "Illegal id in copy_walk_reduction_arg"
msgstr ""
-#: fortran/frontend-passes.c:781 fortran/trans-array.c:1044
-#: fortran/trans-array.c:6232 fortran/trans-array.c:7633
+#: fortran/frontend-passes.c:787 fortran/trans-array.c:1044
+#: fortran/trans-array.c:6235 fortran/trans-array.c:7636
#: fortran/trans-intrinsic.c:7067
#, gcc-internal-format, gfc-internal-format
msgid "Creating array temporary at %L"
msgstr ""
-#: fortran/frontend-passes.c:806 fortran/frontend-passes.c:810
+#: fortran/frontend-passes.c:812 fortran/frontend-passes.c:816
#, gcc-internal-format
msgid "Removing call to function %qs at %L"
msgstr ""
-#: fortran/frontend-passes.c:1797
+#: fortran/frontend-passes.c:1233 fortran/frontend-passes.c:1272
+#, gcc-internal-format
+msgid "bad expression"
+msgstr ""
+
+#: fortran/frontend-passes.c:1268
+#, gcc-internal-format
+msgid "bad op"
+msgstr ""
+
+#: fortran/frontend-passes.c:2084
#, gcc-internal-format
msgid "illegal OP in optimize_comparison"
msgstr ""
-#: fortran/frontend-passes.c:1989
+#: fortran/frontend-passes.c:2276
#, 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:1996
+#: fortran/frontend-passes.c:2283
#, 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:2061
+#: fortran/frontend-passes.c:2348
#, 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:2067
+#: fortran/frontend-passes.c:2354
#, 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:2315 fortran/trans-expr.c:1526
+#: fortran/frontend-passes.c:2746 fortran/trans-expr.c:1526
#, gcc-internal-format, gfc-internal-format
msgid "Code for reallocating the allocatable array at %L will be added"
msgstr ""
-#: fortran/frontend-passes.c:2794
+#: fortran/frontend-passes.c:3239
#, gcc-internal-format
msgid "Scalarization using DIMEN_RANGE unimplemented"
msgstr ""
@@ -53411,12 +54331,12 @@ msgstr ""
msgid "Second argument of defined assignment at %L must be INTENT(IN)"
msgstr ""
-#: fortran/interface.c:965 fortran/resolve.c:15914
+#: fortran/interface.c:965 fortran/resolve.c:15879
#, gcc-internal-format, gfc-internal-format
msgid "First argument of operator interface at %L must be INTENT(IN)"
msgstr ""
-#: fortran/interface.c:972 fortran/resolve.c:15932
+#: fortran/interface.c:972 fortran/resolve.c:15897
#, gcc-internal-format, gfc-internal-format
msgid "Second argument of operator interface at %L must be INTENT(IN)"
msgstr ""
@@ -53808,287 +54728,287 @@ msgstr ""
msgid "Missing actual argument for argument %qs at %L"
msgstr ""
-#: fortran/interface.c:3367
+#: fortran/interface.c:3369
#, gcc-internal-format
msgid "compare_actual_expr(): Bad component code"
msgstr ""
-#: fortran/interface.c:3396
+#: fortran/interface.c:3398
#, gcc-internal-format
msgid "check_some_aliasing(): List mismatch"
msgstr ""
-#: fortran/interface.c:3422
+#: fortran/interface.c:3424
#, gcc-internal-format
msgid "check_some_aliasing(): corrupted data"
msgstr ""
-#: fortran/interface.c:3432
+#: fortran/interface.c:3434
#, gcc-internal-format
msgid ""
"Same actual argument associated with INTENT(%s) argument %qs and INTENT(%s) "
"argument %qs at %L"
msgstr ""
-#: fortran/interface.c:3462
+#: fortran/interface.c:3464
#, gcc-internal-format
msgid "check_intents(): List mismatch"
msgstr ""
-#: fortran/interface.c:3482
+#: fortran/interface.c:3484
#, 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:3494
+#: fortran/interface.c:3496
#, 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:3504
+#: fortran/interface.c:3506
#, 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:3515
+#: fortran/interface.c:3517
#, gcc-internal-format
msgid ""
"Coindexed polymorphic actual argument at %L is passed polymorphic dummy "
"argument %qs"
msgstr ""
-#: fortran/interface.c:3543 fortran/interface.c:3553
+#: fortran/interface.c:3545 fortran/interface.c:3555
#, gcc-internal-format
msgid "Procedure %qs called at %L is not explicitly declared"
msgstr ""
-#: fortran/interface.c:3549
+#: fortran/interface.c:3551
#, gcc-internal-format
msgid "Procedure %qs called with an implicit interface at %L"
msgstr ""
-#: fortran/interface.c:3563
+#: fortran/interface.c:3565
#, 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:3571
+#: fortran/interface.c:3573
#, 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:3579
+#: fortran/interface.c:3581
#, gcc-internal-format
msgid "Allocatable function %qs at %L must have an explicit function interface"
msgstr ""
-#: fortran/interface.c:3589
+#: fortran/interface.c:3591
#, gcc-internal-format
msgid "Keyword argument requires explicit interface for procedure %qs at %L"
msgstr ""
-#: fortran/interface.c:3598
+#: fortran/interface.c:3600
#, gcc-internal-format, gfc-internal-format
msgid "Assumed-type argument %s at %L requires an explicit interface"
msgstr ""
-#: fortran/interface.c:3611
+#: fortran/interface.c:3613
#, 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:3624
+#: fortran/interface.c:3626
#, 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:3633
+#: fortran/interface.c:3635
#, gcc-internal-format, gfc-internal-format
msgid "MOLD argument to NULL required at %L"
msgstr ""
-#: fortran/interface.c:3641
+#: fortran/interface.c:3643
#, gcc-internal-format, gfc-internal-format
msgid "Assumed-rank argument requires an explicit interface at %L"
msgstr ""
-#: fortran/interface.c:3679
+#: fortran/interface.c:3681
#, gcc-internal-format
msgid "Procedure pointer component %qs called with an implicit interface at %L"
msgstr ""
-#: fortran/interface.c:3690
+#: fortran/interface.c:3692
#, gcc-internal-format
msgid ""
"Keyword argument requires explicit interface for procedure pointer component "
"%qs at %L"
msgstr ""
-#: fortran/interface.c:3775
+#: fortran/interface.c:3777
#, 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:3845
+#: fortran/interface.c:3847
#, gcc-internal-format
msgid "Unable to find symbol %qs"
msgstr ""
-#: fortran/interface.c:4212
+#: fortran/interface.c:4214
#, gcc-internal-format
msgid "Entity %qs at %L is already present in the interface"
msgstr ""
-#: fortran/interface.c:4329
+#: fortran/interface.c:4331
#, gcc-internal-format
msgid "gfc_add_interface(): Bad interface type"
msgstr ""
-#: fortran/interface.c:4423
+#: fortran/interface.c:4425
#, gcc-internal-format
msgid "Can't overwrite GENERIC %qs at %L"
msgstr ""
-#: fortran/interface.c:4435
+#: fortran/interface.c:4437
#, gcc-internal-format
msgid "%qs at %L overrides a procedure binding declared NON_OVERRIDABLE"
msgstr ""
-#: fortran/interface.c:4443
+#: fortran/interface.c:4445
#, gcc-internal-format
msgid "%qs at %L must not be DEFERRED as it overrides a non-DEFERRED binding"
msgstr ""
-#: fortran/interface.c:4451
+#: fortran/interface.c:4453
#, gcc-internal-format
msgid "%qs at %L overrides a PURE procedure and must also be PURE"
msgstr ""
-#: fortran/interface.c:4460
+#: fortran/interface.c:4462
#, gcc-internal-format
msgid "%qs at %L overrides an ELEMENTAL procedure and must also be ELEMENTAL"
msgstr ""
-#: fortran/interface.c:4466
+#: fortran/interface.c:4468
#, gcc-internal-format
msgid ""
"%qs at %L overrides a non-ELEMENTAL procedure and must not be ELEMENTAL, "
"either"
msgstr ""
-#: fortran/interface.c:4475
+#: fortran/interface.c:4477
#, gcc-internal-format
msgid "%qs at %L overrides a SUBROUTINE and must also be a SUBROUTINE"
msgstr ""
-#: fortran/interface.c:4486
+#: fortran/interface.c:4488
#, gcc-internal-format
msgid "%qs at %L overrides a FUNCTION and must also be a FUNCTION"
msgstr ""
-#: fortran/interface.c:4494
+#: fortran/interface.c:4496
#, gcc-internal-format
msgid "Result mismatch for the overriding procedure %qs at %L: %s"
msgstr ""
-#: fortran/interface.c:4505
+#: fortran/interface.c:4507
#, gcc-internal-format
msgid "%qs at %L overrides a PUBLIC procedure and must not be PRIVATE"
msgstr ""
-#: fortran/interface.c:4535
+#: fortran/interface.c:4537
#, 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:4547
+#: fortran/interface.c:4549
#, gcc-internal-format
msgid "Argument mismatch for the overriding procedure %qs at %L: %s"
msgstr ""
-#: fortran/interface.c:4556
+#: fortran/interface.c:4558
#, gcc-internal-format
msgid ""
"%qs at %L must have the same number of formal arguments as the overridden "
"procedure"
msgstr ""
-#: fortran/interface.c:4565
+#: fortran/interface.c:4567
#, gcc-internal-format
msgid "%qs at %L overrides a NOPASS binding and must also be NOPASS"
msgstr ""
-#: fortran/interface.c:4576
+#: fortran/interface.c:4578
#, gcc-internal-format
msgid "%qs at %L overrides a binding with PASS and must also be PASS"
msgstr ""
-#: fortran/interface.c:4583
+#: fortran/interface.c:4585
#, gcc-internal-format
msgid ""
"Passed-object dummy argument of %qs at %L must be at the same position as "
"the passed-object dummy argument of the overridden procedure"
msgstr ""
-#: fortran/interface.c:4604
+#: fortran/interface.c:4606
#, gcc-internal-format, gfc-internal-format
msgid "DTIO dummy argument at %L must be of type %s"
msgstr ""
-#: fortran/interface.c:4611
+#: fortran/interface.c:4613
#, gcc-internal-format, gfc-internal-format
msgid "DTIO dummy argument at %L must be of KIND = %d"
msgstr ""
-#: fortran/interface.c:4618
+#: fortran/interface.c:4620
#, gcc-internal-format, gfc-internal-format
msgid "DTIO dummy argument at %L must be a scalar"
msgstr ""
-#: fortran/interface.c:4622
+#: fortran/interface.c:4624
#, gcc-internal-format, gfc-internal-format
msgid "DTIO dummy argument at %L must be an ASSUMED SHAPE ARRAY"
msgstr ""
-#: fortran/interface.c:4626
+#: fortran/interface.c:4628
#, gcc-internal-format, gfc-internal-format
msgid "DTIO dummy argument at %L must have INTENT %s"
msgstr ""
-#: fortran/interface.c:4685 fortran/interface.c:4729
+#: fortran/interface.c:4687 fortran/interface.c:4731
#, gcc-internal-format, gfc-internal-format
msgid "Alternate return at %L is not permitted in a DTIO procedure"
msgstr ""
-#: fortran/interface.c:4697
+#: fortran/interface.c:4699
#, gcc-internal-format
msgid "DTIO procedure %qs at %L must be a subroutine"
msgstr ""
-#: fortran/interface.c:4706
+#: fortran/interface.c:4708
#, gcc-internal-format
msgid "Too few dummy arguments in DTIO procedure %qs at %L"
msgstr ""
-#: fortran/interface.c:4713
+#: fortran/interface.c:4715
#, gcc-internal-format
msgid "Too many dummy arguments in DTIO procedure %qs at %L"
msgstr ""
@@ -54243,39 +55163,39 @@ msgstr ""
msgid "Subroutine call to intrinsic %qs at %L is not PURE"
msgstr ""
-#: fortran/intrinsic.c:4945
+#: fortran/intrinsic.c:4947
#, gcc-internal-format, gfc-internal-format
msgid "Extension: Conversion from %s to %s at %L"
msgstr ""
-#: fortran/intrinsic.c:4981 fortran/intrinsic.c:4998
+#: fortran/intrinsic.c:4983 fortran/intrinsic.c:5000
#, gcc-internal-format, gfc-internal-format
msgid "Possible change of value in conversion from %s to %s at %L"
msgstr ""
-#: fortran/intrinsic.c:4986 fortran/intrinsic.c:5007
+#: fortran/intrinsic.c:4988 fortran/intrinsic.c:5009
#, gcc-internal-format, gfc-internal-format
msgid "Conversion from %s to %s at %L"
msgstr ""
-#: fortran/intrinsic.c:5062
+#: fortran/intrinsic.c:5064
#, gcc-internal-format, gfc-internal-format
msgid "Can't convert %s to %s at %L"
msgstr ""
-#: fortran/intrinsic.c:5067
+#: fortran/intrinsic.c:5069
#, gcc-internal-format
msgid "Can't convert %qs to %qs at %L"
msgstr ""
-#: fortran/intrinsic.c:5159
+#: fortran/intrinsic.c:5161
#, gcc-internal-format
msgid ""
"%qs declared at %L may shadow the intrinsic of the same name. In order to "
"call the intrinsic, explicit INTRINSIC declarations may be required."
msgstr ""
-#: fortran/intrinsic.c:5165
+#: fortran/intrinsic.c:5167
#, gcc-internal-format
msgid ""
"%qs declared at %L is also the name of an intrinsic. It can only be called "
@@ -54423,8 +55343,8 @@ msgid "Duplicate %s label specification at %C"
msgstr ""
#: fortran/io.c:1518 fortran/io.c:1535 fortran/io.c:1556
-#, gcc-internal-format, gfc-internal-format
-msgid "%s is a DEC extension at %C, re-compile with -fdec to enable"
+#, gcc-internal-format
+msgid "%s at %C is a DEC extension, enable with %<-fdec%>"
msgstr ""
#: fortran/io.c:1609
@@ -54563,12 +55483,12 @@ msgstr ""
msgid "ASYNCHRONOUS= at %C not allowed in Fortran 95"
msgstr ""
-#: fortran/io.c:2189 fortran/io.c:3722
+#: fortran/io.c:2189 fortran/io.c:3779
#, gcc-internal-format, gfc-internal-format
msgid "BLANK= at %C not allowed in Fortran 95"
msgstr ""
-#: fortran/io.c:2226 fortran/io.c:3698
+#: fortran/io.c:2226 fortran/io.c:3755
#, gcc-internal-format, gfc-internal-format
msgid "DECIMAL= at %C not allowed in Fortran 95"
msgstr ""
@@ -54578,7 +55498,7 @@ msgstr ""
msgid "ENCODING= at %C not allowed in Fortran 95"
msgstr ""
-#: fortran/io.c:2327 fortran/io.c:3771
+#: fortran/io.c:2327 fortran/io.c:3828
#, gcc-internal-format, gfc-internal-format
msgid "ROUND= at %C not allowed in Fortran 95"
msgstr ""
@@ -54613,7 +55533,7 @@ msgstr ""
msgid "UNIT number missing in statement at %L"
msgstr ""
-#: fortran/io.c:2797 fortran/io.c:3240
+#: fortran/io.c:2797 fortran/io.c:3264
#, gcc-internal-format, gfc-internal-format
msgid "UNIT number in statement at %L must be non-negative"
msgstr ""
@@ -54638,183 +55558,204 @@ msgstr ""
msgid "Duplicate format specification at %C"
msgstr ""
-#: fortran/io.c:2982
+#: fortran/io.c:3006
#, gcc-internal-format
msgid "Symbol %qs in namelist %qs is INTENT(IN) at %C"
msgstr ""
-#: fortran/io.c:3018
+#: fortran/io.c:3042
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate NML specification at %C"
msgstr ""
-#: fortran/io.c:3027
+#: fortran/io.c:3051
#, gcc-internal-format
msgid "Symbol %qs at %C must be a NAMELIST group name"
msgstr ""
-#: fortran/io.c:3097
+#: fortran/io.c:3121
#, gcc-internal-format, gfc-internal-format
msgid "END tag at %C not allowed in output statement"
msgstr ""
-#: fortran/io.c:3174
+#: fortran/io.c:3198
#, gcc-internal-format, gfc-internal-format
msgid "UNIT not specified at %L"
msgstr ""
-#: fortran/io.c:3186
+#: fortran/io.c:3210
#, gcc-internal-format, gfc-internal-format
msgid ""
"UNIT specification at %L must be an INTEGER expression or a CHARACTER "
"variable"
msgstr ""
-#: fortran/io.c:3208
+#: fortran/io.c:3232
#, gcc-internal-format, gfc-internal-format
msgid "Invalid form of WRITE statement at %L, UNIT required"
msgstr ""
-#: fortran/io.c:3219
+#: fortran/io.c:3243
#, gcc-internal-format, gfc-internal-format
msgid "Internal unit with vector subscript at %L"
msgstr ""
-#: fortran/io.c:3233
+#: fortran/io.c:3257
#, gcc-internal-format, gfc-internal-format
msgid "External IO UNIT cannot be an array at %L"
msgstr ""
-#: fortran/io.c:3261
+#: fortran/io.c:3287
#, gcc-internal-format
msgid ""
"NAMELIST %qs in READ statement at %L contains the symbol %qs which may not "
"appear in a variable definition context"
msgstr ""
-#: fortran/io.c:3271
+#: fortran/io.c:3299
+#, gcc-internal-format
+msgid ""
+"NAMELIST object %qs in namelist %qs at %L is polymorphic and requires a "
+"defined input/output procedure"
+msgstr ""
+
+#: fortran/io.c:3309 fortran/resolve.c:13910
+#, gcc-internal-format
+msgid ""
+"NAMELIST object %qs in namelist %qs at %L with ALLOCATABLE or POINTER "
+"components"
+msgstr ""
+
+#: fortran/io.c:3317
+#, 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/io.c:3328
#, gcc-internal-format, gfc-internal-format
msgid "Comma before i/o item list at %L"
msgstr ""
-#: fortran/io.c:3281
+#: fortran/io.c:3338
#, gcc-internal-format, gfc-internal-format
msgid "ERR tag label %d at %L not defined"
msgstr ""
-#: fortran/io.c:3293
+#: fortran/io.c:3350
#, gcc-internal-format, gfc-internal-format
msgid "END tag label %d at %L not defined"
msgstr ""
-#: fortran/io.c:3305
+#: fortran/io.c:3362
#, gcc-internal-format, gfc-internal-format
msgid "EOR tag label %d at %L not defined"
msgstr ""
-#: fortran/io.c:3315
+#: fortran/io.c:3372
#, gcc-internal-format, gfc-internal-format
msgid "FORMAT label %d at %L not defined"
msgstr ""
-#: fortran/io.c:3346
+#: fortran/io.c:3403
#, gcc-internal-format
msgid "io_kind_name(): bad I/O-kind"
msgstr ""
-#: fortran/io.c:3435
+#: fortran/io.c:3492
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in I/O iterator at %C"
msgstr ""
-#: fortran/io.c:3466
+#: fortran/io.c:3523
#, gcc-internal-format, gfc-internal-format
msgid "Expected variable in READ statement at %C"
msgstr ""
-#: fortran/io.c:3472
+#: fortran/io.c:3529
#, gcc-internal-format, gfc-internal-format
msgid "Expected expression in %s statement at %C"
msgstr ""
#. A general purpose syntax error.
-#: fortran/io.c:3529 fortran/io.c:4189 fortran/gfortran.h:2813
+#: fortran/io.c:3586 fortran/io.c:4246 fortran/gfortran.h:2815
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in %s statement at %C"
msgstr ""
-#: fortran/io.c:3613
+#: fortran/io.c:3670
#, gcc-internal-format, gfc-internal-format
msgid "Internal file at %L with namelist"
msgstr ""
-#: fortran/io.c:3669
+#: fortran/io.c:3726
#, gcc-internal-format, gfc-internal-format
msgid "ASYNCHRONOUS= specifier at %L must be an initialization expression"
msgstr ""
-#: fortran/io.c:3747
+#: fortran/io.c:3804
#, gcc-internal-format, gfc-internal-format
msgid "PAD= at %C not allowed in Fortran 95"
msgstr ""
-#: fortran/io.c:3823
+#: fortran/io.c:3880
#, gcc-internal-format, gfc-internal-format
msgid "DELIM= at %C not allowed in Fortran 95"
msgstr ""
-#: fortran/io.c:3975
+#: fortran/io.c:4032
#, gcc-internal-format, gfc-internal-format
msgid "PRINT namelist at %C is an extension"
msgstr ""
-#: fortran/io.c:4156
+#: fortran/io.c:4213
#, gcc-internal-format, gfc-internal-format
msgid "Expected comma in I/O list at %C"
msgstr ""
-#: fortran/io.c:4223
+#: fortran/io.c:4280
#, gcc-internal-format, gfc-internal-format
msgid "PRINT statement at %C not allowed within PURE procedure"
msgstr ""
-#: fortran/io.c:4390 fortran/io.c:4452
+#: fortran/io.c:4447 fortran/io.c:4509
#, gcc-internal-format, gfc-internal-format
msgid "INQUIRE statement not allowed in PURE procedure at %C"
msgstr ""
-#: fortran/io.c:4418
+#: fortran/io.c:4475
#, gcc-internal-format, gfc-internal-format
msgid "IOLENGTH tag invalid in INQUIRE statement at %C"
msgstr ""
-#: fortran/io.c:4428 fortran/trans-io.c:1333
+#: fortran/io.c:4485 fortran/trans-io.c:1333
#, gcc-internal-format, gfc-internal-format
msgid "INQUIRE statement at %L cannot contain both FILE and UNIT specifiers"
msgstr ""
-#: fortran/io.c:4435
+#: fortran/io.c:4492
#, gcc-internal-format, gfc-internal-format
msgid "INQUIRE statement at %L requires either FILE or UNIT specifier"
msgstr ""
-#: fortran/io.c:4445
+#: fortran/io.c:4502
#, gcc-internal-format, gfc-internal-format
msgid "UNIT number in INQUIRE statement at %L can not be %d"
msgstr ""
-#: fortran/io.c:4460
+#: fortran/io.c:4517
#, gcc-internal-format, gfc-internal-format
msgid ""
"INQUIRE statement at %L requires a PENDING= specifier with the ID= specifier"
msgstr ""
-#: fortran/io.c:4638
+#: fortran/io.c:4695
#, gcc-internal-format, gfc-internal-format
msgid "WAIT at %C not allowed in Fortran 95"
msgstr ""
-#: fortran/io.c:4644
+#: fortran/io.c:4701
#, gcc-internal-format, gfc-internal-format
msgid "WAIT statement not allowed in PURE procedure at %C"
msgstr ""
@@ -56004,11 +56945,11 @@ msgstr ""
#: fortran/module.c:6979
#, gcc-internal-format, gfc-internal-format
-msgid "Can't USE the same %smodule we're building!"
+msgid "Can't USE the same %smodule we're building"
msgstr ""
#: fortran/openmp.c:296 fortran/openmp.c:397 fortran/openmp.c:692
-#: fortran/openmp.c:3162
+#: fortran/openmp.c:3170
#, gcc-internal-format, gfc-internal-format
msgid "COMMON block /%s/ not found at %C"
msgstr ""
@@ -56053,977 +56994,977 @@ msgstr ""
msgid "COLLAPSE clause argument not constant positive integer at %C"
msgstr ""
-#: fortran/openmp.c:1488
+#: fortran/openmp.c:1494
#, gcc-internal-format, gfc-internal-format
msgid "ORDERED clause argument not constant positive integer at %C"
msgstr ""
-#: fortran/openmp.c:1671
+#: fortran/openmp.c:1677
#, gcc-internal-format, gfc-internal-format
msgid "!$OMP DECLARE REDUCTION %s not found at %L"
msgstr ""
-#: fortran/openmp.c:2062
+#: fortran/openmp.c:2069
#, gcc-internal-format, gfc-internal-format
msgid "Invalid clause in module with !$ACC DECLARE at %L"
msgstr ""
-#: fortran/openmp.c:2072
+#: fortran/openmp.c:2079
#, gcc-internal-format, gfc-internal-format
msgid "Variable is USE-associated with !$ACC DECLARE at %L"
msgstr ""
-#: fortran/openmp.c:2080
+#: fortran/openmp.c:2087
#, gcc-internal-format, gfc-internal-format
msgid "Assumed-size dummy array with !$ACC DECLARE at %L"
msgstr ""
-#: fortran/openmp.c:2127
+#: fortran/openmp.c:2134
#, gcc-internal-format
msgid ""
"%<acc update%> must contain at least one %<device%> or %<host%> or %<self%> "
"clause at %L"
msgstr ""
-#: fortran/openmp.c:2175
+#: fortran/openmp.c:2182
#, gcc-internal-format, gfc-internal-format
msgid "Invalid argument to !$ACC WAIT at %L"
msgstr ""
-#: fortran/openmp.c:2184
+#: fortran/openmp.c:2191
#, gcc-internal-format, gfc-internal-format
msgid "WAIT clause at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:2217
+#: fortran/openmp.c:2224
#, gcc-internal-format, gfc-internal-format
msgid "ACC CACHE directive must be inside of loop %C"
msgstr ""
-#: fortran/openmp.c:2248
+#: fortran/openmp.c:2255
#, gcc-internal-format
msgid "Multiple loop axes specified for routine"
msgstr ""
-#: fortran/openmp.c:2274
+#: fortran/openmp.c:2281
#, 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:2301
+#: fortran/openmp.c:2309
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in !$ACC ROUTINE ( NAME ) at %C, invalid function name %s"
msgstr ""
-#: fortran/openmp.c:2310
+#: fortran/openmp.c:2318
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in !$ACC ROUTINE ( NAME ) at %C"
msgstr ""
-#: fortran/openmp.c:2317
+#: fortran/openmp.c:2325
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in !$ACC ROUTINE ( NAME ) at %C, expecting ')' after NAME"
msgstr ""
-#: fortran/openmp.c:2452 fortran/openmp.c:2476
+#: fortran/openmp.c:2460 fortran/openmp.c:2484
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP CRITICAL statement at %C"
msgstr ""
-#: fortran/openmp.c:2543
+#: fortran/openmp.c:2551
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP FLUSH statement at %C"
msgstr ""
-#: fortran/openmp.c:2937 fortran/openmp.c:6206
+#: fortran/openmp.c:2945 fortran/openmp.c:6214
#, gcc-internal-format, gfc-internal-format
msgid "Redefinition of predefined %s !$OMP DECLARE REDUCTION at %L"
msgstr ""
-#: fortran/openmp.c:2941 fortran/openmp.c:6210
+#: fortran/openmp.c:2949 fortran/openmp.c:6218
#, gcc-internal-format, gfc-internal-format
msgid "Redefinition of predefined !$OMP DECLARE REDUCTION at %L"
msgstr ""
-#: fortran/openmp.c:2946
+#: fortran/openmp.c:2954
#, gcc-internal-format, gfc-internal-format
msgid "Redefinition of !$OMP DECLARE REDUCTION at %L"
msgstr ""
-#: fortran/openmp.c:2948
+#: fortran/openmp.c:2956
#, gcc-internal-format, gfc-internal-format
msgid "Previous !$OMP DECLARE REDUCTION at %L"
msgstr ""
-#: fortran/openmp.c:2968
+#: fortran/openmp.c:2976
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after !$OMP DECLARE REDUCTION at %C"
msgstr ""
-#: fortran/openmp.c:3005
+#: fortran/openmp.c:3013
#, gcc-internal-format, gfc-internal-format
msgid ""
"Only the !$OMP DECLARE TARGET form without clauses is allowed in interface "
"block at %C"
msgstr ""
-#: fortran/openmp.c:3020
+#: fortran/openmp.c:3028
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after !$OMP DECLARE TARGET at %C"
msgstr ""
-#: fortran/openmp.c:3043
+#: fortran/openmp.c:3051
#, gcc-internal-format, gfc-internal-format
msgid "OMP DECLARE TARGET variable at %L is an element of a COMMON block"
msgstr ""
-#: fortran/openmp.c:3048
+#: fortran/openmp.c:3056
#, gcc-internal-format, gfc-internal-format
msgid ""
"OMP DECLARE TARGET variable at %L previously mentioned in LINK clause and "
"later in TO clause"
msgstr ""
-#: fortran/openmp.c:3054
+#: fortran/openmp.c:3062
#, gcc-internal-format, gfc-internal-format
msgid ""
"OMP DECLARE TARGET variable at %L previously mentioned in TO clause and "
"later in LINK clause"
msgstr ""
-#: fortran/openmp.c:3058
+#: fortran/openmp.c:3066
#, gcc-internal-format, gfc-internal-format
msgid ""
"Variable at %L mentioned multiple times in clauses of the same OMP DECLARE "
"TARGET directive"
msgstr ""
-#: fortran/openmp.c:3073
+#: fortran/openmp.c:3081
#, gcc-internal-format, gfc-internal-format
msgid ""
"OMP DECLARE TARGET COMMON at %L previously mentioned in LINK clause and "
"later in TO clause"
msgstr ""
-#: fortran/openmp.c:3079
+#: fortran/openmp.c:3087
#, gcc-internal-format, gfc-internal-format
msgid ""
"OMP DECLARE TARGET COMMON at %L previously mentioned in TO clause and later "
"in LINK clause"
msgstr ""
-#: fortran/openmp.c:3083
+#: fortran/openmp.c:3091
#, gcc-internal-format, gfc-internal-format
msgid ""
"COMMON at %L mentioned multiple times in clauses of the same OMP DECLARE "
"TARGET directive"
msgstr ""
-#: fortran/openmp.c:3110
+#: fortran/openmp.c:3118
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in !$OMP DECLARE TARGET list at %C"
msgstr ""
-#: fortran/openmp.c:3142
+#: fortran/openmp.c:3150
#, gcc-internal-format, gfc-internal-format
msgid "Threadprivate variable at %C is an element of a COMMON block"
msgstr ""
-#: fortran/openmp.c:3179
+#: fortran/openmp.c:3187
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after OMP THREADPRIVATE at %C"
msgstr ""
-#: fortran/openmp.c:3186
+#: fortran/openmp.c:3194
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in !$OMP THREADPRIVATE list at %C"
msgstr ""
-#: fortran/openmp.c:3400
+#: fortran/openmp.c:3408
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after TASKWAIT clause at %C"
msgstr ""
-#: fortran/openmp.c:3414
+#: fortran/openmp.c:3422
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after TASKYIELD clause at %C"
msgstr ""
-#: fortran/openmp.c:3473
+#: fortran/openmp.c:3481
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP WORKSHARE statement at %C"
msgstr ""
-#: fortran/openmp.c:3487
+#: fortran/openmp.c:3495
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP MASTER statement at %C"
msgstr ""
-#: fortran/openmp.c:3546
+#: fortran/openmp.c:3554
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP ATOMIC statement at %C"
msgstr ""
-#: fortran/openmp.c:3573
+#: fortran/openmp.c:3581
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP BARRIER statement at %C"
msgstr ""
-#: fortran/openmp.c:3587
+#: fortran/openmp.c:3595
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP TASKGROUP statement at %C"
msgstr ""
-#: fortran/openmp.c:3637
+#: fortran/openmp.c:3645
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP CANCELLATION POINT statement at %C"
msgstr ""
-#: fortran/openmp.c:3657
+#: fortran/openmp.c:3665
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after NOWAIT clause at %C"
msgstr ""
-#: fortran/openmp.c:3699
+#: fortran/openmp.c:3707
#, gcc-internal-format, gfc-internal-format
msgid "%s clause at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:3710
+#: fortran/openmp.c:3718
#, gcc-internal-format, gfc-internal-format
msgid "INTEGER expression of %s clause at %L must be positive"
msgstr ""
-#: fortran/openmp.c:3721
+#: fortran/openmp.c:3729
#, gcc-internal-format, gfc-internal-format
msgid "INTEGER expression of %s clause at %L must be non-negative"
msgstr ""
-#: fortran/openmp.c:3732
+#: fortran/openmp.c:3740
#, gcc-internal-format
msgid "POINTER object %qs of derived type in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3735
+#: fortran/openmp.c:3743
#, gcc-internal-format
msgid "Cray pointer object %qs of derived type in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3738
+#: fortran/openmp.c:3746
#, gcc-internal-format
msgid "Cray pointee object %qs of derived type in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3744 fortran/openmp.c:4682
+#: fortran/openmp.c:3752 fortran/openmp.c:4690
#, gcc-internal-format
msgid "POINTER object %qs of polymorphic type in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3749
+#: fortran/openmp.c:3757
#, gcc-internal-format
msgid "Cray pointer object %qs of polymorphic type in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3754
+#: fortran/openmp.c:3762
#, gcc-internal-format
msgid "Cray pointee object %qs of polymorphic type in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3764 fortran/openmp.c:4380 fortran/openmp.c:4485
+#: fortran/openmp.c:3772 fortran/openmp.c:4388 fortran/openmp.c:4493
#, gcc-internal-format
msgid "Assumed size array %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3767
+#: fortran/openmp.c:3775
#, gcc-internal-format
msgid "Assumed rank array %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3771
+#: fortran/openmp.c:3779
#, gcc-internal-format
msgid "Noncontiguous deferred shape array %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3779
+#: fortran/openmp.c:3787
#, gcc-internal-format
msgid "ALLOCATABLE object %qs of derived type in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3784
+#: fortran/openmp.c:3792
#, gcc-internal-format
msgid "ALLOCATABLE object %qs of polymorphic type in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3796 fortran/openmp.c:4475
+#: fortran/openmp.c:3804 fortran/openmp.c:4483
#, gcc-internal-format
msgid "POINTER object %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3801 fortran/openmp.c:4686
+#: fortran/openmp.c:3809 fortran/openmp.c:4694
#, gcc-internal-format
msgid "Cray pointer object %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3806 fortran/openmp.c:4689
+#: fortran/openmp.c:3814 fortran/openmp.c:4697
#, gcc-internal-format
msgid "Cray pointee object %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3811 fortran/openmp.c:4677
+#: fortran/openmp.c:3819 fortran/openmp.c:4685
#, gcc-internal-format
msgid "ALLOCATABLE object %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3814
+#: fortran/openmp.c:3822
#, gcc-internal-format
msgid "VALUE object %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3857
+#: fortran/openmp.c:3865
#, gcc-internal-format, gfc-internal-format
msgid "Implicitly declared function %s used in !$OMP DECLARE REDUCTION at %L"
msgstr ""
-#: fortran/openmp.c:3906
+#: fortran/openmp.c:3914
#, gcc-internal-format, gfc-internal-format
msgid "Implicitly declared subroutine %s used in !$OMP DECLARE REDUCTION at %L"
msgstr ""
-#: fortran/openmp.c:3939
+#: fortran/openmp.c:3947
#, gcc-internal-format, gfc-internal-format
msgid "ORDERED clause parameter is less than COLLAPSE at %L"
msgstr ""
-#: fortran/openmp.c:3947 fortran/openmp.c:3958 fortran/resolve.c:9778
+#: fortran/openmp.c:3955 fortran/openmp.c:3966 fortran/resolve.c:9778
#: fortran/resolve.c:11044
#, gcc-internal-format, gfc-internal-format
msgid "IF clause at %L requires a scalar LOGICAL expression"
msgstr ""
-#: fortran/openmp.c:3962
+#: fortran/openmp.c:3970
#, gcc-internal-format, gfc-internal-format
msgid ""
"IF clause without modifier at %L used together with IF clauses with modifiers"
msgstr ""
-#: fortran/openmp.c:4039
+#: fortran/openmp.c:4047
#, gcc-internal-format, gfc-internal-format
msgid ""
"IF clause modifier %s at %L not appropriate for the current OpenMP construct"
msgstr ""
-#: fortran/openmp.c:4049
+#: fortran/openmp.c:4057
#, gcc-internal-format, gfc-internal-format
msgid "FINAL clause at %L requires a scalar LOGICAL expression"
msgstr ""
-#: fortran/openmp.c:4059
+#: fortran/openmp.c:4067
#, gcc-internal-format, gfc-internal-format
msgid "SCHEDULE clause's chunk_size at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:4064
+#: fortran/openmp.c:4072
#, gcc-internal-format, gfc-internal-format
msgid ""
"INTEGER expression of SCHEDULE clause's chunk_size at %L must be positive"
msgstr ""
-#: fortran/openmp.c:4079
+#: fortran/openmp.c:4087
#, gcc-internal-format
msgid "Variable %qs is not a dummy argument at %L"
msgstr ""
-#: fortran/openmp.c:4111
+#: fortran/openmp.c:4119
#, gcc-internal-format
msgid "Object %qs is not a variable at %L"
msgstr ""
-#: fortran/openmp.c:4127 fortran/openmp.c:4138 fortran/openmp.c:4146
-#: fortran/openmp.c:4157 fortran/openmp.c:4169 fortran/openmp.c:4184
-#: fortran/openmp.c:6004
+#: fortran/openmp.c:4135 fortran/openmp.c:4146 fortran/openmp.c:4154
+#: fortran/openmp.c:4165 fortran/openmp.c:4177 fortran/openmp.c:4192
+#: fortran/openmp.c:6012
#, gcc-internal-format
msgid "Symbol %qs present on multiple clauses at %L"
msgstr ""
-#: fortran/openmp.c:4191
+#: fortran/openmp.c:4199
#, gcc-internal-format
msgid "Array %qs is not permitted in reduction at %L"
msgstr ""
-#: fortran/openmp.c:4204
+#: fortran/openmp.c:4212
#, gcc-internal-format
msgid "Symbol %qs present on both FROM and TO clauses at %L"
msgstr ""
-#: fortran/openmp.c:4226
+#: fortran/openmp.c:4234
#, gcc-internal-format
msgid "Non-THREADPRIVATE object %qs in COPYIN clause at %L"
msgstr ""
-#: fortran/openmp.c:4234
+#: fortran/openmp.c:4242
#, gcc-internal-format
msgid "Assumed size array %qs in COPYPRIVATE clause at %L"
msgstr ""
-#: fortran/openmp.c:4237
+#: fortran/openmp.c:4245
#, gcc-internal-format
msgid "INTENT(IN) POINTER %qs in COPYPRIVATE clause at %L"
msgstr ""
-#: fortran/openmp.c:4245
+#: fortran/openmp.c:4253
#, gcc-internal-format
msgid "THREADPRIVATE object %qs in SHARED clause at %L"
msgstr ""
-#: fortran/openmp.c:4248
+#: fortran/openmp.c:4256
#, gcc-internal-format
msgid "Cray pointee %qs in SHARED clause at %L"
msgstr ""
-#: fortran/openmp.c:4251
+#: fortran/openmp.c:4259
#, gcc-internal-format
msgid "ASSOCIATE name %qs in SHARED clause at %L"
msgstr ""
-#: fortran/openmp.c:4266
+#: fortran/openmp.c:4274
#, gcc-internal-format
msgid ""
"%qs in ALIGNED clause must be POINTER, ALLOCATABLE, Cray pointer or C_PTR at "
"%L"
msgstr ""
-#: fortran/openmp.c:4278
+#: fortran/openmp.c:4286
#, gcc-internal-format
msgid ""
"%qs in ALIGNED clause at %L requires a scalar positive constant integer "
"alignment expression"
msgstr ""
-#: fortran/openmp.c:4297
+#: fortran/openmp.c:4305
#, gcc-internal-format, gfc-internal-format
msgid "SINK dependence type only allowed on ORDERED directive at %L"
msgstr ""
-#: fortran/openmp.c:4301
+#: fortran/openmp.c:4309
#, gcc-internal-format, gfc-internal-format
msgid ""
"DEPEND SINK used together with DEPEND SOURCE on the same construct at %L"
msgstr ""
-#: fortran/openmp.c:4311
+#: fortran/openmp.c:4319
#, gcc-internal-format, gfc-internal-format
msgid "SINK addend not a constant integer at %L"
msgstr ""
-#: fortran/openmp.c:4317
+#: fortran/openmp.c:4325
#, gcc-internal-format, gfc-internal-format
msgid ""
"Only SOURCE or SINK dependence types are allowed on ORDERED directive at %L"
msgstr ""
-#: fortran/openmp.c:4328 fortran/openmp.c:4349
+#: fortran/openmp.c:4336 fortran/openmp.c:4357
#, gcc-internal-format
msgid "%qs in %s clause at %L is not a proper array section"
msgstr ""
-#: fortran/openmp.c:4332
+#: fortran/openmp.c:4340
#, gcc-internal-format, gfc-internal-format
msgid "Coarrays not supported in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:4341
+#: fortran/openmp.c:4349
#, gcc-internal-format, gfc-internal-format
msgid "Stride should not be specified for array section in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:4362
+#: fortran/openmp.c:4370
#, gcc-internal-format
msgid "%qs in DEPEND clause at %L is a zero size array section"
msgstr ""
-#: fortran/openmp.c:4398
+#: fortran/openmp.c:4406
#, gcc-internal-format, gfc-internal-format
msgid ""
"TARGET%s with map-type other than TO, FROM, TOFROM, or ALLOC on MAP clause "
"at %L"
msgstr ""
-#: fortran/openmp.c:4414
+#: fortran/openmp.c:4422
#, gcc-internal-format, gfc-internal-format
msgid ""
"TARGET ENTER DATA with map-type other than TO, or ALLOC on MAP clause at %L"
msgstr ""
-#: fortran/openmp.c:4429
+#: fortran/openmp.c:4437
#, gcc-internal-format, gfc-internal-format
msgid ""
"TARGET EXIT DATA with map-type other than FROM, RELEASE, or DELETE on MAP "
"clause at %L"
msgstr ""
-#: fortran/openmp.c:4445 fortran/openmp.c:4461
+#: fortran/openmp.c:4453 fortran/openmp.c:4469
#, gcc-internal-format
msgid "THREADPRIVATE object %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:4448 fortran/openmp.c:4464
+#: fortran/openmp.c:4456 fortran/openmp.c:4472
#, gcc-internal-format
msgid "Cray pointee %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:4467
+#: fortran/openmp.c:4475
#, gcc-internal-format
msgid "ASSOCIATE name %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:4472
+#: fortran/openmp.c:4480
#, gcc-internal-format
msgid "Procedure pointer %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:4478
+#: fortran/openmp.c:4486
#, gcc-internal-format
msgid "Cray pointer %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:4488
+#: fortran/openmp.c:4496
#, gcc-internal-format
msgid "Variable %qs in %s clause is used in NAMELIST statement at %L"
msgstr ""
#. case OMP_LIST_REDUCTION:
-#: fortran/openmp.c:4498
+#: fortran/openmp.c:4506
#, gcc-internal-format
msgid "INTENT(IN) POINTER %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:4591
+#: fortran/openmp.c:4599
#, gcc-internal-format, gfc-internal-format
msgid "!$OMP DECLARE REDUCTION %s not found for type %s at %L"
msgstr ""
-#: fortran/openmp.c:4617
+#: fortran/openmp.c:4625
#, gcc-internal-format, gfc-internal-format
msgid "LINEAR clause modifier used on DO or SIMD construct at %L"
msgstr ""
-#: fortran/openmp.c:4622
+#: fortran/openmp.c:4630
#, gcc-internal-format, gfc-internal-format
msgid ""
"LINEAR clause specified together with ORDERED clause with argument at %L"
msgstr ""
-#: fortran/openmp.c:4627
+#: fortran/openmp.c:4635
#, gcc-internal-format
msgid "LINEAR variable %qs must be INTEGER at %L"
msgstr ""
-#: fortran/openmp.c:4632
+#: fortran/openmp.c:4640
#, gcc-internal-format
msgid "LINEAR dummy argument %qs with VALUE attribute with %s modifier at %L"
msgstr ""
-#: fortran/openmp.c:4643
+#: fortran/openmp.c:4651
#, gcc-internal-format
msgid ""
"%qs in LINEAR clause at %L requires a scalar integer linear-step expression"
msgstr ""
-#: fortran/openmp.c:4660
+#: fortran/openmp.c:4668
#, gcc-internal-format
msgid ""
"%qs in LINEAR clause at %L requires a constant integer linear-step "
"expression or dummy argument specified in UNIFORM clause"
msgstr ""
-#: fortran/openmp.c:4694
+#: fortran/openmp.c:4702
#, gcc-internal-format
msgid "%s clause variable %qs at %L is neither a POINTER nor an array"
msgstr ""
-#: fortran/openmp.c:4726
+#: fortran/openmp.c:4734
#, gcc-internal-format, gfc-internal-format
msgid ""
"DIST_SCHEDULE clause's chunk_size at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:4758
+#: fortran/openmp.c:4766
#, gcc-internal-format, gfc-internal-format
msgid "Incompatible use of TILE and COLLAPSE at %L"
msgstr ""
-#: fortran/openmp.c:4760
+#: fortran/openmp.c:4768
#, gcc-internal-format, gfc-internal-format
msgid "SOURCE dependence type only allowed on ORDERED directive at %L"
msgstr ""
-#: fortran/openmp.c:4773
+#: fortran/openmp.c:4781
#, gcc-internal-format, gfc-internal-format
msgid "%s must contain at least one MAP clause at %L"
msgstr ""
-#: fortran/openmp.c:4870
+#: fortran/openmp.c:4878
#, gcc-internal-format, gfc-internal-format
msgid "unexpected !$OMP ATOMIC expression at %L"
msgstr ""
-#: fortran/openmp.c:4899
+#: fortran/openmp.c:4907
#, gcc-internal-format, gfc-internal-format
msgid ""
"!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L"
msgstr ""
-#: fortran/openmp.c:4924
+#: fortran/openmp.c:4932
#, 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:4929
+#: fortran/openmp.c:4937
#, 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:4951 fortran/openmp.c:5242
+#: fortran/openmp.c:4959 fortran/openmp.c:5250
#, 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:4966
+#: fortran/openmp.c:4974
#, 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:4973 fortran/openmp.c:5249
+#: fortran/openmp.c:4981 fortran/openmp.c:5257
#, 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:4989
+#: fortran/openmp.c:4997
#, gcc-internal-format, gfc-internal-format
msgid "!$OMP ATOMIC with ALLOCATABLE variable at %L"
msgstr ""
-#: fortran/openmp.c:5031
+#: fortran/openmp.c:5039
#, 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:5079
+#: fortran/openmp.c:5087
#, 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:5093
+#: fortran/openmp.c:5101
#, 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:5125
+#: fortran/openmp.c:5133
#, 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:5149
+#: fortran/openmp.c:5157
#, 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:5156
+#: fortran/openmp.c:5164
#, 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:5173
+#: fortran/openmp.c:5181
#, gcc-internal-format
msgid ""
"!$OMP ATOMIC intrinsic arguments except one must not reference %qs at %L"
msgstr ""
-#: fortran/openmp.c:5180
+#: fortran/openmp.c:5188
#, gcc-internal-format, gfc-internal-format
msgid "!$OMP ATOMIC intrinsic arguments must be scalar at %L"
msgstr ""
-#: fortran/openmp.c:5188
+#: fortran/openmp.c:5196
#, gcc-internal-format
msgid "First or last !$OMP ATOMIC intrinsic argument must be %qs at %L"
msgstr ""
-#: fortran/openmp.c:5206
+#: fortran/openmp.c:5214
#, 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:5220
+#: fortran/openmp.c:5228
#, 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:5521
+#: fortran/openmp.c:5529
#, gcc-internal-format, gfc-internal-format
msgid "%s cannot be a DO WHILE or DO without loop control at %L"
msgstr ""
-#: fortran/openmp.c:5527
+#: fortran/openmp.c:5535
#, gcc-internal-format, gfc-internal-format
msgid "%s cannot be a DO CONCURRENT loop at %L"
msgstr ""
-#: fortran/openmp.c:5533
+#: fortran/openmp.c:5541
#, gcc-internal-format, gfc-internal-format
msgid "%s iteration variable must be of type integer at %L"
msgstr ""
-#: fortran/openmp.c:5537
+#: fortran/openmp.c:5545
#, gcc-internal-format, gfc-internal-format
msgid "%s iteration variable must not be THREADPRIVATE at %L"
msgstr ""
-#: fortran/openmp.c:5550
+#: fortran/openmp.c:5558
#, gcc-internal-format, gfc-internal-format
msgid ""
"%s iteration variable present on clause other than PRIVATE or LASTPRIVATE at "
"%L"
msgstr ""
-#: fortran/openmp.c:5554
+#: fortran/openmp.c:5562
#, gcc-internal-format, gfc-internal-format
msgid "%s iteration variable present on clause other than LASTPRIVATE at %L"
msgstr ""
-#: fortran/openmp.c:5558
+#: fortran/openmp.c:5566
#, gcc-internal-format, gfc-internal-format
msgid "%s iteration variable present on clause other than LINEAR at %L"
msgstr ""
-#: fortran/openmp.c:5576
+#: fortran/openmp.c:5584
#, gcc-internal-format, gfc-internal-format
msgid "%s collapsed loops don't form rectangular iteration space at %L"
msgstr ""
-#: fortran/openmp.c:5590
+#: fortran/openmp.c:5598
#, gcc-internal-format, gfc-internal-format
msgid "collapsed %s loops not perfectly nested at %L"
msgstr ""
-#: fortran/openmp.c:5599 fortran/openmp.c:5607
+#: fortran/openmp.c:5607 fortran/openmp.c:5615
#, gcc-internal-format, gfc-internal-format
msgid "not enough DO loops for collapsed %s at %L"
msgstr ""
-#: fortran/openmp.c:5691 fortran/openmp.c:5704
+#: fortran/openmp.c:5699 fortran/openmp.c:5712
#, gcc-internal-format, gfc-internal-format
msgid "The %s directive cannot be specified within a %s region at %L"
msgstr ""
-#: fortran/openmp.c:5723
+#: fortran/openmp.c:5731
#, 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:5729
+#: fortran/openmp.c:5737
#, gcc-internal-format, gfc-internal-format
msgid "!$ACC LOOP iteration variable must be of type integer at %L"
msgstr ""
-#: fortran/openmp.c:5745
+#: fortran/openmp.c:5753
#, gcc-internal-format, gfc-internal-format
msgid "!$ACC LOOP %s loops don't form rectangular iteration space at %L"
msgstr ""
-#: fortran/openmp.c:5759
+#: fortran/openmp.c:5767
#, gcc-internal-format, gfc-internal-format
msgid "%s !$ACC LOOP loops not perfectly nested at %L"
msgstr ""
-#: fortran/openmp.c:5769 fortran/openmp.c:5778
+#: fortran/openmp.c:5777 fortran/openmp.c:5786
#, gcc-internal-format, gfc-internal-format
msgid "not enough DO loops for %s !$ACC LOOP at %L"
msgstr ""
-#: fortran/openmp.c:5793 fortran/openmp.c:5800
+#: fortran/openmp.c:5801 fortran/openmp.c:5808
#, gcc-internal-format, gfc-internal-format
msgid "!$ACC LOOP %s in PARALLEL region doesn't allow %s arguments at %L"
msgstr ""
-#: fortran/openmp.c:5822
+#: fortran/openmp.c:5830
#, 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:5826 fortran/openmp.c:5830
+#: fortran/openmp.c:5834 fortran/openmp.c:5838
#, 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:5837
+#: fortran/openmp.c:5845
#, 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:5841
+#: fortran/openmp.c:5849
#, 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:5847
+#: fortran/openmp.c:5855
#, 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:5859
+#: fortran/openmp.c:5867
#, gcc-internal-format, gfc-internal-format
msgid "Clause SEQ conflicts with INDEPENDENT at %L"
msgstr ""
-#: fortran/openmp.c:5861
+#: fortran/openmp.c:5869
#, gcc-internal-format, gfc-internal-format
msgid "Clause SEQ conflicts with GANG at %L"
msgstr ""
-#: fortran/openmp.c:5863
+#: fortran/openmp.c:5871
#, gcc-internal-format, gfc-internal-format
msgid "Clause SEQ conflicts with WORKER at %L"
msgstr ""
-#: fortran/openmp.c:5865
+#: fortran/openmp.c:5873
#, gcc-internal-format, gfc-internal-format
msgid "Clause SEQ conflicts with VECTOR at %L"
msgstr ""
-#: fortran/openmp.c:5867
+#: fortran/openmp.c:5875
#, gcc-internal-format, gfc-internal-format
msgid "Clause SEQ conflicts with AUTO at %L"
msgstr ""
-#: fortran/openmp.c:5872
+#: fortran/openmp.c:5880
#, gcc-internal-format, gfc-internal-format
msgid "Clause AUTO conflicts with GANG at %L"
msgstr ""
-#: fortran/openmp.c:5874
+#: fortran/openmp.c:5882
#, gcc-internal-format, gfc-internal-format
msgid "Clause AUTO conflicts with WORKER at %L"
msgstr ""
-#: fortran/openmp.c:5876
+#: fortran/openmp.c:5884
#, gcc-internal-format, gfc-internal-format
msgid "Clause AUTO conflicts with VECTOR at %L"
msgstr ""
-#: fortran/openmp.c:5880
+#: fortran/openmp.c:5888
#, 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:5915
+#: fortran/openmp.c:5923
#, gcc-internal-format, gfc-internal-format
msgid "TILE requires constant expression at %L"
msgstr ""
-#: fortran/openmp.c:5980
+#: fortran/openmp.c:5988
#, gcc-internal-format
msgid "PARAMETER object %qs is not allowed at %L"
msgstr ""
-#: fortran/openmp.c:5987
+#: fortran/openmp.c:5995
#, gcc-internal-format
msgid "Array sections: %qs not allowed in !$ACC DECLARE at %L"
msgstr ""
-#: fortran/openmp.c:6114
+#: fortran/openmp.c:6122
#, gcc-internal-format, gfc-internal-format
msgid "OMP TARGET UPDATE at %L requires at least one TO or FROM clause"
msgstr ""
-#: fortran/openmp.c:6136
+#: fortran/openmp.c:6144
#, gcc-internal-format
msgid "!$OMP DECLARE SIMD should refer to containing procedure %qs at %L"
msgstr ""
-#: fortran/openmp.c:6160
+#: fortran/openmp.c:6168
#, 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:6168
+#: fortran/openmp.c:6176
#, 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:6197
+#: fortran/openmp.c:6205
#, gcc-internal-format, gfc-internal-format
msgid "Invalid operator for !$OMP DECLARE REDUCTION %s at %L"
msgstr ""
-#: fortran/openmp.c:6219
+#: fortran/openmp.c:6227
#, gcc-internal-format, gfc-internal-format
msgid "CHARACTER length in !$OMP DECLARE REDUCTION %s not constant at %L"
msgstr ""
-#: fortran/openmp.c:6235
+#: fortran/openmp.c:6243
#, gcc-internal-format, gfc-internal-format
msgid ""
"Subroutine call with alternate returns in combiner of !$OMP DECLARE "
"REDUCTION at %L"
msgstr ""
-#: fortran/openmp.c:6250
+#: fortran/openmp.c:6258
#, 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:6260
+#: fortran/openmp.c:6268
#, 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:6268
+#: fortran/openmp.c:6276
#, gcc-internal-format, gfc-internal-format
msgid ""
"Missing INITIALIZER clause for !$OMP DECLARE REDUCTION of derived type "
@@ -57659,7 +58600,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:6283
+#: fortran/parse.c:6286
#, gcc-internal-format, gfc-internal-format
msgid "Two main PROGRAMs at %L and %C"
msgstr ""
@@ -57973,7 +58914,7 @@ msgstr ""
#: fortran/primary.c:2679
#, gcc-internal-format
msgid ""
-"No initializer for component %qs given in the structure constructor at %C!"
+"No initializer for component %qs given in the structure constructor at %C"
msgstr ""
#: fortran/primary.c:2727
@@ -57988,23 +58929,23 @@ msgstr ""
#: fortran/primary.c:2762
#, gcc-internal-format, gfc-internal-format
-msgid "Component initializer without name after component named %s at %L!"
+msgid "Component initializer without name after component named %s at %L"
msgstr ""
#: fortran/primary.c:2767
#, gcc-internal-format, gfc-internal-format
-msgid "Too many components in structure constructor at %L!"
+msgid "Too many components in structure constructor at %L"
msgstr ""
#: fortran/primary.c:2804
#, gcc-internal-format
-msgid "Component %qs is initialized twice in the structure constructor at %L!"
+msgid "Component %qs is initialized twice in the structure constructor at %L"
msgstr ""
#: fortran/primary.c:2816
#, gcc-internal-format
msgid ""
-"Coindexed expression to pointer component %qs in structure constructor at %L!"
+"Coindexed expression to pointer component %qs in structure constructor at %L"
msgstr ""
#: fortran/primary.c:2870
@@ -58580,7 +59521,7 @@ msgstr ""
msgid "Unable to resolve the specific function %qs at %L"
msgstr ""
-#: fortran/resolve.c:2751 fortran/resolve.c:15846
+#: fortran/resolve.c:2751 fortran/resolve.c:15811
#, gcc-internal-format
msgid "Function %qs at %L has no IMPLICIT type"
msgstr ""
@@ -59941,784 +60882,770 @@ msgid ""
"declaration at %L in (SUB)MODULE %qs"
msgstr ""
-#: fortran/resolve.c:12434
+#: fortran/resolve.c:12431
#, gcc-internal-format
msgid "FINAL procedure %qs at %L is not a SUBROUTINE"
msgstr ""
-#: fortran/resolve.c:12443
+#: fortran/resolve.c:12440
#, gcc-internal-format, gfc-internal-format
msgid "FINAL procedure at %L must have exactly one argument"
msgstr ""
-#: fortran/resolve.c:12452
+#: fortran/resolve.c:12449
#, gcc-internal-format
msgid "Argument of FINAL procedure at %L must be of type %qs"
msgstr ""
-#: fortran/resolve.c:12460
+#: fortran/resolve.c:12457
#, gcc-internal-format, gfc-internal-format
msgid "Argument of FINAL procedure at %L must not be a POINTER"
msgstr ""
-#: fortran/resolve.c:12466
+#: fortran/resolve.c:12463
#, gcc-internal-format, gfc-internal-format
msgid "Argument of FINAL procedure at %L must not be ALLOCATABLE"
msgstr ""
-#: fortran/resolve.c:12472
+#: fortran/resolve.c:12469
#, gcc-internal-format, gfc-internal-format
msgid "Argument of FINAL procedure at %L must not be OPTIONAL"
msgstr ""
-#: fortran/resolve.c:12480
+#: fortran/resolve.c:12477
#, gcc-internal-format, gfc-internal-format
msgid "Argument of FINAL procedure at %L must not be INTENT(OUT)"
msgstr ""
-#: fortran/resolve.c:12489
+#: fortran/resolve.c:12486
#, gcc-internal-format, gfc-internal-format
msgid "Non-scalar FINAL procedure at %L should have assumed shape argument"
msgstr ""
-#: fortran/resolve.c:12511
+#: fortran/resolve.c:12508
#, gcc-internal-format
msgid "FINAL procedure %qs declared at %L has the same rank (%d) as %qs"
msgstr ""
-#: fortran/resolve.c:12548
+#: fortran/resolve.c:12545
#, gcc-internal-format
msgid ""
"Only array FINAL procedures declared for derived type %qs defined at %L, "
"suggest also scalar one"
msgstr ""
-#: fortran/resolve.c:12588
+#: fortran/resolve.c:12585
#, gcc-internal-format
msgid "%qs and %qs can't be mixed FUNCTION/SUBROUTINE for GENERIC %qs at %L"
msgstr ""
-#: fortran/resolve.c:12624
+#: fortran/resolve.c:12621
#, gcc-internal-format
msgid "%qs and %qs for GENERIC %qs at %L are ambiguous"
msgstr ""
-#: fortran/resolve.c:12683
+#: fortran/resolve.c:12680
#, gcc-internal-format
msgid "Undefined specific binding %qs as target of GENERIC %qs at %L"
msgstr ""
-#: fortran/resolve.c:12695
+#: fortran/resolve.c:12692
#, gcc-internal-format
msgid "GENERIC %qs at %L must target a specific binding, %qs is GENERIC, too"
msgstr ""
-#: fortran/resolve.c:12723
+#: fortran/resolve.c:12720
#, gcc-internal-format
msgid "GENERIC %qs at %L can't overwrite specific binding with the same name"
msgstr ""
-#: fortran/resolve.c:12779
+#: fortran/resolve.c:12776
#, gcc-internal-format, gfc-internal-format
msgid "Type-bound operator at %L can't be NOPASS"
msgstr ""
-#: fortran/resolve.c:12971
+#: fortran/resolve.c:12968
#, gcc-internal-format
msgid ""
"%qs must be a module procedure or an external procedure with an explicit "
"interface at %L"
msgstr ""
-#: fortran/resolve.c:13013
+#: fortran/resolve.c:13010
#, gcc-internal-format
msgid "Procedure %qs with PASS(%s) at %L has no argument %qs"
msgstr ""
-#: fortran/resolve.c:13027
+#: fortran/resolve.c:13024
#, gcc-internal-format
msgid "Procedure %qs with PASS at %L must have at least one argument"
msgstr ""
-#: fortran/resolve.c:13041 fortran/resolve.c:13489
+#: fortran/resolve.c:13038 fortran/resolve.c:13486
#, gcc-internal-format
msgid "Non-polymorphic passed-object dummy argument of %qs at %L"
msgstr ""
-#: fortran/resolve.c:13049
+#: fortran/resolve.c:13046
#, gcc-internal-format
msgid "Argument %qs of %qs with PASS(%s) at %L must be of the derived-type %qs"
msgstr ""
-#: fortran/resolve.c:13058
+#: fortran/resolve.c:13055
#, gcc-internal-format
msgid "Passed-object dummy argument of %qs at %L must be scalar"
msgstr ""
-#: fortran/resolve.c:13064
+#: fortran/resolve.c:13061
#, gcc-internal-format
msgid "Passed-object dummy argument of %qs at %L must not be ALLOCATABLE"
msgstr ""
-#: fortran/resolve.c:13070
+#: fortran/resolve.c:13067
#, gcc-internal-format
msgid "Passed-object dummy argument of %qs at %L must not be POINTER"
msgstr ""
-#: fortran/resolve.c:13099
+#: fortran/resolve.c:13096
#, gcc-internal-format
msgid "Procedure %qs at %L has the same name as a component of %qs"
msgstr ""
-#: fortran/resolve.c:13109
+#: fortran/resolve.c:13106
#, gcc-internal-format
msgid "Procedure %qs at %L has the same name as an inherited component of %qs"
msgstr ""
-#: fortran/resolve.c:13201
+#: fortran/resolve.c:13198
#, gcc-internal-format
msgid ""
"Derived-type %qs declared at %L must be ABSTRACT because %qs is DEFERRED and "
"not overridden"
msgstr ""
-#: fortran/resolve.c:13296
+#: fortran/resolve.c:13293
#, gcc-internal-format
msgid "Coarray component %qs at %L must be allocatable with deferred shape"
msgstr ""
-#: fortran/resolve.c:13305
+#: fortran/resolve.c:13302
#, 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:13315
+#: fortran/resolve.c:13312
#, gcc-internal-format
msgid ""
"Component %qs at %L with coarray component shall be a nonpointer, "
"nonallocatable scalar"
msgstr ""
-#: fortran/resolve.c:13324
+#: fortran/resolve.c:13321
#, gcc-internal-format
msgid ""
"Component %qs at %L has the CONTIGUOUS attribute but is not an array pointer"
msgstr ""
-#: fortran/resolve.c:13422
+#: fortran/resolve.c:13419
#, gcc-internal-format
msgid "Procedure pointer component %qs with PASS(%s) at %L has no argument %qs"
msgstr ""
-#: fortran/resolve.c:13436
+#: fortran/resolve.c:13433
#, gcc-internal-format
msgid ""
"Procedure pointer component %qs with PASS at %L must have at least one "
"argument"
msgstr ""
-#: fortran/resolve.c:13452
+#: fortran/resolve.c:13449
#, gcc-internal-format
msgid "Argument %qs of %qs with PASS(%s) at %L must be of the derived type %qs"
msgstr ""
-#: fortran/resolve.c:13462
+#: fortran/resolve.c:13459
#, gcc-internal-format
msgid "Argument %qs of %qs with PASS(%s) at %L must be scalar"
msgstr ""
-#: fortran/resolve.c:13471
+#: fortran/resolve.c:13468
#, gcc-internal-format
msgid ""
"Argument %qs of %qs with PASS(%s) at %L may not have the POINTER attribute"
msgstr ""
-#: fortran/resolve.c:13480
+#: fortran/resolve.c:13477
#, gcc-internal-format
msgid "Argument %qs of %qs with PASS(%s) at %L may not be ALLOCATABLE"
msgstr ""
-#: fortran/resolve.c:13522
+#: fortran/resolve.c:13519
#, gcc-internal-format
msgid ""
"Component %qs of %qs at %L has the same name as an inherited type-bound "
"procedure"
msgstr ""
-#: fortran/resolve.c:13535
+#: fortran/resolve.c:13532
#, gcc-internal-format
msgid ""
"Character length of component %qs needs to be a constant specification "
"expression at %L"
msgstr ""
-#: fortran/resolve.c:13546
+#: fortran/resolve.c:13543
#, gcc-internal-format
msgid ""
"Character component %qs of %qs at %L with deferred length must be a POINTER "
"or ALLOCATABLE"
msgstr ""
-#: fortran/resolve.c:13577
+#: fortran/resolve.c:13574
#, 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:13585
+#: fortran/resolve.c:13582
#, gcc-internal-format, gfc-internal-format
msgid "Polymorphic component %s at %L in SEQUENCE or BIND(C) type %s"
msgstr ""
-#: fortran/resolve.c:13594
+#: fortran/resolve.c:13591
#, 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:13612 fortran/resolve.c:13624
+#: fortran/resolve.c:13609 fortran/resolve.c:13621
#, gcc-internal-format
msgid ""
"The pointer component %qs of %qs at %L is a type that has not been declared"
msgstr ""
-#: fortran/resolve.c:13697
+#: fortran/resolve.c:13694
#, gcc-internal-format, gfc-internal-format
msgid "Conflicting initializers in union at %L and %L"
msgstr ""
-#: fortran/resolve.c:13741
+#: fortran/resolve.c:13738
#, 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:13754
+#: fortran/resolve.c:13751
#, gcc-internal-format
msgid "Non-extensible derived-type %qs at %L must not be ABSTRACT"
msgstr ""
-#: fortran/resolve.c:13808
+#: fortran/resolve.c:13805
#, 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:13884
+#: fortran/resolve.c:13863
#, gcc-internal-format
msgid "Assumed size array %qs in namelist %qs at %L is not allowed"
msgstr ""
-#: fortran/resolve.c:13890
+#: fortran/resolve.c:13869
#, gcc-internal-format
msgid "NAMELIST array object %qs with assumed shape in namelist %qs at %L"
msgstr ""
-#: fortran/resolve.c:13896
+#: fortran/resolve.c:13875
#, gcc-internal-format
msgid "NAMELIST array object %qs with nonconstant shape in namelist %qs at %L"
msgstr ""
-#: fortran/resolve.c:13904
+#: fortran/resolve.c:13883
#, gcc-internal-format
msgid ""
"NAMELIST object %qs with nonconstant character length in namelist %qs at %L"
msgstr ""
-#: fortran/resolve.c:13914
-#, 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:13924
-#, gcc-internal-format
-msgid ""
-"NAMELIST object %qs in namelist %qs at %L with ALLOCATABLE or POINTER "
-"components"
-msgstr ""
-
-#: fortran/resolve.c:13942
+#: fortran/resolve.c:13900
#, gcc-internal-format
msgid ""
"NAMELIST object %qs was declared PRIVATE and cannot be member of PUBLIC "
"namelist %qs at %L"
msgstr ""
-#: fortran/resolve.c:13957
+#: fortran/resolve.c:13922
#, 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:13968
+#: fortran/resolve.c:13933
#, 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:13995
+#: fortran/resolve.c:13960
#, gcc-internal-format
msgid "PROCEDURE attribute conflicts with NAMELIST attribute in %qs at %L"
msgstr ""
-#: fortran/resolve.c:14014
+#: fortran/resolve.c:13979
#, gcc-internal-format
msgid "Parameter array %qs at %L cannot be automatic or of deferred shape"
msgstr ""
-#: fortran/resolve.c:14030
+#: fortran/resolve.c:13995
#, gcc-internal-format
msgid ""
"Implicitly typed PARAMETER %qs at %L doesn't match a later IMPLICIT type"
msgstr ""
-#: fortran/resolve.c:14041
+#: fortran/resolve.c:14006
#, gcc-internal-format, gfc-internal-format
msgid "Incompatible derived type in PARAMETER at %L"
msgstr ""
-#: fortran/resolve.c:14049
+#: fortran/resolve.c:14014
#, gcc-internal-format
msgid "CLASS variable %qs at %L cannot have the PARAMETER attribute"
msgstr ""
-#: fortran/resolve.c:14091
+#: fortran/resolve.c:14056
#, gcc-internal-format, gfc-internal-format
msgid ""
"Sorry, allocatable/pointer components in polymorphic (CLASS) type coarrays "
"at %L are unsupported"
msgstr ""
-#: fortran/resolve.c:14155
+#: fortran/resolve.c:14120
#, gcc-internal-format, gfc-internal-format
msgid "PROTECTED attribute conflicts with EXTERNAL attribute at %L"
msgstr ""
-#: fortran/resolve.c:14158
+#: fortran/resolve.c:14123
#, gcc-internal-format, gfc-internal-format
msgid "PROCEDURE attribute conflicts with PROTECTED attribute at %L"
msgstr ""
-#: fortran/resolve.c:14254
+#: fortran/resolve.c:14219
#, 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:14272
+#: fortran/resolve.c:14237
#, gcc-internal-format, gfc-internal-format
msgid "Assumed size array at %L must be a dummy argument"
msgstr ""
-#: fortran/resolve.c:14275
+#: fortran/resolve.c:14240
#, gcc-internal-format, gfc-internal-format
msgid "Assumed shape array at %L must be a dummy argument"
msgstr ""
-#: fortran/resolve.c:14283
+#: fortran/resolve.c:14248
#, gcc-internal-format, gfc-internal-format
msgid "Assumed-rank array at %L must be a dummy argument"
msgstr ""
-#: fortran/resolve.c:14290
+#: fortran/resolve.c:14255
#, gcc-internal-format, gfc-internal-format
msgid ""
"Assumed-rank array at %L may not have the VALUE or CODIMENSION attribute"
msgstr ""
-#: fortran/resolve.c:14303
+#: fortran/resolve.c:14268
#, gcc-internal-format, gfc-internal-format
msgid "Symbol at %L is not a DUMMY variable"
msgstr ""
-#: fortran/resolve.c:14309
+#: fortran/resolve.c:14274
#, gcc-internal-format
msgid ""
"%qs at %L cannot have the VALUE attribute because it is not a dummy argument"
msgstr ""
-#: fortran/resolve.c:14319
+#: fortran/resolve.c:14284
#, gcc-internal-format
msgid ""
"Character dummy variable %qs at %L with VALUE attribute must have constant "
"length"
msgstr ""
-#: fortran/resolve.c:14328
+#: fortran/resolve.c:14293
#, gcc-internal-format
msgid ""
"C interoperable character dummy variable %qs at %L with VALUE attribute must "
"have length one"
msgstr ""
-#: fortran/resolve.c:14341 fortran/resolve.c:14508
+#: fortran/resolve.c:14306 fortran/resolve.c:14473
#, gcc-internal-format
msgid "The derived type %qs at %L is of type %qs, which has not been defined"
msgstr ""
-#: fortran/resolve.c:14355
+#: fortran/resolve.c:14320
#, 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:14364
+#: fortran/resolve.c:14329
#, 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:14373
+#: fortran/resolve.c:14338
#, 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:14381
+#: fortran/resolve.c:14346
#, 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:14388
+#: fortran/resolve.c:14353
#, 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:14408
+#: fortran/resolve.c:14373
#, gcc-internal-format, gfc-internal-format
msgid "Assumed type of variable %s at %L is only permitted for dummy variables"
msgstr ""
-#: fortran/resolve.c:14415
+#: fortran/resolve.c:14380
#, 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:14422
+#: fortran/resolve.c:14387
#, gcc-internal-format, gfc-internal-format
msgid "Assumed-type variable %s at %L may not have the INTENT(OUT) attribute"
msgstr ""
-#: fortran/resolve.c:14429
+#: fortran/resolve.c:14394
#, gcc-internal-format, gfc-internal-format
msgid "Assumed-type variable %s at %L shall not be an explicit-shape array"
msgstr ""
-#: fortran/resolve.c:14454
+#: fortran/resolve.c:14419
#, 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:14534
+#: fortran/resolve.c:14499
#, gcc-internal-format
msgid "PUBLIC %s %qs at %L of PRIVATE derived type %qs"
msgstr ""
-#: fortran/resolve.c:14549
+#: fortran/resolve.c:14514
#, 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:14562
+#: fortran/resolve.c:14527
#, gcc-internal-format, gfc-internal-format
msgid ""
-"Variable %s at %L of type EVENT_TYPE or with subcomponent of type LOCK_TYPE "
+"Variable %s at %L of type EVENT_TYPE or with subcomponent of type EVENT_TYPE "
"must be a coarray"
msgstr ""
-#: fortran/resolve.c:14580
+#: fortran/resolve.c:14545
#, 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:14592
+#: fortran/resolve.c:14557
#, gcc-internal-format
msgid "Dummy argument %qs at %L of LOCK_TYPE shall not be INTENT(OUT)"
msgstr ""
-#: fortran/resolve.c:14601
+#: fortran/resolve.c:14566
#, gcc-internal-format
msgid "Dummy argument %qs at %L of EVENT_TYPE shall not be INTENT(OUT)"
msgstr ""
-#: fortran/resolve.c:14613
+#: fortran/resolve.c:14578
#, gcc-internal-format
msgid ""
"Function result %qs at %L shall not be a coarray or have a coarray component"
msgstr ""
-#: fortran/resolve.c:14622
+#: fortran/resolve.c:14587
#, 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:14634
+#: fortran/resolve.c:14599
#, 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:14649
+#: fortran/resolve.c:14614
#, gcc-internal-format
msgid ""
"Variable %qs at %L is a coarray and is not ALLOCATABLE, SAVE nor a dummy "
"argument"
msgstr ""
-#: fortran/resolve.c:14657
+#: fortran/resolve.c:14622
#, gcc-internal-format
msgid ""
"Coarray variable %qs at %L shall not have codimensions with deferred shape"
msgstr ""
-#: fortran/resolve.c:14664
+#: fortran/resolve.c:14629
#, gcc-internal-format
msgid "Allocatable coarray variable %qs at %L must have deferred shape"
msgstr ""
-#: fortran/resolve.c:14676
+#: fortran/resolve.c:14641
#, 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:14685
+#: fortran/resolve.c:14650
#, gcc-internal-format
msgid "Coarray dummy variable %qs at %L not allowed in BIND(C) procedure %qs"
msgstr ""
-#: fortran/resolve.c:14701
+#: fortran/resolve.c:14666
#, gcc-internal-format
msgid ""
"LOGICAL dummy argument %qs at %L with non-C_Bool kind in BIND(C) procedure "
"%qs"
msgstr ""
-#: fortran/resolve.c:14707
+#: fortran/resolve.c:14672
#, gcc-internal-format
msgid ""
"LOGICAL result variable %qs at %L with non-C_Bool kind in BIND(C) procedure "
"%qs"
msgstr ""
-#: fortran/resolve.c:14732
+#: fortran/resolve.c:14697
#, gcc-internal-format
msgid "Namelist %qs can not be an argument to subroutine or function at %L"
msgstr ""
-#: fortran/resolve.c:14802
+#: fortran/resolve.c:14767
#, gcc-internal-format, gfc-internal-format
msgid "Threadprivate at %L isn't SAVEd"
msgstr ""
-#: fortran/resolve.c:14813
+#: fortran/resolve.c:14778
#, gcc-internal-format
msgid "!$OMP DECLARE TARGET variable %qs at %L isn't SAVEd"
msgstr ""
-#: fortran/resolve.c:14909
+#: fortran/resolve.c:14874
#, gcc-internal-format
msgid "check_data_variable(): Bad expression"
msgstr ""
-#: fortran/resolve.c:14915
+#: fortran/resolve.c:14880
#, gcc-internal-format
msgid "BLOCK DATA element %qs at %L must be in COMMON"
msgstr ""
-#: fortran/resolve.c:14921
+#: fortran/resolve.c:14886
#, gcc-internal-format
msgid "DATA array %qs at %L must be specified in a previous declaration"
msgstr ""
-#: fortran/resolve.c:14930
+#: fortran/resolve.c:14895
#, gcc-internal-format
msgid "DATA element %qs at %L cannot have a coindex"
msgstr ""
-#: fortran/resolve.c:14944
+#: fortran/resolve.c:14909
#, gcc-internal-format
msgid "DATA element %qs at %L is a pointer and so must be a full array"
msgstr ""
-#: fortran/resolve.c:14990
+#: fortran/resolve.c:14955
#, gcc-internal-format, gfc-internal-format
msgid "Nonconstant array section at %L in DATA statement"
msgstr ""
-#: fortran/resolve.c:15003
+#: fortran/resolve.c:14968
#, gcc-internal-format, gfc-internal-format
msgid "DATA statement at %L has more variables than values"
msgstr ""
-#: fortran/resolve.c:15102
+#: fortran/resolve.c:15067
#, 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:15110
+#: fortran/resolve.c:15075
#, 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:15118
+#: fortran/resolve.c:15083
#, 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:15243
+#: fortran/resolve.c:15208
#, gcc-internal-format, gfc-internal-format
msgid "DATA statement at %L has more values than variables"
msgstr ""
-#: fortran/resolve.c:15408
+#: fortran/resolve.c:15373
#, gcc-internal-format, gfc-internal-format
msgid "Label %d at %L defined but not used"
msgstr ""
-#: fortran/resolve.c:15414
+#: fortran/resolve.c:15379
#, gcc-internal-format, gfc-internal-format
msgid "Label %d at %L defined but cannot be used"
msgstr ""
-#: fortran/resolve.c:15498
+#: fortran/resolve.c:15463
#, gcc-internal-format
msgid ""
"Derived type variable %qs at %L must have SEQUENCE attribute to be an "
"EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:15507
+#: fortran/resolve.c:15472
#, gcc-internal-format
msgid ""
"Derived type variable %qs at %L cannot have ALLOCATABLE components to be an "
"EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:15515
+#: fortran/resolve.c:15480
#, 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:15531
+#: fortran/resolve.c:15496
#, gcc-internal-format
msgid ""
"Derived type variable %qs at %L with pointer component(s) cannot be an "
"EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:15634
+#: fortran/resolve.c:15599
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in EQUIVALENCE statement at %L"
msgstr ""
-#: fortran/resolve.c:15649
+#: fortran/resolve.c:15614
#, 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:15661
+#: fortran/resolve.c:15626
#, gcc-internal-format
msgid ""
"Common block member %qs at %L cannot be an EQUIVALENCE object in the pure "
"procedure %qs"
msgstr ""
-#: fortran/resolve.c:15670
+#: fortran/resolve.c:15635
#, gcc-internal-format
msgid "Named constant %qs at %L cannot be an EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:15743
+#: fortran/resolve.c:15708
#, gcc-internal-format
msgid ""
"Array %qs at %L with non-constant bounds cannot be an EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:15754
+#: fortran/resolve.c:15719
#, gcc-internal-format
msgid "Structure component %qs at %L cannot be an EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:15765
+#: fortran/resolve.c:15730
#, gcc-internal-format, gfc-internal-format
msgid "Substring at %L has length zero"
msgstr ""
-#: fortran/resolve.c:15856
+#: fortran/resolve.c:15821
#, gcc-internal-format
msgid "PUBLIC function %qs at %L of PRIVATE type %qs"
msgstr ""
-#: fortran/resolve.c:15869
+#: fortran/resolve.c:15834
#, gcc-internal-format
msgid "ENTRY %qs at %L has no IMPLICIT type"
msgstr ""
-#: fortran/resolve.c:15889
+#: fortran/resolve.c:15854
#, gcc-internal-format
msgid "User operator procedure %qs at %L must be a FUNCTION"
msgstr ""
-#: fortran/resolve.c:15899
+#: fortran/resolve.c:15864
#, gcc-internal-format
msgid "User operator procedure %qs at %L cannot be assumed character length"
msgstr ""
-#: fortran/resolve.c:15907
+#: fortran/resolve.c:15872
#, gcc-internal-format
msgid "User operator procedure %qs at %L must have at least one argument"
msgstr ""
-#: fortran/resolve.c:15921
+#: fortran/resolve.c:15886
#, gcc-internal-format, gfc-internal-format
msgid "First argument of operator interface at %L cannot be optional"
msgstr ""
-#: fortran/resolve.c:15939
+#: fortran/resolve.c:15904
#, gcc-internal-format, gfc-internal-format
msgid "Second argument of operator interface at %L cannot be optional"
msgstr ""
-#: fortran/resolve.c:15946
+#: fortran/resolve.c:15911
#, gcc-internal-format, gfc-internal-format
msgid "Operator interface at %L must have, at most, two arguments"
msgstr ""
-#: fortran/resolve.c:16024
+#: fortran/resolve.c:15989
#, gcc-internal-format
msgid "Contained procedure %qs at %L of a PURE procedure must also be PURE"
msgstr ""
@@ -61265,26 +62192,16 @@ msgstr ""
msgid "BIND(C) applied to %s %s at %L"
msgstr ""
-#: fortran/symbol.c:837 fortran/symbol.c:1672
+#: fortran/symbol.c:837 fortran/symbol.c:848 fortran/symbol.c:1672
#, gcc-internal-format, gfc-internal-format
msgid "%s attribute conflicts with %s attribute at %L"
msgstr ""
-#: fortran/symbol.c:840
+#: fortran/symbol.c:840 fortran/symbol.c:854
#, gcc-internal-format
msgid "%s attribute conflicts with %s attribute in %qs at %L"
msgstr ""
-#: fortran/symbol.c:848
-#, gcc-internal-format, gfc-internal-format
-msgid "%s attribute with %s attribute at %L"
-msgstr ""
-
-#: fortran/symbol.c:854
-#, gcc-internal-format
-msgid "%s attribute with %s attribute in %qs at %L"
-msgstr ""
-
#: fortran/symbol.c:898
#, gcc-internal-format, gfc-internal-format
msgid "Cannot change attributes of USE-associated symbol at %L"
@@ -61621,19 +62538,19 @@ msgstr ""
#. Problems occur when we get something like
#. integer :: a(lots) = (/(i, i=1, lots)/)
-#: fortran/trans-array.c:5719
+#: fortran/trans-array.c:5722
#, 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:7629
+#: fortran/trans-array.c:7632
#, gcc-internal-format
msgid "Creating array temporary at %L for argument %qs"
msgstr ""
-#: fortran/trans-array.c:10080
+#: fortran/trans-array.c:10083
#, gcc-internal-format, gfc-internal-format
msgid "bad expression type during walk (%d)"
msgstr ""
@@ -61742,7 +62659,7 @@ msgstr ""
msgid "intrinsic variable which isn't a procedure"
msgstr ""
-#: fortran/trans-decl.c:4183 fortran/trans-decl.c:6410
+#: fortran/trans-decl.c:4183 fortran/trans-decl.c:6411
#, gcc-internal-format
msgid "Return value of function %qs at %L not set"
msgstr ""
@@ -61762,49 +62679,49 @@ msgstr ""
msgid "Unused PRIVATE module variable %qs declared at %L"
msgstr ""
-#: fortran/trans-decl.c:5413
+#: fortran/trans-decl.c:5414
#, gcc-internal-format
msgid "Dummy argument %qs at %L was declared INTENT(OUT) but was not set"
msgstr ""
-#: fortran/trans-decl.c:5419
+#: fortran/trans-decl.c:5420
#, 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:5429 fortran/trans-decl.c:5570
+#: fortran/trans-decl.c:5430 fortran/trans-decl.c:5571
#, gcc-internal-format
msgid "Unused dummy argument %qs at %L"
msgstr ""
-#: fortran/trans-decl.c:5444
+#: fortran/trans-decl.c:5445
#, gcc-internal-format
msgid "Unused module variable %qs which has been explicitly imported at %L"
msgstr ""
-#: fortran/trans-decl.c:5463
+#: fortran/trans-decl.c:5464
#, gcc-internal-format
msgid "Unused variable %qs declared at %L"
msgstr ""
-#: fortran/trans-decl.c:5512
+#: fortran/trans-decl.c:5513
#, gcc-internal-format
msgid "Unused parameter %qs declared at %L"
msgstr ""
-#: fortran/trans-decl.c:5516
+#: fortran/trans-decl.c:5517
#, gcc-internal-format
msgid "Unused parameter %qs which has been explicitly imported at %L"
msgstr ""
-#: fortran/trans-decl.c:5542
+#: fortran/trans-decl.c:5543
#, gcc-internal-format
msgid "Return value %qs of function %qs declared at %L not set"
msgstr ""
-#: fortran/trans-decl.c:6136
+#: fortran/trans-decl.c:6137
#, gcc-internal-format, gfc-internal-format
msgid "Sorry, !$ACC DECLARE at %L is not allowed in BLOCK construct"
msgstr ""
@@ -61854,7 +62771,7 @@ msgstr ""
msgid "%<dim%> argument of %s intrinsic at %L is not a valid dimension index"
msgstr ""
-#: fortran/trans-intrinsic.c:10225 fortran/trans-stmt.c:938
+#: fortran/trans-intrinsic.c:10225 fortran/trans-stmt.c:942
#, gcc-internal-format, gfc-internal-format
msgid "Sorry, the event component of derived type at %L is not yet supported"
msgstr ""
@@ -61864,12 +62781,12 @@ msgstr ""
msgid "The event variable at %L shall not be coindexed"
msgstr ""
-#: fortran/trans-io.c:1957
+#: fortran/trans-io.c:1968
#, gcc-internal-format
msgid "build_dt: format with namelist"
msgstr ""
-#: fortran/trans-io.c:2464
+#: fortran/trans-io.c:2475
#, gcc-internal-format, gfc-internal-format
msgid "Bad IO basetype (%d)"
msgstr ""
@@ -61879,27 +62796,27 @@ msgstr ""
msgid "implicit mapping of assumed size array %qD"
msgstr ""
-#: fortran/trans-openmp.c:4964
+#: fortran/trans-openmp.c:4967
#, gcc-internal-format
msgid "gfc_trans_omp_workshare(): Bad statement code"
msgstr ""
-#: fortran/trans-stmt.c:542
+#: fortran/trans-stmt.c:546
#, gcc-internal-format, gfc-internal-format
msgid "An alternate return at %L without a * dummy argument"
msgstr ""
-#: fortran/trans-stmt.c:741
+#: fortran/trans-stmt.c:745
#, gcc-internal-format, gfc-internal-format
msgid "Sorry, the lock component of derived type at %L is not yet supported"
msgstr ""
-#: fortran/trans-stmt.c:1200
+#: fortran/trans-stmt.c:1204
#, gcc-internal-format, gfc-internal-format
msgid "Sorry, only support for integer kind %d implemented for image-set at %L"
msgstr ""
-#: fortran/trans-stmt.c:3101
+#: fortran/trans-stmt.c:3104
#, gcc-internal-format
msgid "gfc_trans_select(): Bad type for case expr."
msgstr ""
@@ -61989,7 +62906,7 @@ msgstr ""
msgid "unable to open file"
msgstr ""
-#: lto/lto-lang.c:811
+#: lto/lto-lang.c:823
#, gcc-internal-format
msgid "-fwpa and -fltrans are mutually exclusive"
msgstr ""
@@ -62025,182 +62942,182 @@ msgstr ""
msgid "min partition size cannot be greater than max partition size"
msgstr ""
-#: lto/lto-symtab.c:175
+#: lto/lto-symtab.c:174
#, gcc-internal-format
msgid "%qD is defined with tls model %s"
msgstr ""
-#: lto/lto-symtab.c:177
+#: lto/lto-symtab.c:176
#, gcc-internal-format, gfc-internal-format
msgid "previously defined here as %s"
msgstr ""
-#: lto/lto-symtab.c:447
+#: lto/lto-symtab.c:446
#, gcc-internal-format
msgid "multiple prevailing defs for %qE"
msgstr ""
-#: lto/lto-symtab.c:465
+#: lto/lto-symtab.c:464
#, gcc-internal-format
msgid "%qD has already been defined"
msgstr ""
-#: lto/lto-symtab.c:467
+#: lto/lto-symtab.c:466
#, gcc-internal-format
msgid "previously defined here"
msgstr ""
-#: lto/lto-symtab.c:675
+#: lto/lto-symtab.c:674
#, gcc-internal-format
msgid "%qD violates the C++ One Definition Rule "
msgstr ""
-#: lto/lto-symtab.c:680
+#: lto/lto-symtab.c:679
#, gcc-internal-format
msgid "type of %qD does not match original declaration"
msgstr ""
-#: lto/lto-symtab.c:700
+#: lto/lto-symtab.c:699
#, gcc-internal-format
msgid "alignment of %qD is bigger than original declaration"
msgstr ""
-#: lto/lto-symtab.c:706
+#: lto/lto-symtab.c:705
#, gcc-internal-format
msgid "size of %qD differ from the size of original declaration"
msgstr ""
-#: lto/lto-symtab.c:711
+#: lto/lto-symtab.c:710
#, gcc-internal-format
msgid "%qD was previously declared here"
msgstr ""
-#: lto/lto-symtab.c:714
+#: lto/lto-symtab.c:713
#, gcc-internal-format
msgid "code may be misoptimized unless -fno-strict-aliasing is used"
msgstr ""
-#: lto/lto-symtab.c:800
+#: lto/lto-symtab.c:799
#, gcc-internal-format
msgid "variable %qD redeclared as function"
msgstr ""
-#: lto/lto-symtab.c:807
+#: lto/lto-symtab.c:806
#, gcc-internal-format
msgid "function %qD redeclared as variable"
msgstr ""
-#: lto/lto-symtab.c:819
+#: lto/lto-symtab.c:818
#, gcc-internal-format
msgid "previously declared here"
msgstr ""
-#: lto/lto.c:1814
+#: lto/lto.c:1815
#, gcc-internal-format
msgid "bytecode stream: garbage at the end of symbols section"
msgstr ""
-#: lto/lto.c:1841
+#: lto/lto.c:1842
#, gcc-internal-format
msgid "could not parse hex number"
msgstr ""
-#: lto/lto.c:1873
+#: lto/lto.c:1874
#, gcc-internal-format, gfc-internal-format
msgid "unexpected file name %s in linker resolution file. Expected %s"
msgstr ""
-#: lto/lto.c:1882
+#: lto/lto.c:1883
#, gcc-internal-format
msgid "could not parse file offset"
msgstr ""
-#: lto/lto.c:1885
+#: lto/lto.c:1886
#, gcc-internal-format
msgid "unexpected offset"
msgstr ""
-#: lto/lto.c:1907
+#: lto/lto.c:1908
#, gcc-internal-format
msgid "invalid line in the resolution file"
msgstr ""
-#: lto/lto.c:1918
+#: lto/lto.c:1919
#, gcc-internal-format
msgid "invalid resolution in the resolution file"
msgstr ""
-#: lto/lto.c:1924
+#: lto/lto.c:1925
#, gcc-internal-format
msgid "resolution sub id %wx not in object file"
msgstr ""
-#: lto/lto.c:2036
+#: lto/lto.c:2037
#, gcc-internal-format, gfc-internal-format
msgid "cannot read LTO decls from %s"
msgstr ""
-#: lto/lto.c:2142
+#: lto/lto.c:2143
#, gcc-internal-format, gfc-internal-format
msgid "Cannot open %s"
msgstr ""
-#: lto/lto.c:2163
+#: lto/lto.c:2164
#, gcc-internal-format, gfc-internal-format
msgid "Cannot map %s"
msgstr ""
-#: lto/lto.c:2174
+#: lto/lto.c:2175
#, gcc-internal-format, gfc-internal-format
msgid "Cannot read %s"
msgstr ""
-#: lto/lto.c:2288
+#: lto/lto.c:2289
#, gcc-internal-format
msgid "lto_obj_file_open() failed"
msgstr ""
-#: lto/lto.c:2313
+#: lto/lto.c:2314
#, gcc-internal-format
msgid "waitpid failed"
msgstr ""
-#: lto/lto.c:2316
+#: lto/lto.c:2317
#, gcc-internal-format
msgid "streaming subprocess failed"
msgstr ""
-#: lto/lto.c:2319
+#: lto/lto.c:2320
#, gcc-internal-format
msgid "streaming subprocess was killed by signal"
msgstr ""
-#: lto/lto.c:2395
+#: lto/lto.c:2396
#, gcc-internal-format
msgid "no LTRANS output list filename provided"
msgstr ""
-#: lto/lto.c:2483
+#: lto/lto.c:2484
#, gcc-internal-format
msgid "opening LTRANS output list %s: %m"
msgstr ""
-#: lto/lto.c:2489
+#: lto/lto.c:2490
#, gcc-internal-format
msgid "writing to LTRANS output list %s: %m"
msgstr ""
-#: lto/lto.c:2500
+#: lto/lto.c:2501
#, gcc-internal-format
msgid "closing LTRANS output list %s: %m"
msgstr ""
-#: lto/lto.c:2752
+#: lto/lto.c:2753
#, gcc-internal-format
msgid "could not open symbol resolution file: %m"
msgstr ""
-#: lto/lto.c:2893
+#: lto/lto.c:2894
#, gcc-internal-format
msgid "errors during merging of translation units"
msgstr ""
@@ -63137,7 +64054,7 @@ msgstr ""
#: objc/objc-gnu-runtime-abi-01.c:2168 objc/objc-next-runtime-abi-01.c:2815
#: objc/objc-next-runtime-abi-02.c:3587
#, gcc-internal-format
-msgid "non-objective-c type '%T' cannot be caught"
+msgid "non-objective-c type %qT cannot be caught"
msgstr ""
#: objc/objc-next-runtime-abi-01.c:150
diff --git a/gcc/po/uk.po b/gcc/po/uk.po
index 83bdd18ef35..9040753e2fc 100644
--- a/gcc/po/uk.po
+++ b/gcc/po/uk.po
@@ -2,13 +2,13 @@
# Copyright (C) 2015 Free Software Foundation, Inc.
# This file is distributed under the same license as the gcc package.
#
-# Yuri Chornoivan <yurchor@ukr.net>, 2015, 2016.
+# Yuri Chornoivan <yurchor@ukr.net>, 2015, 2016, 2017.
msgid ""
msgstr ""
-"Project-Id-Version: gcc 6.2.0\n"
+"Project-Id-Version: gcc 7.1.0\n"
"Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n"
"POT-Creation-Date: 2017-05-01 22:24+0000\n"
-"PO-Revision-Date: 2016-08-24 18:46+0300\n"
+"PO-Revision-Date: 2017-07-18 13:34+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
"Language: uk\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Lokalize 1.5\n"
+"X-Generator: Lokalize 2.0\n"
#: cfgrtl.c:2661
msgid "flow control insn inside a basic block"
@@ -65,9 +65,9 @@ msgstr[2] "знайдено %d деструкторів\n"
#, c-format
msgid "%d frame table found\n"
msgid_plural "%d frame tables found\n"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "знайдено %d таблицю кадрів\n"
+msgstr[1] "знайдено %d таблиці кадрів\n"
+msgstr[2] "знайдено %d таблиць кадрів\n"
#: collect2.c:1836
#, c-format
@@ -94,7 +94,7 @@ msgstr ""
#: cprop.c:1756
msgid "const/copy propagation disabled"
-msgstr ""
+msgstr "передавання const/copy вимкнено"
#: diagnostic.c:224
#, c-format
@@ -1042,7 +1042,7 @@ msgstr ""
#: gimple-ssa-isolate-paths.c:526 gimple-ssa-isolate-paths.c:410
#, gcc-internal-format
msgid "function may return address of local variable"
-msgstr ""
+msgstr "функція може повертати адресу локальної змінної"
#: incpath.c:72
#, c-format
@@ -1091,7 +1091,7 @@ msgstr ""
#: langhooks.c:386 cp/error.c:3372
#, c-format
msgid "In member function %qs"
-msgstr ""
+msgstr "У функції-члені %qs"
#: langhooks.c:390 cp/error.c:3375
#, c-format
@@ -2779,75 +2779,75 @@ msgstr ""
#: config/rs6000/rs6000.c:23938 config/sparc/sparc.c:8854
#, c-format
msgid "'%%&' used without any local dynamic TLS references"
-msgstr ""
+msgstr "'%%&' використано без будь-яких локальних динамічних посилань TLS"
#: config/alpha/alpha.c:5150 config/bfin/bfin.c:1424
#, c-format
msgid "invalid %%J value"
-msgstr ""
+msgstr "некоректне значення %%J"
#: config/alpha/alpha.c:5180 config/ia64/ia64.c:5488
#, c-format
msgid "invalid %%r value"
-msgstr ""
+msgstr "некоректне значення %%r"
#: config/alpha/alpha.c:5190 config/ia64/ia64.c:5442
#: config/rs6000/rs6000.c:23618 config/xtensa/xtensa.c:2363
#, c-format
msgid "invalid %%R value"
-msgstr ""
+msgstr "некоректне значення %%R"
#: config/alpha/alpha.c:5196 config/rs6000/rs6000.c:23538
#: config/xtensa/xtensa.c:2330
#, c-format
msgid "invalid %%N value"
-msgstr ""
+msgstr "некоректне значення %%N"
#: config/alpha/alpha.c:5204 config/rs6000/rs6000.c:23566
#, c-format
msgid "invalid %%P value"
-msgstr ""
+msgstr "некоректне значення %%P"
#: config/alpha/alpha.c:5212
#, c-format
msgid "invalid %%h value"
-msgstr ""
+msgstr "некоректне значення %%h"
#: config/alpha/alpha.c:5220 config/xtensa/xtensa.c:2356
#, c-format
msgid "invalid %%L value"
-msgstr ""
+msgstr "некоректне значення %%L"
#: config/alpha/alpha.c:5239
#, c-format
msgid "invalid %%m value"
-msgstr ""
+msgstr "некоректне значення %%m"
#: config/alpha/alpha.c:5245
#, c-format
msgid "invalid %%M value"
-msgstr ""
+msgstr "некоректне значення %%M"
#: config/alpha/alpha.c:5282
#, c-format
msgid "invalid %%U value"
-msgstr ""
+msgstr "некоректне значення %%U"
#: config/alpha/alpha.c:5290 config/alpha/alpha.c:5301
#: config/rs6000/rs6000.c:23626
#, c-format
msgid "invalid %%s value"
-msgstr ""
+msgstr "некоректне значення %%s"
#: config/alpha/alpha.c:5312
#, c-format
msgid "invalid %%C value"
-msgstr ""
+msgstr "некоректне значення %%C"
#: config/alpha/alpha.c:5349 config/rs6000/rs6000.c:23402
#, c-format
msgid "invalid %%E value"
-msgstr ""
+msgstr "некоректне значення %%E"
#: config/alpha/alpha.c:5374 config/alpha/alpha.c:5424
#, c-format
@@ -3041,24 +3041,20 @@ msgid "variable"
msgstr ""
#: config/avr/avr.c:9808
-#, fuzzy
-#| msgid "expected function name"
msgid "function parameter"
-msgstr "мало бути вказано назву функції"
+msgstr "параметр функції"
#: config/avr/avr.c:9813
msgid "structure field"
-msgstr ""
+msgstr "поле структури"
#: config/avr/avr.c:9819
msgid "return type of function"
-msgstr ""
+msgstr "тип значення, яке повертає функція"
#: config/avr/avr.c:9824
-#, fuzzy
-#| msgid "null pointer"
msgid "pointer"
-msgstr "нульовий вказівник"
+msgstr "вказівник"
#: config/avr/driver-avr.c:48
#, c-format
@@ -3645,27 +3641,27 @@ msgstr ""
#: config/rs6000/rs6000.c:23199
msgid "Bad 128-bit move"
-msgstr ""
+msgstr "Помилкове 128-бітове пересування"
#: config/rs6000/rs6000.c:23390
#, c-format
msgid "invalid %%e value"
-msgstr ""
+msgstr "некоректне значення %%e"
#: config/rs6000/rs6000.c:23411
#, c-format
msgid "invalid %%f value"
-msgstr ""
+msgstr "некоректне значення %%f"
#: config/rs6000/rs6000.c:23420
#, c-format
msgid "invalid %%F value"
-msgstr ""
+msgstr "некоректне значення %%F"
#: config/rs6000/rs6000.c:23429
#, c-format
msgid "invalid %%G value"
-msgstr ""
+msgstr "некоректне значення %%G"
#: config/rs6000/rs6000.c:23464
#, c-format
@@ -4311,10 +4307,8 @@ msgid "expected %<<%>"
msgstr "мало бути %<<%>"
#: c/gimple-parser.c:1428 c/gimple-parser.c:1455 c/gimple-parser.c:1483
-#, fuzzy
-#| msgid "expected %<__label__%>"
msgid "expected label"
-msgstr "мало бути %<__label__%>"
+msgstr "мало бути вказано мітку"
#: cp/call.c:9927
msgid "candidate 1:"
@@ -4342,7 +4336,7 @@ msgstr ""
#: cp/error.c:421
msgid "<unresolved overloaded function type>"
-msgstr ""
+msgstr "<невизначений перевантажений тип функції>"
#: cp/error.c:583
msgid "<type error>"
@@ -4351,13 +4345,12 @@ msgstr "<помилка типу>"
#: cp/error.c:684 objc/objc-act.c:6180 cp/cxx-pretty-print.c:161
#, gcc-internal-format
msgid "<unnamed>"
-msgstr ""
+msgstr "<неназваний>"
#: cp/error.c:686
-#, fuzzy, c-format
-#| msgid "<anonymous %s>"
+#, c-format
msgid "<unnamed %s>"
-msgstr "<анонімний %s>"
+msgstr "<неназваний %s>"
#. A lambda's "type" is essentially its signature.
#: cp/error.c:691
@@ -5302,10 +5295,8 @@ msgid "-E or -x required when input is from standard input"
msgstr ""
#: config/darwin.h:171
-#, fuzzy
-#| msgid "%<-Wabi=1%> is not supported, using =2"
msgid "rdynamic is not supported"
-msgstr "Підтримки %<-Wabi=1%> не передбачено, використовуємо =2"
+msgstr "підтримки rdynamic не передбачено"
#: config/darwin.h:260
msgid "-current_version only allowed with -dynamiclib"
@@ -5498,11 +5489,11 @@ msgstr ""
#: objc/lang-specs.h:55
msgid "objc-cpp-output is deprecated; please use objective-c-cpp-output instead"
-msgstr ""
+msgstr "objc-cpp-output вважається застарілим; будь ласка, скористайтеся замість нього objective-c-cpp-output"
#: objcp/lang-specs.h:58
msgid "objc++-cpp-output is deprecated; please use objective-c++-cpp-output instead"
-msgstr ""
+msgstr "objc++-cpp-output вважається застарілим; будь ласка, скористайтеся замість нього objective-c++-cpp-output"
#: fortran/lang.opt:146
msgid "-J<directory>\tPut MODULE files in 'directory'."
@@ -6104,11 +6095,11 @@ msgstr ""
#: c-family/c.opt:300 ada/gcc-interface/lang.opt:57
msgid "Enable most warning messages."
-msgstr ""
+msgstr "Увімкнути якнайбільше повідомлень із попередженнями."
#: c-family/c.opt:304
msgid "Warn on any use of alloca."
-msgstr ""
+msgstr "Попереджати про усі використання alloca."
#: c-family/c.opt:308
msgid "-Walloc-size-larger-than=<bytes> Warn for calls to allocation functions that attempt to allocate objects larger than the specified number of bytes."
@@ -6128,17 +6119,15 @@ msgstr ""
#: c-family/c.opt:335
msgid "Warn about casting functions to incompatible types."
-msgstr ""
+msgstr "Попереджати про виклик функцій із несумісними типами параметрів."
#: c-family/c.opt:339
msgid "Warn about boolean expression compared with an integer value different from true/false."
msgstr ""
#: c-family/c.opt:343
-#, fuzzy
-#| msgid "Warn about creation of array temporaries."
msgid "Warn about certain operations on boolean expressions."
-msgstr "Попереджати щодо створення тимчасових масивів."
+msgstr "Попереджати щодо певних дій із булевими виразами."
#: c-family/c.opt:347
msgid "Warn when __builtin_frame_address or __builtin_return_address is used unsafely."
@@ -6198,7 +6187,7 @@ msgstr ""
#: c-family/c.opt:409
msgid "Synonym for -Wcomment."
-msgstr ""
+msgstr "Синонім -Wcomment."
#: c-family/c.opt:413
msgid "Warn for conditionally-supported constructs."
@@ -6206,7 +6195,7 @@ msgstr ""
#: c-family/c.opt:417
msgid "Warn for implicit type conversions that may change a value."
-msgstr ""
+msgstr "Попереджати про неявні перетворення типів, які можуть призвести до зміни значення."
#: c-family/c.opt:421
msgid "Warn for converting NULL from/to a non-pointer type."
@@ -6214,7 +6203,7 @@ msgstr ""
#: c-family/c.opt:429
msgid "Warn when all constructors and destructors are private."
-msgstr ""
+msgstr "Попереджати, якщо усі конструктори і деструктори є закритими (private)."
#: c-family/c.opt:433
msgid "Warn about dangling else."
@@ -6226,11 +6215,11 @@ msgstr ""
#: c-family/c.opt:441
msgid "Warn when a declaration is found after a statement."
-msgstr ""
+msgstr "Попереджати, якщо оголошення виявлено після інструкції."
#: c-family/c.opt:445
msgid "Warn when deleting a pointer to incomplete type."
-msgstr ""
+msgstr "Попереджати щодо вилучення вказівника на неповний тип."
#: c-family/c.opt:449
msgid "Warn about deleting polymorphic objects with non-virtual destructors."
@@ -6238,7 +6227,7 @@ msgstr ""
#: c-family/c.opt:453
msgid "Warn if a deprecated compiler feature, class, method, or field is used."
-msgstr ""
+msgstr "Попереджати щодо використання застарілої можливості компілятора, застарілого класу, методу або поля."
#: c-family/c.opt:457
msgid "Warn about positional initialization of structs requiring designated initializers."
@@ -6258,19 +6247,19 @@ msgstr ""
#: c-family/c.opt:473
msgid "Warn about duplicated branches in if-else statements."
-msgstr ""
+msgstr "Попереджати про дублювання гілок у інструкціях if-else."
#: c-family/c.opt:477
msgid "Warn about duplicated conditions in an if-else-if chain."
-msgstr ""
+msgstr "Попереджати про дублювання умов у ланцюжку if-else-if."
#: c-family/c.opt:481
msgid "Warn about violations of Effective C++ style rules."
-msgstr ""
+msgstr "Попереджати про порушення правил стилю Effective C++."
#: c-family/c.opt:485
msgid "Warn about an empty body in an if or else statement."
-msgstr ""
+msgstr "Попереджати щодо порожнього комплекту інструкцій у if або else."
#: c-family/c.opt:489
msgid "Warn about stray tokens after #else and #endif."
@@ -6278,11 +6267,11 @@ msgstr ""
#: c-family/c.opt:493
msgid "Warn about comparison of different enum types."
-msgstr ""
+msgstr "Попереджати про порівняння різних типів числових даних."
#: c-family/c.opt:501
msgid "This switch is deprecated; use -Werror=implicit-function-declaration instead."
-msgstr ""
+msgstr "Цей перемикач вважається застарілим; скористайтеся замість нього перемикачем -Werror=implicit-function-declaration."
#: c-family/c.opt:509
msgid "Warn for implicit type conversions that cause loss of floating point precision."
@@ -6290,15 +6279,15 @@ msgstr ""
#: c-family/c.opt:513
msgid "Warn if testing floating point numbers for equality."
-msgstr ""
+msgstr "Попереджати про перевірки на рівність чисел із рухомою крапкою."
#: c-family/c.opt:517 c-family/c.opt:559
msgid "Warn about printf/scanf/strftime/strfmon format string anomalies."
-msgstr ""
+msgstr "Попереджати про некоректності у рядках форматування printf/scanf/strftime/strfmon."
#: c-family/c.opt:521
msgid "Warn about format strings that contain NUL bytes."
-msgstr ""
+msgstr "Попереджати щодо рядків форматування, які містять байти NUL."
#: c-family/c.opt:525
msgid "Warn if passing too many arguments to a function for its format string."
@@ -6306,7 +6295,7 @@ msgstr ""
#: c-family/c.opt:529
msgid "Warn about format strings that are not literals."
-msgstr ""
+msgstr "Попереджати, якщо рядки форматування не є літералами."
#: c-family/c.opt:533
msgid "Warn about function calls with format strings that write past the end of the destination region. Same as -Wformat-overflow=1."
@@ -6318,7 +6307,7 @@ msgstr ""
#: c-family/c.opt:542
msgid "Warn about sign differences with format functions."
-msgstr ""
+msgstr "Попереджати про відмінності у знаку у функціях форматування."
#: c-family/c.opt:546
msgid "Warn about calls to snprintf and similar functions that truncate output. Same as -Wformat-truncation=1."
@@ -6330,7 +6319,7 @@ msgstr ""
#: c-family/c.opt:555
msgid "Warn about zero-length formats."
-msgstr ""
+msgstr "Попереджати про формати нульової довжини."
#: c-family/c.opt:563
msgid "Warn about function calls with format strings that write past the end of the destination region."
@@ -6346,7 +6335,7 @@ msgstr ""
#: c-family/c.opt:576
msgid "Warn whenever attributes are ignored."
-msgstr ""
+msgstr "Попереджати про ігнорування атрибутів."
#: c-family/c.opt:580
msgid "Warn when there is a conversion between pointers that have incompatible types."
@@ -6354,27 +6343,27 @@ msgstr ""
#: c-family/c.opt:584
msgid "Warn about variables which are initialized to themselves."
-msgstr ""
+msgstr "Попереджати про самоініціалізацію змінних."
#: c-family/c.opt:588
msgid "Warn about implicit declarations."
-msgstr ""
+msgstr "Попереджати про неявні оголошення."
#: c-family/c.opt:596
msgid "Warn about implicit conversions from \"float\" to \"double\"."
-msgstr ""
+msgstr "Попереджати про неявні перетворення з float на double."
#: c-family/c.opt:600
msgid "Warn if \"defined\" is used outside #if."
-msgstr ""
+msgstr "Попереджати, якщо defined використано поза #if."
#: c-family/c.opt:604
msgid "Warn about implicit function declarations."
-msgstr ""
+msgstr "Попереджати про неявні оголошення функцій."
#: c-family/c.opt:608
msgid "Warn when a declaration does not specify a type."
-msgstr ""
+msgstr "Попереджати, якщо оголошення не визначає типу."
#: c-family/c.opt:615
msgid "Warn about C++11 inheriting constructors when the base has a variadic constructor."
@@ -8855,7 +8844,7 @@ msgstr ""
#: config/i386/i386.opt:315
msgid "%<-mcpu=%> is deprecated; use %<-mtune=%> or %<-march=%> instead"
-msgstr ""
+msgstr "%<-mcpu=%> вважається застарілим; скористайтеся замість нього %<-mtune=%> або %<-march=%>"
#: config/i386/i386.opt:319
msgid "Generate sin, cos, sqrt for FPU."
@@ -11587,7 +11576,7 @@ msgstr ""
#: config/fused-madd.opt:22
msgid "%<-mfused-madd%> is deprecated; use %<-ffp-contract=%> instead"
-msgstr ""
+msgstr "%<-mfused-madd%> вважається застарілим; скористайтеся замість нього %<-ffp-contract=%>"
#: config/sol2.opt:32
msgid "Clear hardware capabilities when linking."
@@ -11644,7 +11633,7 @@ msgstr ""
#: config/microblaze/microblaze.opt:87
#, c-format
msgid "%qs is deprecated; use -fstack-check"
-msgstr ""
+msgstr "%qs вважається застарілим; скористайтеся -fstack-check"
#: config/microblaze/microblaze.opt:88
msgid "Check for stack overflow at runtime."
@@ -12780,7 +12769,7 @@ msgstr ""
#: config/arc/arc.opt:356 config/arc/arc.opt:373
#, c-format
msgid "%qs is deprecated"
-msgstr ""
+msgstr "%qs вважається застарілим"
#: config/arc/arc.opt:170
msgid "Do not generate mpy instructions for ARC700."
@@ -13437,17 +13426,15 @@ msgstr ""
#: common.opt:1065
msgid "Check the return value of new in C++."
-msgstr ""
+msgstr "Перевіряти повернуте значення new у C++."
#: common.opt:1069 common.opt:1073
msgid "Perform internal consistency checkings."
-msgstr ""
+msgstr "Виконувати внутрішні перевірки сумісності."
#: common.opt:1077
-#, fuzzy
-#| msgid "Enable debug output."
msgid "Enable code hoisting."
-msgstr "Увімкнути виведення діагностичних даних."
+msgstr "Увімкнути підняття коду."
#: common.opt:1081
msgid "Looks for opportunities to reduce stack adjustments and stack references."
@@ -15438,10 +15425,9 @@ msgid "Not expected TAG."
msgstr ""
#: auto-profile.c:920
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "can't open input file: %s"
+#, gcc-internal-format, gfc-internal-format
msgid "cannot open profile file %s"
-msgstr "не вдалося відкрити вхідний файл %s"
+msgstr "не вдалося відкрити файл профілювання %s"
#: auto-profile.c:926
#, gcc-internal-format
@@ -15454,22 +15440,19 @@ msgid "AutoFDO profile version %u does match %u"
msgstr ""
#: auto-profile.c:946
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "cannot read %s: %m"
+#, gcc-internal-format, gfc-internal-format
msgid "cannot read string table from %s"
-msgstr "не вдалося прочитати %s: %m"
+msgstr "не вдалося прочитати таблицю рядків з %s"
#: auto-profile.c:954
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "cannot call function %qD"
+#, gcc-internal-format, gfc-internal-format
msgid "cannot read function profile from %s"
-msgstr "не вдалося викликати функцію %qD"
+msgstr "не вдалося прочитати профіль функції з %s"
#: auto-profile.c:964
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "cannot read %s: %m"
+#, gcc-internal-format, gfc-internal-format
msgid "cannot read working set from %s"
-msgstr "не вдалося прочитати %s: %m"
+msgstr "не вдалося прочитати робочий набір з %s"
#: bt-load.c:1564
#, gcc-internal-format
@@ -15765,21 +15748,19 @@ msgid "argument %i in the range [%E, %E]"
msgstr ""
#: calls.c:1491
-#, fuzzy, gcc-internal-format
-#| msgid "cannot call function %qD"
+#, gcc-internal-format
msgid "in a call to built-in allocation function %qD"
-msgstr "не вдалося викликати функцію %qD"
+msgstr "у виклику до вбудованої функції розподілу пам'яті %qD"
#: calls.c:1494
#, gcc-internal-format
msgid "in a call to allocation function %qD declared here"
-msgstr ""
+msgstr "у виклику до функції отримання області пам'яті %qD оголошено тут"
#: calls.c:1508
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "[cannot find %s]"
+#, gcc-internal-format, gfc-internal-format
msgid "cannot tail-call: %s"
-msgstr "[не вдалося знайти %s]"
+msgstr "хвостовий виклик неможливий: %s"
#: calls.c:3071
#, gcc-internal-format
@@ -17769,7 +17750,7 @@ msgstr "розіменування нульового вказівника"
#: cp/semantics.c:1764 cp/typeck.c:1648 cp/typeck.c:1843 cp/typeck.c:3718
#, gcc-internal-format
msgid "declared here"
-msgstr ""
+msgstr "оголошено тут"
#: gimple-ssa-nonnull-compare.c:102
#, gcc-internal-format
@@ -18007,10 +17988,9 @@ msgid "assuming directive output of %wu bytes"
msgstr ""
#: gimple-ssa-sprintf.c:2776
-#, fuzzy, gcc-internal-format
-#| msgid "unexpected argument"
+#, gcc-internal-format
msgid "directive argument %qE"
-msgstr "несподіваний аргумент"
+msgstr "аргумент директиви %qE"
#: gimple-ssa-sprintf.c:2778
#, gcc-internal-format
@@ -18058,10 +18038,9 @@ msgid "specified bound %wu exceeds %<INT_MAX %>"
msgstr ""
#: gimple-ssa-sprintf.c:3650
-#, fuzzy, gcc-internal-format
-#| msgid "null pointer"
+#, gcc-internal-format
msgid "null destination pointer"
-msgstr "нульовий вказівник"
+msgstr "нульовий вказівник призначення"
#: gimple-ssa-sprintf.c:3667
#, gcc-internal-format
@@ -18224,10 +18203,9 @@ msgid "enclosing task"
msgstr ""
#: gimplify.c:6852
-#, fuzzy, gcc-internal-format
-#| msgid "%qs tag used in naming %q#T"
+#, gcc-internal-format
msgid "%qE not specified in enclosing %qs"
-msgstr "теґ %qs використано у назві %q#T"
+msgstr "%qE не задано у замиканні %qs"
#: gimplify.c:6854
#, gcc-internal-format
@@ -19547,10 +19525,9 @@ msgid "-fsanitize=leak is incompatible with -fsanitize=thread"
msgstr ""
#: opts.c:976
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%<-fabi-compat-version=1%> is not supported, using =2"
+#, gcc-internal-format, gfc-internal-format
msgid "-fsanitize-recover=%s is not supported"
-msgstr "Підтримки %<-fabi-compat-version=1%> не передбачено, використовуємо =2"
+msgstr "підтримки -fsanitize-recover=%s не передбачено"
#: opts.c:1005
#, gcc-internal-format
@@ -19623,10 +19600,9 @@ msgid "%s: --param arguments should be of the form NAME=VALUE"
msgstr ""
#: opts.c:2371
-#, fuzzy, gcc-internal-format
-#| msgid "invalid --param name %qs"
+#, gcc-internal-format
msgid "invalid --param name %qs; did you mean %qs?"
-msgstr "некоректна назва --param %qs"
+msgstr "некоректна назва --param %qs; ви мали на увазі %qs?"
#: opts.c:2374
#, gcc-internal-format
@@ -19914,10 +19890,9 @@ msgid "was expecting `%s'"
msgstr ""
#: read-rtl-function.c:1575
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "duplicate definition of '%s'"
+#, gcc-internal-format, gfc-internal-format
msgid "duplicate insn UID: %i"
-msgstr "повторне визначення «%s»"
+msgstr "UID інструкції-дубліката: %i"
#: read-rtl-function.c:1635
#, gcc-internal-format
@@ -21525,17 +21500,17 @@ msgstr ""
#: tree-diagnostic.c:202
#, gcc-internal-format
msgid "in definition of macro %qs"
-msgstr ""
+msgstr "у оголошенні макросу %qs"
#: tree-diagnostic.c:219
#, gcc-internal-format
msgid "in expansion of macro %qs"
-msgstr ""
+msgstr "у розгортанні макросу %qs"
#: tree-eh.c:4669
#, gcc-internal-format, gfc-internal-format
msgid "BB %i has multiple EH edges"
-msgstr ""
+msgstr "BB %i має декілька країв EH"
#: tree-eh.c:4681
#, gcc-internal-format, gfc-internal-format
@@ -21679,16 +21654,14 @@ msgid "argument %u null where non-null expected"
msgstr ""
#: tree-ssa-ccp.c:3427
-#, fuzzy, gcc-internal-format
-#| msgid "cannot call function %qD"
+#, gcc-internal-format
msgid "in a call to built-in function %qD"
-msgstr "не вдалося викликати функцію %qD"
+msgstr "у виклику вбудованої функції %qD"
#: tree-ssa-ccp.c:3431
-#, fuzzy, gcc-internal-format
-#| msgid "cannot call function %qD"
+#, gcc-internal-format
msgid "in a call to function %qD declared here"
-msgstr "не вдалося викликати функцію %qD"
+msgstr "у виклику функції %qD, оголошено тут"
#: tree-ssa-loop-niter.c:2367
#, gcc-internal-format
@@ -22154,32 +22127,32 @@ msgstr ""
#: tree.c:12875
#, gcc-internal-format
msgid "%qD is deprecated: %s"
-msgstr ""
+msgstr "%qD вважається застарілим: %s"
#: tree.c:12878
#, gcc-internal-format
msgid "%qD is deprecated"
-msgstr ""
+msgstr "%qD вважається застарілим"
#: tree.c:12902 tree.c:12924
#, gcc-internal-format
msgid "%qE is deprecated: %s"
-msgstr ""
+msgstr "%qE вважається застарілим: %s"
#: tree.c:12905 tree.c:12927
#, gcc-internal-format
msgid "%qE is deprecated"
-msgstr ""
+msgstr "%qE вважається застарілим"
#: tree.c:12911 tree.c:12932
#, gcc-internal-format, gfc-internal-format
msgid "type is deprecated: %s"
-msgstr ""
+msgstr "тип вважається застарілим: %s"
#: tree.c:12914 tree.c:12935
#, gcc-internal-format
msgid "type is deprecated"
-msgstr ""
+msgstr "тип вважається застарілим"
#. Type variant can differ by:
#.
@@ -23358,7 +23331,7 @@ msgstr ""
#: c-family/c-common.c:4869
#, gcc-internal-format
msgid "pointers are not permitted as case values"
-msgstr ""
+msgstr "вказівники не можуть бути значеннями випадків"
#: c-family/c-common.c:4876
#, gcc-internal-format
@@ -23373,7 +23346,7 @@ msgstr ""
#: c-family/c-common.c:4963
#, gcc-internal-format
msgid "duplicate (or overlapping) case value"
-msgstr ""
+msgstr "дублювання (або перекривання) значення випадку"
#: c-family/c-common.c:4965
#, gcc-internal-format
@@ -23383,7 +23356,7 @@ msgstr ""
#: c-family/c-common.c:4969
#, gcc-internal-format
msgid "duplicate case value"
-msgstr ""
+msgstr "дублювання значення випадку"
#: c-family/c-common.c:4970 c-family/c-warn.c:1995
#, gcc-internal-format
@@ -24924,12 +24897,12 @@ msgstr ""
#: c-family/c-warn.c:1068
#, gcc-internal-format
msgid "case value %qs not in enumerated type"
-msgstr ""
+msgstr "значення випадку %qs не належить до перераховного типу"
#: c-family/c-warn.c:1073
#, gcc-internal-format
msgid "case value %qs not in enumerated type %qT"
-msgstr ""
+msgstr "значення випадку %qs не належить до перераховного типу %qT"
#: c-family/c-warn.c:1134
#, gcc-internal-format
@@ -25290,7 +25263,7 @@ msgstr ""
#: c-family/c-warn.c:1897
#, gcc-internal-format
msgid "unused parameter %qD"
-msgstr ""
+msgstr "невикористаний параметр %qD"
#: c-family/c-warn.c:1959
#, gcc-internal-format
@@ -25874,10 +25847,9 @@ msgid "unknown tuning option (%s)"
msgstr "невідомий параметр регулювання (%s)"
#: config/aarch64/aarch64.c:8715
-#, fuzzy, gcc-internal-format
-#| msgid "Invalid argument %d for builtin %qF"
+#, gcc-internal-format
msgid "valid arguments are: %s; did you mean %qs?"
-msgstr "Некоректний аргумент %d до вбудованої %qF"
+msgstr "коректними аргументами є такі: %s; ви мали на увазі %qs?"
#: config/aarch64/aarch64.c:8756
#, gcc-internal-format
@@ -27355,10 +27327,9 @@ msgid "can%'t set position in PCH file: %m"
msgstr ""
#: config/i386/i386.c:4692
-#, fuzzy, gcc-internal-format
-#| msgid "Invalid argument %d for builtin %qF"
+#, gcc-internal-format
msgid "wrong argument %qs to option %qs"
-msgstr "Некоректний аргумент %d до вбудованої %qF"
+msgstr "помилковий аргумент %qs параметра %qs"
#: config/i386/i386.c:4698
#, gcc-internal-format
@@ -27409,7 +27380,7 @@ msgstr ""
#: config/i386/i386.c:5272
#, gcc-internal-format
msgid "%<target(\"tune=x86-64\")%> is deprecated; use %<target(\"tune=k8\")%> or %<target(\"tune=generic\")%> instead as appropriate"
-msgstr ""
+msgstr "%<target(\"tune=x86-64\")%> вважається застарілим; скористайтеся одним із відповідників: %<target(\"tune=k8\")%> або %<target(\"tune=generic\")%>"
#. rep; movq isn't available in 32-bit code.
#: config/i386/i386.c:5299
@@ -27501,7 +27472,7 @@ msgstr ""
#: config/i386/i386.c:5688
#, gcc-internal-format
msgid "valid arguments to %<-march=%> switch are: %s"
-msgstr ""
+msgstr "коректними аргументами перемикача %<-march=%> є такі: %s"
#: config/i386/i386.c:5689
#, gcc-internal-format
@@ -27529,10 +27500,9 @@ msgid "valid arguments to %<target(\"tune=\")%> attribute are: %s; did you mean
msgstr ""
#: config/i386/i386.c:5759
-#, fuzzy, gcc-internal-format
-#| msgid "invalid argument to %<__builtin_return_address%>"
+#, gcc-internal-format
msgid "valid arguments to %<-mtune=%> switch are: %s"
-msgstr "некоректний аргумент %<__builtin_return_address%>"
+msgstr "коректними аргументами перемикача %<-mtune=%> є такі: %s"
#: config/i386/i386.c:5760
#, gcc-internal-format
@@ -28931,10 +28901,9 @@ msgid "invalid warm function for reset attribute"
msgstr ""
#: config/nds32/nds32.c:2707
-#, fuzzy, gcc-internal-format
-#| msgid "Generate position-independent code if possible (small mode)."
+#, gcc-internal-format
msgid "position-independent code not supported"
-msgstr "Створити виконуваний файл з незалежним позиціюванням, якщо можливо (малий режим)"
+msgstr "підтримки коду із незалежним позиціюванням не передбачено"
#: config/nios2/nios2.c:561
#, gcc-internal-format
@@ -30335,13 +30304,12 @@ msgstr ""
#: config/s390/s390-c.c:879
#, gcc-internal-format
msgid "builtin %qF is deprecated."
-msgstr ""
+msgstr "вбудований %qF вважається застарілим."
#: config/s390/s390-c.c:883
-#, fuzzy, gcc-internal-format
-#| msgid "%E requires %<-fgnu-tm%>"
+#, gcc-internal-format
msgid "%qF requires -mvx"
-msgstr "%E потребує %<-fgnu-tm%>"
+msgstr "%qF потребує -mvx"
#: config/s390/s390-c.c:889
#, gcc-internal-format
@@ -30415,10 +30383,9 @@ msgid "bad builtin icode"
msgstr ""
#: config/s390/s390.c:1004
-#, fuzzy, gcc-internal-format
-#| msgid "Invalid argument %d for builtin %qF"
+#, gcc-internal-format
msgid "invalid argument %d for builtin %qF"
-msgstr "Некоректний аргумент %d до вбудованої %qF"
+msgstr "некоректний аргумент %d для вбудованої %qF"
#: config/s390/s390.c:1105
#, gcc-internal-format
@@ -31158,7 +31125,7 @@ msgstr ""
#: c/c-decl.c:1794
#, gcc-internal-format
msgid "previous implicit declaration of %q+D was here"
-msgstr ""
+msgstr "попереднє неявне оголошення %q+D було тут"
#: c/c-decl.c:1796
#, gcc-internal-format
@@ -31329,17 +31296,17 @@ msgstr ""
#: c/c-decl.c:3144 c/c-decl.c:3157
#, gcc-internal-format
msgid "implicit declaration of function %qE; did you mean %qs?"
-msgstr ""
+msgstr "неявне оголошення функції %qE; ви мали на увазі %qs?"
#: c/c-decl.c:3149 c/c-decl.c:3162
#, gcc-internal-format
msgid "implicit declaration of function %qE"
-msgstr ""
+msgstr "неявне оголошення функції %qE"
#: c/c-decl.c:3408
#, gcc-internal-format
msgid "incompatible implicit declaration of built-in function %qD"
-msgstr ""
+msgstr "несумісне неявне оголошення вбудованої функції %qD"
#: c/c-decl.c:3415
#, gcc-internal-format
@@ -31349,7 +31316,7 @@ msgstr ""
#: c/c-decl.c:3424
#, gcc-internal-format
msgid "incompatible implicit declaration of function %qD"
-msgstr ""
+msgstr "несумісне неявне оголошення функції %qD"
#: c/c-decl.c:3484
#, gcc-internal-format
@@ -32618,10 +32585,9 @@ msgid "ISO C90 does not support boolean types"
msgstr ""
#: c/c-decl.c:10452
-#, fuzzy, gcc-internal-format
-#| msgid "ISO C++ 1998 does not support %<long long%>"
+#, gcc-internal-format
msgid "ISO C does not support the %<_Float%d%s%> type"
-msgstr "У ISO C++ 1998 не передбачено підтримки %<long long%>"
+msgstr "У ISO C не передбачено підтримки типу %<_Float%d%s%>"
#: c/c-decl.c:10502
#, gcc-internal-format
@@ -33222,10 +33188,9 @@ msgid "%E qualifier ignored on asm"
msgstr ""
#: c/c-parser.c:6175
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<,%> or %<)%>"
+#, gcc-internal-format
msgid "expected %<:%> or %<)%>"
-msgstr "мало бути %<,%> або %<)%>"
+msgstr "мало бути %<:%> або %<)%>"
#: c/c-parser.c:6487
#, gcc-internal-format
@@ -33346,7 +33311,7 @@ msgstr ""
#: c/c-parser.c:7912
#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_choose_expr%>"
-msgstr ""
+msgstr "помилкова кількість аргументів %<__builtin_choose_expr%>"
#: c/c-parser.c:7928
#, gcc-internal-format
@@ -33356,7 +33321,7 @@ msgstr ""
#: c/c-parser.c:7999
#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_call_with_static_chain%>"
-msgstr ""
+msgstr "помилкова кількість аргументів %<__builtin_call_with_static_chain%>"
#: c/c-parser.c:8012
#, gcc-internal-format
@@ -33371,7 +33336,7 @@ msgstr ""
#: c/c-parser.c:8042
#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_complex%>"
-msgstr ""
+msgstr "помилкова кількість аргументів %<__builtin_complex%>"
#: c/c-parser.c:8064
#, gcc-internal-format
@@ -33386,7 +33351,7 @@ msgstr ""
#: c/c-parser.c:8121 cp/parser.c:6676
#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_shuffle%>"
-msgstr ""
+msgstr "помилкова кількість аргументів %<__builtin_shuffle%>"
#: c/c-parser.c:8202 cp/parser.c:6587
#, gcc-internal-format
@@ -33488,10 +33453,9 @@ msgid "%<#pragma %s%> may only be used in compound statements"
msgstr ""
#: c/c-parser.c:10214 cp/parser.c:38233
-#, fuzzy, gcc-internal-format
-#| msgid "%<#pragma acc routine%> %s"
+#, gcc-internal-format
msgid "%<#pragma acc routine%> must be at file scope"
-msgstr "%<#pragma acc routine%> %s"
+msgstr "%<#pragma acc routine%> має перебувати у області видимості файла"
#: c/c-parser.c:10292 cp/parser.c:38314
#, gcc-internal-format
@@ -33683,10 +33647,9 @@ msgid "schedule %<auto%> does not take a %<chunk_size%> parameter"
msgstr ""
#: c/c-parser.c:12297 cp/semantics.c:6395
-#, fuzzy, gcc-internal-format
-#| msgid "%qs value must be positive"
+#, gcc-internal-format
msgid "chunk size value must be positive"
-msgstr "значення %qs має бути додатним"
+msgstr "значення розміру фрагмента має бути додатним"
#: c/c-parser.c:12320 cp/parser.c:32207
#, gcc-internal-format
@@ -33809,10 +33772,9 @@ msgid "variable %qD used more than once with %<#pragma acc declare%>"
msgstr ""
#: c/c-parser.c:13933 cp/parser.c:36305
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<for%> after %qs"
+#, gcc-internal-format
msgid "expected %<data%> after %<#pragma acc %s%>"
-msgstr "мало бути %<for%> після %qs"
+msgstr "мало бути %<data%> після %<#pragma acc %s%>"
#: c/c-parser.c:13949 cp/parser.c:36322
#, gcc-internal-format
@@ -33845,22 +33807,19 @@ msgid "%<#pragma acc routine%> not immediately followed by a single function dec
msgstr ""
#: c/c-parser.c:14268 cp/parser.c:37576
-#, fuzzy, gcc-internal-format
-#| msgid "%<#pragma acc routine%> %s"
+#, gcc-internal-format
msgid "%<#pragma acc routine%> already applied to %qD"
-msgstr "%<#pragma acc routine%> %s"
+msgstr "%<#pragma acc routine%> вже застосовано до %qD"
#: c/c-parser.c:14277 cp/parser.c:37585
-#, fuzzy, gcc-internal-format
-#| msgid "%<#pragma acc routine%> %s"
+#, gcc-internal-format
msgid "%<#pragma acc routine%> must be applied before use"
-msgstr "%<#pragma acc routine%> %s"
+msgstr "%<#pragma acc routine%> має бути застосовано до використання"
#: c/c-parser.c:14278 cp/parser.c:37586
-#, fuzzy, gcc-internal-format
-#| msgid "%<#pragma acc routine%> %s"
+#, gcc-internal-format
msgid "%<#pragma acc routine%> must be applied before definition"
-msgstr "%<#pragma acc routine%> %s"
+msgstr "%<#pragma acc routine%> має бути застосовано до визначення"
#: c/c-parser.c:14321 cp/parser.c:36497
#, gcc-internal-format
@@ -34053,10 +34012,9 @@ msgid "function or array type in %<#pragma omp declare reduction%>"
msgstr ""
#: c/c-parser.c:16998
-#, fuzzy, gcc-internal-format
-#| msgid "previous %<#pragma omp declare reduction%>"
+#, gcc-internal-format
msgid "%<_Atomic%> qualified type in %<#pragma omp declare reduction%>"
-msgstr "попереднє %<#pragma omp declare reduction%>"
+msgstr "тип класу %<_Atomic%> у %<#pragma omp declare reduction%>"
#: c/c-parser.c:17001
#, gcc-internal-format
@@ -34508,10 +34466,9 @@ msgid "arithmetic on pointer to an empty aggregate"
msgstr ""
#: c/c-typeck.c:4244
-#, fuzzy, gcc-internal-format
-#| msgid "%<goto%> is not a constant-expression"
+#, gcc-internal-format
msgid "%<~%> on a boolean expression"
-msgstr "%<goto%> не є сталим виразом"
+msgstr "%<~%> над булевим виразом"
#: c/c-typeck.c:4248
#, gcc-internal-format
@@ -35777,51 +35734,44 @@ msgid "base variable or SSA name undeclared"
msgstr ""
#: c/gimple-parser.c:850
-#, fuzzy, gcc-internal-format
-#| msgid "invalid operand"
+#, gcc-internal-format
msgid "invalid _Literal"
-msgstr "некоректний операнд"
+msgstr "некоректне _Literal"
#: c/gimple-parser.c:869
-#, fuzzy, gcc-internal-format
-#| msgid "invalid operand to %%R"
+#, gcc-internal-format
msgid "invalid number of operands to __FMA"
-msgstr "некоректний операнд %%R"
+msgstr "некоректна кількість операндів __FMA"
#: c/gimple-parser.c:904
#, gcc-internal-format
msgid "anonymous SSA name cannot have default definition"
-msgstr ""
+msgstr "анонімна назва SSA не може мати типового визначення"
#: c/gimple-parser.c:1153
-#, fuzzy, gcc-internal-format
-#| msgid "expected type-name"
+#, gcc-internal-format
msgid "expected pass name"
-msgstr "мало бути вказано тип-назву"
+msgstr ""
#: c/gimple-parser.c:1165
-#, fuzzy, gcc-internal-format
-#| msgid "invalid operand"
+#, gcc-internal-format
msgid "invalid operation"
-msgstr "некоректний операнд"
+msgstr "некоректна дія"
#: c/gimple-parser.c:1325 c/gimple-parser.c:1349
-#, fuzzy, gcc-internal-format
-#| msgid "expected expression"
+#, gcc-internal-format
msgid "expected goto expression"
-msgstr "мало бути вказано вираз"
+msgstr "мало бути вказано вираз goto"
#: c/gimple-parser.c:1333
-#, fuzzy, gcc-internal-format
-#| msgid "unexpected argument"
+#, gcc-internal-format
msgid "expected else statement"
-msgstr "несподіваний аргумент"
+msgstr "мало бути використано інструкцію else"
#: c/gimple-parser.c:1478
-#, fuzzy, gcc-internal-format
-#| msgid "expected expression"
+#, gcc-internal-format
msgid "expected semicolon"
-msgstr "мало бути вказано вираз"
+msgstr "мало бути використано крапку з комою"
#: c/gimple-parser.c:1488
#, gcc-internal-format
@@ -36398,16 +36348,14 @@ msgid "default argument mismatch in overload resolution"
msgstr ""
#: cp/call.c:9877
-#, fuzzy, gcc-internal-format
-#| msgid "candidate 1:"
+#, gcc-internal-format
msgid " candidate 1: %q#F"
-msgstr "кандидат 1:"
+msgstr " кандидат 1: %q#F"
#: cp/call.c:9879
-#, fuzzy, gcc-internal-format
-#| msgid "candidate 2:"
+#, gcc-internal-format
msgid " candidate 2: %q#F"
-msgstr "кандидат 2:"
+msgstr " кандидат 2: %q#F"
#: cp/call.c:9924
#, gcc-internal-format
@@ -36838,10 +36786,9 @@ msgid "invalid use of %q#T with a flexible array member in %q#T"
msgstr ""
#: cp/class.c:7016
-#, fuzzy, gcc-internal-format
-#| msgid "template %qD declared"
+#, gcc-internal-format
msgid "array member %q#D declared here"
-msgstr "оголошено шаблон %qD"
+msgstr "член масиву %q#D оголошено тут"
#: cp/class.c:7043
#, gcc-internal-format
@@ -37034,10 +36981,9 @@ msgid "%q+E is not a constant expression"
msgstr ""
#: cp/constexpr.c:1363 cp/constexpr.c:5115
-#, fuzzy, gcc-internal-format
-#| msgid "cannot call function %qD"
+#, gcc-internal-format
msgid "call to internal function %qE"
-msgstr "не вдалося викликати функцію %qD"
+msgstr "виклик внутрішньої функції %qE"
#: cp/constexpr.c:1426
#, gcc-internal-format
@@ -37145,10 +37091,9 @@ msgid "accessing uninitialized member %qD"
msgstr ""
#: cp/constexpr.c:3122 cp/constexpr.c:4412
-#, fuzzy, gcc-internal-format
-#| msgid "null pointer"
+#, gcc-internal-format
msgid "dereferencing a null pointer"
-msgstr "нульовий вказівник"
+msgstr "розіменування нульового вказівника"
#: cp/constexpr.c:3141
#, gcc-internal-format
@@ -37191,10 +37136,9 @@ msgid "%qD does not have integral or enumeration type"
msgstr ""
#: cp/constexpr.c:3410
-#, fuzzy, gcc-internal-format
-#| msgid "%<goto%> is not a constant-expression"
+#, gcc-internal-format
msgid "modification of %qE is not a constant expression"
-msgstr "%<goto%> не є сталим виразом"
+msgstr "зміна %qE не є сталим виразом"
#: cp/constexpr.c:3782
#, gcc-internal-format, gfc-internal-format
@@ -37202,10 +37146,9 @@ msgid "constexpr loop iteration count exceeds limit of %d (use -fconstexpr-loop-
msgstr ""
#: cp/constexpr.c:3921
-#, fuzzy, gcc-internal-format
-#| msgid "%<goto%> is not a constant-expression"
+#, gcc-internal-format
msgid "value %qE of type %qT is not a constant expression"
-msgstr "%<goto%> не є сталим виразом"
+msgstr "значення %qE типу %qT не є сталим виразом"
#: cp/constexpr.c:4049 cp/constexpr.c:5562
#, gcc-internal-format
@@ -37213,34 +37156,29 @@ msgid "temporary of non-literal type %qT in a constant expression"
msgstr ""
#: cp/constexpr.c:4398
-#, fuzzy, gcc-internal-format
-#| msgid "%<delete[]%> is not a constant-expression"
+#, gcc-internal-format
msgid "a reinterpret_cast is not a constant expression"
-msgstr "%<delete[]%> не є сталим виразом"
+msgstr "reinterpret_cast не є сталим виразом"
#: cp/constexpr.c:4424
-#, fuzzy, gcc-internal-format
-#| msgid "%<goto%> is not a constant-expression"
+#, gcc-internal-format
msgid "conversion of %qT null pointer to %qT is not a constant expression"
-msgstr "%<goto%> не є сталим виразом"
+msgstr "перетворення нульового вказівника %qT на %qT не є сталим виразом"
#: cp/constexpr.c:4439
-#, fuzzy, gcc-internal-format
-#| msgid "%<delete[]%> is not a constant-expression"
+#, gcc-internal-format
msgid "%<reinterpret_cast<%T>(%E)%> is not a constant expression"
-msgstr "%<delete[]%> не є сталим виразом"
+msgstr "%<reinterpret_cast<%T>(%E)%> не є сталим виразом"
#: cp/constexpr.c:4502 cp/constexpr.c:5423 cp/constexpr.c:5738
-#, fuzzy, gcc-internal-format
-#| msgid "%<goto%> is not a constant-expression"
+#, gcc-internal-format
msgid "expression %qE is not a constant expression"
-msgstr "%<goto%> не є сталим виразом"
+msgstr "вираз %qE не є сталим виразом"
#: cp/constexpr.c:4579
-#, fuzzy, gcc-internal-format
-#| msgid "%<delete[]%> is not a constant-expression"
+#, gcc-internal-format
msgid "statement is not a constant expression"
-msgstr "%<delete[]%> не є сталим виразом"
+msgstr "інструкція не є сталим виразом"
#: cp/constexpr.c:4582
#, gcc-internal-format
@@ -37308,14 +37246,12 @@ msgid "uninitialized variable %qD in %<constexpr%> function"
msgstr ""
#: cp/constexpr.c:5611
-#, fuzzy, gcc-internal-format
-#| msgid "%<goto%> is not a constant-expression"
+#, gcc-internal-format
msgid "division by zero is not a constant expression"
-msgstr "%<goto%> не є сталим виразом"
+msgstr "ділення на нуль не є сталим виразом"
#: cp/constexpr.c:5715
-#, fuzzy, gcc-internal-format
-#| msgid "%<delete[]%> is not a constant-expression"
+#, gcc-internal-format
msgid "%<delete[]%> is not a constant expression"
msgstr "%<delete[]%> не є сталим виразом"
@@ -37325,8 +37261,7 @@ msgid "non-constant array initialization"
msgstr ""
#: cp/constexpr.c:5767
-#, fuzzy, gcc-internal-format
-#| msgid "%<goto%> is not a constant-expression"
+#, gcc-internal-format
msgid "%<goto%> is not a constant expression"
msgstr "%<goto%> не є сталим виразом"
@@ -37502,10 +37437,9 @@ msgid "ignoring returned value of type %qT, declared with attribute nodiscard"
msgstr ""
#: cp/cvt.c:1003
-#, fuzzy, gcc-internal-format
-#| msgid "template %qD declared"
+#, gcc-internal-format
msgid "in call to %qD, declared here"
-msgstr "оголошено шаблон %qD"
+msgstr "у виклику %qD, оголошено тут"
#: cp/cvt.c:1082
#, gcc-internal-format
@@ -37798,27 +37732,24 @@ msgid "previous declaration of %qD"
msgstr ""
#: cp/decl.c:1277
-#, fuzzy, gcc-internal-format
-#| msgid "due to different exception specifications"
+#, gcc-internal-format
msgid "declaration of %qF has a different exception specifier"
-msgstr "через різні специфікації виключення"
+msgstr "оголошення %qF містить інше визначення виключення"
#: cp/decl.c:1290
-#, fuzzy, gcc-internal-format
-#| msgid "previous declaration"
+#, gcc-internal-format
msgid "from previous declaration %qF"
-msgstr "попереднє оголошення"
+msgstr "з попереднього оголошення %qF"
#: cp/decl.c:1325
#, gcc-internal-format
msgid "redeclaration %qD differs in %<constexpr%> from previous declaration"
-msgstr ""
+msgstr "повторне оголошення %qD відрізняється у %<constexpr%> від попереднього оголошення"
#: cp/decl.c:1328 cp/decl.c:13702
-#, fuzzy, gcc-internal-format
-#| msgid "previous declaration"
+#, gcc-internal-format
msgid "previous declaration %qD"
-msgstr "попереднє оголошення"
+msgstr "попереднє оголошення %qD"
#: cp/decl.c:1357
#, gcc-internal-format
@@ -37841,16 +37772,14 @@ msgid "raw literal operator %q+D conflicts with literal operator template %qD"
msgstr ""
#: cp/decl.c:1442
-#, fuzzy, gcc-internal-format
-#| msgid "previous definition of %q+#T"
+#, gcc-internal-format
msgid "previous definition of %qD was here"
-msgstr "попереднє визначення %q+#T"
+msgstr "попереднє визначення %qD було тут"
#: cp/decl.c:1445
-#, fuzzy, gcc-internal-format
-#| msgid "previous declaration"
+#, gcc-internal-format
msgid "previous declaration of %qD was here"
-msgstr "попереднє оголошення"
+msgstr "попереднє оголошення %qD було тут"
#: cp/decl.c:1467 cp/decl.c:1579
#, gcc-internal-format
@@ -38655,10 +38584,9 @@ msgid "only %u names provided while %qT decomposes into %wu elements"
msgstr ""
#: cp/decl.c:7533
-#, fuzzy, gcc-internal-format
-#| msgid "%<delete[]%> is not a constant-expression"
+#, gcc-internal-format
msgid "%<std::tuple_size<%T>::value%> is not an integral constant expression"
-msgstr "%<delete[]%> не є сталим виразом"
+msgstr "%<std::tuple_size<%T>::value%> не є інтегральним сталим виразом"
#: cp/decl.c:7553
#, gcc-internal-format
@@ -38666,10 +38594,9 @@ msgid "in initialization of decomposition variable %qD"
msgstr ""
#: cp/decl.c:7575
-#, fuzzy, gcc-internal-format
-#| msgid "cannot call function %qD"
+#, gcc-internal-format
msgid "cannot decompose union type %qT"
-msgstr "не вдалося викликати функцію %qD"
+msgstr "не вдалося розкласти тип об'єднання %qT"
#: cp/decl.c:7580
#, gcc-internal-format
@@ -38933,10 +38860,9 @@ msgid "definition of explicitly-defaulted %q+D"
msgstr ""
#: cp/decl.c:8936
-#, fuzzy, gcc-internal-format
-#| msgid "%q#D previously declared here"
+#, gcc-internal-format
msgid "%q#D explicitly defaulted here"
-msgstr "%q#D раніше оголошено тут"
+msgstr "%q#D явним чином типово визначено тут"
#: cp/decl.c:8953 cp/decl2.c:713
#, gcc-internal-format
@@ -40211,10 +40137,9 @@ msgid "%qT referred to as %qs"
msgstr ""
#: cp/decl.c:13428 cp/decl.c:13435
-#, fuzzy, gcc-internal-format
-#| msgid "previous declaration"
+#, gcc-internal-format
msgid "%qT has a previous declaration here"
-msgstr "попереднє оголошення"
+msgstr "%qT має попереднє оголошення тут"
#: cp/decl.c:13434
#, gcc-internal-format
@@ -42369,16 +42294,14 @@ msgid "%<_Cilk_spawn%> must be followed by an expression"
msgstr ""
#: cp/parser.c:6647
-#, fuzzy, gcc-internal-format
-#| msgid "invalid argument to %<__builtin_return_address%>"
+#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_addressof%>"
-msgstr "некоректний аргумент %<__builtin_return_address%>"
+msgstr "помилкова кількість аргументів %<__builtin_addressof%>"
#: cp/parser.c:6659 cp/pt.c:17319
-#, fuzzy, gcc-internal-format
-#| msgid "invalid argument to %<__builtin_return_address%>"
+#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_launder%>"
-msgstr "некоректний аргумент %<__builtin_return_address%>"
+msgstr "помилкова кількість аргументів %<__builtin_launder%>"
#: cp/parser.c:6751
#, gcc-internal-format
@@ -42541,21 +42464,19 @@ msgid "lambda templates are only available with -std=c++14 or -std=gnu++14"
msgstr ""
#: cp/parser.c:10186
-#, fuzzy, gcc-internal-format
-#| msgid "ISO C++ 1998 does not support %<long long%>"
+#, gcc-internal-format
msgid "ISO C++ does not support lambda templates"
-msgstr "У ISO C++ 1998 не передбачено підтримки %<long long%>"
+msgstr "у ISO C++ не передбачено підтримки шаблонів лямбд"
#: cp/parser.c:10216
#, gcc-internal-format
msgid "default argument specified for lambda parameter"
-msgstr ""
+msgstr "визначено типовий аргумент для лямбда-параметра"
#: cp/parser.c:10234
-#, fuzzy, gcc-internal-format
-#| msgid "duplicate %<volatile%>"
+#, gcc-internal-format
msgid "duplicate %<mutable%>"
-msgstr "дублювання %<volatile%>"
+msgstr "дублювання %<mutable%>"
#: cp/parser.c:10282
#, gcc-internal-format
@@ -42709,10 +42630,9 @@ msgid "decomposition declaration only available with -std=c++1z or -std=gnu++1z"
msgstr ""
#: cp/parser.c:13028
-#, fuzzy, gcc-internal-format
-#| msgid "previous declaration"
+#, gcc-internal-format
msgid "empty decomposition declaration"
-msgstr "попереднє оголошення"
+msgstr "порожнє оголошення розкладання"
#: cp/parser.c:13201
#, gcc-internal-format
@@ -42732,10 +42652,9 @@ msgid "decl-specifier invalid in condition"
msgstr ""
#: cp/parser.c:13307
-#, fuzzy, gcc-internal-format
-#| msgid "invalid mask"
+#, gcc-internal-format
msgid "%qD invalid in lambda"
-msgstr "некоректна маска"
+msgstr "%qD є некоректним у лямбді"
#: cp/parser.c:13400
#, gcc-internal-format
@@ -43046,10 +42965,9 @@ msgid "multiple definition of %q#T"
msgstr ""
#: cp/parser.c:17927
-#, fuzzy, gcc-internal-format
-#| msgid "ISO C forbids nested functions"
+#, gcc-internal-format
msgid "ISO C++ forbids empty unnamed enum"
-msgstr "У стандарті ISO C заборонено вкладеність функцій"
+msgstr "У ISO C++ заборонено порожні enum без назви"
#: cp/parser.c:17947
#, gcc-internal-format
@@ -43379,10 +43297,9 @@ msgid "could not resolve typename type"
msgstr "не вдалося визначити тип typename"
#: cp/parser.c:22775
-#, fuzzy, gcc-internal-format
-#| msgid "previous definition of %q+#T"
+#, gcc-internal-format
msgid "previous definition of %q#T"
-msgstr "попереднє визначення %q+#T"
+msgstr "попереднє визначення %q#T"
#: cp/parser.c:22865 cp/parser.c:27878
#, gcc-internal-format
@@ -43465,10 +43382,9 @@ msgid "types may not be defined in an exception-specification"
msgstr ""
#: cp/parser.c:23905
-#, fuzzy, gcc-internal-format
-#| msgid "due to different exception specifications"
+#, gcc-internal-format
msgid "ISO C++1z does not allow dynamic exception specifications"
-msgstr "через різні специфікації виключення"
+msgstr "У ISO C++1z не можна визначати динамічні специфікації виключень"
#: cp/parser.c:23911
#, gcc-internal-format
@@ -43511,10 +43427,9 @@ msgid "attribute %<deprecated%> can appear at most once in an attribute-list"
msgstr ""
#: cp/parser.c:24847
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<:%> or %<...%>"
+#, gcc-internal-format
msgid "expected attribute before %<...%>"
-msgstr "мало бути %<:%> або %<...%>"
+msgstr "мав бути атрибут перед %<...%>"
#: cp/parser.c:24908
#, gcc-internal-format
@@ -45582,10 +45497,9 @@ msgid "use of parameter outside function body"
msgstr ""
#: cp/semantics.c:3524
-#, fuzzy, gcc-internal-format
-#| msgid "unexpected argument"
+#, gcc-internal-format
msgid "missing template arguments"
-msgstr "несподіваний аргумент"
+msgstr "пропущено аргументи шаблона"
#: cp/semantics.c:3551
#, gcc-internal-format
@@ -45717,8 +45631,7 @@ msgid "%<gang%> static expression must be integral"
msgstr ""
#: cp/semantics.c:6246
-#, fuzzy, gcc-internal-format
-#| msgid "%<gang%> static value must bepositive"
+#, gcc-internal-format
msgid "%<gang%> static value must be positive"
msgstr "статичне значення %<gang%> має бути додатним"
@@ -45748,14 +45661,12 @@ msgid "%<gang%> num value must be positive"
msgstr "значення num %<gang%> має бути додатним"
#: cp/semantics.c:6313
-#, fuzzy, gcc-internal-format
-#| msgid "%<vector%> length value must bepositive"
+#, gcc-internal-format
msgid "%<vector%> length value must be positive"
-msgstr "значення length %<vector%> має бути додатним"
+msgstr "значення довжини %<vector%> має бути додатним"
#: cp/semantics.c:6318
-#, fuzzy, gcc-internal-format
-#| msgid "%<worker%> num value must bepositive"
+#, gcc-internal-format
msgid "%<worker%> num value must be positive"
msgstr "значення num %<worker%> має бути додатним"
@@ -45920,10 +45831,9 @@ msgid "no unexpanded parameter packs in binary fold"
msgstr ""
#: cp/semantics.c:9519
-#, fuzzy, gcc-internal-format
-#| msgid "invalid argument to %<__builtin_return_address%>"
+#, gcc-internal-format
msgid "non-pointer argument to %<__builtin_launder%>"
-msgstr "некоректний аргумент %<__builtin_return_address%>"
+msgstr "аргумент, який не є вказівником, у %<__builtin_launder%>"
#: cp/tree.c:1245
#, gcc-internal-format
@@ -47733,10 +47643,9 @@ msgid "%qs at %L must be nonnegative"
msgstr ""
#: fortran/check.c:310
-#, fuzzy, gcc-internal-format
-#| msgid "%qs value must be positive"
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L must be positive"
-msgstr "значення %qs має бути додатним"
+msgstr "аргумент %qs внутрішньої частини %qs у %L має бути додатним"
#: fortran/check.c:343
#, gcc-internal-format
@@ -49377,10 +49286,9 @@ msgid "Derived type at %C has not been previously defined and so cannot appear i
msgstr ""
#: fortran/decl.c:4911
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Syntax error in nested structure declaration at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in anonymous structure declaration at %C"
-msgstr "Синтаксична помилка у оголошенні вкладеної структури у %C"
+msgstr "Синтаксична помилка у оголошенні анонімної структури у %C"
#: fortran/decl.c:4920
#, gcc-internal-format, gfc-internal-format
@@ -49852,10 +49760,9 @@ msgid "Expected entity-list in AUTOMATIC statement at %C"
msgstr ""
#: fortran/decl.c:7932
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Syntax error in SUBMODULE statement at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in AUTOMATIC statement at %C"
-msgstr "Синтаксична помилка у інструкції SUBMODULE у %C"
+msgstr "Синтаксична помилка у інструкції AUTOMATIC у %C"
#: fortran/decl.c:7946
#, gcc-internal-format, gfc-internal-format
@@ -49868,10 +49775,9 @@ msgid "Expected entity-list in STATIC statement at %C"
msgstr ""
#: fortran/decl.c:7986
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Syntax error in SUBMODULE statement at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in STATIC statement at %C"
-msgstr "Синтаксична помилка у інструкції SUBMODULE у %C"
+msgstr "Синтаксична помилка у інструкції STATIC у %C"
#: fortran/decl.c:8005
#, gcc-internal-format, gfc-internal-format
@@ -50922,10 +50828,9 @@ msgid "No location in statement"
msgstr ""
#: fortran/frontend-passes.c:182
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Syntax error in expression at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "No location in expression near %L"
-msgstr "Синтаксична помилка у виразі у %C"
+msgstr "Не вказано місця у виразі поряд із %L"
#: fortran/frontend-passes.c:381
#, gcc-internal-format
@@ -52682,10 +52587,9 @@ msgid "CYCLE statement at %C to non-innermost collapsed !$OMP DO loop"
msgstr ""
#: fortran/match.c:2886
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Junk after MAP statement at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Blank required in %s statement near %C"
-msgstr "Зайві команди після інструкції MAP у %C"
+msgstr "Потрібен пробіл у інструкції %s поряд із %C"
#: fortran/match.c:2904
#, gcc-internal-format, gfc-internal-format
@@ -52790,10 +52694,9 @@ msgid "EVENT WAIT statement at %C"
msgstr ""
#: fortran/match.c:3274
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Junk after MAP statement at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "FAIL IMAGE statement at %C"
-msgstr "Зайві команди після інструкції MAP у %C"
+msgstr "Інструкція FAIL IMAGE у %C"
#: fortran/match.c:3309
#, gcc-internal-format, gfc-internal-format
@@ -53536,10 +53439,9 @@ msgid "Syntax error in OpenMP variable list at %C"
msgstr ""
#: fortran/openmp.c:499
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Syntax error in !$ACC DECLARE list at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in OpenMP DEPEND SINK list at %C"
-msgstr "Синтаксична помилка у списку !$ACC DECLARE у %C"
+msgstr "Синтаксична помилка у списку OpenMP DEPEND SINK у %C"
#: fortran/openmp.c:561
#, gcc-internal-format, gfc-internal-format
@@ -53602,10 +53504,9 @@ msgid "%<acc update%> must contain at least one %<device%> or %<host%> or %<self
msgstr ""
#: fortran/openmp.c:2175
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "invalid argument to %qD"
+#, gcc-internal-format, gfc-internal-format
msgid "Invalid argument to !$ACC WAIT at %L"
-msgstr "некоректний аргумент %qD"
+msgstr "Некоректний аргумент !$ACC WAIT у %L"
#: fortran/openmp.c:2184
#, gcc-internal-format, gfc-internal-format
@@ -53798,10 +53699,9 @@ msgid "INTEGER expression of %s clause at %L must be positive"
msgstr ""
#: fortran/openmp.c:3721
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%<priority%> value must be non-negative"
+#, gcc-internal-format, gfc-internal-format
msgid "INTEGER expression of %s clause at %L must be non-negative"
-msgstr "значення %<priority%> має бути невід’ємним"
+msgstr "Вираз INTEGER пункту %s у %L має бути невід'ємним"
#: fortran/openmp.c:3732
#, gcc-internal-format
@@ -54148,10 +54048,9 @@ msgid "%s must contain at least one MAP clause at %L"
msgstr ""
#: fortran/openmp.c:4870
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "expected expression"
+#, gcc-internal-format, gfc-internal-format
msgid "unexpected !$OMP ATOMIC expression at %L"
-msgstr "мало бути вказано вираз"
+msgstr "неочікуваний вираз !$OMP ATOMIC у %L"
#: fortran/openmp.c:4899
#, gcc-internal-format, gfc-internal-format
@@ -58837,12 +58736,12 @@ msgstr ""
#: fortran/trans-decl.c:5512
#, gcc-internal-format
msgid "Unused parameter %qs declared at %L"
-msgstr ""
+msgstr "Невикористаний параметр %qs, оголошено у %L"
#: fortran/trans-decl.c:5516
#, gcc-internal-format
msgid "Unused parameter %qs which has been explicitly imported at %L"
-msgstr ""
+msgstr "Невикористаний параметр %qs, який було явно імпортовано у %L"
#: fortran/trans-decl.c:5542
#, gcc-internal-format
@@ -59459,7 +59358,7 @@ msgstr ""
#: objc/objc-act.c:1679 objc/objc-act.c:6817 objc/objc-act.c:6948
#, gcc-internal-format
msgid "class %qE is deprecated"
-msgstr ""
+msgstr "клас %qE вважається застарілим"
#: objc/objc-act.c:1708
#, gcc-internal-format
@@ -60071,7 +59970,7 @@ msgstr ""
#: objc/objc-act.c:8074
#, gcc-internal-format
msgid "protocol %qE is deprecated"
-msgstr ""
+msgstr "протокол %qE вважається застарілим"
#: objc/objc-act.c:8193
#, gcc-internal-format
diff --git a/gcc/predict.c b/gcc/predict.c
index 609c099d7b5..80c2c1966d8 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -59,6 +59,8 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-pretty-print.h"
#include "selftest.h"
#include "cfgrtl.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Enum with reasons why a predictor is ignored. */
diff --git a/gcc/predict.def b/gcc/predict.def
index f7b2bf7738c..326c39ae4c9 100644
--- a/gcc/predict.def
+++ b/gcc/predict.def
@@ -132,9 +132,8 @@ DEF_PREDICTOR (PRED_RECURSIVE_CALL, "recursive call", HITRATE (75), 0)
DEF_PREDICTOR (PRED_TREE_EARLY_RETURN, "early return (on trees)", HITRATE (66),
0)
-/* Branch containing goto is probably not taken.
- FIXME: Currently not used. */
-DEF_PREDICTOR (PRED_GOTO, "goto", HITRATE (70), 0)
+/* Branch containing goto is probably not taken. */
+DEF_PREDICTOR (PRED_GOTO, "goto", HITRATE (66), 0)
/* Branch ending with return constant is probably not taken. */
DEF_PREDICTOR (PRED_CONST_RETURN, "const return", HITRATE (69), 0)
diff --git a/gcc/pretty-print.c b/gcc/pretty-print.c
index 570dec77dc1..556462fafe7 100644
--- a/gcc/pretty-print.c
+++ b/gcc/pretty-print.c
@@ -667,7 +667,17 @@ pp_format (pretty_printer *pp, text_info *text)
}
s = va_arg (*text->args_ptr, const char *);
- pp_append_text (pp, s, s + n);
+
+ /* Negative precision is treated as if it were omitted. */
+ if (n < 0)
+ n = INT_MAX;
+
+ /* Append the lesser of precision and strlen (s) characters. */
+ size_t len = strlen (s);
+ if ((unsigned) n < len)
+ len = n;
+
+ pp_append_text (pp, s, s + len);
}
break;
diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c
index dc8d9800de5..79ec463df45 100644
--- a/gcc/print-rtl.c
+++ b/gcc/print-rtl.c
@@ -1283,7 +1283,7 @@ print_exp (pretty_printer *pp, const_rtx x, int verbose)
op[1] = XEXP (x, 1);
break;
case NOT:
- st[0] = "!";
+ st[0] = "~";
op[0] = XEXP (x, 0);
break;
case AND:
diff --git a/gcc/print-tree.c b/gcc/print-tree.c
index 6a237cc1253..30c8d721433 100644
--- a/gcc/print-tree.c
+++ b/gcc/print-tree.c
@@ -444,13 +444,13 @@ print_node (FILE *file, const char *prefix, tree node, int indent,
xloc = expand_location (DECL_SOURCE_LOCATION (node));
- fprintf (file, " file %s line %d col %d", xloc.file, xloc.line,
+ fprintf (file, " %s:%d:%d", xloc.file, xloc.line,
xloc.column);
if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
{
print_node (file, "size", DECL_SIZE (node), indent + 4);
- print_node (file, "unit size", DECL_SIZE_UNIT (node), indent + 4);
+ print_node (file, "unit-size", DECL_SIZE_UNIT (node), indent + 4);
if (code != FUNCTION_DECL || DECL_BUILT_IN (node))
indent_to (file, indent + 3);
@@ -458,7 +458,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent,
if (DECL_USER_ALIGN (node))
fprintf (file, " user");
- fprintf (file, " align %d", DECL_ALIGN (node));
+ fprintf (file, " align:%d", DECL_ALIGN (node));
if (code == FIELD_DECL)
fprintf (file, " offset_align " HOST_WIDE_INT_PRINT_UNSIGNED,
DECL_OFFSET_ALIGN (node));
@@ -466,9 +466,9 @@ print_node (FILE *file, const char *prefix, tree node, int indent,
if (code == FUNCTION_DECL && DECL_BUILT_IN (node))
{
if (DECL_BUILT_IN_CLASS (node) == BUILT_IN_MD)
- fprintf (file, " built-in BUILT_IN_MD %d", DECL_FUNCTION_CODE (node));
+ fprintf (file, " built-in: BUILT_IN_MD:%d", DECL_FUNCTION_CODE (node));
else
- fprintf (file, " built-in %s:%s",
+ fprintf (file, " built-in: %s:%s",
built_in_class_names[(int) DECL_BUILT_IN_CLASS (node)],
built_in_names[(int) DECL_FUNCTION_CODE (node)]);
}
@@ -476,7 +476,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent,
if (code == FIELD_DECL)
{
print_node (file, "offset", DECL_FIELD_OFFSET (node), indent + 4);
- print_node (file, "bit offset", DECL_FIELD_BIT_OFFSET (node),
+ print_node (file, "bit-offset", DECL_FIELD_BIT_OFFSET (node),
indent + 4);
if (DECL_BIT_FIELD_TYPE (node))
print_node (file, "bit_field_type", DECL_BIT_FIELD_TYPE (node),
@@ -597,27 +597,27 @@ print_node (FILE *file, const char *prefix, tree node, int indent,
fprintf (file, " %s", GET_MODE_NAME (mode));
print_node (file, "size", TYPE_SIZE (node), indent + 4);
- print_node (file, "unit size", TYPE_SIZE_UNIT (node), indent + 4);
+ print_node (file, "unit-size", TYPE_SIZE_UNIT (node), indent + 4);
indent_to (file, indent + 3);
if (TYPE_USER_ALIGN (node))
fprintf (file, " user");
- fprintf (file, " align %d symtab %d alias set " HOST_WIDE_INT_PRINT_DEC,
+ fprintf (file, " align:%d symtab:%d alias-set " HOST_WIDE_INT_PRINT_DEC,
TYPE_ALIGN (node), TYPE_SYMTAB_ADDRESS (node),
(HOST_WIDE_INT) TYPE_ALIAS_SET (node));
if (TYPE_STRUCTURAL_EQUALITY_P (node))
- fprintf (file, " structural equality");
+ fprintf (file, " structural-equality");
else
- dump_addr (file, " canonical type ", TYPE_CANONICAL (node));
+ dump_addr (file, " canonical-type ", TYPE_CANONICAL (node));
print_node (file, "attributes", TYPE_ATTRIBUTES (node), indent + 4);
if (INTEGRAL_TYPE_P (node) || code == REAL_TYPE
|| code == FIXED_POINT_TYPE)
{
- fprintf (file, " precision %d", TYPE_PRECISION (node));
+ fprintf (file, " precision:%d", TYPE_PRECISION (node));
print_node_brief (file, "min", TYPE_MIN_VALUE (node), indent + 4);
print_node_brief (file, "max", TYPE_MAX_VALUE (node), indent + 4);
}
@@ -627,7 +627,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent,
else if (code == ARRAY_TYPE)
print_node (file, "domain", TYPE_DOMAIN (node), indent + 4);
else if (code == VECTOR_TYPE)
- fprintf (file, " nunits %d", (int) TYPE_VECTOR_SUBPARTS (node));
+ fprintf (file, " nunits:%d", (int) TYPE_VECTOR_SUBPARTS (node));
else if (code == RECORD_TYPE
|| code == UNION_TYPE
|| code == QUAL_UNION_TYPE)
@@ -686,7 +686,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent,
/* Buffer big enough to format a 32-bit UINT_MAX into, plus
the text. */
char temp[15];
- sprintf (temp, "arg %u", i);
+ sprintf (temp, "arg:%u", i);
print_node (file, temp, arg, indent + 4);
i++;
}
@@ -701,7 +701,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent,
the text. */
char temp[15];
- sprintf (temp, "arg %d", i);
+ sprintf (temp, "arg:%d", i);
print_node (file, temp, TREE_OPERAND (node, i), indent + 4);
}
}
@@ -771,9 +771,9 @@ print_node (FILE *file, const char *prefix, tree node, int indent,
break;
j--;
if (i == j)
- sprintf (buf, "elt%u: ", i);
+ sprintf (buf, "elt:%u: ", i);
else
- sprintf (buf, "elt%u...elt%u: ", i, j);
+ sprintf (buf, "elt:%u...%u: ", i, j);
print_node (file, buf, VECTOR_CST_ELT (node, i), indent + 4);
i = j;
}
@@ -814,14 +814,14 @@ print_node (FILE *file, const char *prefix, tree node, int indent,
case TREE_VEC:
len = TREE_VEC_LENGTH (node);
- fprintf (file, " length %d", len);
+ fprintf (file, " length:%d", len);
for (i = 0; i < len; i++)
if (TREE_VEC_ELT (node, i))
{
/* Buffer big enough to format a 32-bit UINT_MAX into, plus
the text. */
char temp[15];
- sprintf (temp, "elt %d", i);
+ sprintf (temp, "elt:%d", i);
print_node (file, temp, TREE_VEC_ELT (node, i), indent + 4);
}
break;
@@ -831,7 +831,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent,
unsigned HOST_WIDE_INT cnt;
tree index, value;
len = CONSTRUCTOR_NELTS (node);
- fprintf (file, " lngt %d", len);
+ fprintf (file, " length:%d", len);
FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (node),
cnt, index, value)
{
@@ -885,7 +885,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent,
}
indent_to (file, indent + 4);
- fprintf (file, "version %u", SSA_NAME_VERSION (node));
+ fprintf (file, "version:%u", SSA_NAME_VERSION (node));
if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (node))
fprintf (file, " in-abnormal-phi");
if (SSA_NAME_IN_FREE_LIST (node))
@@ -907,7 +907,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent,
for (i = 0; i < omp_clause_num_ops[OMP_CLAUSE_CODE (node)]; i++)
{
indent_to (file, indent + 4);
- fprintf (file, "op %d:", i);
+ fprintf (file, "op-%d:", i);
print_node_brief (file, "", OMP_CLAUSE_OPERAND (node, i), 0);
}
}
@@ -921,19 +921,19 @@ print_node (FILE *file, const char *prefix, tree node, int indent,
cl_target_option_print (file, indent + 4, TREE_TARGET_OPTION (node));
break;
case IMPORTED_DECL:
- fprintf (file, " imported declaration");
- print_node_brief (file, "associated declaration",
+ fprintf (file, " imported-declaration");
+ print_node_brief (file, "associated-declaration",
IMPORTED_DECL_ASSOCIATED_DECL (node),
indent + 4);
break;
case TREE_BINFO:
- fprintf (file, " bases %d",
+ fprintf (file, " bases:%d",
vec_safe_length (BINFO_BASE_BINFOS (node)));
print_node_brief (file, "offset", BINFO_OFFSET (node), indent + 4);
print_node_brief (file, "virtuals", BINFO_VIRTUALS (node),
indent + 4);
- print_node_brief (file, "inheritance chain",
+ print_node_brief (file, "inheritance-chain",
BINFO_INHERITANCE_CHAIN (node),
indent + 4);
break;
@@ -1086,7 +1086,7 @@ debug_raw (vec<tree, va_gc> &ref)
FOR_EACH_VEC_ELT (ref, ix, elt)
{
- fprintf (stderr, "elt %d ", ix);
+ fprintf (stderr, "elt:%d ", ix);
debug_raw (elt);
}
}
@@ -1103,7 +1103,7 @@ debug (vec<tree, va_gc> &ref)
FOR_EACH_VEC_ELT (ref, ix, elt)
{
- fprintf (stderr, "elt %d ", ix);
+ fprintf (stderr, "elt:%d ", ix);
debug (elt);
}
}
diff --git a/gcc/rtl.c b/gcc/rtl.c
index 1f6a77aa08e..b0f977eca9c 100644
--- a/gcc/rtl.c
+++ b/gcc/rtl.c
@@ -223,7 +223,7 @@ rtx_alloc_stat_v (RTX_CODE code MEM_STAT_DECL, int extra)
all the rest is initialized to zero. */
rtx
-rtx_alloc_stat (RTX_CODE code MEM_STAT_DECL)
+rtx_alloc (RTX_CODE code MEM_STAT_DECL)
{
return rtx_alloc_stat_v (code PASS_MEM_STAT, 0);
}
@@ -359,7 +359,7 @@ copy_rtx (rtx orig)
/* Create a new copy of an rtx. Only copy just one level. */
rtx
-shallow_copy_rtx_stat (const_rtx orig MEM_STAT_DECL)
+shallow_copy_rtx (const_rtx orig MEM_STAT_DECL)
{
const unsigned int size = rtx_size (orig);
rtx const copy = ggc_alloc_rtx_def_stat (size PASS_MEM_STAT);
diff --git a/gcc/rtl.h b/gcc/rtl.h
index e63dcf042cb..8a68bb152bc 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -2705,8 +2705,7 @@ extern HOST_WIDE_INT trunc_int_for_mode (HOST_WIDE_INT, machine_mode);
extern rtx plus_constant (machine_mode, rtx, HOST_WIDE_INT, bool = false);
/* In rtl.c */
-extern rtx rtx_alloc_stat (RTX_CODE MEM_STAT_DECL);
-#define rtx_alloc(c) rtx_alloc_stat (c MEM_STAT_INFO)
+extern rtx rtx_alloc (RTX_CODE CXX_MEM_STAT_INFO);
extern rtx rtx_alloc_stat_v (RTX_CODE MEM_STAT_DECL, int);
#define rtx_alloc_v(c, SZ) rtx_alloc_stat_v (c MEM_STAT_INFO, SZ)
#define const_wide_int_alloc(NWORDS) \
@@ -2726,8 +2725,7 @@ extern rtx copy_rtx_if_shared (rtx);
/* In rtl.c */
extern unsigned int rtx_size (const_rtx);
-extern rtx shallow_copy_rtx_stat (const_rtx MEM_STAT_DECL);
-#define shallow_copy_rtx(a) shallow_copy_rtx_stat (a MEM_STAT_INFO)
+extern rtx shallow_copy_rtx (const_rtx CXX_MEM_STAT_INFO);
extern int rtx_equal_p (const_rtx, const_rtx);
extern bool rtvec_all_equal_p (const_rtvec);
diff --git a/gcc/sancov.c b/gcc/sancov.c
index 1651989ea24..b19de8bbbc5 100644
--- a/gcc/sancov.c
+++ b/gcc/sancov.c
@@ -32,6 +32,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-cfg.h"
#include "tree-pass.h"
#include "tree-iterator.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
namespace {
diff --git a/gcc/sanitizer.def b/gcc/sanitizer.def
index 91759a8957a..c90fa94c4a9 100644
--- a/gcc/sanitizer.def
+++ b/gcc/sanitizer.def
@@ -448,6 +448,10 @@ DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_LOAD_INVALID_VALUE,
"__ubsan_handle_load_invalid_value",
BT_FN_VOID_PTR_PTR,
ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_POINTER_OVERFLOW,
+ "__ubsan_handle_pointer_overflow",
+ BT_FN_VOID_PTR_PTR_PTR,
+ ATTR_COLD_NOTHROW_LEAF_LIST)
DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW_ABORT,
"__ubsan_handle_divrem_overflow_abort",
BT_FN_VOID_PTR_PTR_PTR,
@@ -484,6 +488,10 @@ DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_LOAD_INVALID_VALUE_ABORT,
"__ubsan_handle_load_invalid_value_abort",
BT_FN_VOID_PTR_PTR,
ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_POINTER_OVERFLOW_ABORT,
+ "__ubsan_handle_pointer_overflow_abort",
+ BT_FN_VOID_PTR_PTR_PTR,
+ ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_FLOAT_CAST_OVERFLOW,
"__ubsan_handle_float_cast_overflow",
BT_FN_VOID_PTR_PTR,
diff --git a/gcc/sanopt.c b/gcc/sanopt.c
index b7740741d43..d17c7db3321 100644
--- a/gcc/sanopt.c
+++ b/gcc/sanopt.c
@@ -30,6 +30,8 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-pretty-print.h"
#include "fold-const.h"
#include "gimple-iterator.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
#include "ubsan.h"
#include "params.h"
@@ -894,11 +896,12 @@ sanitize_rewrite_addressable_params (function *fun)
for (tree arg = DECL_ARGUMENTS (current_function_decl);
arg; arg = DECL_CHAIN (arg))
{
- if (TREE_ADDRESSABLE (arg) && !TREE_ADDRESSABLE (TREE_TYPE (arg)))
+ tree type = TREE_TYPE (arg);
+ if (TREE_ADDRESSABLE (arg) && !TREE_ADDRESSABLE (type)
+ && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
{
TREE_ADDRESSABLE (arg) = 0;
/* The parameter is no longer addressable. */
- tree type = TREE_TYPE (arg);
has_any_addressable_param = true;
/* Create a new automatic variable. */
@@ -915,8 +918,6 @@ sanitize_rewrite_addressable_params (function *fun)
IDENTIFIER_POINTER (DECL_NAME (arg)));
gcc_assert (!DECL_HAS_VALUE_EXPR_P (arg));
- DECL_HAS_VALUE_EXPR_P (arg) = 1;
- SET_DECL_VALUE_EXPR (arg, var);
SET_DECL_PT_UID (var, DECL_PT_UID (arg));
@@ -945,6 +946,9 @@ sanitize_rewrite_addressable_params (function *fun)
gimple_seq_add_stmt (&stmts, g);
clear_value_expr_list.safe_push (arg);
}
+
+ DECL_HAS_VALUE_EXPR_P (arg) = 1;
+ SET_DECL_VALUE_EXPR (arg, var);
}
}
@@ -1062,6 +1066,9 @@ pass_sanopt::execute (function *fun)
case IFN_UBSAN_OBJECT_SIZE:
no_next = ubsan_expand_objsize_ifn (&gsi);
break;
+ case IFN_UBSAN_PTR:
+ no_next = ubsan_expand_ptr_ifn (&gsi);
+ break;
case IFN_UBSAN_VPTR:
no_next = ubsan_expand_vptr_ifn (&gsi);
break;
diff --git a/gcc/sdbout.c b/gcc/sdbout.c
index 84798ac9fb3..a67f9d64cb1 100644
--- a/gcc/sdbout.c
+++ b/gcc/sdbout.c
@@ -301,7 +301,7 @@ const struct gcc_debug_hooks sdb_debug_hooks =
sdbout_early_global_decl, /* early_global_decl */
sdbout_late_global_decl, /* late_global_decl */
sdbout_symbol, /* type_decl */
- debug_nothing_tree_tree_tree_bool, /* imported_module_or_decl */
+ debug_nothing_tree_tree_tree_bool_bool,/* imported_module_or_decl */
debug_nothing_tree, /* deferred_inline_function */
debug_nothing_tree, /* outlining_inline_function */
sdbout_label, /* label */
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 05e24f00707..73aa9b2b809 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -945,8 +945,8 @@ conditional_probability (profile_probability target_prob,
static void
emit_case_dispatch_table (tree index_expr, tree index_type,
struct case_node *case_list, rtx default_label,
- tree minval, tree maxval, tree range,
- basic_block stmt_bb)
+ edge default_edge, tree minval, tree maxval,
+ tree range, basic_block stmt_bb)
{
int i, ncases;
struct case_node *n;
@@ -954,7 +954,6 @@ emit_case_dispatch_table (tree index_expr, tree index_type,
rtx_insn *fallback_label = label_rtx (case_list->code_label);
rtx_code_label *table_label = gen_label_rtx ();
bool has_gaps = false;
- edge default_edge = stmt_bb ? EDGE_SUCC (stmt_bb, 0) : NULL;
profile_probability default_prob = default_edge ? default_edge->probability
: profile_probability::never ();
profile_probability base = get_outgoing_edge_probs (stmt_bb);
@@ -1026,9 +1025,8 @@ emit_case_dispatch_table (tree index_expr, tree index_type,
through the indirect jump or the direct conditional jump
before that. Split the probability of reaching the
default label among these two jumps. */
- new_default_prob = conditional_probability (default_prob.apply_scale
- (1, 2),
- base);
+ new_default_prob
+ = conditional_probability (default_prob.apply_scale (1, 2), base);
default_prob = default_prob.apply_scale (1, 2);
base -= default_prob;
}
@@ -1147,9 +1145,10 @@ expand_case (gswitch *stmt)
do_pending_stack_adjust ();
/* Find the default case target label. */
- default_label = jump_target_rtx
- (CASE_LABEL (gimple_switch_default_label (stmt)));
- edge default_edge = EDGE_SUCC (bb, 0);
+ tree default_lab = CASE_LABEL (gimple_switch_default_label (stmt));
+ default_label = jump_target_rtx (default_lab);
+ basic_block default_bb = label_to_block_fn (cfun, default_lab);
+ edge default_edge = find_edge (bb, default_bb);
profile_probability default_prob = default_edge->probability;
/* Get upper and lower bounds of case values. */
@@ -1245,9 +1244,10 @@ expand_case (gswitch *stmt)
{
default_label = NULL;
remove_edge (default_edge);
+ default_edge = NULL;
}
emit_case_dispatch_table (index_expr, index_type,
- case_list, default_label,
+ case_list, default_label, default_edge,
minval, maxval, range, bb);
}
@@ -1340,9 +1340,9 @@ expand_sjlj_dispatch_table (rtx dispatch_index,
}
emit_case_dispatch_table (index_expr, index_type,
- case_list, default_label,
+ case_list, default_label, NULL,
minval, maxval, range,
- BLOCK_FOR_INSN (before_case));
+ BLOCK_FOR_INSN (before_case));
emit_label (default_label);
}
diff --git a/gcc/symtab.c b/gcc/symtab.c
index 0145910023f..a507ace8a34 100644
--- a/gcc/symtab.c
+++ b/gcc/symtab.c
@@ -35,6 +35,8 @@ along with GCC; see the file COPYING3. If not see
#include "output.h"
#include "ipa-utils.h"
#include "calls.h"
+#include "stringpool.h"
+#include "attribs.h"
static const char *ipa_ref_use_name[] = {"read","write","addr","alias","chkp"};
@@ -1763,10 +1765,10 @@ symtab_node::noninterposable_alias (void)
(void *)&new_node, true);
if (new_node)
return new_node;
-#ifndef ASM_OUTPUT_DEF
+
/* If aliases aren't supported by the assembler, fail. */
- return NULL;
-#endif
+ if (!TARGET_SUPPORTS_ALIASES)
+ return NULL;
/* Otherwise create a new one. */
new_decl = copy_node (node->decl);
diff --git a/gcc/target.def b/gcc/target.def
index bbd9c015189..6d67b1fe8ba 100644
--- a/gcc/target.def
+++ b/gcc/target.def
@@ -288,6 +288,17 @@ hidden, protected or internal visibility as specified by @var{visibility}.",
void, (tree decl, int visibility),
default_assemble_visibility)
+DEFHOOK
+(print_patchable_function_entry,
+ "Generate a patchable area at the function start, consisting of\n\
+@var{patch_area_size} NOP instructions. If the target supports named\n\
+sections and if @var{record_p} is true, insert a pointer to the current\n\
+location in the table of patchable functions. The default implementation\n\
+of the hook places the table of pointers in the special section named\n\
+@code{__patchable_function_entries}.",
+ void, (FILE *file, unsigned HOST_WIDE_INT patch_area_size, bool record_p),
+ default_print_patchable_function_entry)
+
/* Output the assembler code for entry to a function. */
DEFHOOK
(function_prologue,
diff --git a/gcc/targhooks.c b/gcc/targhooks.c
index 940deec67f9..6a8fae656d0 100644
--- a/gcc/targhooks.c
+++ b/gcc/targhooks.c
@@ -73,6 +73,7 @@ along with GCC; see the file COPYING3. If not see
#include "calls.h"
#include "expr.h"
#include "output.h"
+#include "common/common-target.h"
#include "reload.h"
#include "intl.h"
#include "opts.h"
@@ -1610,6 +1611,51 @@ default_compare_by_pieces_branch_ratio (machine_mode)
return 1;
}
+/* Write PATCH_AREA_SIZE NOPs into the asm outfile FILE around a function
+ entry. If RECORD_P is true and the target supports named sections,
+ the location of the NOPs will be recorded in a special object section
+ called "__patchable_function_entries". This routine may be called
+ twice per function to put NOPs before and after the function
+ entry. */
+
+void
+default_print_patchable_function_entry (FILE *file,
+ unsigned HOST_WIDE_INT patch_area_size,
+ bool record_p)
+{
+ const char *nop_templ = 0;
+ int code_num;
+ rtx_insn *my_nop = make_insn_raw (gen_nop ());
+
+ /* We use the template alone, relying on the (currently sane) assumption
+ that the NOP template does not have variable operands. */
+ code_num = recog_memoized (my_nop);
+ nop_templ = get_insn_template (code_num, my_nop);
+
+ if (record_p && targetm_common.have_named_sections)
+ {
+ char buf[256];
+ static int patch_area_number;
+ section *previous_section = in_section;
+
+ patch_area_number++;
+ ASM_GENERATE_INTERNAL_LABEL (buf, "LPFE", patch_area_number);
+
+ switch_to_section (get_section ("__patchable_function_entries",
+ 0, NULL));
+ fputs (integer_asm_op (POINTER_SIZE_UNITS, false), file);
+ assemble_name_raw (file, buf);
+ fputc ('\n', file);
+
+ switch_to_section (previous_section);
+ ASM_OUTPUT_LABEL (file, buf);
+ }
+
+ unsigned i;
+ for (i = 0; i < patch_area_size; ++i)
+ fprintf (file, "\t%s\n", nop_templ);
+}
+
bool
default_profile_before_prologue (void)
{
diff --git a/gcc/targhooks.h b/gcc/targhooks.h
index 1ddb8891fe4..c73ea0bda20 100644
--- a/gcc/targhooks.h
+++ b/gcc/targhooks.h
@@ -203,6 +203,9 @@ extern bool default_use_by_pieces_infrastructure_p (unsigned HOST_WIDE_INT,
bool);
extern int default_compare_by_pieces_branch_ratio (machine_mode);
+extern void default_print_patchable_function_entry (FILE *,
+ unsigned HOST_WIDE_INT,
+ bool);
extern bool default_profile_before_prologue (void);
extern reg_class_t default_preferred_reload_class (rtx, reg_class_t);
extern reg_class_t default_preferred_output_reload_class (rtx, reg_class_t);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3fc1332e686..29afe109e9c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,1216 @@
+2017-08-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ PR testsuite/81793
+ * gcc.dg/pie-static-1.c: Require both static and pie support.
+ * gcc.dg/pie-static-2.c: Likewise.
+
+2017-08-12 Pierre-Marie de Rodat <derodat@adacore.com>
+
+ PR ada/79542
+ * gnat.dg/debug13.ads, gnat.dg/debug13.adb: New testcase.
+
+2017-08-11 Marek Polacek <polacek@redhat.com>
+
+ PR c/81795
+ * gcc.dg/pr81795.c: New test.
+
+2017-08-11 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/60355
+ * gfortran.dg (bind_c_usage_30): New test.
+
+2017-08-11 Martin Liska <mliska@suse.cz>
+
+ PR tree-opt/79987
+ * gcc.target/i386/mpx/pr79987.c: New test.
+
+2017-08-11 Martin Liska <mliska@suse.cz>
+
+ PR ipa/81213
+ * gcc.target/i386/pr81213.c: New test.
+
+2017-08-10 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/81708
+ * gcc.target/i386/stack-prot-sym.c: New test.
+
+2017-08-10 Richard Sandiford <richard.sandiford@linaro.org>
+
+ PR testsuite/81738
+ * gcc.dg/vect/vect-alias-check-6.c: Move second function to...
+ * gcc.dg/vect/vect-alias-check-7.c: ...this new file. Require
+ vect_perm and vect_element_align for vectorization.
+
+2017-08-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/81736
+ * gcc.target/i386/pr81736-1.c: New test.
+ * gcc.target/i386/pr81736-2.c: Likewise.
+ * gcc.target/i386/pr81736-3.c: Likewise.
+ * gcc.target/i386/pr81736-4.c: Likewise.
+ * gcc.target/i386/pr81736-5.c: Likewise.
+ * gcc.target/i386/pr81736-6.c: Likewise.
+ * gcc.target/i386/pr81736-7.c: Likewise.
+
+2017-08-10 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ * gcc.target/powerpc/fold-vec-msum-short.c: Fix typo.
+ * gcc.target/powerpc/fold-vec/pack-longlong.c: Mark for 64-bit only.
+
+2017-08-10 David Malcolm <dmalcolm@redhat.com>
+
+ * c-c++-common/missing-close-symbol.c: New test case.
+ * c-c++-common/missing-symbol.c: New test case.
+ * gcc.dg/unclosed-init.c: New test case.
+ * g++.dg/diagnostic/unclosed-extern-c.C: New test case.
+ * g++.dg/diagnostic/unclosed-function.C: New test case.
+ * g++.dg/diagnostic/unclosed-namespace.C: New test case.
+ * g++.dg/diagnostic/unclosed-struct.C: New test case.
+ * g++.dg/parse/pragma2.C: Update to reflect movement of the
+ "expected identifier" error.
+
+2017-08-10 Fritz Reese <fritzoreese@gmail.com>
+
+ * gfortran.dg/dec_d_lines_1.f: New test.
+ * gfortran.dg/dec_d_lines_2.f: New test.
+
+2017-08-10 Fritz Reese <fritzoreese@gmail.com>
+
+ * gfortran.dg/dec_structure_18.f90: New test.
+ * gfortran.dg/dec_structure_19.f90: New test.
+ * gfortran.dg/dec_structure_20.f90: New test.
+ * gfortran.dg/dec_structure_21.f90: New test.
+
+2017-08-10 Marek Polacek <polacek@redhat.com>
+
+ PR testsuite/81784
+ * gcc.dg/compare2.c: Update dg-bogus and dg-warning.
+
+ * objc.dg/proto-lossage-4.m: Accept int/long int as intptr_t.
+
+2017-08-10 Martin Liska <mliska@suse.cz>
+
+ PR c++/81355
+ * g++.dg/other/pr81355.C: New test.
+
+2017-08-09 David Malcolm <dmalcolm@redhat.com>
+
+ * jit.dg/all-non-failing-tests.h: Add note about
+ test-vector-types.cc.
+ * jit.dg/test-error-gcc_jit_type_get_vector-bad-type.c: New test
+ case.
+ * jit.dg/test-error-gcc_jit_type_get_vector-non-power-of-two.c:
+ New test case.
+ * jit.dg/test-vector-types.cc: New test case.
+
+2017-08-09 Andrew Pinski <apinski@cavium.com>
+
+ * gcc.target/aarch64/vect-xorsign_exec.c: Add
+ --save-temps to the options passed.
+
+2017-08-09 Michael Collison <michael.collison@arm.com>
+
+ * testsuite/g++.dg/ext/packed8.C: Remove -mstructure-size-
+ boundary option and fix comment.
+ * testsuite/g++.dg/init/array16.C: Remove -mstructure-size-
+ boundary option and fix comment.
+ * testsuite/g++.dg/other/crash-4.C: Remove -mstructure-size-
+ boundary option and fix comment.
+ * testsuite/gcc.dg/builtin-stringop-chk-1.c: Remove
+ -mstructure-size boundary option.
+
+2017-08-09 Segher Boessenkool <segher@kernel.crashing.org>
+
+ PR rtl-optimization/81423
+ * gcc.c-torture/execute/pr81423.c: New testcase.
+
+2017-08-09 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ * gcc.target/powerpc/fold-vec-pack-double.c: New.
+ * gcc.target/powerpc/fold-vec-pack-int.c: New.
+ * gcc.target/powerpc/fold-vec-pack-longlong.c: New.
+ * gcc.target/powerpc/fold-vec-pack-short.c: New.
+
+2017-08-09 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ * gcc.target/powerpc/fold-vec-msum-char.c: New.
+ * gcc.target/powerpc/fold-vec-msum-short.c: New.
+
+2017-08-09 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ * gcc.target/powerpc/fold-vec-madd-double.c: New.
+ * gcc.target/powerpc/fold-vec-madd-float.c: New.
+ * gcc.target/powerpc/fold-vec-madd-short.c: New.
+
+2017-08-09 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ * gcc.target/powerpc/fold-vec-cntlz-int.c: New.
+ * gcc.target/powerpc/fold-vec-cntlz-char.c: New.
+ * gcc.target/powerpc/fold-vec-cntlz-short.c: New.
+ * gcc.target/powerpc/fold-vec-cntlz-longlong.c: New.
+
+2017-08-09 Slava Barinov <v.barinov@samsung.com>
+
+ * g++.dg/asan/asan.exp: Switch on *.cc tests.
+
+2017-08-09 Marek Polacek <polacek@redhat.com>
+
+ PR c/81233
+ * gcc.dg/diagnostic-types-1.c: New test.
+ * gcc.dg/assign-warn-1.c: Update warning messages.
+ * gcc.dg/assign-warn-2.c: Likewise.
+ * gcc.dg/c90-const-expr-5.c: Likewise.
+ * gcc.dg/c99-const-expr-5.c: Likewise.
+ * gcc.dg/conv-2.c: Likewise.
+ * gcc.dg/init-bad-7.c: Likewise.
+ * gcc.dg/overflow-warn-1.c: Likewise.
+ * gcc.dg/overflow-warn-2.c: Likewise.
+ * gcc.dg/overflow-warn-3.c: Likewise.
+ * gcc.dg/overflow-warn-4.c: Likewise.
+ * gcc.dg/pointer-array-atomic.c: Likewise.
+ * gcc.dg/pr26865.c: Likewise.
+ * gcc.dg/pr61162-2.c: Likewise.
+ * gcc.dg/pr61162.c: Likewise.
+ * gcc.dg/pr67730-2.c: Likewise.
+ * gcc.dg/pr69156.c: Likewise.
+ * gcc.dg/pr70174.c: Likewise.
+ * objc.dg/proto-lossage-4.m: Likewise.
+
+2017-08-09 Marek Polacek <polacek@redhat.com>
+
+ PR c/81417
+ * Wsign-compare-1.c: New test.
+ * gcc.dg/compare1.c: Adjust dg-bogus.
+ * gcc.dg/compare2.c: Likewise.
+ * gcc.dg/compare3.c: Likewise.
+ * gcc.dg/compare7.c: Likewise.
+ * gcc.dg/compare8.c: Likewise.
+ * gcc.dg/compare9.c: Likewise.
+ * gcc.dg/pr11492.c: Likewise.
+
+2017-08-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR driver/81523
+ * gcc.dg/pie-7.c: New test.
+ * gcc.dg/pie-static-1.c: Likewise.
+ * gcc.dg/pie-static-2.c: Likewise.
+
+2017-08-08 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/81708
+ * gcc.target/i386/stack-prot-guard.c: New test.
+
+2017-08-08 Tamar Christina <tamar.christina@arm.com>
+
+ * gcc.target/aarch64/xorsign.c: New.
+ * gcc.target/aarch64/xorsign_exec.c: New.
+ * gcc.target/aarch64/vect-xorsign_exec.c: New.
+
+2017-08-08 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR tree-optimization/81354
+ * g++.dg/torture/pr81354.C: New file.
+
+2017-08-08 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/81719
+ * g++.dg/tree-ssa/pr81719.C: New testcase.
+
+2017-08-08 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81723
+ * gfortran.dg/pr81723.f: New testcase.
+
+2017-08-08 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/bfp/scalar-extract-exp-2.c: Adjust diagnostic
+ string.
+ * gcc.target/powerpc/bfp/scalar-extract-exp-5.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-extract-sig-2.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-extract-sig-5.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-insert-exp-11.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-insert-exp-2.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-insert-exp-5.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-insert-exp-8.c: Likewise.
+ * gcc.target/powerpc/byte-in-set-2.c: Likewise.
+ * gcc.target/powerpc/cmpb-3.c: Likewise.
+ * gcc.target/powerpc/vsu/vec-xl-len-13.c: Likewise.
+ * gcc.target/powerpc/vsu/vec-xst-len-13.c: Likewise.
+
+2017-08-08 Martin Liska <mliska@suse.cz>
+
+ PR tree-opt/81696
+ * gcc.dg/ipa/pr81696.c: New test.
+
+2017-08-08 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/81744
+ * gcc.dg/tree-ssa/pr81744.c: New.
+
+2017-08-08 Marek Polacek <polacek@redhat.com>
+
+ PR c++/81607
+ * g++.dg/other/bitfield6.C: New test.
+
+2017-08-07 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/81593
+ * gcc.target/powerpc/vec-setup.h: New tests to test various
+ combinations of setting up vectors of 2 double word elements.
+ * gcc.target/powerpc/vec-setup-long.c: Likewise.
+ * gcc.target/powerpc/vec-setup-double.c: Likewise.
+ * gcc.target/powerpc/vec-setup-be-long.c: Likewise.
+ * gcc.target/powerpc/vec-setup-be-double.c: Likewise.
+ * gcc.target/powerpc/vsx-extract-6.c: New tests for optimzing
+ vector inserts from vector extracts.
+ * gcc.target/powerpc/vsx-extract-7.c: Likewise.
+
+2017-08-07 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/68829
+ PR fortran/81701
+ * gfortran.dg/o_fast_stacksize.90: New test.
+
+2017-08-07 Wilco Dijkstra <wdijkstr@arm.com>
+
+ PR middle-end/46932
+ * gcc.dg/pr46932.c: Compile on targets with pre-increment.
+
+2017-08-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gcc.target/i386/pr81736-1.c: Removed.
+ * gcc.target/i386/pr81736-2.c: Likewise.
+ * gcc.target/i386/pr81736-3.c: Likewise.
+ * gcc.target/i386/pr81736-4.c: Likewise.
+
+2017-08-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/81736
+ * gcc.target/i386/pr81736-1.c: New test.
+ * gcc.target/i386/pr81736-2.c: Likewise.
+ * gcc.target/i386/pr81736-3.c: Likewise.
+ * gcc.target/i386/pr81736-4.c: Likewise.
+
+2017-08-07 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/81737
+ * gcc.dg/pr81737.c: New test.
+
+2017-08-07 Martin Liska <mliska@suse.cz>
+
+ * g++.dg/cpp0x/pr65558.C: Update scanned pattern.
+ * gcc.dg/parm-impl-decl-1.c: Likewise.
+ * gcc.dg/parm-impl-decl-3.c: Likewise.
+ * gcc.dg/Wattributes-5.c: New test.
+
+2017-08-06 Andrew Pinski <apinski@cavium.com>
+
+ * gcc.target/aarch64/target_attr_10.c: Add -mcpu=generic.
+ * gcc.target/aarch64/target_attr_13.c: LIkewise.
+ * gcc.target/aarch64/target_attr_15.c: LIkewise.
+ * gcc.target/aarch64/target_attr_4.c: Likewise.
+ * gcc.target/aarch64/target_attr_1.c: Add -march=armv8-a.
+ * gcc.target/aarch64/target_attr_2.c: Likewise.
+ * gcc.target/aarch64/target_attr_7.c: Likewise.
+ * gcc.target/aarch64/target_attr_crypto_ice_1.c: Likewise.
+ * gcc.target/aarch64/target_attr_crypto_ice_2.c: Likewise.
+ * gcc.target/aarch64/target_attr_3.c: Add -mcpu=generic -march=armv8-a.
+
+2017-08-06 Andrew Pinski <apinski@cavium.com>
+
+ * gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c: Pass
+ -march=armv8-a+nolse, skip if -mcpu= is passed.
+ * gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c: Likewise.
+
+2017-08-06 Andrew Pinski <apinski@cavium.com>
+
+ * gcc.target/aarch64/_Float16_1.c: Skip if supplied a -mcpu= option.
+ * gcc.target/aarch64/_Float16_2.c: Likewise.
+ * gcc.target/aarch64/_Float16_3.c: Likewise.
+
+2017-08-06 Tom de Vries <tom@codesourcery.com>
+
+ * gcc.dg/pr78582.c: Require effective target nonlocal_goto.
+
+2017-08-06 Tom de Vries <tom@codesourcery.com>
+
+ * gcc.c-torture/execute/builtins/memops-asm-lib.c (my_memmove): Fix return
+ type. Add missing return.
+
+2017-08-06 Tom de Vries <tom@codesourcery.com>
+
+ PR testsuite/81731
+ * gcc.dg/torture/pr78218.c (struct v): New type, factored type out of
+ variable 'a' definition.
+ (b): Remove unused variable.
+ (gp): New variable.
+ (check): Add parameter corresponding to call in main, and handle.
+
+2017-08-04 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/79790
+ * g++.dg/cpp1z/class-deduction43.C: New.
+
+2017-08-04 Yury Gribov <tetra2005@gmail.com>
+
+ PR tree-optimization/57371
+ * c-c++-common/pr57371-1.c: New test.
+ * c-c++-common/pr57371-2.c: New test.
+ * c-c++-common/pr57371-3.c: New test.
+ * c-c++-common/pr57371-4.c: New test.
+ * gcc.dg/pr57371-5.c: New test.
+
+2017-08-04 Carl Love <cel@us.ibm.com>
+
+ * gcc.target/powerpc/builtins-3.c: Remove ISA 3.0 word variant
+ builtin test cases for vec_mule, and vec_mulo.
+ * gcc.target/powerpc/builtins-3-p8.c: Add ISA 3.0 word variant
+ builtin test cases for vec_mule, and vec_mulo.
+
+2017-08-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/81590
+ * gcc.target/i386/avx512-check.h: New file.
+ * gcc.target/i386/avx5124fmaps-check.h: Removed.
+ * gcc.target/i386/avx5124vnniw-check.h: Likewise.
+ * gcc.target/i386/avx512cd-check.h: Likewise.
+ * gcc.target/i386/avx512ifma-check.h: Likewise.
+ * gcc.target/i386/avx512vbmi-check.h: Likewise.
+ * gcc.target/i386/avx512vpopcntdq-check.h: Likewise.
+ * gcc.target/i386/avx512bw-check.h: Rewrite.
+ * gcc.target/i386/avx512dq-check.h: Likewise.
+ * gcc.target/i386/avx512er-check.h: Likewise.
+ * gcc.target/i386/avx512f-check.h: Likewise.
+ * gcc.target/i386/avx512vl-check.h: Likewise.
+ * gcc.target/i386/avx512f-helper.h: Include "avx512-check.h"
+ only.
+ (test_512): Removed.
+ (avx512*_test): Likewise.
+ * gcc.target/i386/avx512f-pr71559.c (TEST): Undef.
+
+2017-08-04 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/81695
+ * gcc.dg/pr81695.c: New test.
+
+2017-08-04 Richard Sandiford <richard.sandiford@linaro.org>
+
+ PR tree-optimization/81136
+ * gcc.dg/vect/pr81136.c: Add scan test.
+
+2017-08-04 Richard Sandiford <richard.sandiford@linaro.org>
+
+ * gcc.dg/vect/vect-alias-check-3.c: New test.
+ * gcc.dg/vect/vect-alias-check-4.c: Likewise.
+ * gcc.dg/vect/vect-alias-check-5.c: Likewise.
+
+2017-08-04 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/81705
+ * c-c++-common/ubsan/pr81705.c: New testcase.
+
+2017-08-03 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/bfp/scalar-cmp-exp-eq-2.c: Adjust for error
+ messages that used to start with a capital letter.
+ * gcc.target/powerpc/bfp/scalar-cmp-exp-gt-2.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-cmp-exp-lt-2.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-cmp-unordered-2.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-extract-exp-1.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-extract-exp-4.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-extract-sig-1.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-extract-sig-4.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-insert-exp-1.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-insert-exp-10.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-insert-exp-4.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-insert-exp-7.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-test-data-class-11.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-test-data-class-6.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-test-data-class-7.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-test-neg-2.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-test-neg-3.c: Likewise.
+ * gcc.target/powerpc/bfp/scalar-test-neg-5.c: Likewise.
+ * gcc.target/powerpc/bfp/vec-extract-exp-2.c: Likewise.
+ * gcc.target/powerpc/bfp/vec-extract-exp-3.c: Likewise.
+ * gcc.target/powerpc/bfp/vec-extract-sig-2.c: Likewise.
+ * gcc.target/powerpc/bfp/vec-extract-sig-3.c: Likewise.
+ * gcc.target/powerpc/bfp/vec-insert-exp-2.c: Likewise.
+ * gcc.target/powerpc/bfp/vec-insert-exp-3.c: Likewise.
+ * gcc.target/powerpc/bfp/vec-insert-exp-6.c: Likewise.
+ * gcc.target/powerpc/bfp/vec-insert-exp-7.c: Likewise.
+ * gcc.target/powerpc/bfp/vec-test-data-class-2.c: Likewise.
+ * gcc.target/powerpc/bfp/vec-test-data-class-3.c: Likewise.
+ * gcc.target/powerpc/byte-in-either-range-1.c: Likewise.
+ * gcc.target/powerpc/byte-in-range-1.c: Likewise.
+ * gcc.target/powerpc/byte-in-set-1.c: Likewise.
+ * gcc.target/powerpc/crypto-builtin-2.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-1.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-11.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-16.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-21.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-26.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-31.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-36.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-41.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-46.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-51.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-56.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-6.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-61.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-66.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-71.c: Likewise.
+ * gcc.target/powerpc/dfp/dtstsfi-76.c: Likewise.
+ * gcc.target/powerpc/vsu/vec-all-nez-7.c: Likewise.
+ * gcc.target/powerpc/vsu/vec-any-eqz-7.c: Likewise.
+ * gcc.target/powerpc/vsu/vec-cmpnez-7.c: Likewise.
+ * gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c: Likewise.
+ * gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c: Likewise.
+ * gcc.target/powerpc/vsu/vec-xl-len-12.c: Likewise.
+ * gcc.target/powerpc/vsu/vec-xlx-7.c: Likewise.
+ * gcc.target/powerpc/vsu/vec-xrx-7.c: Likewise.
+ * gcc.target/powerpc/vsu/vec-xst-len-12.c: Likewise.
+
+2017-08-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/81621
+ * gcc.dg/pr81621.c: New test.
+
+2017-08-03 Richard Biener <rguenther@suse.de>
+
+ * gcc.dg/tree-ssa/reassoc-23.c: Adjust to fool early folding
+ and CSE.
+
+2017-08-03 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/81148
+ * c-c++-common/ubsan/pr81148.c: New testcase.
+
+2017-08-03 Tom de Vries <tom@codesourcery.com>
+
+ PR target/81662
+ * gcc.target/nvptx/patchable_function_entry-default.c: New test.
+
+2017-08-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR driver/81650
+ * gcc.dg/pr81650.c: New test.
+
+2017-08-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/71440
+ * g++.dg/template/crash127.C: New.
+
+2017-08-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/81052
+ * c-c++-common/pr81052.c: New test.
+
+2017-08-03 Tom de Vries <tom@codesourcery.com>
+
+ * gcc.dg/pr56727-2.c: Require alias.
+
+2017-08-03 Tom de Vries <tom@codesourcery.com>
+
+ * gcc.dg/attr-noipa.c: Require alloca.
+
+2017-08-03 Tom de Vries <tom@codesourcery.com>
+
+ * gcc.dg/torture/pr80163.c: Require label_values.
+
+2017-08-03 Tom de Vries <tom@codesourcery.com>
+
+ PR target/81662
+ * c-c++-common/patchable_function_entry-decl.c: Skip for nvptx.
+ * c-c++-common/patchable_function_entry-default.c: Same.
+ * c-c++-common/patchable_function_entry-definition.c: Same.
+
+2017-08-02 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/81644
+ * gcc.target/i386/pr81644.c: New test.
+
+2017-08-02 Tom de Vries <tom@codesourcery.com>
+
+ * gcc.dg/Walloca-14.c: Use relative line number.
+
+2017-08-02 Uros Bizjak <ubizjak@gmail.com>
+
+ * gcc.target/i386/funcspec-56.inc (no_3dnowa): Properly
+ test "no-3dnowa" target attribute.
+
+2017-08-02 Marek Polacek <polacek@redhat.com>
+
+ PR c/81289
+ * gcc.dg/noncompile/pr81289.c: New test.
+
+ PR c/81448
+ PR c/81306
+ * c-c++-common/Wmultistatement-macros-13.c: New test.
+
+2017-08-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/81640
+ * g++.dg/warn/Wshadow-compatible-local-2.C: New test.
+
+ PR middle-end/79499
+ * gcc.dg/pr79499.c: New test.
+
+2017-08-02 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81633
+ * gcc.dg/vect/pr81633.c: New testcase.
+
+2017-08-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gcc.dg/guality/pr25967-1.c: New test.
+ * gcc.dg/guality/pr25967-2.c: Likewise.
+ * gcc.dg/torture/pr25967-1.c: Likewise.
+ * gcc.dg/torture/pr25967-2.c: Likewise.
+
+2017-08-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/81654
+ * gcc.target/i386/pr81654.c: New test.
+
+2017-08-01 Thomas König <tkoenig@gcc.gnu.org>
+
+ PR fortran/79312
+ * gfortran.dg/logical_assignment_1.f90: New test.
+
+2017-08-01 Martin Liska <mliska@suse.cz>
+
+ PR middle-end/70140
+ * gcc.dg/string-opt-1.c: Adjust test-case to scan for memcpy.
+
+2017-08-01 Martin Liska <mliska@suse.cz>
+
+ Revert r250771
+ Make mempcpy more optimal (PR middle-end/70140).
+
+2017-08-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/81622
+ * gcc.target/powerpc/pr81622.c: New test.
+
+2017-08-01 Steve Ellcey <sellcey@cavium.com>
+
+ PR tree-optimization/80925
+ * gcc.dg/vect/vect-28.c: Add
+ --param vect-max-peeling-for-alignment=0 option.
+ Remove unaligned access and peeling checks.
+ * gcc.dg/vect/vect-33-big-array.c: Ditto.
+ * gcc.dg/vect/vect-70.c: Ditto.
+ * gcc.dg/vect/vect-87.c: Ditto.
+ * gcc.dg/vect/vect-88.c: Ditto.
+ * gcc.dg/vect/vect-91.c: Ditto.
+ * gcc.dg/vect/vect-93.c: Ditto.
+
+2017-08-01 Tom de Vries <tom@codesourcery.com>
+
+ * gcc.target/nvptx/slp-2.c (foo): Use signed loop iteration variable.
+ * gcc.target/nvptx/slp.c (foo): Same.
+
+2017-08-01 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81181
+ * gcc.dg/torture/pr81181.c: New testcase.
+
+2017-08-01 Martin Liska <mliska@suse.cz>
+
+ PR middle-end/70140
+ * gcc.dg/string-opt-1.c: Adjust test-case to scan for memcpy.
+
+2017-08-01 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/81641
+ * gcc.target/i386/pr81641.c: New test.
+
+2017-08-01 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/81639
+ * gcc.target/i386/pr81639.c: New test.
+
+2017-08-01 Richard Biener <rguenther@suse.de>
+
+ * gcc.dg/tree-ssa/ssa-dce-3.c: Adjust.
+ * gcc.dg/tree-ssa/split-path-5.c: Remove case with just dead
+ endless loop.
+ * gcc.dg/uninit-23.c: Adjust.
+
+2017-08-01 Bin Cheng <bin.cheng@arm.com>
+
+ * gcc.dg/no-strict-overflow-7.c: Revise comment and test string.
+ * gcc.dg/tree-ssa/pr81388-1.c: Ditto.
+
+2017-08-01 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/81627
+ * gcc.dg/tree-ssa/pr81627.c: New.
+
+2017-08-01 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/81620
+ * gcc.dg/tree-ssa/pr81620-1.c: New.
+ * gcc.dg/tree-ssa/pr81620-2.c: New.
+
+2017-08-01 Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ PR testsuite/53542
+ * gfortran.dg/use_30.f90: New test.
+
+2017-08-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/81588
+ * gcc.dg/tree-ssa/pr81588.c: New test.
+ * gcc.dg/pr81588.c: New test.
+ * gcc.c-torture/execute/pr81588.c: New test.
+
+2017-08-01 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81297
+ * gcc.dg/torture/pr81297.c: New testcase.
+
+2017-07-31 Uros Bizjak <ubizjak@gmail.com>
+
+ * gcc.target/i386/naked-1.c (dg-options): Add -fno-pic.
+
+2017-07-31 Steve Ellcey <sellcey@cavium.com>
+
+ PR tree-optimization/80925
+ * gcc.dg/vect/no-section-anchors-vect-69.c: Add
+ --param vect-max-peeling-for-alignment=0 option.
+ Remove unaligned access and peeling checks.
+ * gcc.dg/vect/section-anchors-vect-69.c: Ditto.
+
+2017-07-31 Carl Love <cel@us.ibm.com>
+
+ * gcc.target/powerpc/builtins-4-runnable.c: Fix dg argument that got
+ missed in commit 250746.
+
+2017-07-31 Carl Love <cel@us.ibm.com>
+
+ * gcc.target/powerpc/builtins-4-runnable.c: Add test cases for the
+ new builtins.
+
+2017-07-31 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gcc.target/i386/pr79793-1.c: Compile with -mtune=generic.
+ * gcc.target/i386/pr79793-2.c: Likewise.
+
+2017-07-31 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/25967
+ * gcc.target/i386/naked-3.c (dg-options): Use -O0.
+ (naked): Add attribute regparm(1) for x86_32 targets.
+ Add integer argument. Remove global "data" variable.
+ (main): Pass integer argument to naked function.
+ * gcc.target/i386/naked-4.c: New test.
+
+2017-07-31 Jan Hubicka <hubicka@ucw.cz>
+ Martin Liska <mliska@suse.cz>
+
+ * gcc.dg/predict-15.c: New test.
+ * gcc.dg/tree-ssa/vrp24.c: Update scanned pattern.
+
+2017-07-31 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/25967
+ * gcc.target/i386/naked-1.c: New test.
+ * gcc.target/i386/naked-2.c: Ditto.
+ * gcc.target/i386/naked-3.c: Ditto.
+ * gcc.target/x86_64/abi/ms-sysv/ms-sysv.c: Remove
+ do_test_body0 stub function, use attribute "naked" instead.
+ * gcc.dg/pr44290-1.c: Use naked_functions effective target.
+ * gcc.dg/pr44290-2.c: Ditto.
+
+2017-07-31 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/81581
+ * gfortran.dg/dim_sum_1.f90: New test case.
+ * gfortran.dg/dim_sum_2.f90: New test case.
+ * gfortran.dg/dim_sum_3.f90: New test case.
+
+2017-07-31 Martin Liska <mliska@suse.cz>
+
+ * gcc.dg/builtin-unreachable-6.c: Update scanned patterns.
+ * gcc.dg/tree-ssa/attr-hotcold-2.c: Likewise.
+
+2017-07-31 Martin Liska <mliska@suse.cz>
+
+ PR sanitize/81530
+ * g++.dg/ubsan/pr81530.C: New test.
+
+2017-07-31 Jakub Jelinek <jakub@redhat.com>
+
+ PR sanitizer/81604
+ * c-c++-common/ubsan/pr81604.c: New test.
+
+2017-07-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/79793
+ * gcc.dg/guality/pr68037-1.c: Update gdb breakpoints.
+ * gcc.target/i386/interrupt-5.c (interrupt_frame): New struct.
+ (foo): Check the builtin return address against the return address
+ in interrupt frame.
+ * gcc.target/i386/pr79793-1.c: New test.
+ * gcc.target/i386/pr79793-2.c: Likewise.
+
+2017-07-29 Eric Botcazou <ebotcazou@adacore.com>
+
+ * c-c++-common/dump-ada-spec-7.c: New test.
+
+2017-07-29 Jakub Jelinek <jakub@redhat.com>
+
+ * g++.dg/debug/dwarf2/inline-ns-1.C: New test.
+ * g++.dg/debug/dwarf2/inline-ns-2.C: New test.
+
+2017-07-28 Peter Bergner <bergner@vnet.ibm.com>
+
+ * gcc.target/powerpc/cpu-builtin-1.c (darn, scv): Add tests.
+
+2017-07-28 Tamar Christina <tamar.christina@arm.com>
+
+ * gcc.target/aarch64/int_mov_immediate_1.c: New.
+
+2017-07-28 Bin Cheng <bin.cheng@arm.com>
+
+ * gcc.dg/vect/pr80815-3.c: Require vect_perm.
+
+2017-07-28 Tamar Christina <tamar.christina@arm.com>
+ Bilyan Borisov <bilyan.borisov@arm.com>
+
+ * gcc.target/aarch64/dbl_mov_immediate_1.c: New.
+ * gcc.target/aarch64/flt_mov_immediate_1.c: New.
+ * gcc.target/aarch64/f16_mov_immediate_1.c: New.
+ * gcc.target/aarch64/f16_mov_immediate_2.c: New.
+ * gcc.target/aarch64/pr63304_1.c: Changed to double.
+
+2017-07-28 Bin Cheng <bin.cheng@arm.com>
+
+ * gcc.dg/tree-ssa/predcom-dse-1.c: New test.
+ * gcc.dg/tree-ssa/predcom-dse-2.c: New test.
+ * gcc.dg/tree-ssa/predcom-dse-3.c: New test.
+ * gcc.dg/tree-ssa/predcom-dse-4.c: New test.
+ * gcc.dg/tree-ssa/predcom-dse-5.c: New test.
+ * gcc.dg/tree-ssa/predcom-dse-6.c: New test.
+ * gcc.dg/tree-ssa/predcom-dse-7.c: New test.
+ * gcc.dg/tree-ssa/predcom-dse-8.c: New test.
+ * gcc.dg/tree-ssa/predcom-dse-9.c: New test.
+ * gcc.dg/tree-ssa/predcom-dse-10.c: New test.
+ * gcc.dg/tree-ssa/predcom-dse-11.c: New test.
+
+2017-07-28 Martin Liska <mliska@suse.cz>
+
+ PR sanitizer/81340
+ * g++.dg/asan/pr81340.C: New test.
+
+2017-07-28 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81502
+ * gcc.target/i386/pr81502.c: New testcase.
+
+2017-07-28 Martin Liska <mliska@suse.cz>
+
+ PR sanitizer/81460
+ * gcc.dg/asan/pr81460.c: New test.
+
+2017-07-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR sanitizer/80998
+ * c-c++-common/ubsan/ptr-overflow-1.c: New test.
+ * c-c++-common/ubsan/ptr-overflow-2.c: New test.
+
+ PR tree-optimization/81578
+ * gcc.dg/pr81578.c: New test.
+
+2017-07-28 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81573
+ * gcc.dg/torture/pr81573.c: Explicitely use signed char.
+
+2017-07-27 Peter Bergner <bergner@vnet.ibm.com>
+
+ * g++.dg/pr69667.C: Remove option -mlra.
+ * gcc.target/powerpc/dform-1.c: Likewise.
+ * gcc.target/powerpc/dform-2.c: Likewise.
+ * gcc.target/powerpc/dform-3.c: Likewise.
+ * gcc.target/powerpc/p8vector-int128-1.c: Likewise.
+ * gcc.target/powerpc/p9-vparity.c: Likewise.
+ * gcc.target/powerpc/pr63491.c: Likewise.
+ * gcc.target/powerpc/pr67808.c: Likewise.
+ * gcc.target/powerpc/pr68805.c: Likewise.
+ * gcc.target/powerpc/pr69461.c: Likewise.
+ * gcc.target/powerpc/pr71680.c: Likewise.
+ * gcc.target/powerpc/pr77289.c: Likewise.
+ * gcc.target/powerpc/pr78458.c: Likewise.
+ * gcc.target/powerpc/pr78543.c: Likewise.
+ * g++.dg/pr71294.C: Remove option -mno-lra.
+ * gcc.target/powerpc/pr71656-1.c: Likewise.
+ * gcc.target/powerpc/pr71656-2.c: Likewise.
+ * gcc.target/powerpc/pr71698.c: Likewise.
+
+2017-07-27 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+ Sudakshina Das <sudi.das@arm.com>
+
+ * gcc.target/aarch64/tst_imm_split_1.c: New Test.
+
+2017-07-27 Marek Polacek <polacek@redhat.com>
+
+ PR c/81417
+ * c-c++-common/Wsign-compare-1.c: New test.
+ * g++.dg/warn/Wsign-compare-2.C: Update dg-warning.
+ * g++.dg/warn/Wsign-compare-4.C: Likewise.
+ * g++.dg/warn/Wsign-compare-6.C: Likewise.
+ * g++.dg/warn/compare1.C: Likewise.
+ * gcc.dg/compare1.c: Likewise.
+ * gcc.dg/compare2.c: Likewise.
+ * gcc.dg/compare4.c: Likewise.
+ * gcc.dg/compare5.c: Likewise.
+ * gcc.dg/pr35430.c: Likewise.
+ * gcc.dg/pr60087.c: Likewise.
+
+2017-07-27 Peter Bergner <bergner@vnet.ibm.com>
+
+ PR middle-end/81564
+ * gcc.dg/pr81564.c: New test.
+
+2017-07-27 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81573
+ PR tree-optimization/81494
+ * gcc.dg/torture/pr81573.c: New testcase.
+
+2017-07-27 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81571
+ * gcc.dg/torture/pr81571.c: New testcase.
+
+2017-07-27 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81502
+ * gcc.target/i386/vect-insert-1.c: New testcase.
+
+2017-07-27 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ PR target/81534
+ * gcc.target/s390/pr81534.c: New test.
+
+2017-07-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/81555
+ PR tree-optimization/81556
+ * gcc.c-torture/execute/pr81555.c: New test.
+ * gcc.c-torture/execute/pr81556.c: New test.
+
+ * gcc.dg/attr-noipa.c: New test.
+ * gcc.dg/ipa/ipa-pta-18.c: New test.
+ * gcc.dg/ipa/ipa-sra-11.c: New test.
+
+2017-07-25 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/vsx-himode.c: Delete -mvsx-small-integer
+ option.
+ * gcc.target/powerpc/vsx-himode2.c: Likewise.
+ * gcc.target/powerpc/vsx-himode3.c: Likewise.
+ * gcc.target/powerpc/vsx-qimode.c: Likewise.
+ * gcc.target/powerpc/vsx-qimode2.c: Likewise.
+ * gcc.target/powerpc/vsx-qimode3.c: Likewise.
+ * gcc.target/powerpc/vsx-simode.c: Likewise.
+ * gcc.target/powerpc/vsx-simode2.c: Likewise.
+ * gcc.target/powerpc/vsx-simode3.c: Likewise.
+
+2017-07-26 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/71570
+ * g++.dg/cpp0x/lambda/lambda-ice17.C: New.
+
+2017-07-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/81563
+ * gcc.target/i386/pr81563.c: New test
+
+2017-07-26 Wilco Dijkstra <wdijkstr@arm.com>
+
+ PR target/79041
+ * gcc.target/aarch64/pr79041-2.c: Don't run in ILP32.
+
+2017-07-26 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/70992
+ * gcc.dg/overflow-warn-1.c: Adjust dg-error.
+ * gcc.dg/overflow-warn-2.c: Likewise.
+ * gcc.dg/overflow-warn-3.c: Likewise.
+ * gcc.dg/overflow-warn-4.c: Likewise.
+ * gcc.dg/torture/pr70992-2.c: New test.
+ * gcc.dg/torture/pr70992.c: New test.
+
+2017-07-26 Richard Biener <rguenther@suse.de>
+
+ * gcc/testsuite/gcc.dg/pr70920-2.c: Adjust for transform already
+ happening in ccp1.
+ * gcc/testsuite/gcc.dg/pr70920-4.c: Likewise.
+
+2017-07-26 Wilco Dijkstra <wdijkstr@arm.com>
+
+ PR middle-end/46932
+ * gcc.dg/pr46932.c: New testcase.
+
+2017-07-26 Martin Liska <mliska@suse.cz>
+
+ PR sanitize/81186
+ * gcc.dg/asan/pr81186.c: New test.
+
+2017-07-25 Carl Love <cel@us.ibm.com>
+
+ * gcc.target/powerpc/builtins-4-p9-runnable.c: Add test file for
+ vec_cnttz builtins.
+
+2017-07-25 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/opt66.adb: New test.
+
+2017-07-25 Alexander Monakov <amonakov@ispras.ru>
+
+ * gcc.dg/tree-ssa/assoc-2.c: Enhance.
+ * gcc.dg/tree-ssa/slsr-4.c: Adjust.
+
+2017-07-25 Alexander Monakov <amonakov@ispras.ru>
+
+ * gcc.dg/tree-ssa/assoc-2.c: New testcase.
+
+2017-07-25 Torsten Duwe <duwe@suse.de>
+
+ * c-c++-common/patchable_function_entry-default.c: New test.
+ * c-c++-common/patchable_function_entry-decl.c: Likewise.
+ * c-c++-common/patchable_function_entry-definition.c: Likewise.
+
+2017-07-25 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/81532
+ * gcc.target/i386/pr80833-3.c: New test.
+ * gcc.target/i386/avx512dq-pr81532.c: New test.
+ * gcc.target/i386/avx512bw-pr81532.c: New test.
+
+2017-07-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81455
+ * gcc.dg/pr81455.c: New testcase.
+
+2017-07-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81529
+ * gfortran.dg/pr81529.f90: New testcase.
+
+2017-07-25 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * gcc.target/aarch64/pr79041-2.c: Improve test.
+
+2017-07-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81410
+ * gcc.dg/vect/pr81410.c: Do not typedef uint64_t.
+
+2017-07-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81510
+ * gcc.dg/torture/pr81510.c: New testcase.
+ * gcc.dg/torture/pr81510-2.c: Likewise.
+
+2017-07-25 Martin Liska <mliska@suse.cz>
+
+ PR ipa/81520
+ * gcc.dg/ipa/pr81520.c: New test.
+
+2017-07-25 Marek Polacek <polacek@redhat.com>
+
+ PR c/81364
+ * Wmultistatement-macros-12.c: New test.
+
+2017-07-25 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/81414
+ * gcc.target/aarch64/pr81414.C: New.
+
+2017-07-25 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/81505
+ * gcc.dg/ubsan/pr81505.c: New testcase.
+
+2017-07-24 Daniel Santos <daniel.santos@pobox.com>
+
+ PR testsuite/80759
+ * gcc.target/x86_64/abi/ms-sysv/do-test.S
+ (ELFFN_BEGIN): Rename to FN_TYPE.
+ (ELFFN_END): Rename to FN_SIZE.
+ (ASMNAME): New macro.
+ (FUNC): Rename to FUNC_BEGIN, use ASMNAME and use .globl instead of
+ .global.
+ (FUNC_END): Use ASMNAME.
+ (test_data_save): Remove.
+ (test_data_input): Likewise.
+ (test_data_output: Likewise.
+ (test_data_fn): Likewise.
+ (test_data_retaddr): Likewise.
+ (regs_to_mem): Make globals, use r10 instead of rax.
+ (mem_to_regs): Likewise.
+ (do_test_unaligned): Remove .cfi directives, remove pushf/popf, move
+ body to ms-sysv.c.
+ (do_test_aligned): Likewise.
+ * gcc.target/x86_64/abi/ms-sysv/ms-sysv.c:
+ Add dg-* directives.
+ (PASTE_STR): New macro.
+ (ASMNAME): Likewise.
+ (LOAD_TEST_DATA_ADDR): Likewise.
+ (TEST_DATA_OFFSET): Likewise.
+ (do_test_body0): New C function.
+ (do_test_body): New inline assembly routine.
+ * gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp
+ (runtest_ms_sysv): Modify.
+
+2017-07-24 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/pr65849-1.c: Delete, test no longer valid
+ since the upper-regs options have been deleted.
+ * gcc.target/powerpc/pr65849-2.c: Likewise.
+ * gcc.target/powerpc/pr80099-1.c: Likewise.
+ * gcc.target/powerpc/pr80099-2.c: Likewise.
+ * gcc.target/powerpc/pr80099-3.c: Likewise.
+ * gcc.target/powerpc/pr80099-4.c: Likewise.
+ * gcc.target/powerpc/pr80099-5.c: Likewise.
+ * gcc.target/powerpc/builtins-2-p9-runnable.c: Update test to
+ support removal of the upper-regs options.
+ * gcc.target/powerpc/p8vector-fp.c: Likewise.
+ * gcc.target/powerpc/p8vector-ldst.c: Likewise.
+ * gcc.target/powerpc/p9-dimode1.c: Likewise.
+ * gcc.target/powerpc/p9-dimode2.c: Likewise.
+ * gcc.target/powerpc/ppc-fpconv-1.c: Likewise.
+ * gcc.target/powerpc/ppc-fpconv-10.c: Likewise.
+ * gcc.target/powerpc/ppc-fpconv-5.c: Likewise.
+ * gcc.target/powerpc/ppc-fpconv-9.c: Likewise.
+ * gcc.target/powerpc/ppc-round.c: Likewise.
+ * gcc.target/powerpc/pr71720.c: Likewise.
+ * gcc.target/powerpc/pr72853.c: Likewise.
+ * gcc.target/powerpc/pr79907.c: Likewise.
+ * gcc.target/powerpc/pr78953.c: Likewise.
+ * gcc.target/powerpc/upper-regs-df.c: Likewise.
+ * gcc.target/powerpc/upper-regs-sf.c: Likewise.
+ * gcc.target/powerpc/vec-extract-1.c: Likewise.
+ * gcc.target/powerpc/vec-init-3.c: Likewise.
+ * gcc.target/powerpc/vec-init-6.c: Likewise.
+ * gcc.target/powerpc/vec-init-7.c: Likewise.
+ * gcc.target/powerpc/vec-set-char.c: Likewise.
+ * gcc.target/powerpc/vec-set-int.c: Likewise.
+ * gcc.target/powerpc/vec-set-short.c: Likewise.
+
+2017-07-24 Wilco Dijkstra <wdijkstr@arm.com>
+
+ PR target/79041
+ * gcc.target/aarch64/pr79041-2.c: New test.
+
+2017-07-24 Carl Love <cel@us.ibm.com>
+
+ * gcc.target/powerpc/builtins-3-p9-runnable.c: Add new test file for
+ the new built-ins.
+
+2017-07-24 Jackson Woodruff <jackson.woodruff@arm.com>
+
+ * gcc.target/aarch64/simd/vmla_elem_1.c: New.
+
+2017-07-24 Thomas Koenig <tkoenig@gcc.gnu.org>
+ Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/66102
+ * gfortran.dg/realloc_on_assign_28.f90: New test.
+
+2017-07-23 David Edelsohn <dje.gcc@gmail.com>
+
+ * gcc.dg/pr56727-2.c: Limit to powerpc-linux.
+ * gcc.dg/debug/dwarf2/stacked-qualified-types-3.c: Remove AIX XFAIL.
+
+2017-07-23 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/80569
+ * gcc.target/i386/pr80569.c: New test.
+
+2017-07-21 Carl Love <cel@us.ibm.com>
+
+ * gcc.target/powerpc/builtins-2.c (vmulosh, vmulouh, vmulesh,
+ vmuleuh): Fix scan-assembler-times should check for word not half word
+ instructions.
+
+2017-07-21 Jim Wilson <jim.wilson@linaro.org>
+
+ * lib/target-supports.exp (add_options_for_arm_v8_1a_neon): Delete
+ redundant -march option.
+ (check_effective_target_arm_v8_1a_neon_ok_nocache): Try armv8-a+rdma
+ in addition to armv8.1-a.
+
+2017-07-21 Yury Gribov <tetra2005@gmail.com>
+
+ PR middle-end/56727
+ * gcc.dg/pr56727-1.c: New test.
+ * gcc.dg/pr56727-2.c: New test.
+
+2017-07-21 Steven Munroe <munroesj@gcc.gnu.org>
+
+ * gcc.target/powerpc/mmx-check.h: New file.
+ * gcc.target/powerpc/mmx-packs.c: New file.
+ * gcc.target/powerpc/mmx-packssdw-1.c: New file.
+ * gcc.target/powerpc/mmx-packsswb-1.c: New file.
+ * gcc.target/powerpc/mmx-packuswb-1.c: New file.
+ * gcc.target/powerpc/mmx-paddb-1.c: New file.
+ * gcc.target/powerpc/mmx-paddd-1.c: New file.
+ * gcc.target/powerpc/mmx-paddsb-1.c: New file.
+ * gcc.target/powerpc/mmx-paddsw-1.c: New file.
+ * gcc.target/powerpc/mmx-paddusb-1.c: New file.
+ * gcc.target/powerpc/mmx-paddusw-1.c: New file.
+ * gcc.target/powerpc/mmx-paddw-1.c: New file.
+ * gcc.target/powerpc/mmx-pcmpeqb-1.c: New file.
+ * gcc.target/powerpc/mmx-pcmpeqd-1.c: New file.
+ * gcc.target/powerpc/mmx-pcmpeqw-1.c: New file.
+ * gcc.target/powerpc/mmx-pcmpgtb-1.c: New file.
+ * gcc.target/powerpc/mmx-pcmpgtd-1.c: New file.
+ * gcc.target/powerpc/mmx-pcmpgtw-1.c: New file.
+ * gcc.target/powerpc/mmx-pmaddwd-1.c: New file.
+ * gcc.target/powerpc/mmx-pmulhw-1.c: New file.
+ * gcc.target/powerpc/mmx-pmullw-1.c: New file.
+ * gcc.target/powerpc/mmx-pslld-1.c: New file.
+ * gcc.target/powerpc/mmx-psllw-1.c: New file.
+ * gcc.target/powerpc/mmx-psrad-1.c: New file.
+ * gcc.target/powerpc/mmx-psraw-1.c: New file.
+ * gcc.target/powerpc/mmx-psrld-1.c: New file.
+ * gcc.target/powerpc/mmx-psrlw-1.c: New file.
+ * gcc.target/powerpc/mmx-psubb-2.c: New file.
+ * gcc.target/powerpc/mmx-psubd-2.c: New file.
+ * gcc.target/powerpc/mmx-psubsb-1.c: New file.
+ * gcc.target/powerpc/mmx-psubsw-1.c: New file.
+ * gcc.target/powerpc/mmx-psubusb-1.c: New file.
+ * gcc.target/powerpc/mmx-psubusw-1.c: New file.
+ * gcc.target/powerpc/mmx-psubw-2.c: New file.
+ * gcc.target/powerpc/mmx-punpckhbw-1.c: New file.
+ * gcc.target/powerpc/mmx-punpckhdq-1.c: New file.
+ * gcc.target/powerpc/mmx-punpckhwd-1.c: New file.
+ * gcc.target/powerpc/mmx-punpcklbw-1.c: New file.
+ * gcc.target/powerpc/mmx-punpckldq-1.c: New file.
+ * gcc.target/powerpc/mmx-punpcklwd-1.c: New file.
+
+2017-06-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/81500
+ * gcc.dg/torture/pr81500.c: New testcase.
+
+2017-07-20 Nathan Sidwell <nathan@acm.org>
+
+ * g++.dg/ext/anon-struct6.C: Adjust diag.
+ * g++.old-deja/g++.other/anon4.C: Adjust diag.
+
+2017-07-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/80846
+ * gcc.target/i386/avx-pr80846.c: New test.
+ * gcc.target/i386/avx2-pr80846.c: New test.
+ * gcc.target/i386/avx512f-pr80846.c: New test.
+
2017-07-20 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/81388
@@ -325,7 +1538,7 @@
2017-07-11 Michael Collison <michael.collison@arm.com>
- * testsuite/gcc.target/aarch64/cmp-2.c: New testcase.
+ * gcc.target/aarch64/cmp-2.c: New testcase.
2017-07-11 Paolo Carlini <paolo.carlini@oracle.com>
@@ -1501,7 +2714,7 @@
* gcc.dg/fold-bcopy.c: New test.
* gcc.dg/tree-ssa/ssa-dse-30.c: Likewise..
* gcc.dg/tree-ssa/alias-36.c: Likewise.
- * gcc/testsuite/gcc.dg/pr79214.c: Adjust.
+ * gcc.dg/pr79214.c: Adjust.
* gcc.dg/tree-prof/val-prof-7.c: Likewise.
* gcc.dg/Wsizeof-pointer-memaccess1.c: Likewise.
* gcc.dg/builtins-nonnull.c: Likewise.
@@ -1842,12 +3055,12 @@
2017-06-08 Will Schmidt <will_schmidt@vnet.ibm.com>
- * testsuite/gcc.target/powerpc/fold-vec-logical-eqv-char.c: New.
- * testsuite/gcc.target/powerpc/fold-vec-logical-eqv-float.c: New.
- * testsuite/gcc.target/powerpc/fold-vec-logical-eqv-floatdouble.c: New.
- * testsuite/gcc.target/powerpc/fold-vec-logical-eqv-int.c: New.
- * testsuite/gcc.target/powerpc/fold-vec-logical-eqv-longlong.c: New.
- * testsuite/gcc.target/powerpc/fold-vec-logical-eqv-short.c: New.
+ * gcc.target/powerpc/fold-vec-logical-eqv-char.c: New.
+ * gcc.target/powerpc/fold-vec-logical-eqv-float.c: New.
+ * gcc.target/powerpc/fold-vec-logical-eqv-floatdouble.c: New.
+ * gcc.target/powerpc/fold-vec-logical-eqv-int.c: New.
+ * gcc.target/powerpc/fold-vec-logical-eqv-longlong.c: New.
+ * gcc.target/powerpc/fold-vec-logical-eqv-short.c: New.
2017-06-08 Jakub Jelinek <jakub@redhat.com>
@@ -3570,8 +4783,8 @@
2017-05-08 Wilco Dijkstra <wdijkstr@arm.com>
- * testsuite/gcc.dg/vect/vect-44.c: Add -fno-vect-cost-model.
- * gcc/testsuite/gcc.dg/vect/vect-50.c: Likewise.
+ * gcc.dg/vect/vect-44.c: Add -fno-vect-cost-model.
+ * gcc.dg/vect/vect-50.c: Likewise.
2017-05-07 Jeff Law <law@redhat.com>
diff --git a/gcc/testsuite/c-c++-common/Wmultistatement-macros-12.c b/gcc/testsuite/c-c++-common/Wmultistatement-macros-12.c
new file mode 100644
index 00000000000..ac8915c24b0
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/Wmultistatement-macros-12.c
@@ -0,0 +1,43 @@
+/* PR c/81364 */
+/* { dg-do compile } */
+/* { dg-options "-Wmultistatement-macros" } */
+
+#define FOO0 if (1) { } else
+#define TST0 \
+void bar0 (void) \
+{ \
+ FOO0 { } /* { dg-bogus "macro expands to multiple statements" } */ \
+}
+TST0
+
+#define FOO1 for (;;)
+#define TST1 \
+void bar1 (void) \
+{ \
+ FOO1 { } /* { dg-bogus "macro expands to multiple statements" } */ \
+}
+TST1
+
+#define FOO2 while (1)
+#define TST2 \
+void bar2 (void) \
+{ \
+ FOO2 { } /* { dg-bogus "macro expands to multiple statements" } */ \
+}
+TST2
+
+#define FOO3 switch (1)
+#define TST3 \
+void bar3 (void) \
+{ \
+ FOO3 { } /* { dg-bogus "macro expands to multiple statements" } */ \
+}
+TST3
+
+#define FOO4 if (1)
+#define TST4 \
+void bar4 (void) \
+{ \
+ FOO4 { } /* { dg-bogus "macro expands to multiple statements" } */ \
+}
+TST4
diff --git a/gcc/testsuite/c-c++-common/Wmultistatement-macros-13.c b/gcc/testsuite/c-c++-common/Wmultistatement-macros-13.c
new file mode 100644
index 00000000000..9f42e268d9f
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/Wmultistatement-macros-13.c
@@ -0,0 +1,104 @@
+/* PR c/81448 */
+/* { dg-do compile } */
+/* { dg-options "-Wmultistatement-macros" } */
+
+extern int i;
+
+#define BAD4 i++; i++ /* { dg-warning "macro expands to multiple statements" } */
+#define BAD5 i++; i++ /* { dg-warning "macro expands to multiple statements" } */
+#define BAD6 i++; i++ /* { dg-warning "macro expands to multiple statements" } */
+#define BAD7 i++; i++ /* { dg-warning "macro expands to multiple statements" } */
+#define BAD8 i++; i++ /* { dg-warning "macro expands to multiple statements" } */
+#define BAD9 i++; i++ /* { dg-warning "macro expands to multiple statements" } */
+#define IF if (1) /* { dg-message "not guarded by this 'if' clause" } */
+#define IF2 IF /* { dg-message "in expansion of macro .IF." } */
+#define BADB7 BAD7 /* { dg-message "in expansion of macro .BAD7." } */
+#define BADB8 BAD8 /* { dg-message "in expansion of macro .BAD8." } */
+#define BADB9 BAD9 /* { dg-message "in expansion of macro .BAD9." } */
+
+#define FN0 \
+void fn0 (void) \
+{ \
+ IF \
+ i++; \
+ return; \
+}
+
+#define FN1 \
+void fn1 (void) \
+{ \
+ IF2 \
+ i++; \
+ return; \
+}
+
+#define FN2 \
+void fn2 (void) \
+{ \
+ if (1) \
+ i++; \
+ return; \
+}
+
+#define TOP FN3
+#define FN3 \
+void fn3 (void) \
+{ \
+ IF \
+ i++; \
+ return; \
+}
+
+#define TOP2 FN4 /* { dg-message "in expansion of macro .FN4." } */
+#define FN4 \
+void fn4 (void) \
+{ \
+ IF2 /* { dg-message "in expansion of macro .IF2." } */ \
+ BAD4; /* { dg-message "in expansion of macro .BAD4." } */ \
+}
+
+#define FN5 \
+void fn5 (void) \
+{ \
+ IF /* { dg-message "in expansion of macro .IF." } */ \
+ BAD5; /* { dg-message "in expansion of macro .BAD5." } */ \
+}
+
+#define FN6 \
+void fn6 (void) \
+{ \
+ if (1) /* { dg-message "not guarded by this 'if' clause" } */ \
+ BAD6; /* { dg-message "in expansion of macro .BAD6." } */ \
+}
+
+#define FN7 \
+void fn7 (void) \
+{ \
+ if (1) /* { dg-message "not guarded by this 'if' clause" } */ \
+ BADB7; /* { dg-message "in expansion of macro .BADB7." } */ \
+}
+
+#define FN8 \
+void fn8 (void) \
+{ \
+ IF2 /* { dg-message "in expansion of macro .IF2." } */ \
+ BADB8; /* { dg-message "in expansion of macro .BADB8." } */ \
+}
+
+#define FN9 \
+void fn9 (void) \
+{ \
+ IF /* { dg-message "in expansion of macro .IF." } */ \
+ BADB9; /* { dg-message "in expansion of macro .BADB9." } */ \
+}
+
+FN0
+FN1
+FN2
+TOP
+TOP2 /* { dg-message "in expansion of macro .TOP2." } */
+FN5 /* { dg-message "in expansion of macro .FN5." } */
+FN6 /* { dg-message "in expansion of macro .FN6." } */
+FN7 /* { dg-message "in expansion of macro .FN7." } */
+FN8 /* { dg-message "in expansion of macro .FN8." } */
+FN9 /* { dg-message "in expansion of macro .FN9." } */
diff --git a/gcc/testsuite/c-c++-common/Wsign-compare-1.c b/gcc/testsuite/c-c++-common/Wsign-compare-1.c
new file mode 100644
index 00000000000..b9b17a99280
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/Wsign-compare-1.c
@@ -0,0 +1,33 @@
+/* PR c/81417 */
+/* { dg-do compile } */
+/* { dg-options "-Wsign-compare" } */
+
+int
+fn1 (signed int a, unsigned int b)
+{
+ return a < b; /* { dg-warning "comparison of integer expressions of different signedness: 'int' and 'unsigned int'" } */
+}
+
+int
+fn2 (signed int a, unsigned int b)
+{
+ return b < a; /* { dg-warning "comparison of integer expressions of different signedness: 'unsigned int' and 'int'" } */
+}
+
+int
+fn3 (signed long int a, unsigned long int b)
+{
+ return b < a; /* { dg-warning "comparison of integer expressions of different signedness: 'long unsigned int' and 'long int'" } */
+}
+
+int
+fn4 (signed short int a, unsigned int b)
+{
+ return b < a; /* { dg-warning "comparison of integer expressions of different signedness: 'unsigned int' and 'short int'" } */
+}
+
+int
+fn5 (unsigned int a, signed int b)
+{
+ return a < b; /* { dg-warning "comparison of integer expressions of different signedness: 'unsigned int' and 'int'" } */
+}
diff --git a/gcc/testsuite/c-c++-common/dump-ada-spec-7.c b/gcc/testsuite/c-c++-common/dump-ada-spec-7.c
new file mode 100644
index 00000000000..515d2597662
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/dump-ada-spec-7.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-fdump-ada-spec" } */
+
+enum E1 {
+ A1 = -1L,
+ A2 = 0,
+ A3 = 1
+};
+
+static enum {B1 = -1L, B2, B3} Obj1;
+
+static struct { int i; } Obj2;
+
+/* { dg-final { scan-ada-spec-not "unsigned" } } */
+/* { dg-final { cleanup-ada-spec } } */
diff --git a/gcc/testsuite/c-c++-common/missing-close-symbol.c b/gcc/testsuite/c-c++-common/missing-close-symbol.c
new file mode 100644
index 00000000000..85b96f28ef8
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/missing-close-symbol.c
@@ -0,0 +1,33 @@
+/* { dg-options "-fdiagnostics-show-caret" } */
+
+/* Verify that the C/C++ frontends show the pertinent opening symbol when
+ a closing symbol is missing. */
+
+/* Verify that, when they are on the same line, that the opening symbol is
+ shown as a secondary range within the main diagnostic. */
+
+void test_static_assert_same_line (void)
+{
+ _Static_assert(sizeof(int) >= sizeof(char), "msg"; /* { dg-error "expected '\\)' before ';' token" } */
+ /* { dg-begin-multiline-output "" }
+ _Static_assert(sizeof(int) >= sizeof(char), "msg";
+ ~ ^
+ { dg-end-multiline-output "" } */
+}
+
+/* Verify that, when they are on different lines, that the opening symbol is
+ shown via a secondary diagnostic. */
+
+void test_static_assert_different_line (void)
+{
+ _Static_assert(sizeof(int) >= sizeof(char), /* { dg-message "to match this '\\('" } */
+ "msg"; /* { dg-error "expected '\\)' before ';' token" } */
+ /* { dg-begin-multiline-output "" }
+ "msg";
+ ^
+ { dg-end-multiline-output "" } */
+ /* { dg-begin-multiline-output "" }
+ _Static_assert(sizeof(int) >= sizeof(char),
+ ^
+ { dg-end-multiline-output "" } */
+}
diff --git a/gcc/testsuite/c-c++-common/missing-symbol.c b/gcc/testsuite/c-c++-common/missing-symbol.c
new file mode 100644
index 00000000000..33a501b9988
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/missing-symbol.c
@@ -0,0 +1,50 @@
+/* { dg-options "-fdiagnostics-show-caret" } */
+
+extern int foo (void);
+extern int bar (void);
+
+int missing_close_paren_in_switch (int i)
+{
+ switch (i /* { dg-message "10: to match this '\\('" } */
+ { /* { dg-error "5: expected '\\)' before '.' token" } */
+ /* { dg-begin-multiline-output "" }
+ {
+ ^
+ { dg-end-multiline-output "" } */
+ /* { dg-begin-multiline-output "" }
+ switch (i
+ ^
+ { dg-end-multiline-output "" } */
+
+ case 0:
+ return 5;
+ default:
+ return i;
+ }
+} /* { dg-error "1: expected" } */
+ /* { dg-begin-multiline-output "" }
+ }
+ ^
+ { dg-end-multiline-output "" } */
+
+void missing_close_paren_in_if (void)
+{
+ if (foo () /* { dg-line start_of_if } */
+ && bar ()
+ { /* { dg-error "5: expected '\\)' before '.' token" } */
+ /* { dg-begin-multiline-output "" }
+ {
+ ^
+ { dg-end-multiline-output "" } */
+ /* { dg-message "6: to match this '\\('" "" { target *-*-* } start_of_if } */
+ /* { dg-begin-multiline-output "" }
+ if (foo ()
+ ^
+ { dg-end-multiline-output "" } */
+ }
+
+} /* { dg-error "1: expected" } */
+ /* { dg-begin-multiline-output "" }
+ }
+ ^
+ { dg-end-multiline-output "" } */
diff --git a/gcc/testsuite/c-c++-common/patchable_function_entry-decl.c b/gcc/testsuite/c-c++-common/patchable_function_entry-decl.c
new file mode 100644
index 00000000000..5c39a354559
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/patchable_function_entry-decl.c
@@ -0,0 +1,16 @@
+/* { dg-do compile { target { ! nvptx*-*-* } } } */
+/* { dg-options "-O2 -fpatchable-function-entry=3,1" } */
+/* { dg-final { scan-assembler-times "nop" 2 } } */
+
+extern int a;
+
+/* Respect overriding attributes in the declaration. */
+int f3 (void) __attribute__((patchable_function_entry(2)));
+
+/* F3 should now get 2 NOPs. */
+int
+__attribute__((noinline))
+f3 (void)
+{
+ return 5*a;
+}
diff --git a/gcc/testsuite/c-c++-common/patchable_function_entry-default.c b/gcc/testsuite/c-c++-common/patchable_function_entry-default.c
new file mode 100644
index 00000000000..48094f75f78
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/patchable_function_entry-default.c
@@ -0,0 +1,16 @@
+/* { dg-do compile { target { ! nvptx*-*-* } } } */
+/* { dg-options "-O2 -fpatchable-function-entry=3,1" } */
+/* { dg-final { scan-assembler-times "nop" 3 } } */
+
+extern int a;
+
+/* Nothing declared must not mean anything. */
+int f3 (void);
+
+/* F3 should get a default-sized NOP area. */
+int
+__attribute__((noinline))
+f3 (void)
+{
+ return 5*a;
+}
diff --git a/gcc/testsuite/c-c++-common/patchable_function_entry-definition.c b/gcc/testsuite/c-c++-common/patchable_function_entry-definition.c
new file mode 100644
index 00000000000..af8202f283b
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/patchable_function_entry-definition.c
@@ -0,0 +1,16 @@
+/* { dg-do compile { target { ! nvptx*-*-* } } } */
+/* { dg-options "-O2 -fpatchable-function-entry=3,1" } */
+/* { dg-final { scan-assembler-times "nop" 1 } } */
+
+extern int a;
+
+int f3 (void);
+
+/* F3 should now get 1 NOP. */
+int
+__attribute__((noinline))
+__attribute__((patchable_function_entry(1)))
+f3 (void)
+{
+ return 5*a;
+}
diff --git a/gcc/testsuite/c-c++-common/pr57371-1.c b/gcc/testsuite/c-c++-common/pr57371-1.c
new file mode 100644
index 00000000000..1bac8118406
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr57371-1.c
@@ -0,0 +1,341 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-original" } */
+
+#include <limits.h>
+
+/* Original testcase from PR. */
+
+int foo1 (short x) {
+ return (double) x != 0;
+ /* { dg-final { scan-tree-dump "return (<retval> = )?x != 0" "original" } } */
+}
+
+int foo2 (short x) {
+ return (float) x != 0;
+ /* { dg-final { scan-tree-dump "return (<retval> = )?x != 0" "original" } } */
+}
+
+int foo3 (int x) {
+ return (double) x != 0;
+ /* { dg-final { scan-tree-dump "return (<retval> = )?x != 0" "original" } } */
+}
+
+/* Tests when RHS is within range of integer type. */
+
+void in_range (unsigned short x)
+{
+ {
+ volatile int in_range_1;
+ in_range_1 = (float) x > 100.0f;
+ /* { dg-final { scan-tree-dump "in_range_1 = x > 100" "original" } } */
+ }
+
+ {
+ volatile int in_range_2;
+ in_range_2 = (float) x < 100.0f;
+ /* { dg-final { scan-tree-dump "in_range_2 = x <= 99" "original" } } */
+ }
+
+ {
+ volatile int in_range_3;
+ in_range_3 = (float) x > 100.5f;
+ /* { dg-final { scan-tree-dump "in_range_3 = x (>= 101|> 100)" "original" } } */
+ }
+
+ {
+ volatile int in_range_4;
+ in_range_4 = (float) x < 100.5f;
+ /* { dg-final { scan-tree-dump "in_range_4 = x <= 100" "original" } } */
+ }
+
+ {
+ volatile int in_range_5;
+ in_range_5 = (float) x == 100.0f;
+ /* { dg-final { scan-tree-dump "in_range_5 = x == 100" "original" } } */
+ }
+
+ {
+ volatile int in_range_6;
+ in_range_6 = (float) x != 100.0f;
+ /* { dg-final { scan-tree-dump "in_range_6 = x != 100" "original" } } */
+ }
+
+ {
+ volatile int in_range_7;
+ in_range_7 = (float) x == 100.5f;
+ /* { dg-final { scan-tree-dump "in_range_7 = 0" "original" } } */
+ }
+
+ {
+ volatile int in_range_8;
+ in_range_8 = (float) x != 100.5f;
+ /* { dg-final { scan-tree-dump "in_range_8 = 1" "original" } } */
+ }
+}
+
+/* Tests for cases where RHS is out of range of integer type. */
+
+void out_range (unsigned short x)
+{
+ {
+ volatile int out_range_1;
+ out_range_1 = (float) x > -100.5f;
+ /* { dg-final { scan-tree-dump "out_range_1 = 1" "original" } } */
+ }
+
+ {
+ volatile int out_range_2;
+ out_range_2 = (float) x >= -100.5f;
+ /* { dg-final { scan-tree-dump "out_range_2 = 1" "original" } } */
+ }
+
+ {
+ volatile int out_range_3;
+ out_range_3 = (float) x < -100.5f;
+ /* { dg-final { scan-tree-dump "out_range_3 = 0" "original" } } */
+ }
+
+ {
+ volatile int out_range_4;
+ out_range_4 = (float) x <= -100.5f;
+ /* { dg-final { scan-tree-dump "out_range_4 = 0" "original" } } */
+ }
+
+ {
+ volatile int out_range_5;
+ out_range_5 = (float) x == -100.5f;
+ /* { dg-final { scan-tree-dump "out_range_5 = 0" "original" } } */
+ }
+
+ {
+ volatile int out_range_6;
+ out_range_6 = (float) x != -100.5f;
+ /* { dg-final { scan-tree-dump "out_range_6 = 1" "original" } } */
+ }
+}
+
+/* Tests when RHS is at boundary of integer type. */
+
+void lo_bounds (unsigned short x)
+{
+ {
+ volatile int lo_bounds_1;
+ lo_bounds_1 = (float) x > 0x0;
+ /* { dg-final { scan-tree-dump "lo_bounds_1 = x (>|!=) 0" "original" } } */
+ }
+
+ {
+ volatile int lo_bounds_2;
+ lo_bounds_2 = (float) x >= 0x0;
+ /* { dg-final { scan-tree-dump "lo_bounds_2 = 1" "original" } } */
+ }
+
+ {
+ volatile int lo_bounds_3;
+ lo_bounds_3 = (float) x < 0x0;
+ /* { dg-final { scan-tree-dump "lo_bounds_3 = 0" "original" } } */
+ }
+
+ {
+ volatile int lo_bounds_4;
+ lo_bounds_4 = (float) x <= 0x0;
+ /* { dg-final { scan-tree-dump "lo_bounds_4 = x (<=|==) 0" "original" } } */
+ }
+
+ {
+ volatile int lo_bounds_5;
+ lo_bounds_5 = (float) x > 0x0 - 0.5f;
+ /* { dg-final { scan-tree-dump "lo_bounds_5 = 1" "original" } } */
+ }
+
+ {
+ volatile int lo_bounds_6;
+ lo_bounds_6 = (float) x >= 0x0 - 0.5f;
+ /* { dg-final { scan-tree-dump "lo_bounds_6 = 1" "original" } } */
+ }
+
+ {
+ volatile int lo_bounds_7;
+ lo_bounds_7 = (float) x < 0x0 - 0.5f;
+ /* { dg-final { scan-tree-dump "lo_bounds_7 = 0" "original" } } */
+ }
+
+ {
+ volatile int lo_bounds_8;
+ lo_bounds_8 = (float) x <= 0x0 - 0.5f;
+ /* { dg-final { scan-tree-dump "lo_bounds_8 = 0" "original" } } */
+ }
+
+ {
+ volatile int lo_bounds_9;
+ lo_bounds_9 = (float) x > 0x0 + 0.5f;
+ /* { dg-final { scan-tree-dump "lo_bounds_9 = x (>= 1|!= 0)" "original" } } */
+ }
+
+ {
+ volatile int lo_bounds_10;
+ lo_bounds_10 = (float) x >= 0x0 + 0.5f;
+ /* { dg-final { scan-tree-dump "lo_bounds_10 = x (>= 1|!= 0)" "original" } } */
+ }
+
+ {
+ volatile int lo_bounds_11;
+ lo_bounds_11 = (float) x < 0x0 + 0.5f;
+ /* { dg-final { scan-tree-dump "lo_bounds_11 = x (<=|==) 0" "original" } } */
+ }
+
+ {
+ volatile int lo_bounds_12;
+ lo_bounds_12 = (float) x <= 0x0 + 0.5f;
+ /* { dg-final { scan-tree-dump "lo_bounds_12 = x (<=|==) 0" "original" } } */
+ }
+}
+
+void hi_bounds (unsigned short x)
+{
+ {
+ volatile int hi_bounds_1;
+ hi_bounds_1 = (float) x > USHRT_MAX;
+ /* { dg-final { scan-tree-dump "hi_bounds_1 = 0" "original" } } */
+ }
+
+ {
+ volatile int hi_bounds_2;
+ hi_bounds_2 = (float) x >= USHRT_MAX;
+ /* { dg-final { scan-tree-dump "hi_bounds_2 = x (>=|==) 65535" "original" } } */
+ }
+
+ {
+ volatile int hi_bounds_3;
+ hi_bounds_3 = (float) x < USHRT_MAX;
+ /* { dg-final { scan-tree-dump "hi_bounds_3 = x (<|!=) 65535" "original" } } */
+ }
+
+ {
+ volatile int hi_bounds_4;
+ hi_bounds_4 = (float) x <= USHRT_MAX;
+ /* { dg-final { scan-tree-dump "hi_bounds_4 = 1" "original" } } */
+ }
+
+ {
+ volatile int hi_bounds_5;
+ hi_bounds_5 = (float) x > USHRT_MAX - 0.5f;
+ /* { dg-final { scan-tree-dump "hi_bounds_5 = x (>=|==) 65535" "original" } } */
+ }
+
+ {
+ volatile int hi_bounds_6;
+ hi_bounds_6 = (float) x >= USHRT_MAX - 0.5f;
+ /* { dg-final { scan-tree-dump "hi_bounds_6 = x (>=|==) 65535" "original" } } */
+ }
+
+ {
+ volatile int hi_bounds_7;
+ hi_bounds_7 = (float) x < USHRT_MAX - 0.5f;
+ /* { dg-final { scan-tree-dump "hi_bounds_7 = x (<= 65534|!= 65535)" "original" } } */
+ }
+
+ {
+ volatile int hi_bounds_8;
+ hi_bounds_8 = (float) x <= USHRT_MAX - 0.5f;
+ /* { dg-final { scan-tree-dump "hi_bounds_8 = x (<= 65534|!= 65535)" "original" } } */
+ }
+
+ {
+ volatile int hi_bounds_9;
+ hi_bounds_9 = (float) x > USHRT_MAX + 0.5f;
+ /* { dg-final { scan-tree-dump "hi_bounds_9 = 0" "original" } } */
+ }
+
+ {
+ volatile int hi_bounds_10;
+ hi_bounds_10 = (float) x >= USHRT_MAX + 0.5f;
+ /* { dg-final { scan-tree-dump "hi_bounds_10 = 0" "original" } } */
+ }
+
+ {
+ volatile int hi_bounds_11;
+ hi_bounds_11 = (float) x < USHRT_MAX + 0.5f;
+ /* { dg-final { scan-tree-dump "hi_bounds_11 = 1" "original" } } */
+ }
+
+ {
+ volatile int hi_bounds_12;
+ hi_bounds_12 = (float) x <= USHRT_MAX + 0.5f;
+ /* { dg-final { scan-tree-dump "hi_bounds_12 = 1" "original" } } */
+ }
+}
+
+/* Tests with non-finite float consts. */
+
+void nonfinite (unsigned short x)
+{
+#define INFINITY __builtin_inff ()
+
+ {
+ volatile int nonfinite_1;
+ nonfinite_1 = (float) x > INFINITY;
+ /* { dg-final { scan-tree-dump "nonfinite_1 = 0" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_2;
+ nonfinite_2 = (float) x >= INFINITY;
+ /* { dg-final { scan-tree-dump "nonfinite_2 = 0" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_3;
+ nonfinite_3 = (float) x < INFINITY;
+ /* { dg-final { scan-tree-dump "nonfinite_3 = 1" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_4;
+ nonfinite_4 = (float) x <= INFINITY;
+ /* { dg-final { scan-tree-dump "nonfinite_4 = 1" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_5;
+ nonfinite_5 = (float) x > -INFINITY;
+ /* { dg-final { scan-tree-dump "nonfinite_5 = 1" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_6;
+ nonfinite_6 = (float) x >= -INFINITY;
+ /* { dg-final { scan-tree-dump "nonfinite_6 = 1" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_7;
+ nonfinite_7 = (float) x < -INFINITY;
+ /* { dg-final { scan-tree-dump "nonfinite_7 = 0" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_8;
+ nonfinite_8 = (float) x <= -INFINITY;
+ /* { dg-final { scan-tree-dump "nonfinite_8 = 0" "original" } } */
+ }
+
+#define QNAN __builtin_nanf ("0")
+
+ /* Even for qNaNs, only == and != are quiet. */
+
+ {
+ volatile int nonfinite_9;
+ nonfinite_9 = (float) x == QNAN;
+ /* { dg-final { scan-tree-dump "nonfinite_9 = 0" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_10;
+ nonfinite_10 = (float) x != QNAN;
+ /* { dg-final { scan-tree-dump "nonfinite_10 = 1" "original" } } */
+ }
+}
+
+/* { dg-final { scan-tree-dump-not "\\(float\\)" "original" } } */
+/* { dg-final { scan-tree-dump-not "\\(double\\)" "original" } } */
diff --git a/gcc/testsuite/c-c++-common/pr57371-2.c b/gcc/testsuite/c-c++-common/pr57371-2.c
new file mode 100644
index 00000000000..d07cff318c2
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr57371-2.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-optimized" } */
+
+/* We can not get rid of comparison in tests below because of
+ potential inexact exception.
+
+ TODO: enable when -fno-trapping-math. */
+
+int foo1(int x) {
+ return (float) x != 0;
+ /* { dg-final { scan-tree-dump "\\(float\\)" "optimized" } } */
+}
+
+int foo2(long long x) {
+ /* { dg-final { scan-tree-dump "\\(double\\)" "optimized" } } */
+ return (double) x != 0;
+}
diff --git a/gcc/testsuite/c-c++-common/pr57371-3.c b/gcc/testsuite/c-c++-common/pr57371-3.c
new file mode 100644
index 00000000000..973baacbb18
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr57371-3.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-optimized" } */
+/* { dg-require-effective-target int128 } */
+
+/* We can not get rid of comparison in tests below because of
+ potential overflow exception.
+
+ TODO: enable when -fno-trapping-math. */
+
+int foo(__int128_t x) {
+ /* { dg-final { scan-tree-dump "\\(float\\)" "optimized" } } */
+ return (float) x != 0;
+}
diff --git a/gcc/testsuite/c-c++-common/pr57371-4.c b/gcc/testsuite/c-c++-common/pr57371-4.c
new file mode 100644
index 00000000000..6265f520f93
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr57371-4.c
@@ -0,0 +1,72 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fsignaling-nans -fdump-tree-original" } */
+
+/* We can not get rid of comparison in tests below because of
+ pending NaN exceptions.
+
+ TODO: avoid under -fno-trapping-math. */
+
+#define QNAN __builtin_nanf ("0")
+#define SNAN __builtin_nansf ("0")
+
+void nonfinite(unsigned short x) {
+ {
+ volatile int nonfinite_1;
+ nonfinite_1 = (float) x > QNAN;
+ /* { dg-final { scan-tree-dump "nonfinite_1 = \\(float\\)" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_2;
+ nonfinite_2 = (float) x >= QNAN;
+ /* { dg-final { scan-tree-dump "nonfinite_2 = \\(float\\)" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_3;
+ nonfinite_3 = (float) x < QNAN;
+ /* { dg-final { scan-tree-dump "nonfinite_3 = \\(float\\)" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_4;
+ nonfinite_4 = (float) x <= QNAN;
+ /* { dg-final { scan-tree-dump "nonfinite_4 = \\(float\\)" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_5;
+ nonfinite_5 = (float) x > SNAN;
+ /* { dg-final { scan-tree-dump "nonfinite_5 = \\(float\\)" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_6;
+ nonfinite_6 = (float) x >= SNAN;
+ /* { dg-final { scan-tree-dump "nonfinite_6 = \\(float\\)" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_7;
+ nonfinite_7 = (float) x < SNAN;
+ /* { dg-final { scan-tree-dump "nonfinite_7 = \\(float\\)" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_8;
+ nonfinite_8 = (float) x <= SNAN;
+ /* { dg-final { scan-tree-dump "nonfinite_8 = \\(float\\)" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_9;
+ nonfinite_9 = (float) x == SNAN;
+ /* { dg-final { scan-tree-dump "nonfinite_9 = \\(float\\)" "original" } } */
+ }
+
+ {
+ volatile int nonfinite_10;
+ nonfinite_10 = (float) x != SNAN;
+ /* { dg-final { scan-tree-dump "nonfinite_10 = \\(float\\)" "original" } } */
+ }
+}
diff --git a/gcc/testsuite/c-c++-common/pr81052.c b/gcc/testsuite/c-c++-common/pr81052.c
new file mode 100644
index 00000000000..6bc2879951e
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr81052.c
@@ -0,0 +1,28 @@
+/* PR middle-end/81052 */
+/* { dg-do compile } */
+/* { dg-options "-fopenmp-simd -O2" } */
+
+int
+foo (int x, int y)
+{
+ int i;
+#pragma omp simd
+ for (i = x; i < y; ++i)
+ return 0; /* { dg-error "invalid branch to/from OpenMP structured block" } */
+ return 1;
+}
+
+#ifdef __cplusplus
+template <typename T>
+T
+bar (T x, T y)
+{
+ T i;
+#pragma omp simd
+ for (i = x; i < y; ++i)
+ return 0; /* { dg-error "invalid branch to/from OpenMP structured block" "" { target c++ } } */
+ return 1;
+}
+
+int x = bar (1, 7);
+#endif
diff --git a/gcc/testsuite/c-c++-common/ubsan/pr81148.c b/gcc/testsuite/c-c++-common/ubsan/pr81148.c
new file mode 100644
index 00000000000..f2d46c8dc56
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/ubsan/pr81148.c
@@ -0,0 +1,9 @@
+/* { dg-do run } */
+/* { dg-options "-fsanitize=undefined -fsanitize-undefined-trap-on-error" } */
+
+int x = -106;
+int main()
+{
+ // -123 - (0x8000000000000000 - -1)
+ return (-123 - ((9223372036854775806LL ^ ~(x && 1)) - -1)) == 0;
+}
diff --git a/gcc/testsuite/c-c++-common/ubsan/pr81604.c b/gcc/testsuite/c-c++-common/ubsan/pr81604.c
new file mode 100644
index 00000000000..a06de76b023
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/ubsan/pr81604.c
@@ -0,0 +1,31 @@
+/* PR sanitizer/81604 */
+/* { dg-do run } */
+/* { dg-options "-fsanitize=bounds,signed-integer-overflow" } */
+
+long a[10];
+
+__attribute__((noinline, noclone)) long *
+foo (int i)
+{
+ return &a[i];
+}
+
+__attribute__((noinline, noclone)) long
+bar (long x, long y)
+{
+ return x * y;
+}
+
+int
+main ()
+{
+ volatile int i = -1;
+ volatile long l = __LONG_MAX__;
+ long *volatile p;
+ p = foo (i);
+ l = bar (l, l);
+ return 0;
+}
+
+/* { dg-output "index -1 out of bounds for type 'long int \\\[10\\\]'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*signed integer overflow: \[0-9]+ \\* \[0-9]+ cannot be represented in type 'long int'" } */
diff --git a/gcc/testsuite/c-c++-common/ubsan/pr81705.c b/gcc/testsuite/c-c++-common/ubsan/pr81705.c
new file mode 100644
index 00000000000..081c741c206
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/ubsan/pr81705.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-fsanitize=undefined -fsanitize-undefined-trap-on-error" } */
+
+int var_4 = -1716607962;
+int var_14 = 943738830;
+volatile int a;
+int main()
+{
+ // (-(-1716607962) - 516151698) - -(9403738830)
+ a = (-var_4 - 516151698) - -var_14;
+ return 0;
+}
diff --git a/gcc/testsuite/c-c++-common/ubsan/ptr-overflow-1.c b/gcc/testsuite/c-c++-common/ubsan/ptr-overflow-1.c
new file mode 100644
index 00000000000..8edfbce0327
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/ubsan/ptr-overflow-1.c
@@ -0,0 +1,65 @@
+/* PR sanitizer/80998 */
+/* { dg-do run } */
+/* { dg-options "-fsanitize=pointer-overflow -fno-sanitize-recover=pointer-overflow -Wall" } */
+
+struct S { int a; int b; int c[64]; };
+__attribute__((noinline, noclone)) char *f1 (char *p) { return p + 1; }
+__attribute__((noinline, noclone)) char *f2 (char *p) { return p - 1; }
+__attribute__((noinline, noclone)) char *f3 (char *p, int i) { return p + i; }
+__attribute__((noinline, noclone)) char *f4 (char *p, int i) { return p - i; }
+__attribute__((noinline, noclone)) char *f5 (char *p, unsigned long int i) { return p + i; }
+__attribute__((noinline, noclone)) char *f6 (char *p, unsigned long int i) { return p - i; }
+__attribute__((noinline, noclone)) int *f7 (struct S *p) { return &p->a; }
+__attribute__((noinline, noclone)) int *f8 (struct S *p) { return &p->b; }
+__attribute__((noinline, noclone)) int *f9 (struct S *p) { return &p->c[64]; }
+__attribute__((noinline, noclone)) int *f10 (struct S *p, int i) { return &p->c[i]; }
+
+char *volatile p;
+struct S *volatile q;
+char a[64];
+struct S s;
+int *volatile r;
+
+int
+main ()
+{
+ struct S t;
+ p = &a[32];
+ p = f1 (p);
+ p = f1 (p);
+ p = f2 (p);
+ p = f3 (p, 1);
+ p = f3 (p, -1);
+ p = f3 (p, 3);
+ p = f3 (p, -6);
+ p = f4 (p, 1);
+ p = f4 (p, -1);
+ p = f4 (p, 3);
+ p = f4 (p, -6);
+ p = f5 (p, 1);
+ p = f5 (p, 3);
+ p = f6 (p, 1);
+ p = f6 (p, 3);
+ if (sizeof (unsigned long) >= sizeof (char *))
+ {
+ p = f5 (p, -1);
+ p = f5 (p, -6);
+ p = f6 (p, -1);
+ p = f6 (p, -6);
+ }
+ q = &s;
+ r = f7 (q);
+ r = f8 (q);
+ r = f9 (q);
+ r = f10 (q, 0);
+ r = f10 (q, 10);
+ r = f10 (q, 64);
+ q = &t;
+ r = f7 (q);
+ r = f8 (q);
+ r = f9 (q);
+ r = f10 (q, 0);
+ r = f10 (q, 10);
+ r = f10 (q, 64);
+ return 0;
+}
diff --git a/gcc/testsuite/c-c++-common/ubsan/ptr-overflow-2.c b/gcc/testsuite/c-c++-common/ubsan/ptr-overflow-2.c
new file mode 100644
index 00000000000..a1110a2ddbc
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/ubsan/ptr-overflow-2.c
@@ -0,0 +1,113 @@
+/* PR sanitizer/80998 */
+/* { dg-do run } */
+/* { dg-options "-fsanitize=pointer-overflow -fsanitize-recover=pointer-overflow -fno-ipa-icf -Wall" } */
+
+__attribute__((noinline, noclone)) char * f1 (char *p) { return p + 1; }
+__attribute__((noinline, noclone)) char * f2 (char *p) { return p - 1; }
+__attribute__((noinline, noclone)) char * f3 (char *p, int i) { return p + i; }
+__attribute__((noinline, noclone)) char * f4 (char *p, int i) { return p + i; }
+__attribute__((noinline, noclone)) char * f5 (char *p, int i) { return p - i; }
+__attribute__((noinline, noclone)) char * f6 (char *p, int i) { return p - i; }
+__attribute__((noinline, noclone)) char * f7 (char *p, unsigned long int i) { return p + i; }
+__attribute__((noinline, noclone)) char * f8 (char *p, unsigned long int i) { return p + i; }
+__attribute__((noinline, noclone)) char * f9 (char *p, unsigned long int i) { return p - i; }
+__attribute__((noinline, noclone)) char * f10 (char *p, unsigned long int i) { return p - i; }
+struct S { int a; int b; int c[64]; };
+__attribute__((noinline, noclone)) int *f11 (struct S *p) { return &p->a; }
+__attribute__((noinline, noclone)) int *f12 (struct S *p) { return &p->b; }
+__attribute__((noinline, noclone)) int *f13 (struct S *p) { return &p->c[64]; }
+__attribute__((noinline, noclone)) int *f14 (struct S *p, int i) { return &p->c[i]; }
+__attribute__((noinline, noclone)) int *f15 (struct S *p, int i) { return &p->c[i]; }
+__attribute__((noinline, noclone)) int *f16 (struct S *p) { return &p->a; }
+__attribute__((noinline, noclone)) int *f17 (struct S *p) { return &p->b; }
+__attribute__((noinline, noclone)) int *f18 (struct S *p) { return &p->c[64]; }
+__attribute__((noinline, noclone)) int *f19 (struct S *p, int i) { return &p->c[i]; }
+__attribute__((noinline, noclone)) int *f20 (struct S *p, int i) { return &p->c[i]; }
+__attribute__((noinline, noclone)) int *f21 (struct S *p) { return &p->a; }
+__attribute__((noinline, noclone)) int *f22 (struct S *p) { return &p->b; }
+__attribute__((noinline, noclone)) int *f23 (struct S *p) { return &p->c[64]; }
+__attribute__((noinline, noclone)) int *f24 (struct S *p, int i) { return &p->c[i]; }
+__attribute__((noinline, noclone)) int *f25 (struct S *p, int i) { return &p->c[i]; }
+
+char *volatile p;
+__UINTPTR_TYPE__ volatile u;
+struct S *volatile q;
+int *volatile r;
+
+int
+main ()
+{
+ u = ~(__UINTPTR_TYPE__) 0;
+ p = (char *) u;
+ p = f1 (p);
+ u = 0;
+ p = (char *) u;
+ p = f2 (p);
+ u = -(__UINTPTR_TYPE__) 7;
+ p = (char *) u;
+ p = f3 (p, 7);
+ u = 3;
+ p = (char *) u;
+ p = f4 (p, -4);
+ u = 23;
+ p = (char *) u;
+ p = f5 (p, 27);
+ u = -(__UINTPTR_TYPE__) 15;
+ p = (char *) u;
+ p = f6 (p, -15);
+ u = -(__UINTPTR_TYPE__) 29;
+ p = (char *) u;
+ p = f7 (p, 31);
+ u = 23;
+ p = (char *) u;
+ p = f9 (p, 24);
+ if (sizeof (unsigned long) < sizeof (char *))
+ return 0;
+ u = 7;
+ p = (char *) u;
+ p = f8 (p, -8);
+ u = -(__UINTPTR_TYPE__) 25;
+ p = (char *) u;
+ p = f10 (p, -25);
+ u = ~(__UINTPTR_TYPE__) 0;
+ q = (struct S *) u;
+ r = f11 (q);
+ r = f12 (q);
+ r = f13 (q);
+ r = f14 (q, 0);
+ r = f15 (q, 63);
+ u = ~(__UINTPTR_TYPE__) 0 - (17 * sizeof (int));
+ q = (struct S *) u;
+ r = f16 (q);
+ r = f17 (q);
+ r = f18 (q);
+ r = f19 (q, 0);
+ r = f20 (q, 63);
+ u = 3 * sizeof (int);
+ q = (struct S *) u;
+ r = f21 (q);
+ r = f22 (q);
+ r = f23 (q);
+ r = f24 (q, -2);
+ r = f25 (q, -6);
+ return 0;
+}
+
+/* { dg-output ":5:6\[79]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+ overflowed to (0\[xX])?0\+(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*:6:6\[79]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?0\+ overflowed to (0\[xX])?\[fF]\+(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*:7:7\[46]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+9 overflowed to (0\[xX])?0\+(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*:8:7\[46]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?0\+3 overflowed to (0\[xX])?\[fF]\+(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*:9:7\[46]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?0\+17 overflowed to (0\[xX])?\[fF]\+\[cC](\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*:10:7\[46]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+1 overflowed to (0\[xX])?0\+(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*:11:\[89]\[80]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+\[eE]3 overflowed to (0\[xX])?0\+2(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*:13:\[89]\[80]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?0\+17 overflowed to (0\[xX])?\[fF]\+(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*:12:\[89]\[80]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?0\+7 overflowed to (0\[xX])?\[fF]\+(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*:14:\[89]\[91]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+\[eE]7 overflowed to (0\[xX])?0\+" } */
+/* { dg-output "(\n|\r\n|\r)" { target int32 } } */
+/* { dg-output "\[^\n\r]*:17:\[67]\[82]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+ overflowed to (0\[xX])?0\+3(\n|\r\n|\r)" { target int32 } } */
+/* { dg-output "\[^\n\r]*:18:\[67]\[86]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+ overflowed to (0\[xX])?0\+107(\n|\r\n|\r)" { target int32 } } */
+/* { dg-output "\[^\n\r]*:19:\[78]\[52]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+ overflowed to (0\[xX])?0\+7(\n|\r\n|\r)" { target int32 } } */
+/* { dg-output "\[^\n\r]*:20:\[78]\[52]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+ overflowed to (0\[xX])?0\+103(\n|\r\n|\r)" { target int32 } } */
+/* { dg-output "\[^\n\r]*:23:\[67]\[86]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+\[bB]\[bB] overflowed to (0\[xX])?0\+\[cC]3(\n|\r\n|\r)" { target int32 } } */
+/* { dg-output "\[^\n\r]*:25:\[78]\[52]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+\[bB]\[bB] overflowed to (0\[xX])?0\+\[bB]\[fF](\n|\r\n|\r)" { target int32 } } */
+/* { dg-output "\[^\n\r]*:30:\[78]\[52]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?0\+\[cC] overflowed to (0\[xX])?\[fF]\+\[cC]" { target int32 } } */
diff --git a/gcc/testsuite/g++.dg/asan/asan.exp b/gcc/testsuite/g++.dg/asan/asan.exp
index 124c44e9e9a..620071ba7dc 100644
--- a/gcc/testsuite/g++.dg/asan/asan.exp
+++ b/gcc/testsuite/g++.dg/asan/asan.exp
@@ -26,7 +26,7 @@ asan_init
# Main loop.
if [check_effective_target_fsanitize_address] {
- gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C $srcdir/c-c++-common/asan/*.c]] "" ""
+ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C $srcdir/$subdir/*.cc $srcdir/c-c++-common/asan/*.c]] "" ""
}
# All done.
diff --git a/gcc/testsuite/g++.dg/asan/pr81340.C b/gcc/testsuite/g++.dg/asan/pr81340.C
new file mode 100644
index 00000000000..76ac08a9a56
--- /dev/null
+++ b/gcc/testsuite/g++.dg/asan/pr81340.C
@@ -0,0 +1,22 @@
+// { dg-options "-fsanitize=address -O2 -g -Wno-write-strings" }
+
+class a {
+ struct b {
+ b(int, int);
+ } c;
+
+public:
+ int d;
+ a(char *) : c(0, d) {}
+};
+class e {
+ int f(const int &, const int &, const int &, bool, bool, bool, int, bool);
+};
+class g {
+public:
+ static g *h();
+ void i(a, void *);
+};
+int e::f(const int &, const int &, const int &, bool j, bool, bool, int, bool) {
+ g::h()->i("", &j);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/inh-ctor29.C b/gcc/testsuite/g++.dg/cpp0x/inh-ctor29.C
new file mode 100644
index 00000000000..8e31f739d74
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/inh-ctor29.C
@@ -0,0 +1,23 @@
+// PR c++/67054
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A(int) {}
+};
+
+struct C
+{
+ C(int) {}
+};
+
+struct B : A
+{
+ using A::A;
+ C c = 42;
+};
+
+int main()
+{
+ B b = 24;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice17.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice17.C
new file mode 100644
index 00000000000..57111fdef6a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice17.C
@@ -0,0 +1,12 @@
+// PR c++/71570
+// { dg-do compile { target c++11 } }
+
+void foo (int);
+
+void foo (void)
+{
+ [&foo] // { dg-error "cannot capture" }
+ {
+ foo (0);
+ };
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/move-return1.C b/gcc/testsuite/g++.dg/cpp0x/move-return1.C
new file mode 100644
index 00000000000..dc2b313fee6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/move-return1.C
@@ -0,0 +1,22 @@
+// PR c++/80452
+// { dg-do compile { target c++11 } }
+
+template<typename> struct check { };
+template<typename T> struct check<T&>;
+
+struct A {
+ A() = default;
+ A(A&&) = default;
+ A(const A&) = delete;
+};
+
+template <class T>
+struct B {
+ template <class U> B(U&&) { check<U> u; }
+};
+
+B<A> f()
+{
+ A a;
+ return a;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C
index 0f06343958b..056d16dca4a 100644
--- a/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C
@@ -2,7 +2,7 @@
struct A
{
- int i = (A(), 42); // { dg-error "constructor required" }
+ int i = (A(), 42); // { dg-error "" }
};
A a;
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C
index 1a00ec0d6a9..a885a241279 100644
--- a/gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C
@@ -3,14 +3,14 @@
template<int> struct A
{
- int i = (A<0>(), 0); // { dg-error "recursive instantiation of non-static data" }
+ int i = (A<0>(), 0); // { dg-error "recursive instantiation of default" }
};
A<0> a;
template<int N> struct B
{
- B* p = new B<N>; // { dg-error "recursive instantiation of non-static data" }
+ B* p = new B<N>; // { dg-error "recursive instantiation of default" }
};
B<1> x;
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi10.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi10.C
index 56f9ff08bdf..d8588b7f29e 100644
--- a/gcc/testsuite/g++.dg/cpp0x/nsdmi10.C
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi10.C
@@ -6,7 +6,7 @@ struct A1 {
int y1 = 1;
};
- A1(const B1& opts = B1()) {} // { dg-error "constructor" }
+ A1(const B1& opts = B1()) {} // { dg-error "default member initializer" }
};
struct A2 {
@@ -14,5 +14,5 @@ struct A2 {
int x2, y2 = 1;
};
- A2(const B2& opts = B2()) {} // { dg-error "constructor" }
+ A2(const B2& opts = B2()) {} // { dg-error "default member initializer" }
};
diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr39.C b/gcc/testsuite/g++.dg/cpp0x/nullptr39.C
new file mode 100644
index 00000000000..a34a6af73e9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nullptr39.C
@@ -0,0 +1,15 @@
+// PR c++/81671
+// { dg-do compile { target c++11 } }
+
+namespace std { typedef decltype(nullptr) nullptr_t; }
+
+template<class R, class CB> struct Bar
+{};
+template<class R> struct Bar<R, std::nullptr_t>
+{
+ template<std::nullptr_t> struct Bind { constexpr static int const cb = 0; };
+};
+int foo()
+{
+ return Bar<int, decltype(nullptr)>::Bind<nullptr>::cb;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr65558.C b/gcc/testsuite/g++.dg/cpp0x/pr65558.C
index d294c95a657..12946b35eda 100644
--- a/gcc/testsuite/g++.dg/cpp0x/pr65558.C
+++ b/gcc/testsuite/g++.dg/cpp0x/pr65558.C
@@ -2,6 +2,6 @@
// { dg-do compile { target c++11 } }
inline namespace
-__attribute__((__abi_tag__)) // { dg-warning "ignoring .__abi_tag__. attribute on anonymous namespace" }
+__attribute__((__abi_tag__)) // { dg-warning "ignoring .abi_tag. attribute on anonymous namespace" }
{
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae59.C b/gcc/testsuite/g++.dg/cpp0x/sfinae59.C
new file mode 100644
index 00000000000..d1c730b6d23
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae59.C
@@ -0,0 +1,19 @@
+// PR c++/81359
+// { dg-do compile { target c++11 } }
+
+template<typename _Tp, typename = decltype(_Tp())>
+static int test(int);
+
+template<typename>
+static void test(...);
+
+template <class T, class = decltype(test<T>(0))>
+struct A { };
+
+struct B
+{
+ struct C {
+ int i = 0;
+ };
+ A<C> a;
+};
diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-const4.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-const4.C
new file mode 100644
index 00000000000..52f4373ccbd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-const4.C
@@ -0,0 +1,20 @@
+// PR c++/81525
+// { dg-do compile { target c++14 } }
+
+template <int i> struct A {
+ constexpr operator int () const { return i; }
+};
+template <int i> constexpr A<i> a = {};
+
+template <typename F> void foo (F f) {
+ f (A<0>{});
+}
+template <typename T>
+void bar (T) {
+ constexpr auto N = a<1>;
+ auto f = [&] (auto i) {
+ static_assert (static_cast<int>(N) == 1, "");
+ };
+ foo (f);
+}
+int main () { bar (0); }
diff --git a/gcc/testsuite/g++.dg/cpp1z/class-deduction42.C b/gcc/testsuite/g++.dg/cpp1z/class-deduction42.C
new file mode 100644
index 00000000000..8217fd4d79a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/class-deduction42.C
@@ -0,0 +1,19 @@
+// { dg-options -std=c++1z }
+
+#include <initializer_list>
+
+template <class,class> struct same;
+template <class T> struct same<T,T> { };
+
+template <class T>
+struct A
+{
+ A(const A&);
+ A(std::initializer_list<T>);
+};
+
+A a { 1 };
+A b { a };
+
+same<decltype (a), decltype (b)> s;
+
diff --git a/gcc/testsuite/g++.dg/cpp1z/class-deduction43.C b/gcc/testsuite/g++.dg/cpp1z/class-deduction43.C
new file mode 100644
index 00000000000..a906a0f3626
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/class-deduction43.C
@@ -0,0 +1,10 @@
+// PR c++/79790
+// { dg-options -std=c++1z }
+
+template <int N>
+struct array
+{
+ int a [N];
+};
+
+array a = { 1, 2, 3 }; // { dg-error "cannot deduce" }
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/inline-ns-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/inline-ns-1.C
new file mode 100644
index 00000000000..cae380a21eb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/inline-ns-1.C
@@ -0,0 +1,23 @@
+// { dg-options "-O2 -gdwarf-4 -dA -gno-strict-dwarf" }
+// { dg-final { scan-assembler-times " DW_AT_export_symbols" 1 } }
+// { dg-final { scan-assembler-times "DIE \\(\[^\n\r\]*\\) DW_TAG_imported_module" 2 } }
+
+namespace A
+{
+ int i = 5;
+ inline namespace B
+ {
+ int j = 6;
+ namespace C
+ {
+ int k = 7;
+ };
+ };
+};
+int l = A::i + A::j + A::C::k;
+int m = A::i + A::B::j + A::B::C::k;
+namespace
+{
+ int n = 8;
+};
+int o = n;
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/inline-ns-2.C b/gcc/testsuite/g++.dg/debug/dwarf2/inline-ns-2.C
new file mode 100644
index 00000000000..4d9aed7e219
--- /dev/null
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/inline-ns-2.C
@@ -0,0 +1,23 @@
+// { dg-options "-O2 -gdwarf-5 -dA" }
+// { dg-final { scan-assembler-times " DW_AT_export_symbols" 2 } }
+// { dg-final { scan-assembler-not "DIE \\(\[^\n\r\]*\\) DW_TAG_imported_module" } }
+
+namespace A
+{
+ int i = 5;
+ inline namespace B
+ {
+ int j = 6;
+ namespace C
+ {
+ int k = 7;
+ };
+ };
+};
+int l = A::i + A::j + A::C::k;
+int m = A::i + A::B::j + A::B::C::k;
+namespace
+{
+ int n = 8;
+};
+int o = n;
diff --git a/gcc/testsuite/g++.dg/diagnostic/unclosed-extern-c.C b/gcc/testsuite/g++.dg/diagnostic/unclosed-extern-c.C
new file mode 100644
index 00000000000..fda3532266d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/diagnostic/unclosed-extern-c.C
@@ -0,0 +1,3 @@
+extern "C" { /* { dg-message "12: to match this '.'" } */
+
+void test (void); /* { dg-error "17: expected '.' at end of input" } */
diff --git a/gcc/testsuite/g++.dg/diagnostic/unclosed-function.C b/gcc/testsuite/g++.dg/diagnostic/unclosed-function.C
new file mode 100644
index 00000000000..e1e15504172
--- /dev/null
+++ b/gcc/testsuite/g++.dg/diagnostic/unclosed-function.C
@@ -0,0 +1,3 @@
+void test (void)
+{ /* { dg-message "1: to match this '.'" } */
+ int filler; /* { dg-error "13: expected '.' at end of input" } */
diff --git a/gcc/testsuite/g++.dg/diagnostic/unclosed-namespace.C b/gcc/testsuite/g++.dg/diagnostic/unclosed-namespace.C
new file mode 100644
index 00000000000..ff113226cc7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/diagnostic/unclosed-namespace.C
@@ -0,0 +1,2 @@
+namespace unclosed { /* { dg-message "20: to match this '.'" } */
+int filler; /* { dg-error "11: expected '.' at end of input" } */
diff --git a/gcc/testsuite/g++.dg/diagnostic/unclosed-struct.C b/gcc/testsuite/g++.dg/diagnostic/unclosed-struct.C
new file mode 100644
index 00000000000..8c206bbecc4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/diagnostic/unclosed-struct.C
@@ -0,0 +1,3 @@
+struct unclosed { /* { dg-message "17: to match this '.'" } */
+ int dummy; /* { dg-error "12: expected '.' at end of input" } */
+ // { dg-error "expected unqualified-id at end of input" "" { target *-*-* } .-1 }
diff --git a/gcc/testsuite/g++.dg/ext/anon-struct6.C b/gcc/testsuite/g++.dg/ext/anon-struct6.C
index 66d4b327196..9b59085f670 100644
--- a/gcc/testsuite/g++.dg/ext/anon-struct6.C
+++ b/gcc/testsuite/g++.dg/ext/anon-struct6.C
@@ -3,8 +3,8 @@
struct A
{
struct
- { // { dg-error "anonymous struct cannot have function members" }
+ {
struct { static int i; }; // { dg-error "prohibits anonymous structs|non-static data members|unnamed class" }
- void foo() { i; }
+ void foo() { i; } // { dg-error "can only have non-static data" }
}; // { dg-error "prohibits anonymous structs" }
};
diff --git a/gcc/testsuite/g++.dg/ext/packed8.C b/gcc/testsuite/g++.dg/ext/packed8.C
index 91ee8b3ee74..1476010cef3 100644
--- a/gcc/testsuite/g++.dg/ext/packed8.C
+++ b/gcc/testsuite/g++.dg/ext/packed8.C
@@ -1,8 +1,6 @@
// PR c++/18378
// NOTE: This test assumes packed structure layout differs from unpacked
-// structure layout. This isn't true, e.g., with the default
-// arm-none-elf options.
-// { dg-options "-mstructure-size-boundary=8" { target arm*-*-* } }
+// structure layout.
class A
{
diff --git a/gcc/testsuite/g++.dg/inherit/vdtor1.C b/gcc/testsuite/g++.dg/inherit/vdtor1.C
new file mode 100644
index 00000000000..caba17fde6a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/inherit/vdtor1.C
@@ -0,0 +1,7 @@
+struct A {
+ void operator delete(void *, unsigned long);
+};
+struct B : A {
+ virtual ~B();
+};
+struct C : B {};
diff --git a/gcc/testsuite/g++.dg/init/array16.C b/gcc/testsuite/g++.dg/init/array16.C
index 188d1a84ff1..2f6c63dc8db 100644
--- a/gcc/testsuite/g++.dg/init/array16.C
+++ b/gcc/testsuite/g++.dg/init/array16.C
@@ -1,7 +1,6 @@
// Causes timeout for the MMIX simulator on a 3GHz P4 and we can't
// have "compile" for some targets and "run" for others.
// { dg-do run { target { ! mmix-*-* } } }
-// { dg-options "-mstructure-size-boundary=8" { target arm*-*-* } }
// Copyright (C) 2004 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 8 Dec 2004 <nathan@codesourcery.com>
@@ -10,8 +9,7 @@
// Origin: Matt LaFary <lafary@activmedia.com>
// NOTE: This test assumes that 4M instances of struct ELT can fit into
-// a 5MB array. This isn't true, e.g., with the default
-// arm-none-elf options.
+// a 5MB array.
struct elt
{
diff --git a/gcc/testsuite/g++.dg/other/bitfield6.C b/gcc/testsuite/g++.dg/other/bitfield6.C
new file mode 100644
index 00000000000..c1e8a17989b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/bitfield6.C
@@ -0,0 +1,9 @@
+// PR c++/81607
+
+int a;
+
+struct b {
+ long c : 32;
+} d;
+
+char f = (903092 ? int(d.c) : 0) << a;
diff --git a/gcc/testsuite/g++.dg/other/crash-4.C b/gcc/testsuite/g++.dg/other/crash-4.C
index a77fe05d487..db5c5bd8a8e 100644
--- a/gcc/testsuite/g++.dg/other/crash-4.C
+++ b/gcc/testsuite/g++.dg/other/crash-4.C
@@ -5,9 +5,7 @@
// Origin: Andrew Pinski pinskia@gcc.gnu.org
// NOTE: This test assumes packed structure layout differs from unpacked
-// structure layout. This isn't true, e.g., with the default
-// arm-none-elf options.
-// { dg-options "-mstructure-size-boundary=8" { target arm*-*-* } }
+// structure layout.
struct a
{
diff --git a/gcc/testsuite/g++.dg/other/pr81355.C b/gcc/testsuite/g++.dg/other/pr81355.C
new file mode 100644
index 00000000000..89d1b419581
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/pr81355.C
@@ -0,0 +1,14 @@
+/* { dg-do compile { target x86_64-*-* } } */
+
+__attribute__((target("default")))
+int foo() {return 1;}
+
+__attribute__((target("arch=core2", "")))
+int foo2() {return 2;} /* { dg-warning "empty string in attribute .target." } */
+
+__attribute__((target("sse4.2", "", "")))
+int foo3() {return 2;} /* { dg-warning "empty string in attribute .target." } */
+
+int main() {
+ return foo() + foo2() + foo3();
+}
diff --git a/gcc/testsuite/g++.dg/parse/pragma2.C b/gcc/testsuite/g++.dg/parse/pragma2.C
index c5616ff74f5..3dc5fc17788 100644
--- a/gcc/testsuite/g++.dg/parse/pragma2.C
+++ b/gcc/testsuite/g++.dg/parse/pragma2.C
@@ -4,5 +4,5 @@
// does not.
int f(int x,
#pragma interface // { dg-error "not allowed here" }
- // The parser gets confused and issues an error on the next line.
- int y); // { dg-bogus "" "" { xfail *-*-* } }
+ // { dg-bogus "expected identifier" "" { xfail *-*-* } .-1 }
+ int y);
diff --git a/gcc/testsuite/g++.dg/pr69667.C b/gcc/testsuite/g++.dg/pr69667.C
index 2b3e93d2e1e..76f7cb3d40b 100644
--- a/gcc/testsuite/g++.dg/pr69667.C
+++ b/gcc/testsuite/g++.dg/pr69667.C
@@ -2,7 +2,7 @@
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
-/* { dg-options "-mcpu=power8 -w -std=c++14 -mlra" } */
+/* { dg-options "-mcpu=power8 -w -std=c++14" } */
/* target/69667, compiler got
internal compiler error: Max. number of generated reload insns per insn is achieved (90) */
diff --git a/gcc/testsuite/g++.dg/pr71294.C b/gcc/testsuite/g++.dg/pr71294.C
index 55dd01e5ccf..67675dd7e30 100644
--- a/gcc/testsuite/g++.dg/pr71294.C
+++ b/gcc/testsuite/g++.dg/pr71294.C
@@ -1,7 +1,7 @@
// { dg-do compile { target { powerpc64*-*-* && lp64 } } }
// { dg-require-effective-target powerpc_p8vector_ok } */
// { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } }
-// { dg-options "-mcpu=power8 -O3 -fstack-protector -mno-lra" }
+// { dg-options "-mcpu=power8 -O3 -fstack-protector" }
// PAR target/71294 failed because RELOAD could not figure how create a V2DI
// vector that auto vectorization created with each element being the same
diff --git a/gcc/testsuite/g++.dg/template/crash127.C b/gcc/testsuite/g++.dg/template/crash127.C
new file mode 100644
index 00000000000..b7c03251f8c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/crash127.C
@@ -0,0 +1,22 @@
+// PR c++/71440
+
+struct A
+{
+ void f () {}
+};
+
+typedef void (A::*Ptr) ();
+
+template < Ptr > struct B {};
+
+template < class T >
+struct C : public A
+{
+ void bar ()
+ {
+ B < &A::A > b; // { dg-error "taking address of constructor 'A::A" "" { target c++98_only } }
+ // { dg-error "taking address of constructor 'constexpr A::A" "" { target c++11 } .-1 }
+ }
+};
+
+template class C < int >;
diff --git a/gcc/testsuite/g++.dg/torture/pr81354.C b/gcc/testsuite/g++.dg/torture/pr81354.C
new file mode 100644
index 00000000000..b3ba8f09371
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr81354.C
@@ -0,0 +1,24 @@
+// PR81354 reported this test as crashing in a limited range of revisions.
+// { dg-do compile }
+
+struct T { double a; double b; };
+
+void foo(T Ad[], int As[2])
+{
+ int j;
+ int i;
+ int Bs[2] = {0,0};
+ T Bd[16];
+
+ for (j = 0; j < 4; j++) {
+ for (i = 0; i + 1 <= j + 1; i++) {
+ Ad[i + As[0] * j] = Bd[i + Bs[0] * j];
+ }
+
+ i = j + 1; // <- comment out this line and it does not crash
+ for (; i + 1 < 5; i++) {
+ Ad[i + As[0] * j].a = 0.0;
+ Ad[i + As[0] * j].b = 0.0;
+ }
+ }
+}
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr81719.C b/gcc/testsuite/g++.dg/tree-ssa/pr81719.C
new file mode 100644
index 00000000000..6e017afbae2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr81719.C
@@ -0,0 +1,24 @@
+/* { dg-do compile { target c++11 } } */
+/* { dg-options "-O3 -fdump-tree-optimized" } */
+
+typedef int Items[2];
+
+struct ItemArray
+{
+ Items items;
+ int sum_x2() const;
+};
+
+int ItemArray::sum_x2() const
+{
+ int total = 0;
+ for (int item : items)
+ {
+ total += item;
+ }
+ return total;
+}
+
+/* We should be able to compute the number of iterations to two, unroll
+ the loop and end up with a single basic-block in sum_x2. */
+/* { dg-final { scan-tree-dump-times "bb" 1 "optimized" } } */
diff --git a/gcc/testsuite/g++.dg/ubsan/pr81530.C b/gcc/testsuite/g++.dg/ubsan/pr81530.C
new file mode 100644
index 00000000000..e21724686c4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ubsan/pr81530.C
@@ -0,0 +1,6 @@
+/* PR sanitizer/81530 */
+/* { dg-do compile } */
+/* { dg-options "-fsanitize=undefined" } */
+
+int a[(long) 4e20]; /* { dg-error "overflow in constant expression" } */
+/* { dg-error "size of array .a. is too large" "" { target *-*-* } .-1 } */
diff --git a/gcc/testsuite/g++.dg/warn/Wshadow-compatible-local-2.C b/gcc/testsuite/g++.dg/warn/Wshadow-compatible-local-2.C
new file mode 100644
index 00000000000..da8f43bd67d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wshadow-compatible-local-2.C
@@ -0,0 +1,21 @@
+// PR c++/81640
+// { dg-do compile }
+// { dg-options "-Wshadow=compatible-local" }
+
+struct A {};
+struct B { operator bool () const { return true; } };
+
+template <typename T>
+void
+foo ()
+{
+ T d, e;
+ if (e)
+ A d;
+}
+
+void
+bar ()
+{
+ foo <B> ();
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wsign-compare-2.C b/gcc/testsuite/g++.dg/warn/Wsign-compare-2.C
index 2b8360648fa..b66e8b46565 100644
--- a/gcc/testsuite/g++.dg/warn/Wsign-compare-2.C
+++ b/gcc/testsuite/g++.dg/warn/Wsign-compare-2.C
@@ -6,5 +6,5 @@ void
foo (__complex__ int i)
{
i == 0u;
- i == ~1u; // { dg-warning "comparison between signed and unsigned integer expressions" }
+ i == ~1u; // { dg-warning "comparison of integer expressions of different signedness" }
}
diff --git a/gcc/testsuite/g++.dg/warn/Wsign-compare-4.C b/gcc/testsuite/g++.dg/warn/Wsign-compare-4.C
index b3eb8e2a7de..e92ab137e3b 100644
--- a/gcc/testsuite/g++.dg/warn/Wsign-compare-4.C
+++ b/gcc/testsuite/g++.dg/warn/Wsign-compare-4.C
@@ -3,10 +3,10 @@
int foo(unsigned int *a, int b)
{
- return (*a) <= b; // { dg-warning "comparison between signed and unsigned" }
+ return (*a) <= b; // { dg-warning "comparison of integer expressions of different signedness" }
}
int bar(unsigned int *a, int b)
{
- return *a <= b; // { dg-warning "comparison between signed and unsigned" }
+ return *a <= b; // { dg-warning "comparison of integer expressions of different signedness" }
}
diff --git a/gcc/testsuite/g++.dg/warn/Wsign-compare-6.C b/gcc/testsuite/g++.dg/warn/Wsign-compare-6.C
index 1f8af664c7b..71b4ebf1613 100644
--- a/gcc/testsuite/g++.dg/warn/Wsign-compare-6.C
+++ b/gcc/testsuite/g++.dg/warn/Wsign-compare-6.C
@@ -8,7 +8,7 @@ int main()
int i = 5;
int const ic = 5;
- i < 5u; // { dg-warning "5:comparison between signed and unsigned" }
+ i < 5u; // { dg-warning "5:comparison of integer expressions of different signedness" }
ic < 5u;
FIVE < 5u;
}
diff --git a/gcc/testsuite/g++.dg/warn/compare1.C b/gcc/testsuite/g++.dg/warn/compare1.C
index e00592262c6..38f4dffd1da 100644
--- a/gcc/testsuite/g++.dg/warn/compare1.C
+++ b/gcc/testsuite/g++.dg/warn/compare1.C
@@ -6,5 +6,5 @@
int f(unsigned a, int b)
{
- return a < b; /* { dg-warning "signed and unsigned" } */
+ return a < b; /* { dg-warning "comparison of integer expressions of different signedness" } */
}
diff --git a/gcc/testsuite/g++.old-deja/g++.other/anon4.C b/gcc/testsuite/g++.old-deja/g++.other/anon4.C
index 2a01be3d0aa..b6cb3006d71 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/anon4.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/anon4.C
@@ -10,7 +10,7 @@
struct A
{
union
- { // { dg-error "" } anon union cannot have member fns
- void bad();
+ {
+ void bad(); // { dg-error "can only have non-static data" }
};
};
diff --git a/gcc/testsuite/gcc.c-torture/execute/builtins/memops-asm-lib.c b/gcc/testsuite/gcc.c-torture/execute/builtins/memops-asm-lib.c
index 25d4a40a67e..3baf7a64622 100644
--- a/gcc/testsuite/gcc.c-torture/execute/builtins/memops-asm-lib.c
+++ b/gcc/testsuite/gcc.c-torture/execute/builtins/memops-asm-lib.c
@@ -38,7 +38,7 @@ my_bcopy (const void *s, void *d, size_t n)
}
__attribute__ ((used))
-void
+void *
my_memmove (void *d, const void *s, size_t n)
{
char *dst = (char *) d;
@@ -53,6 +53,8 @@ my_memmove (void *d, const void *s, size_t n)
while (n--)
*--dst = *--src;
}
+
+ return d;
}
/* LTO code is at the present to able to track that asm alias my_bcopy on builtin
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr81423.c b/gcc/testsuite/gcc.c-torture/execute/pr81423.c
new file mode 100644
index 00000000000..731aa8f1c65
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr81423.c
@@ -0,0 +1,36 @@
+extern void abort (void);
+
+unsigned long long int ll = 0;
+unsigned long long int ull1 = 1ULL;
+unsigned long long int ull2 = 12008284144813806346ULL;
+unsigned long long int ull3;
+
+unsigned long long int __attribute__ ((noinline))
+foo (void)
+{
+ ll = -5597998501375493990LL;
+
+ ll = (5677365550390624949L - ll) - (ull1 > 0);
+ unsigned long long int ull3;
+ ull3 = (unsigned int)
+ (2067854353L <<
+ (((ll + -2129105131L) ^ 10280750144413668236ULL) -
+ 10280750143997242009ULL)) >> ((2873442921854271231ULL | ull2)
+ - 12098357307243495419ULL);
+
+ return ull3;
+}
+
+int
+main (void)
+{
+ /* We need a long long of exactly 64 bits for this test. */
+ ll--;
+ if (ll != 0xffffffffffffffffULL)
+ return 0;
+
+ ull3 = foo ();
+ if (ull3 != 3998784)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr81555.c b/gcc/testsuite/gcc.c-torture/execute/pr81555.c
new file mode 100644
index 00000000000..d546368a39b
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr81555.c
@@ -0,0 +1,24 @@
+/* PR tree-optimization/81555 */
+
+unsigned int a = 1, d = 0xfaeU, e = 0xe376U;
+_Bool b = 0, f = 1;
+unsigned char g = 1;
+
+void
+foo (void)
+{
+ _Bool c = a != b;
+ if (c)
+ f = 0;
+ if (e & c & (unsigned char)d & c)
+ g = 0;
+}
+
+int
+main ()
+{
+ foo ();
+ if (f || g != 1)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr81556.c b/gcc/testsuite/gcc.c-torture/execute/pr81556.c
new file mode 100644
index 00000000000..cfbc75f861a
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr81556.c
@@ -0,0 +1,23 @@
+/* PR tree-optimization/81556 */
+
+unsigned long long int b = 0xb82ff73c5c020599ULL;
+unsigned long long int c = 0xd4e8188733a29d8eULL;
+unsigned long long int d = 2, f = 1, g = 0, h = 0;
+unsigned long long int e = 0xf27771784749f32bULL;
+
+__attribute__((noinline, noclone)) void
+foo (void)
+{
+ _Bool a = d > 1;
+ g = f % ((d > 1) << 9);
+ h = a & (e & (a & b & c));
+}
+
+int
+main ()
+{
+ foo ();
+ if (g != 1 || h != 0)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr81588.c b/gcc/testsuite/gcc.c-torture/execute/pr81588.c
new file mode 100644
index 00000000000..b8f84b3e18c
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr81588.c
@@ -0,0 +1,45 @@
+/* PR tree-optimization/81588 */
+
+__attribute__((noinline, noclone)) int
+bar (int x)
+{
+ __asm volatile ("" : : "g" (x) : "memory");
+}
+
+__attribute__((noinline, noclone)) int
+foo (unsigned x, long long y)
+{
+ if (y < 0)
+ return 0;
+ if (y < (long long) (4 * x))
+ {
+ bar (y);
+ return 1;
+ }
+ return 0;
+}
+
+int
+main ()
+{
+ volatile unsigned x = 10;
+ volatile long long y = -10000;
+ if (foo (x, y) != 0)
+ __builtin_abort ();
+ y = -1;
+ if (foo (x, y) != 0)
+ __builtin_abort ();
+ y = 0;
+ if (foo (x, y) != 1)
+ __builtin_abort ();
+ y = 39;
+ if (foo (x, y) != 1)
+ __builtin_abort ();
+ y = 40;
+ if (foo (x, y) != 0)
+ __builtin_abort ();
+ y = 10000;
+ if (foo (x, y) != 0)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/Walloca-14.c b/gcc/testsuite/gcc.dg/Walloca-14.c
index f3e3f579439..ea48227f7e8 100644
--- a/gcc/testsuite/gcc.dg/Walloca-14.c
+++ b/gcc/testsuite/gcc.dg/Walloca-14.c
@@ -9,6 +9,6 @@ g (int *p)
extern void f (void *);
void *q = __builtin_alloca (p); /* { dg-warning "passing argument 1" } */
- /* { dg-warning "unbounded use of 'alloca'" "unbounded" { target *-*-* } 11 } */
+ /* { dg-warning "unbounded use of 'alloca'" "unbounded" { target *-*-* } .-1 } */
f (q);
}
diff --git a/gcc/testsuite/gcc.dg/Wattributes-5.c b/gcc/testsuite/gcc.dg/Wattributes-5.c
new file mode 100644
index 00000000000..34483391e6d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wattributes-5.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options -Wattributes } */
+
+void __attribute__((_foobar)) foo() { } /* { dg-warning "attribute directive ignored" } */
+void __attribute__((_xformat__)) foo2() { } /* { dg-warning "attribute directive ignored" } */
+void __attribute__((xformat__)) foo3() { } /* { dg-warning "attribute directive ignored" } */
+void __attribute__((__xformat)) foo4() { } /* { dg-warning "attribute directive ignored" } */
+void __attribute__((_)) foo5() { } /* { dg-warning "attribute directive ignored" } */
+void __attribute__((_)) foo6() { } /* { dg-warning "attribute directive ignored" } */
+void __attribute__((__)) foo7() { } /* { dg-warning "attribute directive ignored" } */
+void __attribute__((___)) foo8() { } /* { dg-warning "attribute directive ignored" } */
+void __attribute__((____)) foo9() { } /* { dg-warning "attribute directive ignored" } */
+void __attribute__((_____)) foo10() { } /* { dg-warning "attribute directive ignored" } */
diff --git a/gcc/testsuite/gcc.dg/Wsign-compare-1.c b/gcc/testsuite/gcc.dg/Wsign-compare-1.c
new file mode 100644
index 00000000000..be3bd2fcbd8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wsign-compare-1.c
@@ -0,0 +1,83 @@
+/* PR c/81417 */
+/* { dg-do compile } */
+/* { dg-options "-Wsign-compare -fdiagnostics-show-caret" } */
+
+unsigned int
+f0 (int x, unsigned int y)
+{
+ return x ? y : -1; /* { dg-warning "18:operand of \\?: changes signedness from 'int' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+ return x ? y : -1;
+ ^~
+ { dg-end-multiline-output "" } */
+}
+
+unsigned int
+f1 (int xxx, unsigned int yyy)
+{
+ return xxx ? yyy : -1; /* { dg-warning "22:operand of \\?: changes signedness from 'int' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+ return xxx ? yyy : -1;
+ ^~
+ { dg-end-multiline-output "" } */
+}
+
+unsigned int
+f2 (int xxx, unsigned int yyy)
+{
+ return xxx ? -1 : yyy; /* { dg-warning "16:operand of \\?: changes signedness from 'int' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+ return xxx ? -1 : yyy;
+ ^~
+ { dg-end-multiline-output "" } */
+}
+
+unsigned int
+f3 (unsigned int yyy)
+{
+ return yyy ?: -1; /* { dg-warning "17:operand of \\?: changes signedness from 'int' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+ return yyy ?: -1;
+ ^~
+ { dg-end-multiline-output "" } */
+}
+
+unsigned int
+f4 (int xxx, unsigned yyy, short uuu)
+{
+ return xxx ? yyy : uuu; /* { dg-warning "22:operand of \\?: changes signedness from 'short int' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+ return xxx ? yyy : uuu;
+ ^~~
+ { dg-end-multiline-output "" } */
+}
+
+unsigned int
+f5 (int xxx, unsigned yyy, short uuu)
+{
+ return xxx ? uuu : yyy; /* { dg-warning "16:operand of \\?: changes signedness from 'short int' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+ return xxx ? uuu : yyy;
+ ^~~
+ { dg-end-multiline-output "" } */
+}
+
+unsigned int
+f6 (int xxx, unsigned yyy, signed char uuu)
+{
+ return xxx ? yyy : uuu; /* { dg-warning "22:operand of \\?: changes signedness from 'signed char' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+ return xxx ? yyy : uuu;
+ ^~~
+ { dg-end-multiline-output "" } */
+}
+
+unsigned int
+f7 (int xxx, unsigned yyy, signed char uuu)
+{
+ return xxx ? uuu : yyy; /* { dg-warning "16:operand of \\?: changes signedness from 'signed char' to 'unsigned int'" } */
+/* { dg-begin-multiline-output "" }
+ return xxx ? uuu : yyy;
+ ^~~
+ { dg-end-multiline-output "" } */
+}
diff --git a/gcc/testsuite/gcc.dg/asan/pr81186.c b/gcc/testsuite/gcc.dg/asan/pr81186.c
new file mode 100644
index 00000000000..7f0f672ca40
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/asan/pr81186.c
@@ -0,0 +1,18 @@
+/* PR sanitizer/81186 */
+/* { dg-do run } */
+
+int
+main ()
+{
+ __label__ l;
+ void f ()
+ {
+ int a[123];
+
+ goto l;
+ }
+
+ f ();
+l:
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/asan/pr81460.c b/gcc/testsuite/gcc.dg/asan/pr81460.c
new file mode 100644
index 00000000000..00c1bb7c9f2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/asan/pr81460.c
@@ -0,0 +1,8 @@
+/* PR sanitizer/80460 */
+/* { dg-do compile } */
+
+int
+f (int a, struct { int b[a]; } c) /* { dg-warning "anonymous struct declared inside parameter list will not be visible outside of this definition or declaration" } */
+{
+ return c.b[0];
+}
diff --git a/gcc/testsuite/gcc.dg/assign-warn-1.c b/gcc/testsuite/gcc.dg/assign-warn-1.c
index f26a5447ea0..365025724c4 100644
--- a/gcc/testsuite/gcc.dg/assign-warn-1.c
+++ b/gcc/testsuite/gcc.dg/assign-warn-1.c
@@ -50,63 +50,63 @@ TESTRET(dfe, void *, fp); /* { dg-warning "ISO C forbids return between function
TESTARG(sua, int *, unsigned int *); /* { dg-warning "pointer targets in passing argument 1 of 'suaF' differ in signedness" } */
TESTARP(sub, int *, unsigned int *); /* { dg-warning "pointer targets in passing argument 1 of 'subFp.x' differ in signedness" } */
-TESTASS(suc, int *, unsigned int *); /* { dg-warning "pointer targets in assignment differ in signedness" } */
-TESTINI(sud, int *, unsigned int *); /* { dg-warning "pointer targets in initialization differ in signedness" } */
-TESTRET(sue, int *, unsigned int *); /* { dg-warning "pointer targets in return differ in signedness" } */
+TESTASS(suc, int *, unsigned int *); /* { dg-warning "pointer targets in assignment from 'unsigned int \\*' to 'int \\*' differ in signedness" } */
+TESTINI(sud, int *, unsigned int *); /* { dg-warning "pointer targets in initialization of 'int \\*' from 'unsigned int \\*' differ in signedness" } */
+TESTRET(sue, int *, unsigned int *); /* { dg-warning "pointer targets in returning 'unsigned int \\*' from a function with return type 'int \\*' differ in signedness" } */
TESTARG(usa, unsigned int *, int *); /* { dg-warning "pointer targets in passing argument 1 of 'usaF' differ in signedness" } */
TESTARP(usb, unsigned int *, int *); /* { dg-warning "pointer targets in passing argument 1 of 'usbFp.x' differ in signedness" } */
-TESTASS(usc, unsigned int *, int *); /* { dg-warning "pointer targets in assignment differ in signedness" } */
-TESTINI(usd, unsigned int *, int *); /* { dg-warning "pointer targets in initialization differ in signedness" } */
-TESTRET(use, unsigned int *, int *); /* { dg-warning "pointer targets in return differ in signedness" } */
+TESTASS(usc, unsigned int *, int *); /* { dg-warning "pointer targets in assignment from 'int \\*' to 'unsigned int \\*' differ in signedness" } */
+TESTINI(usd, unsigned int *, int *); /* { dg-warning "pointer targets in initialization of 'unsigned int \\*' from 'int \\*' differ in signedness" } */
+TESTRET(use, unsigned int *, int *); /* { dg-warning "pointer targets in returning 'int \\*' from a function with return type 'unsigned int \\*' differ in signedness" } */
TESTARG(cua, char *, unsigned char *); /* { dg-warning "pointer targets in passing argument 1 of 'cuaF' differ in signedness" } */
TESTARP(cub, char *, unsigned char *); /* { dg-warning "pointer targets in passing argument 1 of 'cubFp.x' differ in signedness" } */
-TESTASS(cuc, char *, unsigned char *); /* { dg-warning "pointer targets in assignment differ in signedness" } */
-TESTINI(cud, char *, unsigned char *); /* { dg-warning "pointer targets in initialization differ in signedness" } */
-TESTRET(cue, char *, unsigned char *); /* { dg-warning "pointer targets in return differ in signedness" } */
+TESTASS(cuc, char *, unsigned char *); /* { dg-warning "pointer targets in assignment from 'unsigned char \\*' to 'char \\*' differ in signedness" } */
+TESTINI(cud, char *, unsigned char *); /* { dg-warning "pointer targets in initialization of 'char \\*' from 'unsigned char \\*' differ in signedness" } */
+TESTRET(cue, char *, unsigned char *); /* { dg-warning "pointer targets in returning 'unsigned char \\*' from a function with return type 'char \\*' differ in signedness" } */
TESTARG(uca, unsigned char *, char *); /* { dg-warning "pointer targets in passing argument 1 of 'ucaF' differ in signedness" } */
TESTARP(ucb, unsigned char *, char *); /* { dg-warning "pointer targets in passing argument 1 of 'ucbFp.x' differ in signedness" } */
-TESTASS(ucc, unsigned char *, char *); /* { dg-warning "pointer targets in assignment differ in signedness" } */
-TESTINI(ucd, unsigned char *, char *); /* { dg-warning "pointer targets in initialization differ in signedness" } */
-TESTRET(uce, unsigned char *, char *); /* { dg-warning "pointer targets in return differ in signedness" } */
+TESTASS(ucc, unsigned char *, char *); /* { dg-warning "pointer targets in assignment from 'char \\*' to 'unsigned char \\*' differ in signedness" } */
+TESTINI(ucd, unsigned char *, char *); /* { dg-warning "pointer targets in initialization of 'unsigned char \\*' from 'char \\*' differ in signedness" } */
+TESTRET(uce, unsigned char *, char *); /* { dg-warning "pointer targets in returning 'char \\*' from a function with return type 'unsigned char \\*' differ in signedness" } */
TESTARG(csa, char *, signed char *); /* { dg-warning "pointer targets in passing argument 1 of 'csaF' differ in signedness" } */
TESTARP(csb, char *, signed char *); /* { dg-warning "pointer targets in passing argument 1 of 'csbFp.x' differ in signedness" } */
-TESTASS(csc, char *, signed char *); /* { dg-warning "pointer targets in assignment differ in signedness" } */
-TESTINI(csd, char *, signed char *); /* { dg-warning "pointer targets in initialization differ in signedness" } */
-TESTRET(cse, char *, signed char *); /* { dg-warning "pointer targets in return differ in signedness" } */
+TESTASS(csc, char *, signed char *); /* { dg-warning "pointer targets in assignment from 'signed char \\*' to 'char \\*' differ in signedness" } */
+TESTINI(csd, char *, signed char *); /* { dg-warning "pointer targets in initialization of 'char \\*' from 'signed char \\*' differ in signedness" } */
+TESTRET(cse, char *, signed char *); /* { dg-warning "pointer targets in returning 'signed char \\*' from a function with return type 'char \\*' differ in signedness" } */
TESTARG(sca, signed char *, char *); /* { dg-warning "pointer targets in passing argument 1 of 'scaF' differ in signedness" } */
TESTARP(scb, signed char *, char *); /* { dg-warning "pointer targets in passing argument 1 of 'scbFp.x' differ in signedness" } */
-TESTASS(scc, signed char *, char *); /* { dg-warning "pointer targets in assignment differ in signedness" } */
-TESTINI(scd, signed char *, char *); /* { dg-warning "pointer targets in initialization differ in signedness" } */
-TESTRET(sce, signed char *, char *); /* { dg-warning "pointer targets in return differ in signedness" } */
+TESTASS(scc, signed char *, char *); /* { dg-warning "pointer targets in assignment from 'char \\*' to 'signed char \\*' differ in signedness" } */
+TESTINI(scd, signed char *, char *); /* { dg-warning "pointer targets in initialization of 'signed char \\*' from 'char \\*' differ in signedness" } */
+TESTRET(sce, signed char *, char *); /* { dg-warning "pointer targets in returning 'char \\*' from a function with return type 'signed char \\*' differ in signedness" } */
TESTARG(cia, char *, int *); /* { dg-warning "passing argument 1 of 'ciaF' from incompatible pointer type" } */
TESTARP(cib, char *, int *); /* { dg-warning "passing argument 1 of 'cibFp.x' from incompatible pointer type" } */
-TESTASS(cic, char *, int *); /* { dg-warning "assignment from incompatible pointer type" } */
-TESTINI(cid, char *, int *); /* { dg-warning "initialization from incompatible pointer type" } */
-TESTRET(cie, char *, int *); /* { dg-warning "return from incompatible pointer type" } */
+TESTASS(cic, char *, int *); /* { dg-warning "assignment to 'char \\*' from incompatible pointer type 'int \\*'" } */
+TESTINI(cid, char *, int *); /* { dg-warning "initialization of 'char \\*' from incompatible pointer type 'int \\*'" } */
+TESTRET(cie, char *, int *); /* { dg-warning "returning 'int \\*' from a function with incompatible return type 'char \\*'" } */
TESTARG(ica, int *, char *); /* { dg-warning "passing argument 1 of 'icaF' from incompatible pointer type" } */
TESTARP(icb, int *, char *); /* { dg-warning "passing argument 1 of 'icbFp.x' from incompatible pointer type" } */
-TESTASS(icc, int *, char *); /* { dg-warning "assignment from incompatible pointer type" } */
-TESTINI(icd, int *, char *); /* { dg-warning "initialization from incompatible pointer type" } */
-TESTRET(ice, int *, char *); /* { dg-warning "return from incompatible pointer type" } */
+TESTASS(icc, int *, char *); /* { dg-warning "assignment to 'int \\*' from incompatible pointer type 'char \\*'" } */
+TESTINI(icd, int *, char *); /* { dg-warning "initialization of 'int \\*' from incompatible pointer type 'char \\*'" } */
+TESTRET(ice, int *, char *); /* { dg-warning "returning 'char \\*' from a function with incompatible return type 'int \\*'" } */
TESTARG(ciia, char *, int); /* { dg-warning "passing argument 1 of 'ciiaF' makes pointer from integer without a cast" } */
TESTARP(ciib, char *, int); /* { dg-warning "passing argument 1 of 'ciibFp.x' makes pointer from integer without a cast" } */
-TESTASS(ciic, char *, int); /* { dg-warning "assignment makes pointer from integer without a cast" } */
-TESTINI(ciid, char *, int); /* { dg-warning "initialization makes pointer from integer without a cast" } */
-TESTRET(ciie, char *, int); /* { dg-warning "return makes pointer from integer without a cast" } */
+TESTASS(ciic, char *, int); /* { dg-warning "assignment to 'char \\*' from 'int' makes pointer from integer without a cast" } */
+TESTINI(ciid, char *, int); /* { dg-warning "initialization of 'char \\*' from 'int' makes pointer from integer without a cast" } */
+TESTRET(ciie, char *, int); /* { dg-warning "returning 'int' from a function with return type 'char \\*' makes pointer from integer without a cast" } */
TESTARG(iica, int, char *); /* { dg-warning "passing argument 1 of 'iicaF' makes integer from pointer without a cast" } */
TESTARP(iicb, int, char *); /* { dg-warning "passing argument 1 of 'iicbFp.x' makes integer from pointer without a cast" } */
-TESTASS(iicc, int, char *); /* { dg-warning "assignment makes integer from pointer without a cast" } */
-TESTINI(iicd, int, char *); /* { dg-warning "initialization makes integer from pointer without a cast" } */
-TESTRET(iice, int, char *); /* { dg-warning "return makes integer from pointer without a cast" } */
+TESTASS(iicc, int, char *); /* { dg-warning "assignment to 'int' from 'char \\*' makes integer from pointer without a cast" } */
+TESTINI(iicd, int, char *); /* { dg-warning "initialization of 'int' from 'char \\*' makes integer from pointer without a cast" } */
+TESTRET(iice, int, char *); /* { dg-warning "returning 'char \\*' from a function with return type 'int' makes integer from pointer without a cast" } */
struct s { int a; };
diff --git a/gcc/testsuite/gcc.dg/assign-warn-2.c b/gcc/testsuite/gcc.dg/assign-warn-2.c
index 1e5eb1ca6e5..0c8a8ee7833 100644
--- a/gcc/testsuite/gcc.dg/assign-warn-2.c
+++ b/gcc/testsuite/gcc.dg/assign-warn-2.c
@@ -51,63 +51,63 @@ TESTRET(dfe, void *, fp); /* { dg-error "ISO C forbids return between function p
TESTARG(sua, int *, unsigned int *); /* { dg-error "pointer targets in passing argument 1 of 'suaF' differ in signedness" } */
TESTARP(sub, int *, unsigned int *); /* { dg-error "pointer targets in passing argument 1 of 'subFp.x' differ in signedness" } */
-TESTASS(suc, int *, unsigned int *); /* { dg-error "pointer targets in assignment differ in signedness" } */
-TESTINI(sud, int *, unsigned int *); /* { dg-error "pointer targets in initialization differ in signedness" } */
-TESTRET(sue, int *, unsigned int *); /* { dg-error "pointer targets in return differ in signedness" } */
+TESTASS(suc, int *, unsigned int *); /* { dg-error "pointer targets in assignment from 'unsigned int \\*' to 'int \\*' differ in signedness" } */
+TESTINI(sud, int *, unsigned int *); /* { dg-error "pointer targets in initialization of 'int \\*' from 'unsigned int \\*' differ in signedness" } */
+TESTRET(sue, int *, unsigned int *); /* { dg-error "pointer targets in returning 'unsigned int \\*' from a function with return type 'int \\*' differ in signedness" } */
TESTARG(usa, unsigned int *, int *); /* { dg-error "pointer targets in passing argument 1 of 'usaF' differ in signedness" } */
TESTARP(usb, unsigned int *, int *); /* { dg-error "pointer targets in passing argument 1 of 'usbFp.x' differ in signedness" } */
-TESTASS(usc, unsigned int *, int *); /* { dg-error "pointer targets in assignment differ in signedness" } */
-TESTINI(usd, unsigned int *, int *); /* { dg-error "pointer targets in initialization differ in signedness" } */
-TESTRET(use, unsigned int *, int *); /* { dg-error "pointer targets in return differ in signedness" } */
+TESTASS(usc, unsigned int *, int *); /* { dg-error "pointer targets in assignment from 'int \\*' to 'unsigned int \\*' differ in signedness" } */
+TESTINI(usd, unsigned int *, int *); /* { dg-error "pointer targets in initialization of 'unsigned int \\*' from 'int \\*' differ in signedness" } */
+TESTRET(use, unsigned int *, int *); /* { dg-error "pointer targets in returning 'int \\*' from a function with return type 'unsigned int \\*' differ in signedness" } */
TESTARG(cua, char *, unsigned char *); /* { dg-error "pointer targets in passing argument 1 of 'cuaF' differ in signedness" } */
TESTARP(cub, char *, unsigned char *); /* { dg-error "pointer targets in passing argument 1 of 'cubFp.x' differ in signedness" } */
-TESTASS(cuc, char *, unsigned char *); /* { dg-error "pointer targets in assignment differ in signedness" } */
-TESTINI(cud, char *, unsigned char *); /* { dg-error "pointer targets in initialization differ in signedness" } */
-TESTRET(cue, char *, unsigned char *); /* { dg-error "pointer targets in return differ in signedness" } */
+TESTASS(cuc, char *, unsigned char *); /* { dg-error "pointer targets in assignment from 'unsigned char \\*' to 'char \\*' differ in signedness" } */
+TESTINI(cud, char *, unsigned char *); /* { dg-error "pointer targets in initialization of 'char \\*' from 'unsigned char \\*' differ in signedness" } */
+TESTRET(cue, char *, unsigned char *); /* { dg-error "pointer targets in returning 'unsigned char \\*' from a function with return type 'char \\*' differ in signedness" } */
TESTARG(uca, unsigned char *, char *); /* { dg-error "pointer targets in passing argument 1 of 'ucaF' differ in signedness" } */
TESTARP(ucb, unsigned char *, char *); /* { dg-error "pointer targets in passing argument 1 of 'ucbFp.x' differ in signedness" } */
-TESTASS(ucc, unsigned char *, char *); /* { dg-error "pointer targets in assignment differ in signedness" } */
-TESTINI(ucd, unsigned char *, char *); /* { dg-error "pointer targets in initialization differ in signedness" } */
-TESTRET(uce, unsigned char *, char *); /* { dg-error "pointer targets in return differ in signedness" } */
+TESTASS(ucc, unsigned char *, char *); /* { dg-error "pointer targets in assignment from 'char \\*' to 'unsigned char \\*' differ in signedness" } */
+TESTINI(ucd, unsigned char *, char *); /* { dg-error "pointer targets in initialization of 'unsigned char \\*' from 'char \\*' differ in signedness" } */
+TESTRET(uce, unsigned char *, char *); /* { dg-error "pointer targets in returning 'char \\*' from a function with return type 'unsigned char \\*' differ in signedness" } */
TESTARG(csa, char *, signed char *); /* { dg-error "pointer targets in passing argument 1 of 'csaF' differ in signedness" } */
TESTARP(csb, char *, signed char *); /* { dg-error "pointer targets in passing argument 1 of 'csbFp.x' differ in signedness" } */
-TESTASS(csc, char *, signed char *); /* { dg-error "pointer targets in assignment differ in signedness" } */
-TESTINI(csd, char *, signed char *); /* { dg-error "pointer targets in initialization differ in signedness" } */
-TESTRET(cse, char *, signed char *); /* { dg-error "pointer targets in return differ in signedness" } */
+TESTASS(csc, char *, signed char *); /* { dg-error "pointer targets in assignment from 'signed char \\*' to 'char \\*' differ in signedness" } */
+TESTINI(csd, char *, signed char *); /* { dg-error "pointer targets in initialization of 'char \\*' from 'signed char \\*' differ in signedness" } */
+TESTRET(cse, char *, signed char *); /* { dg-error "pointer targets in returning 'signed char \\*' from a function with return type 'char \\*' differ in signedness" } */
TESTARG(sca, signed char *, char *); /* { dg-error "pointer targets in passing argument 1 of 'scaF' differ in signedness" } */
TESTARP(scb, signed char *, char *); /* { dg-error "pointer targets in passing argument 1 of 'scbFp.x' differ in signedness" } */
-TESTASS(scc, signed char *, char *); /* { dg-error "pointer targets in assignment differ in signedness" } */
-TESTINI(scd, signed char *, char *); /* { dg-error "pointer targets in initialization differ in signedness" } */
-TESTRET(sce, signed char *, char *); /* { dg-error "pointer targets in return differ in signedness" } */
+TESTASS(scc, signed char *, char *); /* { dg-error "pointer targets in assignment from 'char \\*' to 'signed char \\*' differ in signedness" } */
+TESTINI(scd, signed char *, char *); /* { dg-error "pointer targets in initialization of 'signed char \\*' from 'char \\*' differ in signedness" } */
+TESTRET(sce, signed char *, char *); /* { dg-error "pointer targets in returning 'char \\*' from a function with return type 'signed char \\*' differ in signedness" } */
TESTARG(cia, char *, int *); /* { dg-error "passing argument 1 of 'ciaF' from incompatible pointer type" } */
TESTARP(cib, char *, int *); /* { dg-error "passing argument 1 of 'cibFp.x' from incompatible pointer type" } */
-TESTASS(cic, char *, int *); /* { dg-error "assignment from incompatible pointer type" } */
-TESTINI(cid, char *, int *); /* { dg-error "initialization from incompatible pointer type" } */
-TESTRET(cie, char *, int *); /* { dg-error "return from incompatible pointer type" } */
+TESTASS(cic, char *, int *); /* { dg-error "assignment to 'char \\*' from incompatible pointer type 'int \\*'" } */
+TESTINI(cid, char *, int *); /* { dg-error "initialization of 'char \\*' from incompatible pointer type 'int \\*'" } */
+TESTRET(cie, char *, int *); /* { dg-error "returning 'int \\*' from a function with incompatible return type 'char \\*'" } */
TESTARG(ica, int *, char *); /* { dg-error "passing argument 1 of 'icaF' from incompatible pointer type" } */
TESTARP(icb, int *, char *); /* { dg-error "passing argument 1 of 'icbFp.x' from incompatible pointer type" } */
-TESTASS(icc, int *, char *); /* { dg-error "assignment from incompatible pointer type" } */
-TESTINI(icd, int *, char *); /* { dg-error "initialization from incompatible pointer type" } */
-TESTRET(ice, int *, char *); /* { dg-error "return from incompatible pointer type" } */
+TESTASS(icc, int *, char *); /* { dg-error "assignment to 'int \\*' from incompatible pointer type 'char \\*'" } */
+TESTINI(icd, int *, char *); /* { dg-error "initialization of 'int \\*' from incompatible pointer type 'char \\*'" } */
+TESTRET(ice, int *, char *); /* { dg-error "returning 'char \\*' from a function with incompatible return type 'int \\*'" } */
TESTARG(ciia, char *, int); /* { dg-error "passing argument 1 of 'ciiaF' makes pointer from integer without a cast" } */
TESTARP(ciib, char *, int); /* { dg-error "passing argument 1 of 'ciibFp.x' makes pointer from integer without a cast" } */
-TESTASS(ciic, char *, int); /* { dg-error "assignment makes pointer from integer without a cast" } */
-TESTINI(ciid, char *, int); /* { dg-error "initialization makes pointer from integer without a cast" } */
-TESTRET(ciie, char *, int); /* { dg-error "return makes pointer from integer without a cast" } */
+TESTASS(ciic, char *, int); /* { dg-error "assignment to 'char \\*' from 'int' makes pointer from integer without a cast" } */
+TESTINI(ciid, char *, int); /* { dg-error "initialization of 'char \\*' from 'int' makes pointer from integer without a cast" } */
+TESTRET(ciie, char *, int); /* { dg-error "returning 'int' from a function with return type 'char \\*' makes pointer from integer without a cast" } */
TESTARG(iica, int, char *); /* { dg-error "passing argument 1 of 'iicaF' makes integer from pointer without a cast" } */
TESTARP(iicb, int, char *); /* { dg-error "passing argument 1 of 'iicbFp.x' makes integer from pointer without a cast" } */
-TESTASS(iicc, int, char *); /* { dg-error "assignment makes integer from pointer without a cast" } */
-TESTINI(iicd, int, char *); /* { dg-error "initialization makes integer from pointer without a cast" } */
-TESTRET(iice, int, char *); /* { dg-error "return makes integer from pointer without a cast" } */
+TESTASS(iicc, int, char *); /* { dg-error "assignment to 'int' from 'char \\*' makes integer from pointer without a cast" } */
+TESTINI(iicd, int, char *); /* { dg-error "initialization of 'int' from 'char \\*' makes integer from pointer without a cast" } */
+TESTRET(iice, int, char *); /* { dg-error "returning 'char \\*' from a function with return type 'int' makes integer from pointer without a cast" } */
struct s { int a; };
diff --git a/gcc/testsuite/gcc.dg/attr-noipa.c b/gcc/testsuite/gcc.dg/attr-noipa.c
new file mode 100644
index 00000000000..e2349b6a418
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/attr-noipa.c
@@ -0,0 +1,189 @@
+/* Test the noipa attribute. */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+/* { dg-require-effective-target alloca } */
+
+static inline int __attribute__((noipa))
+fn1 (void) /* { dg-warning "inline function \[^\n\]* given attribute noinline" "" } */
+{
+ return 1;
+}
+
+/* Verify the function is not inlined into its caller. */
+
+static __attribute__((noipa)) int
+fn2 (int x, int y)
+{
+ return x + y;
+}
+
+int
+fn3 (int x)
+{
+ return fn2 (x, 0);
+}
+
+/* { dg-final { scan-tree-dump "= fn2 \\(" "optimized" } } */
+
+void fn4 (char *);
+
+/* Verify the function is not cloned. */
+
+__attribute__((__noipa__)) static int
+fn5 (int x, int y)
+{
+ char *p = __builtin_alloca (x + y);
+ fn4 (p);
+ return x + y;
+}
+
+int
+fn6 (int x)
+{
+ return fn5 (x, 2);
+}
+
+/* { dg-final { scan-tree-dump "= fn5 \\(" "optimized" } } */
+/* { dg-final { scan-tree-dump-not "fn5\\.constprop" "optimized" } } */
+
+/* Verify we still remove unused function calls, even if they have
+ noipa attribute. */
+
+static void fn7 (void) __attribute__((noipa));
+static void
+fn7 (void)
+{
+}
+
+/* { dg-final { scan-tree-dump-not "fn7 \\(" "optimized" } } */
+
+/* Verify noipa functions are not ICF optimized. */
+
+static __attribute__((noipa)) int
+fn8 (int x)
+{
+ return x + 12;
+}
+
+static __attribute__((noipa)) int
+fn9 (int x)
+{
+ return x + 12;
+}
+
+int
+fn10 (int x)
+{
+ return fn8 (x) + fn9 (x);
+}
+
+/* { dg-final { scan-tree-dump "fn8 \\(int" "optimized" } } */
+/* { dg-final { scan-tree-dump "fn9 \\(int" "optimized" } } */
+
+/* Verify IPA-VRP is not performed. */
+
+void fn11 (void);
+
+static int __attribute__((noipa))
+fn12 (int x)
+{
+ if (x < 6 || x >= 29)
+ fn11 ();
+}
+
+void
+fn13 (int x)
+{
+ fn12 (6 + (x & 15));
+}
+
+/* { dg-final { scan-tree-dump "fn11 \\(\\)" "optimized" } } */
+
+void fn14 (void);
+
+__attribute__((noipa)) static int
+fn15 (int x)
+{
+ return x & 7;
+}
+
+int
+fn16 (int x)
+{
+ x = fn15 (x);
+ if (x < 0 || x >= 7)
+ fn14 ();
+}
+
+/* { dg-final { scan-tree-dump "fn14 \\(\\)" "optimized" } } */
+
+/* Verify IPA BIT CP is not performed. */
+
+void fn17 (void);
+
+__attribute__((noipa)) static int
+fn18 (int x)
+{
+ if (x & 8)
+ fn17 ();
+}
+
+void
+fn19 (void)
+{
+ fn18 (1);
+ fn18 (2);
+ fn18 (4);
+ fn18 (16);
+ fn18 (32);
+ fn18 (64);
+}
+
+/* { dg-final { scan-tree-dump "fn17 \\(\\)" "optimized" } } */
+
+/* Ensure pure/const discovery is not performed. */
+
+int var1;
+void fn20 (void);
+
+__attribute__((noipa)) static int
+fn21 (int x, int y)
+{
+ return x * y;
+}
+
+int
+fn22 (void)
+{
+ var1 = 7;
+ asm volatile ("" : "+g" (var1) : : "memory");
+ int a = var1;
+ int b = fn21 (a, a);
+ if (a != var1)
+ fn20 ();
+ return b;
+}
+
+/* { dg-final { scan-tree-dump "fn20 \\(\\)" "optimized" } } */
+
+/* Verify IPA alignment propagation is not performed. */
+
+static __attribute__ ((aligned(16))) char var2[32];
+void fn23 (void);
+
+__attribute__((noipa)) static void
+fn24 (char *p)
+{
+ if ((((__UINTPTR_TYPE__) p) & 15) != 0)
+ fn23 ();
+ asm ("");
+}
+
+void
+fn25 (void)
+{
+ fn24 (var2);
+ fn24 (var2 + 16);
+}
+
+/* { dg-final { scan-tree-dump "fn20 \\(\\)" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/builtin-stringop-chk-1.c b/gcc/testsuite/gcc.dg/builtin-stringop-chk-1.c
index e2655785444..35cc6dc93bb 100644
--- a/gcc/testsuite/gcc.dg/builtin-stringop-chk-1.c
+++ b/gcc/testsuite/gcc.dg/builtin-stringop-chk-1.c
@@ -2,7 +2,6 @@
are emitted properly. */
/* { dg-do compile } */
/* { dg-options "-O2 -Wno-format -std=gnu99 -ftrack-macro-expansion=0" } */
-/* { dg-additional-options "-mstructure-size-boundary=8" { target arm*-*-* } } */
// { dg-skip-if "packed attribute missing for t" { "epiphany-*-*" } }
extern void abort (void);
diff --git a/gcc/testsuite/gcc.dg/builtin-unreachable-6.c b/gcc/testsuite/gcc.dg/builtin-unreachable-6.c
index d2596e95c3f..2f8ca369546 100644
--- a/gcc/testsuite/gcc.dg/builtin-unreachable-6.c
+++ b/gcc/testsuite/gcc.dg/builtin-unreachable-6.c
@@ -16,5 +16,5 @@ lab2:
goto *x;
}
-/* { dg-final { scan-tree-dump-times "lab \\\[\[0-9.\]+%\\\]" 1 "fab1" } } */
+/* { dg-final { scan-tree-dump-times "lab:" 1 "fab1" } } */
/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 1 "fab1" } } */
diff --git a/gcc/testsuite/gcc.dg/c90-const-expr-5.c b/gcc/testsuite/gcc.dg/c90-const-expr-5.c
index 9f5cdef8399..e7422eb6020 100644
--- a/gcc/testsuite/gcc.dg/c90-const-expr-5.c
+++ b/gcc/testsuite/gcc.dg/c90-const-expr-5.c
@@ -15,8 +15,8 @@ f (void)
{
/* (V *)0 is a null pointer constant, so the assignment should be
diagnosed. */
- q = (j ? p : (V *)0); /* { dg-error "5:assignment from incompatible pointer type" } */
- q = (j ? p : (void *)0); /* { dg-error "5:assignment from incompatible pointer type" } */
+ q = (j ? p : (V *)0); /* { dg-error "5:assignment to 'long int \\*' from incompatible pointer type 'int \\*'" } */
+ q = (j ? p : (void *)0); /* { dg-error "5:assignment to 'long int \\*' from incompatible pointer type 'int \\*'" } */
/* And this conversion should be valid. */
(void (*)(void))(V *)0;
(void (*)(void))(void *)0;
diff --git a/gcc/testsuite/gcc.dg/c99-const-expr-5.c b/gcc/testsuite/gcc.dg/c99-const-expr-5.c
index 3bfa7f6fe27..693b97d018c 100644
--- a/gcc/testsuite/gcc.dg/c99-const-expr-5.c
+++ b/gcc/testsuite/gcc.dg/c99-const-expr-5.c
@@ -15,8 +15,8 @@ f (void)
{
/* (V *)0 is a null pointer constant, so the assignment should be
diagnosed. */
- q = (j ? p : (V *)0); /* { dg-error "assignment from incompatible pointer type" } */
- q = (j ? p : (void *)0); /* { dg-error "assignment from incompatible pointer type" } */
+ q = (j ? p : (V *)0); /* { dg-error "assignment to 'long int \\*' from incompatible pointer type 'int \\*'" } */
+ q = (j ? p : (void *)0); /* { dg-error "assignment to 'long int \\*' from incompatible pointer type 'int \\*'" } */
/* And this conversion should be valid. */
(void (*)(void))(V *)0;
(void (*)(void))(void *)0;
diff --git a/gcc/testsuite/gcc.dg/compare1.c b/gcc/testsuite/gcc.dg/compare1.c
index 17ba3ee2098..ebab8c2cbf7 100644
--- a/gcc/testsuite/gcc.dg/compare1.c
+++ b/gcc/testsuite/gcc.dg/compare1.c
@@ -22,20 +22,20 @@ enum mm2
int f(enum mm1 x)
{
- return x == (tf?DI:SI); /* { dg-bogus "signed and unsigned" "case 1" } */
+ return x == (tf?DI:SI); /* { dg-bogus "changes signedness" "case 1" } */
}
int g(enum mm1 x)
{
- return x == (tf?DI:-1); /* { dg-bogus "signed and unsigned" "case 2" } */
+ return x == (tf?DI:-1); /* { dg-bogus "changes signedness" "case 2" } */
}
int h(enum mm2 x)
{
- return x == (tf?DI2:SI2); /* { dg-bogus "signed and unsigned" "case 3" } */
+ return x == (tf?DI2:SI2); /* { dg-bogus "changes signedness" "case 3" } */
}
int i(enum mm2 x)
{
- return x == (tf?DI2:-1); /* { dg-warning "signed and unsigned" "case 4" } */
+ return x == (tf?DI2:-1); /* { dg-warning "different signedness" "case 4" } */
}
diff --git a/gcc/testsuite/gcc.dg/compare2.c b/gcc/testsuite/gcc.dg/compare2.c
index 0625eb9c3f6..f742e95f605 100644
--- a/gcc/testsuite/gcc.dg/compare2.c
+++ b/gcc/testsuite/gcc.dg/compare2.c
@@ -9,50 +9,50 @@ int tf = 1;
void f(int x, unsigned int y)
{
/* ?: branches are constants. */
- x > (tf?64:128); /* { dg-bogus "signed and unsigned" "case 1" } */
- y > (tf?64:128); /* { dg-bogus "signed and unsigned" "case 2" } */
+ x > (tf?64:128); /* { dg-bogus "changes signedness" "case 1" } */
+ y > (tf?64:128); /* { dg-bogus "changes signedness" "case 2" } */
/* ?: branches are (recursively) constants. */
- x > (tf?64:(tf?128:256)); /* { dg-bogus "signed and unsigned" "case 3" } */
- y > (tf?64:(tf?128:256)); /* { dg-bogus "signed and unsigned" "case 4" } */
+ x > (tf?64:(tf?128:256)); /* { dg-bogus "changes signedness" "case 3" } */
+ y > (tf?64:(tf?128:256)); /* { dg-bogus "changes signedness" "case 4" } */
/* ?: branches are signed constants. */
- x > (tf?64:-1); /* { dg-bogus "signed and unsigned" "case 5" } */
- y > (tf?64:-1); /* { dg-warning "signed and unsigned" "case 6" } */
+ x > (tf?64:-1); /* { dg-bogus "changes signedness" "case 5" } */
+ y > (tf?64:-1); /* { dg-warning "different signedness" "case 6" } */
/* ?: branches are (recursively) signed constants. */
- x > (tf?64:(tf?128:-1)); /* { dg-bogus "signed and unsigned" "case 7" } */
- y > (tf?64:(tf?128:-1)); /* { dg-warning "signed and unsigned" "case 8" } */
+ x > (tf?64:(tf?128:-1)); /* { dg-bogus "changes signedness" "case 7" } */
+ y > (tf?64:(tf?128:-1)); /* { dg-warning "different signedness" "case 8" } */
/* Statement expression. */
- x > ({tf; 64;}); /* { dg-bogus "signed and unsigned" "case 9" } */
- y > ({tf; 64;}); /* { dg-bogus "signed and unsigned" "case 10" } */
+ x > ({tf; 64;}); /* { dg-bogus "changes signedness" "case 9" } */
+ y > ({tf; 64;}); /* { dg-bogus "changes signedness" "case 10" } */
/* Statement expression with recursive ?: . */
- x > ({tf; tf?64:(tf?128:256);}); /* { dg-bogus "signed and unsigned" "case 11" } */
- y > ({tf; tf?64:(tf?128:256);}); /* { dg-bogus "signed and unsigned" "case 12" } */
+ x > ({tf; tf?64:(tf?128:256);}); /* { dg-bogus "changes signedness" "case 11" } */
+ y > ({tf; tf?64:(tf?128:256);}); /* { dg-bogus "changes signedness" "case 12" } */
/* Statement expression with signed ?:. */
- x > ({tf; tf?64:-1;}); /* { dg-bogus "signed and unsigned" "case 13" } */
- y > ({tf; tf?64:-1;}); /* { dg-warning "signed and unsigned" "case 14" } */
+ x > ({tf; tf?64:-1;}); /* { dg-bogus "changes signedness" "case 13" } */
+ y > ({tf; tf?64:-1;}); /* { dg-warning "different signedness" "case 14" } */
/* Statement expression with recursive signed ?:. */
- x > ({tf; tf?64:(tf?128:-1);}); /* { dg-bogus "signed and unsigned" "case 15" } */
- y > ({tf; tf?64:(tf?128:-1);}); /* { dg-warning "signed and unsigned" "case 16" } */
+ x > ({tf; tf?64:(tf?128:-1);}); /* { dg-bogus "changes signedness" "case 15" } */
+ y > ({tf; tf?64:(tf?128:-1);}); /* { dg-warning "different signedness" "case 16" } */
/* ?: branches are constants. */
- tf ? x : (tf?64:32); /* { dg-bogus "conditional expression" "case 17" } */
- tf ? y : (tf?64:32); /* { dg-bogus "conditional expression" "case 18" } */
+ tf ? x : (tf?64:32); /* { dg-bogus "changes signedness" "case 17" } */
+ tf ? y : (tf?64:32); /* { dg-bogus "changes signedness" "case 18" } */
/* ?: branches are signed constants. */
- tf ? x : (tf?64:-1); /* { dg-bogus "conditional expression" "case 19" } */
- tf ? y : (tf?64:-1); /* { dg-warning "conditional expression" "case 20" } */
+ tf ? x : (tf?64:-1); /* { dg-bogus "changes signedness" "case 19" } */
+ tf ? y : (tf?64:-1); /* { dg-warning "changes signedness" "case 20" } */
/* ?: branches are (recursively) constants. */
- tf ? x : (tf?64:(tf?128:256)); /* { dg-bogus "conditional expression" "case 21" } */
- tf ? y : (tf?64:(tf?128:256)); /* { dg-bogus "conditional expression" "case 22" } */
+ tf ? x : (tf?64:(tf?128:256)); /* { dg-bogus "changes signedness" "case 21" } */
+ tf ? y : (tf?64:(tf?128:256)); /* { dg-bogus "changes signedness" "case 22" } */
/* ?: branches are (recursively) signed constants. */
- tf ? x : (tf?64:(tf?128:-1)); /* { dg-bogus "conditional expression" "case 23" } */
- tf ? y : (tf?64:(tf?128:-1)); /* { dg-warning "conditional expression" "case 24" } */
+ tf ? x : (tf?64:(tf?128:-1)); /* { dg-bogus "changes signedness" "case 23" } */
+ tf ? y : (tf?64:(tf?128:-1)); /* { dg-warning "changes signedness" "case 24" } */
}
diff --git a/gcc/testsuite/gcc.dg/compare3.c b/gcc/testsuite/gcc.dg/compare3.c
index eda3faf2754..836231fb870 100644
--- a/gcc/testsuite/gcc.dg/compare3.c
+++ b/gcc/testsuite/gcc.dg/compare3.c
@@ -11,49 +11,49 @@ void f(int x, unsigned int y)
/* Test comparing conditional expressions containing truth values.
This can occur explicitly, or e.g. when (foo?2:(bar?1:0)) is
optimized into (foo?2:(bar!=0)). */
- x > (tf?64:(tf!=x)); /* { dg-bogus "signed and unsigned" "case 1" } */
- y > (tf?64:(tf!=x)); /* { dg-bogus "signed and unsigned" "case 2" } */
- x > (tf?(tf!=x):64); /* { dg-bogus "signed and unsigned" "case 3" } */
- y > (tf?(tf!=x):64); /* { dg-bogus "signed and unsigned" "case 4" } */
-
- x > (tf?64:(tf==x)); /* { dg-bogus "signed and unsigned" "case 5" } */
- y > (tf?64:(tf==x)); /* { dg-bogus "signed and unsigned" "case 6" } */
- x > (tf?(tf==x):64); /* { dg-bogus "signed and unsigned" "case 7" } */
- y > (tf?(tf==x):64); /* { dg-bogus "signed and unsigned" "case 8" } */
-
- x > (tf?64:(tf>x)); /* { dg-bogus "signed and unsigned" "case 9" } */
- y > (tf?64:(tf>x)); /* { dg-bogus "signed and unsigned" "case 10" } */
- x > (tf?(tf>x):64); /* { dg-bogus "signed and unsigned" "case 11" } */
- y > (tf?(tf>x):64); /* { dg-bogus "signed and unsigned" "case 12" } */
-
- x < (tf?64:(tf<x)); /* { dg-bogus "signed and unsigned" "case 13" } */
- y < (tf?64:(tf<x)); /* { dg-bogus "signed and unsigned" "case 14" } */
- x < (tf?(tf<x):64); /* { dg-bogus "signed and unsigned" "case 15" } */
- y < (tf?(tf<x):64); /* { dg-bogus "signed and unsigned" "case 16" } */
-
- x > (tf?64:(tf>=x)); /* { dg-bogus "signed and unsigned" "case 17" } */
- y > (tf?64:(tf>=x)); /* { dg-bogus "signed and unsigned" "case 18" } */
- x > (tf?(tf>=x):64); /* { dg-bogus "signed and unsigned" "case 19" } */
- y > (tf?(tf>=x):64); /* { dg-bogus "signed and unsigned" "case 20" } */
-
- x > (tf?64:(tf<=x)); /* { dg-bogus "signed and unsigned" "case 21" } */
- y > (tf?64:(tf<=x)); /* { dg-bogus "signed and unsigned" "case 22" } */
- x > (tf?(tf<=x):64); /* { dg-bogus "signed and unsigned" "case 23" } */
- y > (tf?(tf<=x):64); /* { dg-bogus "signed and unsigned" "case 24" } */
-
- x > (tf?64:(tf&&x)); /* { dg-bogus "signed and unsigned" "case 25" } */
- y > (tf?64:(tf&&x)); /* { dg-bogus "signed and unsigned" "case 26" } */
- x > (tf?(tf&&x):64); /* { dg-bogus "signed and unsigned" "case 27" } */
- y > (tf?(tf&&x):64); /* { dg-bogus "signed and unsigned" "case 28" } */
-
- x > (tf?64:(tf||x)); /* { dg-bogus "signed and unsigned" "case 29" } */
- y > (tf?64:(tf||x)); /* { dg-bogus "signed and unsigned" "case 30" } */
- x > (tf?(tf||x):64); /* { dg-bogus "signed and unsigned" "case 31" } */
- y > (tf?(tf||x):64); /* { dg-bogus "signed and unsigned" "case 32" } */
-
- x > (tf?64:(!tf)); /* { dg-bogus "signed and unsigned" "case 33" } */
- y > (tf?64:(!tf)); /* { dg-bogus "signed and unsigned" "case 34" } */
- x > (tf?(!tf):64); /* { dg-bogus "signed and unsigned" "case 35" } */
- y > (tf?(!tf):64); /* { dg-bogus "signed and unsigned" "case 36" } */
+ x > (tf?64:(tf!=x)); /* { dg-bogus "changes signedness" "case 1" } */
+ y > (tf?64:(tf!=x)); /* { dg-bogus "changes signedness" "case 2" } */
+ x > (tf?(tf!=x):64); /* { dg-bogus "changes signedness" "case 3" } */
+ y > (tf?(tf!=x):64); /* { dg-bogus "changes signedness" "case 4" } */
+
+ x > (tf?64:(tf==x)); /* { dg-bogus "changes signedness" "case 5" } */
+ y > (tf?64:(tf==x)); /* { dg-bogus "changes signedness" "case 6" } */
+ x > (tf?(tf==x):64); /* { dg-bogus "changes signedness" "case 7" } */
+ y > (tf?(tf==x):64); /* { dg-bogus "changes signedness" "case 8" } */
+
+ x > (tf?64:(tf>x)); /* { dg-bogus "changes signedness" "case 9" } */
+ y > (tf?64:(tf>x)); /* { dg-bogus "changes signedness" "case 10" } */
+ x > (tf?(tf>x):64); /* { dg-bogus "changes signedness" "case 11" } */
+ y > (tf?(tf>x):64); /* { dg-bogus "changes signedness" "case 12" } */
+
+ x < (tf?64:(tf<x)); /* { dg-bogus "changes signedness" "case 13" } */
+ y < (tf?64:(tf<x)); /* { dg-bogus "changes signedness" "case 14" } */
+ x < (tf?(tf<x):64); /* { dg-bogus "changes signedness" "case 15" } */
+ y < (tf?(tf<x):64); /* { dg-bogus "changes signedness" "case 16" } */
+
+ x > (tf?64:(tf>=x)); /* { dg-bogus "changes signedness" "case 17" } */
+ y > (tf?64:(tf>=x)); /* { dg-bogus "changes signedness" "case 18" } */
+ x > (tf?(tf>=x):64); /* { dg-bogus "changes signedness" "case 19" } */
+ y > (tf?(tf>=x):64); /* { dg-bogus "changes signedness" "case 20" } */
+
+ x > (tf?64:(tf<=x)); /* { dg-bogus "changes signedness" "case 21" } */
+ y > (tf?64:(tf<=x)); /* { dg-bogus "changes signedness" "case 22" } */
+ x > (tf?(tf<=x):64); /* { dg-bogus "changes signedness" "case 23" } */
+ y > (tf?(tf<=x):64); /* { dg-bogus "changes signedness" "case 24" } */
+
+ x > (tf?64:(tf&&x)); /* { dg-bogus "changes signedness" "case 25" } */
+ y > (tf?64:(tf&&x)); /* { dg-bogus "changes signedness" "case 26" } */
+ x > (tf?(tf&&x):64); /* { dg-bogus "changes signedness" "case 27" } */
+ y > (tf?(tf&&x):64); /* { dg-bogus "changes signedness" "case 28" } */
+
+ x > (tf?64:(tf||x)); /* { dg-bogus "changes signedness" "case 29" } */
+ y > (tf?64:(tf||x)); /* { dg-bogus "changes signedness" "case 30" } */
+ x > (tf?(tf||x):64); /* { dg-bogus "changes signedness" "case 31" } */
+ y > (tf?(tf||x):64); /* { dg-bogus "changes signedness" "case 32" } */
+
+ x > (tf?64:(!tf)); /* { dg-bogus "changes signedness" "case 33" } */
+ y > (tf?64:(!tf)); /* { dg-bogus "changes signedness" "case 34" } */
+ x > (tf?(!tf):64); /* { dg-bogus "changes signedness" "case 35" } */
+ y > (tf?(!tf):64); /* { dg-bogus "changes signedness" "case 36" } */
}
diff --git a/gcc/testsuite/gcc.dg/compare4.c b/gcc/testsuite/gcc.dg/compare4.c
index e5dad4d1e45..299d488edf6 100644
--- a/gcc/testsuite/gcc.dg/compare4.c
+++ b/gcc/testsuite/gcc.dg/compare4.c
@@ -10,7 +10,7 @@ int foo(int x, int y, unsigned u)
{
/* A COMPOUND_EXPR is non-negative if the last element is known to
be non-negative. */
- if (u < (bar(), -1)) /*{ dg-warning "9:signed and unsigned" "COMPOUND_EXPR" }*/
+ if (u < (bar(), -1)) /*{ dg-warning "9:different signedness" "COMPOUND_EXPR" }*/
return x;
if (u < (bar(), 10))
return x;
@@ -34,7 +34,7 @@ int foo(int x, int y, unsigned u)
/* A MODIFY_EXPR is non-negative if the new value is known to be
non-negative. */
- if (u < (x = -1)) /* { dg-warning "9:signed and unsigned" "MODIFY_EXPR" } */
+ if (u < (x = -1)) /* { dg-warning "9:different signedness" "MODIFY_EXPR" } */
return x;
if (u < (x = 10))
return x;
diff --git a/gcc/testsuite/gcc.dg/compare5.c b/gcc/testsuite/gcc.dg/compare5.c
index f19c575efb7..3a502f12de9 100644
--- a/gcc/testsuite/gcc.dg/compare5.c
+++ b/gcc/testsuite/gcc.dg/compare5.c
@@ -10,7 +10,7 @@ int foo(int x, int y, unsigned u)
{
/* A *_DIV_EXPR is non-negative if both operands are. */
- if (u < ((x=-22)/33)) /* { dg-warning "signed and unsigned" "DIV_EXPR" } */
+ if (u < ((x=-22)/33)) /* { dg-warning "different signedness" "DIV_EXPR" } */
return x;
if (u < ((x=22)/33))
@@ -25,7 +25,7 @@ int foo(int x, int y, unsigned u)
/* A *_MOD_EXPR is non-negative if the first operand is. */
- if (u < ((x=-22)%33)) /* { dg-warning "signed and unsigned" "MOD_EXPR" } */
+ if (u < ((x=-22)%33)) /* { dg-warning "different signedness" "MOD_EXPR" } */
return x;
if (u < ((x=22)%-33))
diff --git a/gcc/testsuite/gcc.dg/compare7.c b/gcc/testsuite/gcc.dg/compare7.c
index e2fbc04bfc2..b6fe6e78334 100644
--- a/gcc/testsuite/gcc.dg/compare7.c
+++ b/gcc/testsuite/gcc.dg/compare7.c
@@ -6,5 +6,5 @@
int f(unsigned a, int b)
{
- return a < b; /* { dg-bogus "signed and unsigned" } */
+ return a < b; /* { dg-bogus "changes signedness" } */
}
diff --git a/gcc/testsuite/gcc.dg/compare8.c b/gcc/testsuite/gcc.dg/compare8.c
index d723c45a095..d09b69c53a2 100644
--- a/gcc/testsuite/gcc.dg/compare8.c
+++ b/gcc/testsuite/gcc.dg/compare8.c
@@ -4,18 +4,18 @@
int
f(unsigned short a1, unsigned short a2, unsigned int b)
{
- return ((a1+a2)|5) > b ? 2 : 3; /* { dg-bogus "signed and unsigned" } */
+ return ((a1+a2)|5) > b ? 2 : 3; /* { dg-bogus "changes signedness" } */
}
int
g(unsigned short a1, unsigned short a2, unsigned int b)
{
- return ((a1+a2)&5) > b ? 2 : 3; /* { dg-bogus "signed and unsigned" } */
+ return ((a1+a2)&5) > b ? 2 : 3; /* { dg-bogus "changes signedness" } */
}
int
h(unsigned short a1, unsigned short a2, unsigned int b)
{
- return ((a1+a2)^5) > b ? 2 : 3; /* { dg-bogus "signed and unsigned" } */
+ return ((a1+a2)^5) > b ? 2 : 3; /* { dg-bogus "changes signedness" } */
}
diff --git a/gcc/testsuite/gcc.dg/compare9.c b/gcc/testsuite/gcc.dg/compare9.c
index 02150cb1fb6..fba61e42a48 100644
--- a/gcc/testsuite/gcc.dg/compare9.c
+++ b/gcc/testsuite/gcc.dg/compare9.c
@@ -22,20 +22,20 @@ enum mm2
int f(enum mm1 x)
{
- return x == (tf?DI:SI); /* { dg-bogus "signed and unsigned" "case 1" } */
+ return x == (tf?DI:SI); /* { dg-bogus "changes signedness" "case 1" } */
}
int g(enum mm1 x)
{
- return x == (tf?DI:-1); /* { dg-bogus "signed and unsigned" "case 2" } */
+ return x == (tf?DI:-1); /* { dg-bogus "changes signedness" "case 2" } */
}
int h(enum mm2 x)
{
- return x == (tf?DI2:SI2); /* { dg-bogus "signed and unsigned" "case 3" } */
+ return x == (tf?DI2:SI2); /* { dg-bogus "changes signedness" "case 3" } */
}
int i(enum mm2 x)
{
- return x == (tf?DI2:-1); /* { dg-bogus "signed and unsigned" "case 4" } */
+ return x == (tf?DI2:-1); /* { dg-bogus "changes signedness" "case 4" } */
}
diff --git a/gcc/testsuite/gcc.dg/conv-2.c b/gcc/testsuite/gcc.dg/conv-2.c
index 388dee3d746..83468cdad1c 100644
--- a/gcc/testsuite/gcc.dg/conv-2.c
+++ b/gcc/testsuite/gcc.dg/conv-2.c
@@ -12,15 +12,15 @@ int main()
unsigned char *ucp;
signed char *scp;
- ulp = lp; /* { dg-warning " pointer targets in assignment differ in signedness" } */
- lp = ulp; /* { dg-warning " pointer targets in assignment differ in signedness" } */
+ ulp = lp; /* { dg-warning " pointer targets in assignment from 'long int \\*' to 'long unsigned int \\*' differ in signedness" } */
+ lp = ulp; /* { dg-warning " pointer targets in assignment from 'long unsigned int \\*' to 'long int \\*' differ in signedness" } */
f1(ulp); /* { dg-warning " differ in signedness" } */
f2(lp); /* { dg-warning " differ in signedness" } */
- cp = ucp; /* { dg-warning " pointer targets in assignment differ in signedness" } */
- cp = scp; /* { dg-warning " pointer targets in assignment differ in signedness" } */
- ucp = scp; /* { dg-warning " pointer targets in assignment differ in signedness" } */
- ucp = cp; /* { dg-warning " pointer targets in assignment differ in signedness" } */
- scp = ucp; /* { dg-warning " pointer targets in assignment differ in signedness" } */
- scp = cp; /* { dg-warning " pointer targets in assignment differ in signedness" } */
+ cp = ucp; /* { dg-warning " pointer targets in assignment from 'unsigned char \\*' to 'char \\*' differ in signedness" } */
+ cp = scp; /* { dg-warning " pointer targets in assignment from 'signed char \\*' to 'char \\*' differ in signedness" } */
+ ucp = scp; /* { dg-warning " pointer targets in assignment from 'signed char \\*' to 'unsigned char \\*' differ in signedness" } */
+ ucp = cp; /* { dg-warning " pointer targets in assignment from 'char \\*' to 'unsigned char \\*' differ in signedness" } */
+ scp = ucp; /* { dg-warning " pointer targets in assignment from 'unsigned char \\*' to 'signed char \\*' differ in signedness" } */
+ scp = cp; /* { dg-warning " pointer targets in assignment from 'char \\*' to 'signed char \\*' differ in signedness" } */
}
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/stacked-qualified-types-3.c b/gcc/testsuite/gcc.dg/debug/dwarf2/stacked-qualified-types-3.c
index dac4405b36c..efa3fa0b1f2 100644
--- a/gcc/testsuite/gcc.dg/debug/dwarf2/stacked-qualified-types-3.c
+++ b/gcc/testsuite/gcc.dg/debug/dwarf2/stacked-qualified-types-3.c
@@ -31,4 +31,4 @@ char * _Atomic restrict h;
char * _Atomic i;
char * restrict j;
-/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_(?:const|volatile|atomic|restrict)_type" 8 { xfail { powerpc-ibm-aix* } } } } */
+/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_(?:const|volatile|atomic|restrict)_type" 8 } } */
diff --git a/gcc/testsuite/gcc.dg/diagnostic-types-1.c b/gcc/testsuite/gcc.dg/diagnostic-types-1.c
new file mode 100644
index 00000000000..fc4b104df05
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/diagnostic-types-1.c
@@ -0,0 +1,57 @@
+/* PR c/81233 */
+/* { dg-do compile } */
+/* { dg-options "-Wc++-compat -Wpedantic" } */
+/* Test we're printing the types, like the good compiler we are. */
+
+enum E1 { A } e;
+enum E2 { B };
+extern void foo_E (enum E1); /* { dg-message "expected 'enum E1' but argument is of type 'int'" } */
+extern void foo (char *); /* { dg-message "expected 'char \\*' but argument is of type 'int \\*'" } */
+extern void foo2 (int *); /* { dg-message "expected 'int \\*' but argument is of type 'int'" } */
+extern void foo3 (int); /* { dg-message "expected 'int' but argument is of type 'int \\*'" } */
+extern void foo4 (int *); /* { dg-message "expected 'int \\*' but argument is of type 'unsigned int \\*'" } */
+
+char *
+fn0 (int *p, char *q)
+{
+ p = q; /* { dg-warning "assignment to 'int \\*' from incompatible pointer type 'char \\*'" } */
+ int *r = q; /* { dg-warning "initialization of 'int \\*' from incompatible pointer type 'char \\*'" } */
+ foo (r); /* { dg-warning "passing argument 1 of 'foo' from incompatible pointer type" } */
+ return p; /* { dg-warning "returning 'int \\*' from a function with incompatible return type 'char \\*'" } */
+}
+
+int *
+fn1 (int *p)
+{
+ p = 1; /* { dg-warning "assignment to 'int \\*' from 'int' makes pointer from integer without a cast" } */
+ int *q = 1; /* { dg-warning "initialization of 'int \\*' from 'int' makes pointer from integer without a cast" } */
+ foo2 (1); /* { dg-warning "passing argument 1 of 'foo2' makes pointer from integer without a cast" } */
+ return 1; /* { dg-warning "returning 'int' from a function with return type 'int \\*' makes pointer from integer without a cast" } */
+}
+
+int
+fn2 (int i, int *p)
+{
+ i = p; /* { dg-warning "assignment to 'int' from 'int \\*' makes integer from pointer without a cast" } */
+ int j = p; /* { dg-warning "initialization of 'int' from 'int \\*' makes integer from pointer without a cast" } */
+ foo3 (p); /* { dg-warning "passing argument 1 of 'foo3' makes integer from pointer without a cast" } */
+ return p; /* { dg-warning "returning 'int \\*' from a function with return type 'int' makes integer from pointer without a cast" } */
+}
+
+int *
+fn3 (int *p, unsigned int *u)
+{
+ p = u; /* { dg-warning "pointer targets in assignment from 'unsigned int \\*' to 'int \\*' differ in signedness" } */
+ int *q = u; /* { dg-warning "pointer targets in initialization of 'int \\*' from 'unsigned int \\*' differ in signedness" } */
+ foo4 (u); /* { dg-warning "pointer targets in passing argument 1 of 'foo4' differ in signedness" } */
+ return u; /* { dg-warning "pointer targets in returning 'unsigned int \\*' from a function with return type 'int \\*' differ in signedness" } */
+}
+
+enum E1
+fn4 (void)
+{
+ foo_E (B); /* { dg-warning "enum conversion when passing argument" } */
+ e = 0; /* { dg-warning "enum conversion from 'int' to 'enum E1' in assignment is invalid" } */
+ enum E1 f = 0; /* { dg-warning "enum conversion from 'int' to 'enum E1' in initialization is invalid" } */
+ return 0; /* { dg-warning "enum conversion from 'int' to 'enum E1' in return is invalid" } */
+}
diff --git a/gcc/testsuite/gcc.dg/guality/pr25967-1.c b/gcc/testsuite/gcc.dg/guality/pr25967-1.c
new file mode 100644
index 00000000000..0924d1c03c1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/guality/pr25967-1.c
@@ -0,0 +1,70 @@
+/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-g -mgeneral-regs-only" } */
+
+extern void exit (int);
+
+typedef unsigned int uword_t __attribute__ ((mode (__word__)));
+
+#define ERROR 0x12345670
+#define IP 0x12345671
+#define CS 0x12345672
+#define FLAGS 0x12345673
+#define SP 0x12345674
+#define SS 0x12345675
+
+#define STRING(x) XSTRING(x)
+#define XSTRING(x) #x
+#define ASMNAME(cname) ASMNAME2 (__USER_LABEL_PREFIX__, cname)
+#define ASMNAME2(prefix, cname) XSTRING (prefix) cname
+
+struct interrupt_frame
+{
+ uword_t ip;
+ uword_t cs;
+ uword_t flags;
+ uword_t sp;
+ uword_t ss;
+};
+
+__attribute__((naked, used))
+void
+fn (void)
+{
+ register uword_t *sp __asm__("sp");
+ uword_t error = *sp;
+ struct interrupt_frame *frame = (struct interrupt_frame *) (sp + 1);
+ if (ERROR != error) /* BREAK */
+ __builtin_abort ();
+ if (IP != frame->ip)
+ __builtin_abort ();
+ if (CS != frame->cs)
+ __builtin_abort ();
+ if (FLAGS != frame->flags)
+ __builtin_abort ();
+ if (SP != frame->sp)
+ __builtin_abort ();
+ if (SS != frame->ss)
+ __builtin_abort ();
+
+ exit (0);
+}
+
+int
+main ()
+{
+ asm ("push $" STRING (SS) "; \
+ push $" STRING (SP) "; \
+ push $" STRING (FLAGS) "; \
+ push $" STRING (CS) "; \
+ push $" STRING (IP) "; \
+ push $" STRING (ERROR) "; \
+ jmp " ASMNAME ("fn"));
+ return 0;
+}
+
+/* { dg-final { gdb-test 36 "error" "0x12345670" } } */
+/* { dg-final { gdb-test 36 "frame->ip" "0x12345671" } } */
+/* { dg-final { gdb-test 36 "frame->cs" "0x12345672" } } */
+/* { dg-final { gdb-test 36 "frame->flags" "0x12345673" } } */
+/* { dg-final { gdb-test 36 "frame->sp" "0x12345674" } } */
+/* { dg-final { gdb-test 36 "frame->ss" "0x12345675" } } */
diff --git a/gcc/testsuite/gcc.dg/guality/pr25967-2.c b/gcc/testsuite/gcc.dg/guality/pr25967-2.c
new file mode 100644
index 00000000000..c3b59e21251
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/guality/pr25967-2.c
@@ -0,0 +1,64 @@
+/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-g -mgeneral-regs-only" } */
+
+extern void exit (int);
+
+typedef unsigned int uword_t __attribute__ ((mode (__word__)));
+
+#define IP 0x12345671
+#define CS 0x12345672
+#define FLAGS 0x12345673
+#define SP 0x12345674
+#define SS 0x12345675
+
+#define STRING(x) XSTRING(x)
+#define XSTRING(x) #x
+#define ASMNAME(cname) ASMNAME2 (__USER_LABEL_PREFIX__, cname)
+#define ASMNAME2(prefix, cname) XSTRING (prefix) cname
+
+struct interrupt_frame
+{
+ uword_t ip;
+ uword_t cs;
+ uword_t flags;
+ uword_t sp;
+ uword_t ss;
+};
+
+__attribute__((naked, used))
+void
+fn (void)
+{
+ register uword_t *sp __asm__("sp");
+ struct interrupt_frame *frame = (struct interrupt_frame *) sp;
+ if (IP != frame->ip) /* BREAK */
+ __builtin_abort ();
+ if (CS != frame->cs)
+ __builtin_abort ();
+ if (FLAGS != frame->flags)
+ __builtin_abort ();
+ if (SP != frame->sp)
+ __builtin_abort ();
+ if (SS != frame->ss)
+ __builtin_abort ();
+
+ exit (0);
+}
+
+int
+main ()
+{
+ asm ("push $" STRING (SS) "; \
+ push $" STRING (SP) "; \
+ push $" STRING (FLAGS) "; \
+ push $" STRING (CS) "; \
+ push $" STRING (IP) "; \
+ jmp " ASMNAME ("fn"));
+ return 0;
+}
+
+/* { dg-final { gdb-test 34 "frame->ip" "0x12345671" } } */
+/* { dg-final { gdb-test 34 "frame->cs" "0x12345672" } } */
+/* { dg-final { gdb-test 34 "frame->flags" "0x12345673" } } */
+/* { dg-final { gdb-test 34 "frame->sp" "0x12345674" } } */
+/* { dg-final { gdb-test 34 "frame->ss" "0x12345675" } } */
diff --git a/gcc/testsuite/gcc.dg/guality/pr68037-1.c b/gcc/testsuite/gcc.dg/guality/pr68037-1.c
index 74f61ec5f96..44cab58659f 100644
--- a/gcc/testsuite/gcc.dg/guality/pr68037-1.c
+++ b/gcc/testsuite/gcc.dg/guality/pr68037-1.c
@@ -59,9 +59,9 @@ main ()
return 0;
}
-/* { dg-final { gdb-test 31 "error" "0x12345670" } } */
-/* { dg-final { gdb-test 31 "frame->ip" "0x12345671" } } */
-/* { dg-final { gdb-test 31 "frame->cs" "0x12345672" } } */
-/* { dg-final { gdb-test 31 "frame->flags" "0x12345673" } } */
-/* { dg-final { gdb-test 31 "frame->sp" "0x12345674" } } */
-/* { dg-final { gdb-test 31 "frame->ss" "0x12345675" } } */
+/* { dg-final { gdb-test 33 "error" "0x12345670" } } */
+/* { dg-final { gdb-test 33 "frame->ip" "0x12345671" } } */
+/* { dg-final { gdb-test 33 "frame->cs" "0x12345672" } } */
+/* { dg-final { gdb-test 33 "frame->flags" "0x12345673" } } */
+/* { dg-final { gdb-test 33 "frame->sp" "0x12345674" } } */
+/* { dg-final { gdb-test 33 "frame->ss" "0x12345675" } } */
diff --git a/gcc/testsuite/gcc.dg/init-bad-7.c b/gcc/testsuite/gcc.dg/init-bad-7.c
index 738ed605060..de5e570978c 100644
--- a/gcc/testsuite/gcc.dg/init-bad-7.c
+++ b/gcc/testsuite/gcc.dg/init-bad-7.c
@@ -8,4 +8,4 @@ struct f
};
char b[10];
-struct f g = {b}; /* { dg-warning "initialization from incompatible pointer type|near initialization for" } */
+struct f g = {b}; /* { dg-warning "initialization of 'int \\*' from incompatible pointer type|near initialization for" } */
diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-pta-18.c b/gcc/testsuite/gcc.dg/ipa/ipa-pta-18.c
new file mode 100644
index 00000000000..01b09764097
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/ipa-pta-18.c
@@ -0,0 +1,26 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fipa-pta -fdump-ipa-pta2-details -fdump-tree-fre3-details" } */
+
+static int __attribute__((noipa))
+foo (int *p, int *q)
+{
+ *p = 1;
+ *q = 0;
+ return *p;
+}
+
+extern void abort (void);
+
+int main()
+{
+ int a, b;
+ if (foo (&a, &b) != 1)
+ abort ();
+ return 0;
+}
+
+/* Verify we can disambiguate *p and *q in foo. */
+
+/* { dg-final { scan-ipa-dump "foo.arg0 = &a" "pta2" } } */
+/* { dg-final { scan-ipa-dump "foo.arg1 = &b" "pta2" } } */
+/* { dg-final { scan-tree-dump-not "Replaced \\\*p_2\\\(D\\\) with 1" "fre3" } } */
diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-sra-11.c b/gcc/testsuite/gcc.dg/ipa/ipa-sra-11.c
new file mode 100644
index 00000000000..e91423a62fb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/ipa-sra-11.c
@@ -0,0 +1,39 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fipa-sra -fdump-tree-eipa_sra-details" } */
+
+struct bovid
+{
+ float red;
+ int green;
+ void *blue;
+};
+
+extern int printf (const char *, ...);
+extern void abort (void);
+
+static int
+__attribute__((noipa))
+ox (struct bovid cow)
+{
+ if (cow.green != 6)
+ abort ();
+
+ printf ("green: %f\nblue: %p\nblue again: %p\n", cow.green,
+ cow.blue, cow.blue);
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ struct bovid cow;
+
+ cow.red = 7.4;
+ cow.green = 6;
+ cow.blue = &cow;
+
+ ox (cow);
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-not "About to replace expr" "eipa_sra" } } */
diff --git a/gcc/testsuite/gcc.dg/ipa/pr81520.c b/gcc/testsuite/gcc.dg/ipa/pr81520.c
new file mode 100644
index 00000000000..b5d33d2dc96
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/pr81520.c
@@ -0,0 +1,11 @@
+/* PR ipa/81520 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fPIC" } */
+/* { dg-require-effective-target fpic } */
+
+char
+a (int b)
+{
+ a (b);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/ipa/pr81696.c b/gcc/testsuite/gcc.dg/ipa/pr81696.c
new file mode 100644
index 00000000000..2d3d63ff0bb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/pr81696.c
@@ -0,0 +1,26 @@
+/* { dg-options "-O2 -fdump-ipa-icf-details" } */
+
+int
+main (int argc, char **argv)
+{
+ __label__ lab4, lab5, lab6;
+
+ void foo (void) { goto lab4; }
+ void foo2 (void) { goto lab4; }
+ void bar (void) { goto lab5; }
+ void baz (void) { goto lab6; }
+
+ if (argc)
+ foo ();
+ else
+ foo2 ();
+
+ lab4:;
+ bar ();
+ lab5:;
+ baz ();
+ lab6:;
+ return 0;
+}
+
+/* { dg-final { scan-ipa-dump "Equal symbols: 1" "icf" } } */
diff --git a/gcc/testsuite/gcc.dg/no-strict-overflow-7.c b/gcc/testsuite/gcc.dg/no-strict-overflow-7.c
index 19e1b55bb12..0e73d486f22 100644
--- a/gcc/testsuite/gcc.dg/no-strict-overflow-7.c
+++ b/gcc/testsuite/gcc.dg/no-strict-overflow-7.c
@@ -3,8 +3,8 @@
/* Source: Ian Lance Taylor. Dual of strict-overflow-6.c. */
-/* We can only simplify the conditional when using strict overflow
- semantics. */
+/* We can simplify the conditional because pointer overflow always has
+ undefined semantics. */
int
foo (char* p)
@@ -12,4 +12,4 @@ foo (char* p)
return p + 1000 < p;
}
-/* { dg-final { scan-tree-dump "\[+\]\[ \]*1000" "optimized" } } */
+/* { dg-final { scan-tree-dump "return 0" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/noncompile/pr81289.c b/gcc/testsuite/gcc.dg/noncompile/pr81289.c
new file mode 100644
index 00000000000..dd211466718
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/noncompile/pr81289.c
@@ -0,0 +1,8 @@
+/* PR c/81289 */
+/* { dg-do compile } */
+
+int
+fn (int mm)
+{
+ mm == *&&
+} /* { dg-error "expected identifier" } */
diff --git a/gcc/testsuite/gcc.dg/overflow-warn-1.c b/gcc/testsuite/gcc.dg/overflow-warn-1.c
index 8eb322579cf..a9d9fbae148 100644
--- a/gcc/testsuite/gcc.dg/overflow-warn-1.c
+++ b/gcc/testsuite/gcc.dg/overflow-warn-1.c
@@ -47,10 +47,10 @@ static int sc = INT_MAX + 1; /* { dg-warning "25:integer overflow in expression"
constants. The third has the overflow in an unevaluated
subexpression, so is a null pointer constant. */
void *p = 0 * (INT_MAX + 1); /* { dg-warning "integer overflow in expression" } */
-/* { dg-warning "initialization makes pointer from integer without a cast" "null" { target *-*-* } .-1 } */
+/* { dg-warning "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-1 } */
void *q = 0 * (1 / 0); /* { dg-warning "division by zero" } */
-/* { dg-error "initializer element is not computable at load time" "constant" { target *-*-* } .-1 } */
-/* { dg-warning "initialization makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */
+/* { dg-error "initializer element is not constant" "constant" { target *-*-* } .-1 } */
+/* { dg-warning "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */
void *r = (1 ? 0 : INT_MAX+1);
void
diff --git a/gcc/testsuite/gcc.dg/overflow-warn-2.c b/gcc/testsuite/gcc.dg/overflow-warn-2.c
index f048d6dae2a..9232800fb2e 100644
--- a/gcc/testsuite/gcc.dg/overflow-warn-2.c
+++ b/gcc/testsuite/gcc.dg/overflow-warn-2.c
@@ -47,10 +47,10 @@ static int sc = INT_MAX + 1; /* { dg-warning "integer overflow in expression" }
constants. The third has the overflow in an unevaluated
subexpression, so is a null pointer constant. */
void *p = 0 * (INT_MAX + 1); /* { dg-warning "integer overflow in expression" } */
-/* { dg-warning "initialization makes pointer from integer without a cast" "null" { target *-*-* } .-1 } */
+/* { dg-warning "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-1 } */
void *q = 0 * (1 / 0); /* { dg-warning "division by zero" } */
-/* { dg-error "initializer element is not computable at load time" "constant" { target *-*-* } .-1 } */
-/* { dg-warning "initialization makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */
+/* { dg-error "initializer element is not constant" "constant" { target *-*-* } .-1 } */
+/* { dg-warning "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */
void *r = (1 ? 0 : INT_MAX+1);
void
diff --git a/gcc/testsuite/gcc.dg/overflow-warn-3.c b/gcc/testsuite/gcc.dg/overflow-warn-3.c
index 664011e401d..f64047795c7 100644
--- a/gcc/testsuite/gcc.dg/overflow-warn-3.c
+++ b/gcc/testsuite/gcc.dg/overflow-warn-3.c
@@ -53,10 +53,10 @@ static int sc = INT_MAX + 1; /* { dg-warning "integer overflow in expression" }
subexpression, so is a null pointer constant. */
void *p = 0 * (INT_MAX + 1); /* { dg-warning "integer overflow in expression" } */
/* { dg-warning "overflow in constant expression" "constant" { target *-*-* } .-1 } */
-/* { dg-warning "initialization makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */
+/* { dg-warning "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */
void *q = 0 * (1 / 0); /* { dg-warning "division by zero" } */
-/* { dg-error "initializer element is not computable at load time" "constant" { target *-*-* } .-1 } */
-/* { dg-warning "initialization makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */
+/* { dg-error "initializer element is not constant" "constant" { target *-*-* } .-1 } */
+/* { dg-warning "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */
void *r = (1 ? 0 : INT_MAX+1);
void
diff --git a/gcc/testsuite/gcc.dg/overflow-warn-4.c b/gcc/testsuite/gcc.dg/overflow-warn-4.c
index 52677ce897a..eb595aa7914 100644
--- a/gcc/testsuite/gcc.dg/overflow-warn-4.c
+++ b/gcc/testsuite/gcc.dg/overflow-warn-4.c
@@ -53,10 +53,10 @@ static int sc = INT_MAX + 1; /* { dg-warning "integer overflow in expression" }
subexpression, so is a null pointer constant. */
void *p = 0 * (INT_MAX + 1); /* { dg-warning "integer overflow in expression" } */
/* { dg-error "overflow in constant expression" "constant" { target *-*-* } .-1 } */
-/* { dg-error "initialization makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */
+/* { dg-error "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */
void *q = 0 * (1 / 0); /* { dg-warning "division by zero" } */
-/* { dg-error "initializer element is not computable at load time" "constant" { target *-*-* } .-1 } */
-/* { dg-error "initialization makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */
+/* { dg-error "initializer element is not constant" "constant" { target *-*-* } .-1 } */
+/* { dg-error "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */
void *r = (1 ? 0 : INT_MAX+1);
void
diff --git a/gcc/testsuite/gcc.dg/parm-impl-decl-1.c b/gcc/testsuite/gcc.dg/parm-impl-decl-1.c
index 5c7ddb0a259..c1219273c75 100644
--- a/gcc/testsuite/gcc.dg/parm-impl-decl-1.c
+++ b/gcc/testsuite/gcc.dg/parm-impl-decl-1.c
@@ -7,7 +7,7 @@
/* Implicit function declaration in attribute in definition (testcase
from bug). */
int
-foo (int __attribute__ ((__mode__ (vector_size(8)))) i) /* { dg-warning "'__mode__' attribute ignored" } */
+foo (int __attribute__ ((__mode__ (vector_size(8)))) i) /* { dg-warning "'mode' attribute ignored" } */
{
return (long long) i;
}
diff --git a/gcc/testsuite/gcc.dg/parm-impl-decl-3.c b/gcc/testsuite/gcc.dg/parm-impl-decl-3.c
index 904295258d7..20197b52402 100644
--- a/gcc/testsuite/gcc.dg/parm-impl-decl-3.c
+++ b/gcc/testsuite/gcc.dg/parm-impl-decl-3.c
@@ -4,7 +4,7 @@
/* { dg-options "-g -std=gnu89" } */
int
-foo (int __attribute__ ((__mode__ (vector_size(8)))) i) /* { dg-warning "'__mode__' attribute ignored" } */
+foo (int __attribute__ ((__mode__ (vector_size(8)))) i) /* { dg-warning "'mode' attribute ignored" } */
{
return (long long) i;
}
diff --git a/gcc/testsuite/gcc.dg/pie-7.c b/gcc/testsuite/gcc.dg/pie-7.c
new file mode 100644
index 00000000000..e118a98bafd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pie-7.c
@@ -0,0 +1,7 @@
+/* { dg-do run { target pie } } */
+/* { dg-options "-fno-pie -no-pie" } */
+
+int main(void)
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pie-static-1.c b/gcc/testsuite/gcc.dg/pie-static-1.c
new file mode 100644
index 00000000000..4273049be7b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pie-static-1.c
@@ -0,0 +1,9 @@
+/* { dg-do run } */
+/* { dg-require-effective-target static } */
+/* { dg-require-effective-target pie } */
+/* { dg-options "-static -fpie -pie" } */
+
+int main(void)
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pie-static-2.c b/gcc/testsuite/gcc.dg/pie-static-2.c
new file mode 100644
index 00000000000..a673c997af8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pie-static-2.c
@@ -0,0 +1,9 @@
+/* { dg-do run } */
+/* { dg-require-effective-target pie } */
+/* { dg-require-effective-target static } */
+/* { dg-options "-fpie -pie -static" } */
+
+int main(void)
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pointer-array-atomic.c b/gcc/testsuite/gcc.dg/pointer-array-atomic.c
index 55b58e84e35..bb63797b237 100644
--- a/gcc/testsuite/gcc.dg/pointer-array-atomic.c
+++ b/gcc/testsuite/gcc.dg/pointer-array-atomic.c
@@ -6,8 +6,8 @@ void transpose0(double* out, _Atomic double* in) { }
void transpose1(double out[2][2], _Atomic double in[2][2]) { }
void transpose2(double out[2][2][2], _Atomic double in[2][2][2]) { }
// return
-int (*x2(_Atomic int x[3][3]))[3] { return x; } /* { dg-warning "return from incompatible pointer type" } */
-_Atomic int (*x3(int x[3][3]))[3] { return x; } /* { dg-warning "return from incompatible pointer type" } */
+int (*x2(_Atomic int x[3][3]))[3] { return x; } /* { dg-warning "returning '_Atomic int \\(\\*\\)\\\[3\\\]' from a function with incompatible return type" } */
+_Atomic int (*x3(int x[3][3]))[3] { return x; } /* { dg-warning "returning 'int \\(\\*\\)\\\[3\\\]' from a function with incompatible return type" } */
void test(void)
{
double x0[2];
@@ -31,13 +31,13 @@ void test(void)
transpose2(y2, o2); /* { dg-warning "passing argument 2 of 'transpose2' from incompatible pointer type" } */
transpose2(y2, x2); /* { dg-warning "passing argument 2 of 'transpose2' from incompatible pointer type" } */
// initialization
- _Atomic double (*x0p) = x0; /* { dg-warning "initialization from incompatible pointer type" } */
- _Atomic double (*x1p)[2] = x1; /* { dg-warning "initialization from incompatible pointer type" } */
- _Atomic double (*x2p)[2][2] = x2; /* { dg-warning "initialization from incompatible pointer type" } */
+ _Atomic double (*x0p) = x0; /* { dg-warning "initialization of '_Atomic double \\*' from incompatible pointer type" } */
+ _Atomic double (*x1p)[2] = x1; /* { dg-warning "initialization of '_Atomic double \\(\\*\\)\\\[2\\\]' from incompatible pointer type" } */
+ _Atomic double (*x2p)[2][2] = x2; /* { dg-warning "initialization of '_Atomic double \\(\\*\\)\\\[2\\\]\\\[2\\\]' from incompatible pointer type" } */
// assignment
- x0p = x0; /* { dg-warning "assignment from incompatible pointer type" } */
- x1p = x1; /* { dg-warning "assignment from incompatible pointer type" } */
- x2p = x2; /* { dg-warning "assignment from incompatible pointer type" } */
+ x0p = x0; /* { dg-warning "assignment to '_Atomic double \\*' from incompatible pointer type" } */
+ x1p = x1; /* { dg-warning "assignment to '_Atomic double \\(\\*\\)\\\[2\\\]' from incompatible pointer type" } */
+ x2p = x2; /* { dg-warning "assignment to '_Atomic double \\(\\*\\)\\\[2\\\]\\\[2\\\]' from incompatible pointer type" } */
// subtraction
&(x0[1]) - &(z0[0]); /* { dg-error "invalid operands to binary" } */
&(x1[1]) - &(z1[0]); /* { dg-error "invalid operands to binary" } */
diff --git a/gcc/testsuite/gcc.dg/pr11492.c b/gcc/testsuite/gcc.dg/pr11492.c
index cf17712dde1..86435a83e79 100644
--- a/gcc/testsuite/gcc.dg/pr11492.c
+++ b/gcc/testsuite/gcc.dg/pr11492.c
@@ -5,7 +5,7 @@ int main( void )
{
unsigned int a;
unsigned char b;
- for ( a = 0, b = 2; a > b * 100; a++ ) /* { dg-bogus "comparison between signed and unsigned integer" } */
+ for ( a = 0, b = 2; a > b * 100; a++ ) /* { dg-bogus "comparison of integer expressions of different signedness" } */
{ ; }
return 0;
diff --git a/gcc/testsuite/gcc.dg/pr26865.c b/gcc/testsuite/gcc.dg/pr26865.c
index d9f1fe0d3a1..f49d1d29f9c 100644
--- a/gcc/testsuite/gcc.dg/pr26865.c
+++ b/gcc/testsuite/gcc.dg/pr26865.c
@@ -4,5 +4,5 @@
void
foo (void)
{
- char *e = alloca (100); /* { dg-warning "implicit declaration|initialization makes" } */
+ char *e = alloca (100); /* { dg-warning "implicit declaration|initialization of 'char \\*' from 'int' makes" } */
}
diff --git a/gcc/testsuite/gcc.dg/pr35430.c b/gcc/testsuite/gcc.dg/pr35430.c
index ab5e4cac8a5..7365ccfcf94 100644
--- a/gcc/testsuite/gcc.dg/pr35430.c
+++ b/gcc/testsuite/gcc.dg/pr35430.c
@@ -6,5 +6,5 @@ void
foo (__complex__ int i)
{
i == 0u;
- i == ~1u; /* { dg-warning "comparison between signed and unsigned integer expressions" } */
+ i == ~1u; /* { dg-warning "comparison of integer expressions of different signedness" } */
}
diff --git a/gcc/testsuite/gcc.dg/pr44290-1.c b/gcc/testsuite/gcc.dg/pr44290-1.c
index c036db654f3..05d2454fc31 100644
--- a/gcc/testsuite/gcc.dg/pr44290-1.c
+++ b/gcc/testsuite/gcc.dg/pr44290-1.c
@@ -1,4 +1,5 @@
-/* { dg-do compile { target arm*-*-* avr-*-* mcore-*-* rx-*-* spu-*-* } } */
+/* { dg-do compile } */
+/* { dg-require-effective-target naked_functions } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
static void __attribute__((naked))
diff --git a/gcc/testsuite/gcc.dg/pr44290-2.c b/gcc/testsuite/gcc.dg/pr44290-2.c
index 17615366267..07335109114 100644
--- a/gcc/testsuite/gcc.dg/pr44290-2.c
+++ b/gcc/testsuite/gcc.dg/pr44290-2.c
@@ -1,4 +1,5 @@
-/* { dg-do compile { target arm*-*-* avr-*-* mcore-*-* rx-*-* spu-*-* } } */
+/* { dg-do compile } */
+/* { dg-require-effective-target naked_functions } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
static unsigned long __attribute__((naked))
diff --git a/gcc/testsuite/gcc.dg/pr46932.c b/gcc/testsuite/gcc.dg/pr46932.c
new file mode 100644
index 00000000000..4eb1a99e1bd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr46932.c
@@ -0,0 +1,16 @@
+/* { dg-options "-O2 -fdump-rtl-auto_inc_dec" } */
+
+/* Build on targets which have pre increment. */
+/* { dg-do compile { target aarch64*-*-* arm*-*-* rs6000-*-* powerpc*-*-* arc*-*-* m32r-*-* tic6x-*-* } } */
+
+/* Check that accesses based on the frame pointer do not
+ use auto increment. */
+
+extern void foo(char*);
+void t01(char t)
+{
+ char c = t;
+ foo(&c);
+}
+
+/* { dg-final { scan-rtl-dump-not "success" "auto_inc_dec" } } */
diff --git a/gcc/testsuite/gcc.dg/pr56727-1.c b/gcc/testsuite/gcc.dg/pr56727-1.c
new file mode 100644
index 00000000000..ffc133545e7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr56727-1.c
@@ -0,0 +1,23 @@
+/* { dg-do compile { target fpic } } */
+/* { dg-options "-O2 -fPIC" } */
+/* { dg-final { scan-assembler-not "@(PLT|plt)" { target i?86-*-* x86_64-*-* powerpc*-*-* } } } */
+
+#define define_func(type) \
+ void f_ ## type (type b) { f_ ## type (0); } \
+ void __attribute__((noinline, noclone)) f_noinline_ ## type (type b) \
+ { f_noinline_ ## type (0); }
+
+define_func(char)
+define_func(short)
+define_func(int)
+define_func(long)
+
+int foo(int n)
+{
+ return (n == 1 || n == 2) ? 1 : foo(n-1) * foo(n-2);
+}
+
+int __attribute__((noinline, noclone)) foo_noinline(int n)
+{
+ return (n == 1 || n == 2) ? 1 : foo_noinline(n-1) * foo_noinline(n-2);
+}
diff --git a/gcc/testsuite/gcc.dg/pr56727-2.c b/gcc/testsuite/gcc.dg/pr56727-2.c
new file mode 100644
index 00000000000..62a74d1ea31
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr56727-2.c
@@ -0,0 +1,17 @@
+/* { dg-do compile { target fpic } } */
+/* { dg-options "-O2 -fPIC" } */
+/* { dg-require-alias "" } */
+/* { dg-final { scan-assembler "@(PLT|plt)" { target i?86-*-* x86_64-*-* powerpc*-*-linux* } } } */
+
+__attribute__((noinline, noclone))
+void f (short b)
+{
+ f (0);
+}
+
+static void g (short) __attribute__ ((alias ("f")));
+
+void h ()
+{
+ g (0);
+}
diff --git a/gcc/testsuite/gcc.dg/pr57371-5.c b/gcc/testsuite/gcc.dg/pr57371-5.c
new file mode 100644
index 00000000000..ddad25db622
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr57371-5.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-optimized" } */
+/* { dg-require-effective-target dfp } */
+
+/* We do not support DFPs. */
+
+int foo(short x) {
+ /* { dg-final { scan-tree-dump "\\(_Decimal32\\)" "optimized" } } */
+ return (_Decimal32) x != 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr60087.c b/gcc/testsuite/gcc.dg/pr60087.c
index 9cdd5897354..c6cf7aa4607 100644
--- a/gcc/testsuite/gcc.dg/pr60087.c
+++ b/gcc/testsuite/gcc.dg/pr60087.c
@@ -10,5 +10,5 @@ foo (unsigned int ui, int i)
b = 0 != ~uc; /* { dg-warning "9:promoted ~unsigned is always non-zero" } */
b = 2 != ~uc; /* { dg-warning "9:comparison of promoted ~unsigned with constant" } */
b = uc == ~uc; /* { dg-warning "10:comparison of promoted ~unsigned with unsigned" } */
- b = i == ui; /* { dg-warning "9:comparison between signed and unsigned integer expressions" } */
+ b = i == ui; /* { dg-warning "9:comparison of integer expressions of different signedness" } */
}
diff --git a/gcc/testsuite/gcc.dg/pr61162-2.c b/gcc/testsuite/gcc.dg/pr61162-2.c
index 1045408d736..4aa8493d1a3 100644
--- a/gcc/testsuite/gcc.dg/pr61162-2.c
+++ b/gcc/testsuite/gcc.dg/pr61162-2.c
@@ -8,7 +8,7 @@ struct s { int a; };
enum e
fn1 (void)
{
- return 0; /* { dg-warning "10:enum conversion in return" } */
+ return 0; /* { dg-warning "10:enum conversion from 'int' to 'enum e' in return" } */
}
int
@@ -26,19 +26,19 @@ fn3 (void)
int
fn4 (int *a)
{
- return a; /* { dg-warning "10:return makes integer from pointer without a cast" } */
+ return a; /* { dg-warning "10:returning 'int \\*' from a function with return type 'int' makes integer from pointer without a cast" } */
}
int *
fn5 (int a)
{
- return a; /* { dg-warning "10:return makes pointer from integer without a cast" } */
+ return a; /* { dg-warning "10:returning 'int' from a function with return type 'int \\*' makes pointer from integer without a cast" } */
}
unsigned int *
fn6 (int *i)
{
- return i; /* { dg-warning "10:pointer targets in return differ" } */
+ return i; /* { dg-warning "10:pointer targets in returning 'int \\*' from a function with return type 'unsigned int \\*' differ" } */
}
void *
diff --git a/gcc/testsuite/gcc.dg/pr61162.c b/gcc/testsuite/gcc.dg/pr61162.c
index 8dcb0c8ed40..7ed0741e6c0 100644
--- a/gcc/testsuite/gcc.dg/pr61162.c
+++ b/gcc/testsuite/gcc.dg/pr61162.c
@@ -6,7 +6,7 @@ enum e { A };
enum e
fn1 (void)
{
- enum e e, q = 0; /* { dg-warning "17:enum conversion in initialization is invalid" } */
- e = 0; /* { dg-warning "5:enum conversion in assignment is invalid" } */
- 1; return 0; /* { dg-warning "13:enum conversion in return is invalid" } */
+ enum e e, q = 0; /* { dg-warning "17:enum conversion from 'int' to 'enum e' in initialization is invalid" } */
+ e = 0; /* { dg-warning "5:enum conversion from 'int' to 'enum e' in assignment is invalid" } */
+ 1; return 0; /* { dg-warning "13:enum conversion from 'int' to 'enum e' in return is invalid" } */
}
diff --git a/gcc/testsuite/gcc.dg/pr67730-2.c b/gcc/testsuite/gcc.dg/pr67730-2.c
index 29d726754bf..260cc3e3821 100644
--- a/gcc/testsuite/gcc.dg/pr67730-2.c
+++ b/gcc/testsuite/gcc.dg/pr67730-2.c
@@ -9,14 +9,14 @@ extern void bar (int);
int
fn1 (void)
{
- int a = NULL; /* { dg-warning "initialization makes integer from pointer" } */
- a = NULL; /* { dg-warning "assignment makes integer from pointer" } */
+ int a = NULL; /* { dg-warning "initialization of 'int' from 'void \\*' makes integer from pointer" } */
+ a = NULL; /* { dg-warning "assignment to 'int' from 'void \\*' makes integer from pointer" } */
bar (NULL); /* { dg-warning "passing argument 1" } */
- return NULL; /* { dg-warning "return makes integer from pointer" } */
+ return NULL; /* { dg-warning "returning 'void \\*' from a function with return type 'int' makes integer from pointer" } */
}
int
fn2 (void)
{
- RETURN; /* { dg-warning "return makes integer from pointer" } */
+ RETURN; /* { dg-warning "returning 'void \\*' from a function with return type 'int' makes integer from pointer" } */
}
diff --git a/gcc/testsuite/gcc.dg/pr69156.c b/gcc/testsuite/gcc.dg/pr69156.c
index b22aaec4706..1addfa3f6aa 100644
--- a/gcc/testsuite/gcc.dg/pr69156.c
+++ b/gcc/testsuite/gcc.dg/pr69156.c
@@ -5,6 +5,6 @@
_Bool
foo ()
{
- _Bool (*f) () = __builtin_abs; /* { dg-warning "initialization from incompatible pointer type" } */
+ _Bool (*f) () = __builtin_abs; /* { dg-warning "initialization of '_Bool \\(\\*\\)\\(\\)' from incompatible pointer type" } */
return f (0);
}
diff --git a/gcc/testsuite/gcc.dg/pr70174.c b/gcc/testsuite/gcc.dg/pr70174.c
index 8a3bc904fad..59d231e1623 100644
--- a/gcc/testsuite/gcc.dg/pr70174.c
+++ b/gcc/testsuite/gcc.dg/pr70174.c
@@ -7,5 +7,5 @@ struct S { int f : 4; } a;
void
foo (void)
{
- a.f = foo; /* { dg-warning "assignment makes integer from pointer without a cast" } */
+ a.f = foo; /* { dg-warning "assignment to 'signed char:4' from 'void \\(\\*\\)\\(void\\)' makes integer from pointer without a cast" } */
}
diff --git a/gcc/testsuite/gcc.dg/pr70920-2.c b/gcc/testsuite/gcc.dg/pr70920-2.c
index 2db9897bad5..98072247e94 100644
--- a/gcc/testsuite/gcc.dg/pr70920-2.c
+++ b/gcc/testsuite/gcc.dg/pr70920-2.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-forwprop-details" } */
+/* { dg-options "-O2 -fdump-tree-ccp1-details" } */
#include <stdint.h>
@@ -18,4 +18,4 @@ foo (int *a)
}
}
-/* { dg-final { scan-tree-dump "gimple_simplified to if \\(a_\[0-9\]*\\(D\\) == 0B\\)" "forwprop1" } } */
+/* { dg-final { scan-tree-dump "gimple_simplified to if \\(a_\[0-9\]*\\(D\\) == 0B\\)" "ccp1" } } */
diff --git a/gcc/testsuite/gcc.dg/pr70920-4.c b/gcc/testsuite/gcc.dg/pr70920-4.c
index e9c2b9587e5..70973cb162a 100644
--- a/gcc/testsuite/gcc.dg/pr70920-4.c
+++ b/gcc/testsuite/gcc.dg/pr70920-4.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-require-effective-target lp64 } */
-/* { dg-options "-O2 -fdump-tree-forwprop-details -Wno-int-to-pointer-cast" } */
+/* { dg-options "-O2 -fdump-tree-ccp1 -Wno-int-to-pointer-cast" } */
#include <stdint.h>
@@ -19,4 +19,4 @@ foo (int a)
}
}
-/* { dg-final { scan-tree-dump "if \\(_\[0-9\]* == 0\\)" "forwprop1" } } */
+/* { dg-final { scan-tree-dump "if \\(a_\[0-9\]*\\(D\\) == 0\\)" "ccp1" } } */
diff --git a/gcc/testsuite/gcc.dg/pr78582.c b/gcc/testsuite/gcc.dg/pr78582.c
index 51e3a1f09ed..6d125cf8bab 100644
--- a/gcc/testsuite/gcc.dg/pr78582.c
+++ b/gcc/testsuite/gcc.dg/pr78582.c
@@ -1,6 +1,7 @@
/* PR target/78582. */
/* { dg-options "-fprofile-generate" } */
/* { dg-do compile } */
+/* { dg-require-effective-target nonlocal_goto } */
#include <setjmp.h>
diff --git a/gcc/testsuite/gcc.dg/pr79499.c b/gcc/testsuite/gcc.dg/pr79499.c
new file mode 100644
index 00000000000..509549ff2fd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr79499.c
@@ -0,0 +1,13 @@
+/* PR middle-end/79499 */
+/* { dg-do compile { target split_stack } } */
+/* { dg-options "-O2 -fsplit-stack -fno-omit-frame-pointer" } */
+
+struct S { struct S *a, *b; };
+
+void
+foo (struct S *x)
+{
+ do
+ x->b = x->a;
+ while (x = x->a);
+}
diff --git a/gcc/testsuite/gcc.dg/pr81455.c b/gcc/testsuite/gcc.dg/pr81455.c
new file mode 100644
index 00000000000..8ab88639ee8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr81455.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O -funswitch-loops" } */
+
+void
+jh (unsigned int aw, int sn)
+{
+ int xs;
+
+ for (xs = 0; xs < 1; ++xs)
+ aw &= 1;
+
+ while (aw < 1 || ++sn < 1)
+ {
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/pr81564.c b/gcc/testsuite/gcc.dg/pr81564.c
new file mode 100644
index 00000000000..13519991f17
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr81564.c
@@ -0,0 +1,21 @@
+/* PR middle-end/81564 ICE in group_case_labels_stmt(). */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+struct a {
+ int b;
+ int c;
+};
+
+void
+foo (void)
+{
+ struct a *e;
+ switch (e->c)
+ {
+ case 7:
+ case 3:
+ if (__builtin_expect(!0, 0))
+ __builtin_unreachable();
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/pr81578.c b/gcc/testsuite/gcc.dg/pr81578.c
new file mode 100644
index 00000000000..a6ef77f20c0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr81578.c
@@ -0,0 +1,12 @@
+/* PR tree-optimization/81578 */
+/* { dg-do compile { target pthread } } */
+/* { dg-options "-O2 -ftree-parallelize-loops=2" } */
+
+int
+foo (int *x)
+{
+ int i, r = 1;
+ for (i = 0; i != 1024; i++)
+ r *= x[i] < 0;
+ return r;
+}
diff --git a/gcc/testsuite/gcc.dg/pr81588.c b/gcc/testsuite/gcc.dg/pr81588.c
new file mode 100644
index 00000000000..4e83607f2a8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr81588.c
@@ -0,0 +1,26 @@
+/* PR tree-optimization/81588 */
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+long long int a = 5011877430933453486LL, c = 1;
+unsigned short b = 24847;
+
+#include "tree-ssa/pr81588.c"
+
+int
+main ()
+{
+ foo ();
+ if (c != 0)
+ __builtin_abort ();
+ a = 24846;
+ c = 1;
+ foo ();
+ if (c != 1)
+ __builtin_abort ();
+ a = -5;
+ foo ();
+ if (c != 0)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr81621.c b/gcc/testsuite/gcc.dg/pr81621.c
new file mode 100644
index 00000000000..fb41eab8961
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr81621.c
@@ -0,0 +1,5 @@
+/* PR target/81621 */
+/* { dg-do compile { target freorder } } */
+/* { dg-options "-Og -fno-split-wide-types -freorder-blocks-and-partition" } */
+
+#include "graphite/scop-10.c"
diff --git a/gcc/testsuite/gcc.dg/pr81650.c b/gcc/testsuite/gcc.dg/pr81650.c
new file mode 100644
index 00000000000..99e84ded30d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr81650.c
@@ -0,0 +1,9 @@
+/* PR driver/81650 */
+/* { dg-do compile } */
+/* { dg-options "-Walloc-size-larger-than=9223372036854775807" } */
+
+void *
+foo (void)
+{
+ return __builtin_malloc (5);
+}
diff --git a/gcc/testsuite/gcc.dg/pr81695.c b/gcc/testsuite/gcc.dg/pr81695.c
new file mode 100644
index 00000000000..c3452580f1c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr81695.c
@@ -0,0 +1,11 @@
+/* PR middle-end/81695 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+int z[] = { };
+
+int
+main (void)
+{
+ __builtin_printf ("%d\n", *(z + 1));
+}
diff --git a/gcc/testsuite/gcc.dg/pr81737.c b/gcc/testsuite/gcc.dg/pr81737.c
new file mode 100644
index 00000000000..493358956ef
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr81737.c
@@ -0,0 +1,6 @@
+/* PR middle-end/81737 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+extern int a[];
+void fn1() { (a + 0)[1]; }
diff --git a/gcc/testsuite/gcc.dg/pr81795.c b/gcc/testsuite/gcc.dg/pr81795.c
new file mode 100644
index 00000000000..b035bd0b530
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr81795.c
@@ -0,0 +1,14 @@
+/* PR c/81795 */
+/* { dg-do compile } */
+/* { dg-options "-Wc++-compat" } */
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wc++-compat"
+
+struct S { int f; }; /* { dg-bogus "note: originally defined here" } */
+typedef int S; /* { dg-bogus "invalid in C\[+\]\[+\]" } */
+
+typedef int T; /* { dg-bogus "note: originally defined here" } */
+struct T { int f; }; /* { dg-bogus "invalid in C\[+\]\[+\]" } */
+
+#pragma GCC diagnostic pop
diff --git a/gcc/testsuite/gcc.dg/predict-15.c b/gcc/testsuite/gcc.dg/predict-15.c
new file mode 100644
index 00000000000..2a8c3ea8597
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/predict-15.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-profile_estimate" } */
+
+int main(int argc, char **argv)
+{
+ if (argc == 123)
+ goto exit;
+ else
+ {
+ return 0;
+ }
+
+exit:
+ return 1;
+}
+
+/* { dg-final { scan-tree-dump "goto heuristics of edge" "profile_estimate"} } */
diff --git a/gcc/testsuite/gcc.dg/string-opt-1.c b/gcc/testsuite/gcc.dg/string-opt-1.c
index bc0f30098fa..2f060732bf0 100644
--- a/gcc/testsuite/gcc.dg/string-opt-1.c
+++ b/gcc/testsuite/gcc.dg/string-opt-1.c
@@ -1,11 +1,52 @@
-/* Ensure mempcpy is not "optimized" into memcpy followed by addition. */
+/* Ensure mempcpy is "optimized" into memcpy followed by addition. */
/* { dg-do compile } */
/* { dg-options "-O2" } */
-void *
-fn (char *x, char *y, int z)
+char *buffer;
+char *test;
+
+#define SIZE 100
+
+char *
+__attribute__((noinline))
+my_memcpy (char *d, char *s, unsigned l)
+{
+ return __builtin_memcpy (d, s, l);
+}
+
+char *
+__attribute__((noinline))
+my_mempcpy (char *d, char *s, unsigned l)
+{
+ return __builtin_mempcpy (d, s, l);
+}
+
+void
+run_test (char *d, char *s, unsigned l)
{
- return __builtin_mempcpy (x, y, z);
+ char *r = my_mempcpy (d, s, l);
+ if (r != d + l)
+ __builtin_abort ();
+
+ r = my_memcpy (d, s, l);
+ if (r != d)
+ __builtin_abort ();
+}
+
+int
+main (void)
+{
+ const char* const foo = "hello world";
+ unsigned l = __builtin_strlen (foo) + 1;
+
+ buffer = __builtin_malloc (SIZE);
+ __builtin_memcpy (buffer, foo, l);
+ test = __builtin_malloc (SIZE);
+
+ run_test (test, buffer, l);
+
+ return 0;
}
-/* { dg-final { scan-assembler-not "memcpy" } } */
+/* { dg-final { scan-assembler-not "\<mempcpy\>" } } */
+/* { dg-final { scan-assembler "memcpy" } } */
diff --git a/gcc/testsuite/gcc.dg/torture/pr25967-1.c b/gcc/testsuite/gcc.dg/torture/pr25967-1.c
new file mode 100644
index 00000000000..fd26a8b8ce3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr25967-1.c
@@ -0,0 +1,63 @@
+/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-mgeneral-regs-only" } */
+
+extern void exit (int);
+
+typedef unsigned int uword_t __attribute__ ((mode (__word__)));
+
+#define ERROR 0x12345670
+#define IP 0x12345671
+#define CS 0x12345672
+#define FLAGS 0x12345673
+#define SP 0x12345674
+#define SS 0x12345675
+
+#define STRING(x) XSTRING(x)
+#define XSTRING(x) #x
+#define ASMNAME(cname) ASMNAME2 (__USER_LABEL_PREFIX__, cname)
+#define ASMNAME2(prefix, cname) XSTRING (prefix) cname
+
+struct interrupt_frame
+{
+ uword_t ip;
+ uword_t cs;
+ uword_t flags;
+ uword_t sp;
+ uword_t ss;
+};
+
+__attribute__((naked, used))
+void
+fn (void)
+{
+ register uword_t *sp __asm__("sp");
+ uword_t error = *sp;
+ struct interrupt_frame *frame = (struct interrupt_frame *) (sp + 1);
+ if (ERROR != error) /* BREAK */
+ __builtin_abort ();
+ if (IP != frame->ip)
+ __builtin_abort ();
+ if (CS != frame->cs)
+ __builtin_abort ();
+ if (FLAGS != frame->flags)
+ __builtin_abort ();
+ if (SP != frame->sp)
+ __builtin_abort ();
+ if (SS != frame->ss)
+ __builtin_abort ();
+
+ exit (0);
+}
+
+int
+main ()
+{
+ asm ("push $" STRING (SS) "; \
+ push $" STRING (SP) "; \
+ push $" STRING (FLAGS) "; \
+ push $" STRING (CS) "; \
+ push $" STRING (IP) "; \
+ push $" STRING (ERROR) "; \
+ jmp " ASMNAME ("fn"));
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr25967-2.c b/gcc/testsuite/gcc.dg/torture/pr25967-2.c
new file mode 100644
index 00000000000..4a0dd78c0ad
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr25967-2.c
@@ -0,0 +1,58 @@
+/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-mgeneral-regs-only" } */
+
+extern void exit (int);
+
+typedef unsigned int uword_t __attribute__ ((mode (__word__)));
+
+#define IP 0x12345671
+#define CS 0x12345672
+#define FLAGS 0x12345673
+#define SP 0x12345674
+#define SS 0x12345675
+
+#define STRING(x) XSTRING(x)
+#define XSTRING(x) #x
+#define ASMNAME(cname) ASMNAME2 (__USER_LABEL_PREFIX__, cname)
+#define ASMNAME2(prefix, cname) XSTRING (prefix) cname
+
+struct interrupt_frame
+{
+ uword_t ip;
+ uword_t cs;
+ uword_t flags;
+ uword_t sp;
+ uword_t ss;
+};
+
+__attribute__((naked, used))
+void
+fn (void)
+{
+ register uword_t *sp __asm__("sp");
+ struct interrupt_frame *frame = (struct interrupt_frame *) sp;
+ if (IP != frame->ip) /* BREAK */
+ __builtin_abort ();
+ if (CS != frame->cs)
+ __builtin_abort ();
+ if (FLAGS != frame->flags)
+ __builtin_abort ();
+ if (SP != frame->sp)
+ __builtin_abort ();
+ if (SS != frame->ss)
+ __builtin_abort ();
+
+ exit (0);
+}
+
+int
+main ()
+{
+ asm ("push $" STRING (SS) "; \
+ push $" STRING (SP) "; \
+ push $" STRING (FLAGS) "; \
+ push $" STRING (CS) "; \
+ push $" STRING (IP) "; \
+ jmp " ASMNAME ("fn"));
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70992-2.c b/gcc/testsuite/gcc.dg/torture/pr70992-2.c
new file mode 100644
index 00000000000..c5d2c5f2683
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70992-2.c
@@ -0,0 +1,9 @@
+/* PR middle-end/70992 */
+/* { dg-do compile } */
+
+unsigned int *od;
+int
+fn (void)
+{
+ return (0 % 0 + 1) * *od * 2; /* { dg-warning "division by zero" } */
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70992.c b/gcc/testsuite/gcc.dg/torture/pr70992.c
new file mode 100644
index 00000000000..56728e09d1b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70992.c
@@ -0,0 +1,41 @@
+/* PR middle-end/70992 */
+/* { dg-do compile } */
+
+typedef unsigned int uint32_t;
+typedef int int32_t;
+
+uint32_t
+fn (uint32_t so)
+{
+ return (so + so) * (0x80000000 / 0 + 1); /* { dg-warning "division by zero" } */
+}
+
+uint32_t
+fn5 (uint32_t so)
+{
+ return (0x80000000 / 0 + 1) * (so + so); /* { dg-warning "division by zero" } */
+}
+
+uint32_t
+fn6 (uint32_t so)
+{
+ return (0x80000000 / 0 - 1) * (so + so); /* { dg-warning "division by zero" } */
+}
+
+uint32_t
+fn2 (uint32_t so)
+{
+ return (so + so) * (0x80000000 / 0 - 1); /* { dg-warning "division by zero" } */
+}
+
+int32_t
+fn3 (int32_t so)
+{
+ return (so + so) * (0x80000000 / 0 + 1); /* { dg-warning "division by zero" } */
+}
+
+int32_t
+fn4 (int32_t so)
+{
+ return (so + so) * (0x80000000 / 0 - 1); /* { dg-warning "division by zero" } */
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr78218.c b/gcc/testsuite/gcc.dg/torture/pr78218.c
index b3e2892429d..fd6ddc9d90d 100644
--- a/gcc/testsuite/gcc.dg/torture/pr78218.c
+++ b/gcc/testsuite/gcc.dg/torture/pr78218.c
@@ -1,15 +1,18 @@
/* { dg-do run } */
-struct
+struct v
{
int v;
-} a[2];
+};
-int b;
+struct v a[2];
+
+struct v *gp;
void __attribute__((noinline,noclone))
-check ()
+check (struct v *p)
{
+ gp = p;
if (a[0].v != 1)
__builtin_abort ();
}
diff --git a/gcc/testsuite/gcc.dg/torture/pr80163.c b/gcc/testsuite/gcc.dg/torture/pr80163.c
index 80cc68dd76d..a9a4438d66f 100644
--- a/gcc/testsuite/gcc.dg/torture/pr80163.c
+++ b/gcc/testsuite/gcc.dg/torture/pr80163.c
@@ -1,5 +1,6 @@
/* PR c/80163 */
/* { dg-do compile { target int128 } } */
+/* { dg-require-effective-target label_values } */
volatile int v;
diff --git a/gcc/testsuite/gcc.dg/torture/pr81181.c b/gcc/testsuite/gcc.dg/torture/pr81181.c
new file mode 100644
index 00000000000..e7216d7bf3e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr81181.c
@@ -0,0 +1,30 @@
+/* { dg-do compile } */
+
+unsigned int lh;
+
+void
+ny (int t3, int ys, int rt, int p8)
+{
+ if (lh != 0)
+ {
+ if (0)
+ {
+oo:
+ do
+ {
+ rt = (p8 != 0) ? t3 : 0;
+ rt = (rt != 0 || lh != (unsigned int)ys);
+ rt += lh + ys;
+ }
+ while (t3 <= 0);
+
+ lh = ys;
+ ys = rt;
+ }
+
+ if (lh != 0)
+ p8 = lh;
+ }
+
+ goto oo;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr81297.c b/gcc/testsuite/gcc.dg/torture/pr81297.c
new file mode 100644
index 00000000000..be346c4c0d1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr81297.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+
+int
+nf (int gy, int x0)
+{
+ while (gy < 1)
+ ++x0;
+
+ gy += !!gy;
+ if (gy < 0)
+ {
+ x0 += gy;
+ return (x0 > (gy + x0)) ? (1 / 0) : 1; /* { dg-warning "division by zero" } */
+ }
+}
+
diff --git a/gcc/testsuite/gcc.dg/torture/pr81500.c b/gcc/testsuite/gcc.dg/torture/pr81500.c
new file mode 100644
index 00000000000..7aaec2189fc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr81500.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+
+typedef int a;
+void c(int *b)
+{
+ int d;
+ a e, f, *g, *h = b;
+ for (; d; d--) {
+ f = *g & 1;
+ *h-- = *g-- | e;
+ e = f;
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr81510-2.c b/gcc/testsuite/gcc.dg/torture/pr81510-2.c
new file mode 100644
index 00000000000..7e2bc9866f7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr81510-2.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+
+typedef int h;
+typedef int k;
+int a;
+int b;
+int c;
+int d;
+int e;
+int f(int g)
+{
+ h *i = &e;
+ k *j;
+ if (d -= b)
+ for (; *j; *j += 1) {
+ g = g || (a = e ? c = (__UINTPTR_TYPE__)j : 0) + *i;
+ i = &d;
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr81510.c b/gcc/testsuite/gcc.dg/torture/pr81510.c
new file mode 100644
index 00000000000..c93c4683629
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr81510.c
@@ -0,0 +1,29 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-w" } */
+
+typedef int d;
+typedef int f;
+typedef long h;
+int a;
+int b;
+int c;
+int e()
+{
+ f *g;
+ h i;
+ for (;;)
+ if (g)
+ for (; b; b++) {
+ g = c;
+ if (a &= c) {
+ d *j = &b;
+ h k;
+ for (; i; i++) {
+ *g ?: (*j = k);
+ g = &a;
+ }
+ for (; i <= 3; i++)
+ ;
+ }
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr81571.c b/gcc/testsuite/gcc.dg/torture/pr81571.c
new file mode 100644
index 00000000000..74bceb763ea
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr81571.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+
+int a, b, c, d;
+short fn1(int p1, int p2) { return p1; }
+
+int fn2(int p1) {}
+
+int main()
+{
+ for (; c; c++)
+ a |= fn1(1, a) | fn2(b |= d);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr81573.c b/gcc/testsuite/gcc.dg/torture/pr81573.c
new file mode 100644
index 00000000000..3930c56386b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr81573.c
@@ -0,0 +1,16 @@
+/* { dg-do run } */
+
+int a = 1, *c = &a, d;
+signed char b;
+
+int main ()
+{
+ for (; b > -27; b--)
+ {
+ *c ^= b;
+ *c ^= 1;
+ }
+ while (a > 1)
+ ;
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/assoc-2.c b/gcc/testsuite/gcc.dg/tree-ssa/assoc-2.c
new file mode 100644
index 00000000000..cc0e9d429b4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/assoc-2.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-gimple-raw -fdump-tree-optimized-raw" } */
+
+int f0(int a, int b){
+ return a * 33 * b * 55;
+}
+
+int f1(int a){
+ a *= 33;
+ return a * 55;
+}
+
+int f2(int a, int b){
+ a *= 33;
+ return a * b * 55;
+}
+
+/* { dg-final { scan-tree-dump-times "mult_expr" 7 "gimple" } } */
+/* { dg-final { scan-tree-dump-times "mult_expr" 5 "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/attr-hotcold-2.c b/gcc/testsuite/gcc.dg/tree-ssa/attr-hotcold-2.c
index 184dd10ddae..17526113d4b 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/attr-hotcold-2.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/attr-hotcold-2.c
@@ -1,8 +1,7 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-profile_estimate-blocks-details" } */
+/* { dg-options "-O2 -fdump-tree-profile_estimate" } */
-void g(void);
-void h(void);
+int v1, v2;
void f(int x, int y)
{
if (x) goto A;
@@ -10,19 +9,19 @@ void f(int x, int y)
return;
A: __attribute__((cold))
- g();
+ v1 = x;
return;
B: __attribute__((hot))
- h();
+ v2 = y;
return;
}
/* { dg-final { scan-tree-dump-times "hot label heuristics" 1 "profile_estimate" } } */
/* { dg-final { scan-tree-dump-times "cold label heuristics" 1 "profile_estimate" } } */
-/* { dg-final { scan-tree-dump "A \\\[0\\\..*\\\]" "profile_estimate" } } */
+/* { dg-final { scan-tree-dump-times "combined heuristics: 0\\\..*" 1 "profile_estimate" } } */
/* Note: we're attempting to match some number > 6000, i.e. > 60%.
The exact number ought to be tweekable without having to juggle
the testcase around too much. */
-/* { dg-final { scan-tree-dump "B \\\[\[6-9\]\[0-9\]\\\..*\\\]" "profile_estimate" } } */
+/* { dg-final { scan-tree-dump-times "combined heuristics: \[6-9\]\[0-9\]\\\..*" 1 "profile_estimate" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr81388-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr81388-1.c
index ecfe12929cc..0beb5109d40 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr81388-1.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr81388-1.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fno-strict-overflow -fdump-tree-ivcanon-details" } */
+/* { dg-options "-O2 -fno-strict-overflow -fdump-tree-tailc-details" } */
void bar();
void foo(char *dst)
@@ -11,4 +11,6 @@ void foo(char *dst)
} while (dst < end);
}
-/* { dg-final { scan-tree-dump-times " zero if " 1 "ivcanon" } } */
+/* The loop only iterates once because pointer overflow always has undefined
+ semantics. As a result, call to bar becomes tail call. */
+/* { dg-final { scan-tree-dump-times "Found tail call " 1 "tailc" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr81588.c b/gcc/testsuite/gcc.dg/tree-ssa/pr81588.c
new file mode 100644
index 00000000000..2709abd89a1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr81588.c
@@ -0,0 +1,15 @@
+/* PR tree-optimization/81588 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-reassoc1-details" } */
+
+extern long long int a, c;
+extern unsigned short b;
+
+/* { dg-final { scan-tree-dump-times "Optimizing range test \[^\n\r]* and comparison" 1 "reassoc1" } } */
+
+__attribute__((noinline, noclone)) void
+foo (void)
+{
+ if ((b > a) != (1 + (a < 0)))
+ c = 0;
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr81620-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr81620-1.c
new file mode 100644
index 00000000000..f8f2dd8ad6c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr81620-1.c
@@ -0,0 +1,20 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -fno-tree-loop-vectorize -fdump-tree-pcom-details" } */
+
+int a[7];
+char b;
+void abort (void);
+
+int main() {
+ b = 4;
+ for (; b; b--) {
+ a[b] = b;
+ a[b + 2] = 1;
+ }
+ if (a[0] != 0 || a[1] != 1 || a[2] != 2
+ || a[3] != 1 || a[4] != 1 || a[5] != 1 || a[6] != 1)
+ abort ();
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "Store-stores chain" 1 "pcom" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr81620-2.c b/gcc/testsuite/gcc.dg/tree-ssa/pr81620-2.c
new file mode 100644
index 00000000000..85a8e350840
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr81620-2.c
@@ -0,0 +1,25 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -fno-tree-loop-vectorize -fdump-tree-pcom-details" } */
+
+int a[200];
+char b;
+void abort (void);
+
+int main() {
+ int i;
+ b = 100;
+ for (; b; b--) {
+ a[b] = 2;
+ a[b + 2] = 1;
+ }
+
+ if (a[0] != 0 || a[1] != 2 || a[2] != 2)
+ abort ();
+ for (i = 3; i < 103; i++)
+ if (a[i] != 1)
+ abort ();
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "Store-stores chain" 1 "pcom" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr81627.c b/gcc/testsuite/gcc.dg/tree-ssa/pr81627.c
new file mode 100644
index 00000000000..9ba43be5052
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr81627.c
@@ -0,0 +1,28 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -fno-tree-loop-vectorize -fdump-tree-pcom-details" } */
+
+int a, b, c, d[6], e = 3, f;
+
+void abort (void);
+void fn1 ()
+{
+ for (b = 1; b < 5; b++)
+ {
+ for (c = 0; c < 5; c++)
+ d[b] = e;
+ if (a)
+ f++;
+ d[b + 1] = 1;
+ }
+}
+
+int main ()
+{
+ fn1 ();
+ if (d[0] != 0 || d[1] != 3 || d[2] != 3
+ || d[3] != 3 || d[4] != 3 || d[5] != 1)
+ abort ();
+
+ return 0;
+}
+/* { dg-final { scan-tree-dump-times "Store-stores chain" 1 "pcom" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr81744.c b/gcc/testsuite/gcc.dg/tree-ssa/pr81744.c
new file mode 100644
index 00000000000..b0f5d38ff93
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr81744.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -fno-tree-loop-vectorize -fno-tree-slp-vectorize -fno-inline -fdump-tree-pcom-details" } */
+
+typedef struct {
+ int a, b;
+} CompandSegment;
+int a;
+CompandSegment *b;
+void fn1() {
+ for (; a; a++)
+ b[a].a = b[a].b = b[a - 1].a = b[a - 1].b = 0;
+}
+/* { dg-final { scan-tree-dump-times "Store-stores chain" 2 "pcom"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-1.c b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-1.c
new file mode 100644
index 00000000000..d3a2339e55e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-1.c
@@ -0,0 +1,62 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-inline -fpredictive-commoning -fdump-tree-pcom-details" } */
+
+int arr[105] = {2, 3, 5, 7, 11};
+int result0[10] = {2, 3, 5, 7, 11};
+int result1[10] = {0, -1, 5, -2, 11, 0};
+int result2[10] = {0, 0, -1, -2, -2, 0};
+int result3[10] = {0, 0, 0, -1, -2, -2, 0};
+int result4[10] = {0, 0, 0, 0, -1, -2, -2, 0};
+int result100[105] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -2, -2, 0};
+
+extern void abort (void);
+
+void __attribute__((noinline)) foo (int *a, int len)
+{
+ int i;
+ for (i = 0; i < len; i++)
+ {
+ a[i] = 0;
+ a[i + 1] = -1;
+ a[i + 3] = -2;
+ }
+}
+
+void check (int *a, int *res, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++)
+ if (a[i] != res[i])
+ abort ();
+}
+
+int main (void)
+{
+ foo (arr, 0);
+ check (arr, result0, 10);
+
+ foo (arr, 1);
+ check (arr, result1, 10);
+
+ foo (arr, 2);
+ check (arr, result2, 10);
+
+ foo (arr, 3);
+ check (arr, result3, 10);
+
+ foo (arr, 4);
+ check (arr, result4, 10);
+
+ foo (arr, 100);
+ check (arr, result100, 105);
+
+ return 0;
+}
+/* { dg-final { scan-tree-dump "Store-stores chain" "pcom"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-10.c b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-10.c
new file mode 100644
index 00000000000..bd5575d9502
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-10.c
@@ -0,0 +1,44 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-inline -fpredictive-commoning -fdump-tree-pcom-details" } */
+
+int arr[105] = {2, 3, 5, 7, 11};
+int result0[10] = {2, 3, 5, 7, 11};
+int result1[10] = {0, 3, 5, -2, 11, 0};
+
+extern void abort (void);
+
+void __attribute__((noinline)) foo (int *a, int len, int flag)
+{
+ int i;
+ for (i = 0; i < len; i++)
+ {
+ a[i] = 0;
+ if (flag)
+ a[i + 1] = -1;
+ a[i + 3] = -2;
+ }
+}
+
+void check (int *a, int *res, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++)
+ if (a[i] != res[i])
+ abort ();
+}
+
+int main (void)
+{
+ int i;
+
+ foo (arr, 0, 0);
+ check (arr, result0, 10);
+
+ foo (arr, 1, 0);
+ check (arr, result1, 10);
+
+ return 0;
+}
+/* { dg-final { scan-tree-dump-not "Store-stores chain" "pcom"} } */
+
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-11.c b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-11.c
new file mode 100644
index 00000000000..9e496f68a12
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-11.c
@@ -0,0 +1,51 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-inline -fpredictive-commoning -fdump-tree-pcom-details" } */
+
+int arr[105] = {2, 3, 5, 7, 11};
+int x[105] = {2, 3, 5, 7, 11};
+int result0[10] = {2, 3, 5, 7, 11};
+int result1[10] = {0, 0, 0, 0, 0, 0, -1, -2, -2};
+
+extern void abort (void);
+
+int __attribute__((noinline)) foo (int * __restrict__ a, int * __restrict__ b, int len, int flag)
+{
+ int i, sum = 0;
+ for (i = 0; i < len; i++)
+ {
+ a[i] = 0;
+ b[i + 2] = i;
+ a[i + 1] = -1;
+ sum += b[i];
+ a[i + 3] = -2;
+ }
+ return sum;
+}
+
+void check (int *a, int *res, int len, int sum, int val)
+{
+ int i;
+
+ if (sum != val)
+ abort ();
+
+ for (i = 0; i < len; i++)
+ if (a[i] != res[i])
+ abort ();
+}
+
+int main (void)
+{
+ int i, sum;
+
+ sum = foo (arr, x, 0, 0);
+ check (arr, result0, 10, sum, 0);
+
+ sum = foo (arr, x, 6, 0);
+ check (arr, result1, 10, sum, 11);
+
+ return 0;
+}
+/* { dg-final { scan-tree-dump "Store-stores chain" "pcom"} } */
+/* { dg-final { scan-tree-dump "Store-loads chain" "pcom"} } */
+
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-2.c b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-2.c
new file mode 100644
index 00000000000..c48d438e9e0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-2.c
@@ -0,0 +1,62 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-inline -fpredictive-commoning -fdump-tree-pcom-details" } */
+
+int arr[105] = {2, 3, 5, 7, 11};
+int result0[10] = {2, 3, 5, 7, 11};
+int result1[10] = {0, 3, -1, -2, 11, 0};
+int result2[10] = {0, 0, -1, -1, -2, 0};
+int result3[10] = {0, 0, 0, -1, -1, -2, 0};
+int result4[10] = {0, 0, 0, 0, -1, -1, -2, 0};
+int result100[105] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -2, 0};
+
+extern void abort (void);
+
+void __attribute__((noinline)) foo (int *a, int len)
+{
+ int i;
+ for (i = 0; i < len; i++)
+ {
+ a[i] = 0;
+ a[i + 2] = -1;
+ a[i + 3] = -2;
+ }
+}
+
+void check (int *a, int *res, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++)
+ if (a[i] != res[i])
+ abort ();
+}
+
+int main (void)
+{
+ foo (arr, 0);
+ check (arr, result0, 10);
+
+ foo (arr, 1);
+ check (arr, result1, 10);
+
+ foo (arr, 2);
+ check (arr, result2, 10);
+
+ foo (arr, 3);
+ check (arr, result3, 10);
+
+ foo (arr, 4);
+ check (arr, result4, 10);
+
+ foo (arr, 100);
+ check (arr, result100, 105);
+
+ return 0;
+}
+/* { dg-final { scan-tree-dump "Store-stores chain" "pcom"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-3.c b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-3.c
new file mode 100644
index 00000000000..9c2736cd0ad
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-3.c
@@ -0,0 +1,108 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-inline -fpredictive-commoning -fdump-tree-pcom-details" } */
+
+int arr1[105] = {2, 3, 5, 7, 11, 13, 0};
+int arr2[105] = {2, 3, 5, 7, 11, 13, 0};
+int arr3[105] = {2, 3, 5, 7, 11, 13, 0};
+int arr4[105] = {2, 3, 5, 7, 11, 13, 0};
+int result1[105] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -2, -3, 0};
+int result2[105] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -2, 0};
+int result3[105] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -2, -2, 0};
+int result4[105] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 0};
+
+extern void abort (void);
+
+void check (int *a, int *res, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++)
+ if (a[i] != res[i])
+ abort ();
+}
+
+void __attribute__((noinline)) foo1 (int *a)
+{
+ int i;
+ for (i = 0; i < 100; i++)
+ {
+ a[i] = 0;
+ a[i + 1] = -1;
+ a[i + 2] = -2;
+ a[i + 3] = -3;
+ }
+}
+
+void __attribute__((noinline)) foo2 (int *a)
+{
+ int i;
+ for (i = 0; i < 100; i++)
+ {
+ a[i] = 0;
+ a[i + 2] = -1;
+ a[i + 3] = -2;
+ }
+}
+
+void __attribute__((noinline)) foo3 (int *a)
+{
+ int i;
+ for (i = 0; i < 100; i++)
+ {
+ a[i] = 0;
+ a[i + 1] = -1;
+ a[i + 3] = -2;
+ }
+}
+
+void __attribute__((noinline)) foo4 (int *a)
+{
+ int i;
+ for (i = 0; i < 100; i++)
+ {
+ a[i] = 0;
+ a[i + 3] = -1;
+ }
+}
+
+int main (void)
+{
+ foo1 (arr1);
+ check (arr1, result1, 105);
+
+ foo2 (arr2);
+ check (arr2, result2, 105);
+
+ foo3 (arr3);
+ check (arr3, result3, 105);
+
+ foo4 (arr4);
+ check (arr4, result4, 105);
+
+ return 0;
+}
+/* { dg-final { scan-tree-dump-times "Store-stores chain" 4 "pcom"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-4.c b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-4.c
new file mode 100644
index 00000000000..302425a17cc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-4.c
@@ -0,0 +1,61 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-inline -fpredictive-commoning -fdump-tree-pcom-details" } */
+
+int arr[105] = {2, 3, 5, 7, 11};
+int result0[10] = {2, 3, 5, 7, 11};
+int result1[10] = {0, 3, 5, -1, 11, 0};
+int result2[10] = {0, 0, 5, -1, -1, 0};
+int result3[10] = {0, 0, 0, -1, -1, -1, 0};
+int result4[10] = {0, 0, 0, 0, -1, -1, -1, 0};
+int result100[105] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 0};
+
+extern void abort (void);
+
+void __attribute__((noinline)) foo (int *a, int len)
+{
+ int i;
+ for (i = 0; i < len; i++)
+ {
+ a[i] = 0;
+ a[i + 3] = -1;
+ }
+}
+
+void check (int *a, int *res, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++)
+ if (a[i] != res[i])
+ abort ();
+}
+
+int main (void)
+{
+ foo (arr, 0);
+ check (arr, result0, 10);
+
+ foo (arr, 1);
+ check (arr, result1, 10);
+
+ foo (arr, 2);
+ check (arr, result2, 10);
+
+ foo (arr, 3);
+ check (arr, result3, 10);
+
+ foo (arr, 4);
+ check (arr, result4, 10);
+
+ foo (arr, 100);
+ check (arr, result100, 105);
+
+ return 0;
+}
+/* { dg-final { scan-tree-dump "Store-stores chain" "pcom"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-5.c b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-5.c
new file mode 100644
index 00000000000..a13d56098be
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-5.c
@@ -0,0 +1,63 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-inline -fpredictive-commoning -fdump-tree-pcom-details" } */
+
+int arr[105] = {2, 3, 5, 7, 11};
+int result0[10] = {2, 3, 5, 7, 11};
+int result1[10] = {0, -1, -2, -3, 11, 0};
+int result2[10] = {0, 0, -1, -2, -3, 0};
+int result3[10] = {0, 0, 0, -1, -2, -3, 0};
+int result4[10] = {0, 0, 0, 0, -1, -2, -3, 0};
+int result100[105] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -2, -3, 0};
+
+extern void abort (void);
+
+void __attribute__((noinline)) foo (int *a, int len)
+{
+ int i;
+ for (i = 0; i < len; i++)
+ {
+ a[i] = 0;
+ a[i + 1] = -1;
+ a[i + 2] = -2;
+ a[i + 3] = -3;
+ }
+}
+
+void check (int *a, int *res, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++)
+ if (a[i] != res[i])
+ abort ();
+}
+
+int main (void)
+{
+ foo (arr, 0);
+ check (arr, result0, 10);
+
+ foo (arr, 1);
+ check (arr, result1, 10);
+
+ foo (arr, 2);
+ check (arr, result2, 10);
+
+ foo (arr, 3);
+ check (arr, result3, 10);
+
+ foo (arr, 4);
+ check (arr, result4, 10);
+
+ foo (arr, 100);
+ check (arr, result100, 105);
+
+ return 0;
+}
+/* { dg-final { scan-tree-dump "Store-stores chain" "pcom"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-6.c b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-6.c
new file mode 100644
index 00000000000..63d6c8f33b0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-6.c
@@ -0,0 +1,65 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-inline -fpredictive-commoning -fdump-tree-pcom-details" } */
+
+int arr[105] = {2, 3, 5, 7, 11, 13, 17, 19};
+int result0[10] = {2, 3, 5, 7, 11, 13, 17, 19};
+int result1[10] = {0, -1, -2, -3, -4, -5, 17, 19};
+int result2[10] = {0, 0, -1, -2, -3, -4, -5, 19};
+int result3[10] = {0, 0, 0, -1, -2, -3, -4, -5};
+int result4[10] = {0, 0, 0, 0, -1, -2, -3, -4, -5};
+int result100[105] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -2, -3, -4, -5};
+
+extern void abort (void);
+
+void __attribute__((noinline)) foo (int *a, int len)
+{
+ int i;
+ for (i = 0; i < len; i++)
+ {
+ a[i] = 0;
+ a[i + 1] = -1;
+ a[i + 2] = -2;
+ a[i + 3] = -3;
+ a[i + 4] = -4;
+ a[i + 5] = -5;
+ }
+}
+
+void check (int *a, int *res, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++)
+ if (a[i] != res[i])
+ abort ();
+}
+
+int main (void)
+{
+ foo (arr, 0);
+ check (arr, result0, 10);
+
+ foo (arr, 1);
+ check (arr, result1, 10);
+
+ foo (arr, 2);
+ check (arr, result2, 10);
+
+ foo (arr, 3);
+ check (arr, result3, 10);
+
+ foo (arr, 4);
+ check (arr, result4, 10);
+
+ foo (arr, 100);
+ check (arr, result100, 105);
+
+ return 0;
+}
+/* { dg-final { scan-tree-dump "Store-stores chain" "pcom"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-7.c b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-7.c
new file mode 100644
index 00000000000..0bde6e6dced
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-7.c
@@ -0,0 +1,63 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-inline -fpredictive-commoning -fdump-tree-pcom-details" } */
+
+int arr[105] = {2, 3, 5, 7, 11, 13, 17, 19};
+int result0[10] = {2, 3, 5, 7, 11, 13, 17, 19};
+int result1[10] = {0, -1, 5, -3, 11, -5, 17, 19};
+int result2[10] = {0, 0, -1, -3, -3, -5, -5, 19};
+int result3[10] = {0, 0, 0, -1, -3, -3, -5, -5};
+int result4[10] = {0, 0, 0, 0, -1, -3, -3, -5, -5};
+int result100[105] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -3, -3, -5, -5};
+
+extern void abort (void);
+
+void __attribute__((noinline)) foo (int *a, int len)
+{
+ int i;
+ for (i = 0; i < len; i++)
+ {
+ a[i] = 0;
+ a[i + 1] = -1;
+ a[i + 3] = -3;
+ a[i + 5] = -5;
+ }
+}
+
+void check (int *a, int *res, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++)
+ if (a[i] != res[i])
+ abort ();
+}
+
+int main (void)
+{
+ foo (arr, 0);
+ check (arr, result0, 10);
+
+ foo (arr, 1);
+ check (arr, result1, 10);
+
+ foo (arr, 2);
+ check (arr, result2, 10);
+
+ foo (arr, 3);
+ check (arr, result3, 10);
+
+ foo (arr, 4);
+ check (arr, result4, 10);
+
+ foo (arr, 100);
+ check (arr, result100, 105);
+
+ return 0;
+}
+/* { dg-final { scan-tree-dump "Store-stores chain" "pcom"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-8.c b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-8.c
new file mode 100644
index 00000000000..45ffd25c424
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-8.c
@@ -0,0 +1,60 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-inline -fpredictive-commoning -fdump-tree-pcom-details" } */
+
+int arr[105] = {2, 3, 5, 7, 11, 13, 17, 19};
+int result0[10] = {2, 3, 5, 7, 11, 13, 17, 19};
+int result1[10] = {0, 3, 5, 7, 11, -5, 17, 19};
+int result2[10] = {0, 0, 5, 7, 11, -5, -5, 19};
+int result3[10] = {0, 0, 0, 7, 11, -5, -5, -5};
+int result4[10] = {0, 0, 0, 0, 11, -5, -5, -5, -5};
+int result100[105] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, -5, -5, -5, -5};
+
+extern void abort (void);
+
+void __attribute__((noinline)) foo (int *a, int len)
+{
+ int i;
+ for (i = 0; i < len; i++)
+ {
+ a[i] = 0;
+ a[i + 5] = -5;
+ }
+}
+
+void check (int *a, int *res, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++)
+ if (a[i] != res[i])
+ abort ();
+}
+
+int main (void)
+{
+ foo (arr, 0);
+ check (arr, result0, 10);
+
+ foo (arr, 1);
+ check (arr, result1, 10);
+
+ foo (arr, 2);
+ check (arr, result2, 10);
+
+ foo (arr, 3);
+ check (arr, result3, 10);
+
+ foo (arr, 4);
+ check (arr, result4, 10);
+
+ foo (arr, 100);
+ check (arr, result100, 105);
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-9.c b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-9.c
new file mode 100644
index 00000000000..1c4e3140309
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-9.c
@@ -0,0 +1,90 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-inline -fpredictive-commoning -fdump-tree-pcom-details" } */
+
+int arr1[105] = {2, 3, 5, 7, 11, 13, 17, 19};
+int arr2[105] = {2, 3, 5, 7, 11, 13, 17, 19};
+int arr3[105] = {2, 3, 5, 7, 11, 13, 17, 19};
+
+int result1[105] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -2, -3, -4, -5};
+int result2[105] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -3, -3, -5, -5};
+int result3[105] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, -5, -5, -5, -5};
+
+extern void abort (void);
+
+void __attribute__((noinline)) foo1 (int *a)
+{
+ int i;
+ for (i = 0; i < 100; i++)
+ {
+ a[i] = 0;
+ a[i + 1] = -1;
+ a[i + 2] = -2;
+ a[i + 3] = -3;
+ a[i + 4] = -4;
+ a[i + 5] = -5;
+ }
+}
+
+void __attribute__((noinline)) foo2 (int *a)
+{
+ int i;
+ for (i = 0; i < 100; i++)
+ {
+ a[i] = 0;
+ a[i + 1] = -1;
+ a[i + 3] = -3;
+ a[i + 5] = -5;
+ }
+}
+
+void __attribute__((noinline)) foo3 (int *a)
+{
+ int i;
+ for (i = 0; i < 100; i++)
+ {
+ a[i] = 0;
+ a[i + 5] = -5;
+ }
+}
+
+void check (int *a, int *res, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++)
+ if (a[i] != res[i])
+ abort ();
+}
+
+int main (void)
+{
+ foo1 (arr1);
+ check (arr1, result1, 10);
+
+ foo2 (arr2);
+ check (arr2, result2, 10);
+
+ foo3 (arr3);
+ check (arr3, result3, 10);
+
+ return 0;
+}
+/* { dg-final { scan-tree-dump "Store-stores chain" "pcom"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-23.c b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-23.c
index 0ab967d20ab..a5451ade6ef 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-23.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-23.c
@@ -6,9 +6,10 @@ foo(unsigned int a, unsigned int b, unsigned int c, unsigned int d,
unsigned int e, unsigned int f, unsigned int g, unsigned int h)
{
/* Should be transformed into e = 20 */
- unsigned int i = (a + 9) + (c + 8);
- unsigned int j = (-c + 1) + (-a + 2);
-
+ unsigned int i = (a + 9);
+ unsigned int j = (-c + 1);
+ i += (c + 8);
+ j += (-a + 2);
e = i + j;
return e;
}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/slsr-4.c b/gcc/testsuite/gcc.dg/tree-ssa/slsr-4.c
index 17d7b4c6951..1e943b737b9 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/slsr-4.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/slsr-4.c
@@ -23,13 +23,9 @@ f (int i)
foo (y);
}
-/* { dg-final { scan-tree-dump-times "\\* 4" 1 "slsr" } } */
-/* { dg-final { scan-tree-dump-times "\\* 10" 1 "slsr" } } */
-/* { dg-final { scan-tree-dump-times "\\+ 20;" 1 "slsr" } } */
+/* { dg-final { scan-tree-dump-times "\\* 40" 1 "slsr" } } */
/* { dg-final { scan-tree-dump-times "\\+ 200" 1 "slsr" } } */
-/* { dg-final { scan-tree-dump-times "\\- 16;" 1 "slsr" } } */
/* { dg-final { scan-tree-dump-times "\\- 160" 1 "slsr" } } */
-/* { dg-final { scan-tree-dump-times "\\* 4" 1 "optimized" } } */
-/* { dg-final { scan-tree-dump-times "\\* 10" 1 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "\\* 40" 1 "optimized" } } */
/* { dg-final { scan-tree-dump-times "\\+ 200" 1 "optimized" } } */
/* { dg-final { scan-tree-dump-times "\\+ 40" 1 "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/split-path-5.c b/gcc/testsuite/gcc.dg/tree-ssa/split-path-5.c
index 5044c7301a1..95aabdaf6be 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/split-path-5.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/split-path-5.c
@@ -41,20 +41,4 @@ bmhi_init (const char *pattern)
}
}
-char *
-bmhi_search (const char *string, const int stringlen)
-{
- int i, j;
- char *s;
- for (;;)
- {
- while (--j >= 0 && (
- {
- __typeof__ (s[j]) __x = (s[j]);
- ((((__ctype_ptr__ +
- sizeof (""[__x]))[(int) (__x)]) &
- (01 | 02)) ==
- 02) ? (int) __x - 'a' +
- 'A' : (int) __x;}) == pat[j]);
-}}
-/* { dg-final { scan-tree-dump-times "Duplicating join block" 2 "split-paths" } } */
+/* { dg-final { scan-tree-dump-times "Duplicating join block" 1 "split-paths" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dce-3.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dce-3.c
index 64b30ca1eb3..863aa79b4eb 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dce-3.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dce-3.c
@@ -26,9 +26,6 @@ int main(void)
by marking the j % 7 condition as useful. See PR45178. */
/* We should eliminate the inner condition, but the loop must be preserved
- as it is infinite. Therefore there should be just one phi node (for i): */
-/* { dg-final { scan-tree-dump-times "PHI " 1 "cddce1" { xfail *-*-* } } } */
-
-/* And one if (for the exit condition of the loop): */
-/* { dg-final { scan-tree-dump-times "if " 1 "cddce1" } } */
-
+ as it is infinite. Therefore there should be just one goto and no PHI. */
+/* { dg-final { scan-tree-dump-times "PHI " 0 "cddce1" } } */
+/* { dg-final { scan-tree-dump-times "goto" 1 "cddce1" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp24.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp24.c
index 853ee21bb8f..ed49e25f87a 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp24.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp24.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fno-tree-forwprop -fdump-tree-vrp1-details" } */
+/* { dg-options "-O2 -fno-tree-forwprop -fdump-tree-vrp1-details -fdump-tree-optimized" } */
struct rtx_def;
@@ -86,10 +86,8 @@ L7:
/* The first n_sets > 0 test can be simplfiied into n_sets == 1 since
n_sets can only have the values [0, 1] as it's the result of a
- boolean operation.
+ boolean operation. */
- The second n_sets > 0 test can also be simplified into n_sets == 1
- as the only way to reach the tests is when n_sets <= 1 and the only
- value which satisfies both conditions is n_sets == 1. */
-/* { dg-final { scan-tree-dump-times "Simplified relational" 2 "vrp1" } } */
+/* { dg-final { scan-tree-dump-times "Simplified relational" 1 "vrp1" } } */
+/* { dg-final { scan-tree-dump-times "if " 4 "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/ubsan/pr81505.c b/gcc/testsuite/gcc.dg/ubsan/pr81505.c
new file mode 100644
index 00000000000..1cebef56172
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ubsan/pr81505.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -fsanitize=signed-integer-overflow" } */
+
+int a, b, c, h;
+
+int i[5][5];
+
+void
+fn1 ()
+{
+ int l = 0;
+
+ for (a = 0; a <= 3; a++)
+ for (b = 1; b >= 0; b -= 1)
+ l |= i[0][b];
+ c = l;
+}
diff --git a/gcc/testsuite/gcc.dg/unclosed-init.c b/gcc/testsuite/gcc.dg/unclosed-init.c
new file mode 100644
index 00000000000..c0e4dd8da9b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/unclosed-init.c
@@ -0,0 +1,3 @@
+int unclosed[] = { /* { dg-message "18: to match this '.'" } */
+ 42
+ /* { dg-error "0: expected '.' at end of input" } */
diff --git a/gcc/testsuite/gcc.dg/uninit-23.c b/gcc/testsuite/gcc.dg/uninit-23.c
index b38e1d08eab..d64eb7d2ee9 100644
--- a/gcc/testsuite/gcc.dg/uninit-23.c
+++ b/gcc/testsuite/gcc.dg/uninit-23.c
@@ -15,10 +15,10 @@ ql (void)
for (;;)
{
int *go;
- int *t4 = go;
+ int *t4 = go; /* { dg-warning "is used uninitialized" } */
l1:
- *t4 = (*t4 != 0) ? 0 : 2; /* { dg-warning "may be used uninitialized" } */
+ *t4 = (*t4 != 0) ? 0 : 2;
}
if (ij != 0)
diff --git a/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c b/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c
index fe968de3432..1458ba60426 100644
--- a/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c
+++ b/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c
@@ -1,5 +1,6 @@
/* { dg-require-effective-target vect_int } */
/* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
#include <stdarg.h>
#include "tree-vect.h"
@@ -114,7 +115,4 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail { {! vector_alignment_reachable} || { vect_sizes_32B_16B} } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr80815-3.c b/gcc/testsuite/gcc.dg/vect/pr80815-3.c
index dae01fa7af7..50392ab1a41 100644
--- a/gcc/testsuite/gcc.dg/vect/pr80815-3.c
+++ b/gcc/testsuite/gcc.dg/vect/pr80815-3.c
@@ -42,4 +42,4 @@ int main (void)
return 0;
}
-/* { dg-final { scan-tree-dump "improved number of alias checks from \[0-9\]* to 1" "vect" } } */
+/* { dg-final { scan-tree-dump "improved number of alias checks from \[0-9\]* to 1" "vect" { target vect_perm } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr81136.c b/gcc/testsuite/gcc.dg/vect/pr81136.c
index 24bd8fa3b19..c67357684df 100644
--- a/gcc/testsuite/gcc.dg/vect/pr81136.c
+++ b/gcc/testsuite/gcc.dg/vect/pr81136.c
@@ -14,3 +14,5 @@ fn1 (int n)
for (int i = 0; i < n; i++)
a->bar[i] = b[i];
}
+
+/* { dg-final { scan-tree-dump-not "Unknown misalignment" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr81410.c b/gcc/testsuite/gcc.dg/vect/pr81410.c
index 929850f2391..8d1bd6c8efd 100644
--- a/gcc/testsuite/gcc.dg/vect/pr81410.c
+++ b/gcc/testsuite/gcc.dg/vect/pr81410.c
@@ -3,10 +3,9 @@
#include "tree-vect.h"
-typedef long long uint64_t;
-uint64_t x[24];
-uint64_t y[16];
-uint64_t z[8];
+long long x[24];
+long long y[16];
+long long z[8];
void __attribute__((noinline)) foo()
{
diff --git a/gcc/testsuite/gcc.dg/vect/pr81633.c b/gcc/testsuite/gcc.dg/vect/pr81633.c
new file mode 100644
index 00000000000..1ae15504e81
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr81633.c
@@ -0,0 +1,33 @@
+/* { dg-do run } */
+
+static double identity[4][4] = {{1, 0, 0, 0},
+ {0, 1, 0, 0},
+ {0, 0, 1, 0},
+ {0, 0, 0, 1}};
+static double expected[4][4] = {{1, 0, 0, 0},
+ {0, 0, 0, 0},
+ {0, 0, 0, 0},
+ {0, 0, 0, 0}};
+
+static void __attribute__((noinline,noclone))
+kernel(double A[4][4])
+{
+ double tmp[4][4];
+ for (int j = 0; j < 4; j++)
+ for (int k = 0; k < 4; k++)
+ tmp[j][k] = identity[j][0] * identity[j][k];
+ for (int j = 0; j < 4; j++ )
+ for (int k = 0; k < 4; k++)
+ A[j][k] = tmp[j][k];
+}
+
+int main(void)
+{
+ double A[4][4] = {{0.0}};
+ kernel(A);
+ for ( int i = 0; i < 4; i++ )
+ for ( int j = 0; j < 4; j++ )
+ if (A[i][j] != expected[i][j])
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c b/gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c
index 8c88e5f6d18..26bcf4b0d76 100644
--- a/gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c
+++ b/gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c
@@ -1,4 +1,5 @@
/* { dg-require-effective-target section_anchors } */
+/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
#include <stdarg.h>
#include "tree-vect.h"
@@ -112,8 +113,6 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" { target vect_int } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
/* Alignment forced using versioning until the pass that increases alignment
is extended to handle structs. */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target {vect_int && vector_alignment_reachable } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 4 "vect" { target {vect_int && {! vector_alignment_reachable} } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-28.c b/gcc/testsuite/gcc.dg/vect/vect-28.c
index b28fbd9c79a..e213df1a465 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-28.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-28.c
@@ -1,4 +1,5 @@
/* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
#include <stdarg.h>
#include "tree-vect.h"
@@ -39,6 +40,4 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { vector_alignment_reachable } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-33-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-33-big-array.c
index 5ad3953810b..c1aa399a240 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-33-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-33-big-array.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
#include <stdarg.h>
#include "tree-vect.h"
@@ -38,6 +39,4 @@ int main (void)
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target vector_alignment_reachable } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-70.c b/gcc/testsuite/gcc.dg/vect/vect-70.c
index 0ec06a273df..a110f9c34e8 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-70.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-70.c
@@ -1,4 +1,5 @@
/* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
#include <stdarg.h>
#include "tree-vect.h"
@@ -63,6 +64,4 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target { vector_alignment_reachable} } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target {{! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-87.c b/gcc/testsuite/gcc.dg/vect/vect-87.c
index 4f743975852..17b1dcdee99 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-87.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-87.c
@@ -1,4 +1,5 @@
/* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
#include <stdarg.h>
#include "tree-vect.h"
@@ -50,6 +51,4 @@ int main (void)
/* Fails for targets that don't vectorize PLUS (e.g alpha). */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target vector_alignment_reachable} } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-88.c b/gcc/testsuite/gcc.dg/vect/vect-88.c
index f35c5259a8d..b99cb4d89a4 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-88.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-88.c
@@ -1,4 +1,5 @@
/* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
#include <stdarg.h>
#include "tree-vect.h"
@@ -50,6 +51,4 @@ int main (void)
/* Fails for targets that don't vectorize PLUS (e.g alpha). */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target vector_alignment_reachable } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-91.c b/gcc/testsuite/gcc.dg/vect/vect-91.c
index de9d5d1e1e8..979b8e93aef 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-91.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-91.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
#include <stdarg.h>
#include "tree-vect.h"
@@ -60,5 +61,4 @@ main3 ()
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" { xfail vect_no_int_add } } } */
/* { dg-final { scan-tree-dump-times "accesses have the same alignment." 3 "vect" { target { { vect_aligned_arrays } && {! vect_sizes_32B_16B} } } } } */
/* { dg-final { scan-tree-dump-times "accesses have the same alignment." 2 "vect" { target { {! vect_aligned_arrays } && {vect_sizes_32B_16B} } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" {target { vector_alignment_reachable } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" {target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-93.c b/gcc/testsuite/gcc.dg/vect/vect-93.c
index 790ef2d7596..dfa4d42b8b2 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-93.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-93.c
@@ -1,4 +1,5 @@
/* { dg-require-effective-target vect_float } */
+/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
#include <stdarg.h>
#include "tree-vect.h"
@@ -71,8 +72,6 @@ int main (void)
/* main && main1 together: */
/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 2 "vect" { target powerpc*-*-* i?86-*-* x86_64-*-* } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target { vect_no_align && {! vector_alignment_reachable} } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail { { vect_no_align } || { { ! vector_alignment_reachable} || vect_element_align } } } } } */
/* in main1: */
/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target !powerpc*-*-* !i?86-*-* !x86_64-*-* } } } */
@@ -80,5 +79,4 @@ int main (void)
/* in main: */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-alias-check-3.c b/gcc/testsuite/gcc.dg/vect/vect-alias-check-3.c
new file mode 100644
index 00000000000..10b4c3d2c2a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-alias-check-3.c
@@ -0,0 +1,120 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "--param vect-max-version-for-alias-checks=0 -fopenmp-simd" } */
+
+/* Intended to be larger than any VF. */
+#define GAP 128
+#define N (GAP * 3)
+
+struct s { int x[N + 1]; };
+struct t { struct s x[N + 1]; };
+struct u { int x[N + 1]; int y; };
+struct v { struct s s; };
+
+void
+f1 (struct s *a, struct s *b)
+{
+ for (int i = 0; i < N; ++i)
+ a->x[i] += b->x[i];
+}
+
+void
+f2 (struct s *a, struct s *b)
+{
+ for (int i = 0; i < N; ++i)
+ a[1].x[i] += b[2].x[i];
+}
+
+void
+f3 (struct s *a, struct s *b)
+{
+ for (int i = 0; i < N; ++i)
+ a[1].x[i] += b[i].x[i];
+}
+
+void
+f4 (struct s *a, struct s *b)
+{
+ for (int i = 0; i < N; ++i)
+ a[i].x[i] += b[i].x[i];
+}
+
+void
+f5 (struct s *a, struct s *b)
+{
+ for (int i = 0; i < N; ++i)
+ a->x[i] += b->x[i + 1];
+}
+
+void
+f6 (struct s *a, struct s *b)
+{
+ for (int i = 0; i < N; ++i)
+ a[1].x[i] += b[2].x[i + 1];
+}
+
+void
+f7 (struct s *a, struct s *b)
+{
+ for (int i = 0; i < N; ++i)
+ a[1].x[i] += b[i].x[i + 1];
+}
+
+void
+f8 (struct s *a, struct s *b)
+{
+ for (int i = 0; i < N; ++i)
+ a[i].x[i] += b[i].x[i + 1];
+}
+
+void
+f9 (struct s *a, struct t *b)
+{
+ for (int i = 0; i < N; ++i)
+ a->x[i] += b->x[1].x[i];
+}
+
+void
+f10 (struct s *a, struct t *b)
+{
+ for (int i = 0; i < N; ++i)
+ a->x[i] += b->x[i].x[i];
+}
+
+void
+f11 (struct u *a, struct u *b)
+{
+ for (int i = 0; i < N; ++i)
+ a->x[i] += b->x[i] + b[i].y;
+}
+
+void
+f12 (struct s *a, struct s *b)
+{
+ for (int i = 0; i < GAP; ++i)
+ a->x[i + GAP] += b->x[i];
+}
+
+void
+f13 (struct s *a, struct s *b)
+{
+ for (int i = 0; i < GAP * 2; ++i)
+ a->x[i + GAP] += b->x[i];
+}
+
+void
+f14 (struct v *a, struct s *b)
+{
+ for (int i = 0; i < N; ++i)
+ a->s.x[i] = b->x[i];
+}
+
+void
+f15 (struct s *a, struct s *b)
+{
+ #pragma omp simd safelen(N)
+ for (int i = 0; i < N; ++i)
+ a->x[i + 1] += b->x[i];
+}
+
+/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 15 "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-alias-check-4.c b/gcc/testsuite/gcc.dg/vect/vect-alias-check-4.c
new file mode 100644
index 00000000000..1e5fc273ec1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-alias-check-4.c
@@ -0,0 +1,35 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "--param vect-max-version-for-alias-checks=0" } */
+
+#define N 16
+
+struct s1 { int a[N]; };
+struct s2 { struct s1 b; int c; };
+struct s3 { int d; struct s1 e; };
+union u { struct s2 f; struct s3 g; };
+
+/* We allow a and b to overlap arbitrarily. */
+
+void
+f1 (int a[][N], int b[][N])
+{
+ for (int i = 0; i < N; ++i)
+ a[0][i] += b[0][i];
+}
+
+void
+f2 (union u *a, union u *b)
+{
+ for (int i = 0; i < N; ++i)
+ a->f.b.a[i] += b->g.e.a[i];
+}
+
+void
+f3 (struct s1 *a, struct s1 *b)
+{
+ for (int i = 0; i < N - 1; ++i)
+ a->a[i + 1] += b->a[i];
+}
+
+/* { dg-final { scan-tree-dump-not "LOOP VECTORIZED" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-alias-check-5.c b/gcc/testsuite/gcc.dg/vect/vect-alias-check-5.c
new file mode 100644
index 00000000000..bfa946b9ad2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-alias-check-5.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+
+/* Intended to be larger than any VF. */
+#define GAP 128
+#define N (GAP * 3)
+
+struct s { int x[N]; };
+
+void
+f1 (struct s *a, struct s *b)
+{
+ for (int i = 0; i < GAP * 2; ++i)
+ a->x[i + GAP] += b->x[i];
+}
+
+/* { dg-final { scan-tree-dump-times "consider run-time aliasing" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "improved number of alias checks from 1 to 0" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 1 "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-alias-check-6.c b/gcc/testsuite/gcc.dg/vect/vect-alias-check-6.c
new file mode 100644
index 00000000000..5bb78f8ad5c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-alias-check-6.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+
+#define N 16
+
+struct s { int x[N]; };
+
+void
+f1 (struct s *a, struct s *b)
+{
+ for (int i = 0; i < N - 1; ++i)
+ a->x[i + 1] += b->x[i];
+}
+
+/* { dg-final { scan-tree-dump {checking that [^\n]* and [^\n]* have different addresses} "vect" } } */
+/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-alias-check-7.c b/gcc/testsuite/gcc.dg/vect/vect-alias-check-7.c
new file mode 100644
index 00000000000..812349de914
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-alias-check-7.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+
+#define N 16
+
+struct s { int x[N]; };
+
+void
+f1 (struct s *a, struct s *b)
+{
+ for (int i = 0; i < N; ++i)
+ a->x[i] += b->x[N - i - 1];
+}
+
+/* { dg-final { scan-tree-dump {checking that [^\n]* and [^\n]* have different addresses} "vect" } } */
+/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" { target { vect_perm && vect_element_align } } } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/_Float16_1.c b/gcc/testsuite/gcc.target/aarch64/_Float16_1.c
index 320f154acf2..00c1a81cf7f 100644
--- a/gcc/testsuite/gcc.target/aarch64/_Float16_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/_Float16_1.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O3 -march=armv8.2-a+nofp16" } */
+/* { dg-skip-if "" { *-*-* } { "-mcpu=*" } { "" } } */
#pragma GCC target ("arch=armv8.2-a+nofp16")
diff --git a/gcc/testsuite/gcc.target/aarch64/_Float16_2.c b/gcc/testsuite/gcc.target/aarch64/_Float16_2.c
index 8b2aa1e784c..061606e0b55 100644
--- a/gcc/testsuite/gcc.target/aarch64/_Float16_2.c
+++ b/gcc/testsuite/gcc.target/aarch64/_Float16_2.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O3 -march=armv8.2-a+nofp16 -fpermitted-flt-eval-methods=c11" } */
+/* { dg-skip-if "" { *-*-* } { "-mcpu=*" } { "" } } */
#pragma GCC target ("arch=armv8.2-a+nofp16")
diff --git a/gcc/testsuite/gcc.target/aarch64/_Float16_3.c b/gcc/testsuite/gcc.target/aarch64/_Float16_3.c
index 2d202503850..92d6dd9647d 100644
--- a/gcc/testsuite/gcc.target/aarch64/_Float16_3.c
+++ b/gcc/testsuite/gcc.target/aarch64/_Float16_3.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O3 -march=armv8.2-a+nofp16 -std=c11 -ffp-contract=fast" } */
+/* { dg-skip-if "" { *-*-* } { "-mcpu=*" } { "" } } */
#pragma GCC target ("arch=armv8.2-a+nofp16")
diff --git a/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c b/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c
index 15606b68990..f2a21ddf2e1 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
-/* { dg-options "-O2" } */
+/* { dg-options "-O2 -march=armv8-a+nolse" } */
+/* { dg-skip-if "" { *-*-* } { "-mcpu=*" } { "" } } */
int
foo (int *a)
diff --git a/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c b/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c
index b14a7c29437..8d2ae67dfbe 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
-/* { dg-options "-O2" } */
+/* { dg-options "-O2 -march=armv8-a+nolse" } */
+/* { dg-skip-if "" { *-*-* } { "-mcpu=*" } { "" } } */
int
foo (int *a)
diff --git a/gcc/testsuite/gcc.target/aarch64/dbl_mov_immediate_1.c b/gcc/testsuite/gcc.target/aarch64/dbl_mov_immediate_1.c
new file mode 100644
index 00000000000..e8dd01db056
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/dbl_mov_immediate_1.c
@@ -0,0 +1,53 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+/* { dg-skip-if "Tiny model won't generate adrp" { *-*-* } { "-mcmodel=tiny" } { "" } } */
+
+double d0(void)
+{
+ double x = 0.0d;
+ return x;
+}
+
+double dn1(void)
+{
+ double x = -0.0d;
+ return x;
+}
+
+
+double d1(void)
+{
+ double x = 1.5d;
+ return x;
+}
+
+double d2(void)
+{
+ double x = 123256.0d;
+ return x;
+}
+
+double d3(void)
+{
+ double x = 123256123456.0d;
+ return x;
+}
+
+double d4(void)
+{
+ double x = 123456123456123456.0d;
+ return x;
+}
+
+/* { dg-final { scan-assembler-times "movi\td\[0-9\]+, #?0" 1 } } */
+
+/* { dg-final { scan-assembler-times "adrp\tx\[0-9\]+, \.LC\[0-9\]" 2 } } */
+/* { dg-final { scan-assembler-times "ldr\td\[0-9\]+, \\\[x\[0-9\], #:lo12:\.LC\[0-9\]\\\]" 2 } } */
+
+/* { dg-final { scan-assembler-times "fmov\td\[0-9\]+, 1\\\.5e\\\+0" 1 } } */
+
+/* { dg-final { scan-assembler-times "mov\tx\[0-9\]+, 25838523252736" 1 } } */
+/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0x40fe, lsl 48" 1 } } */
+/* { dg-final { scan-assembler-times "mov\tx\[0-9\]+, -9223372036854775808" 1 } } */
+/* { dg-final { scan-assembler-times "fmov\td\[0-9\]+, x\[0-9\]+" 2 } } */
+
diff --git a/gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_1.c b/gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_1.c
new file mode 100644
index 00000000000..1ed3831e139
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_1.c
@@ -0,0 +1,49 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+/* { dg-require-effective-target arm_v8_2a_fp16_scalar_ok } */
+/* { dg-add-options arm_v8_2a_fp16_scalar } */
+
+extern __fp16 foo ();
+extern void bar (__fp16* x);
+
+void f1 ()
+{
+ volatile __fp16 a = 17.0;
+}
+
+
+void f2 (__fp16 *a)
+{
+ *a = 17.0;
+}
+
+void f3 ()
+{
+ __fp16 b = foo ();
+ b = 17.0;
+ bar (&b);
+}
+
+__fp16 f4 ()
+{
+ __fp16 a = 0;
+ __fp16 b = 1;
+ __fp16 c = 2;
+ __fp16 d = 4;
+
+ __fp16 z = a + b;
+ z = z + c;
+ z = z - d;
+ return z;
+}
+
+__fp16 f5 ()
+{
+ __fp16 a = 16;
+ bar (&a);
+ return a;
+}
+
+/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, #?19520" 3 } } */
+/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0xbc, lsl 8" 1 } } */
+/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x4c, lsl 8" 1 } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_2.c b/gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_2.c
new file mode 100644
index 00000000000..6f44821e9d0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_2.c
@@ -0,0 +1,45 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+/* { dg-require-effective-target arm_v8_2a_fp16_scalar_ok } */
+/* { dg-add-options arm_v8_2a_fp16_scalar } */
+
+#include <arm_fp16.h>
+
+float16_t f0(void)
+{
+ float16_t x = 0.0f;
+ return x;
+}
+
+float16_t fn1(void)
+{
+ float16_t x = -0.0f;
+ return x;
+}
+
+float16_t f1(void)
+{
+ float16_t x = 256.0f;
+ return x;
+}
+
+float16_t f2(void)
+{
+ float16_t x = 123256.0f;
+ return x;
+}
+
+float16_t f3(void)
+{
+ float16_t x = 17.0;
+ return x;
+}
+
+/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.4h, ?#0" 1 } } */
+/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x80, lsl 8" 1 } } */
+/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x5c, lsl 8" 1 } } */
+/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x7c, lsl 8" 1 } } */
+
+/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, 19520" 1 } } */
+/* { dg-final { scan-assembler-times "fmov\th\[0-9\], w\[0-9\]+" 1 } } */
+
diff --git a/gcc/testsuite/gcc.target/aarch64/flt_mov_immediate_1.c b/gcc/testsuite/gcc.target/aarch64/flt_mov_immediate_1.c
new file mode 100644
index 00000000000..7b92a5ae40f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/flt_mov_immediate_1.c
@@ -0,0 +1,52 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+float f0(void)
+{
+ float x = 0.0f;
+ return x;
+}
+
+float fn1(void)
+{
+ float x = -0.0f;
+ return x;
+}
+
+float f1(void)
+{
+ float x = 256.0f;
+ return x;
+}
+
+float f2(void)
+{
+ float x = 123256.0f;
+ return x;
+}
+
+float f3(void)
+{
+ float x = 2.0f;
+ return x;
+}
+
+float f4(void)
+{
+ float x = -20000.1;
+ return x;
+}
+
+
+/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, ?#0" 1 } } */
+/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x80, lsl 24" 1 } } */
+/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x80, lsl 24" 1 } } */
+
+/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, 48128" 1 } } */
+/* { dg-final { scan-assembler-times "movk\tw\[0-9\]+, 0x47f0, lsl 16" 1 } } */
+
+/* { dg-final { scan-assembler-times "fmov\ts\[0-9\]+, 2\\\.0e\\\+0" 1 } } */
+
+/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, 16435" 1 } } */
+/* { dg-final { scan-assembler-times "movk\tw\[0-9\]+, 0xc69c, lsl 16" 1 } } */
+
diff --git a/gcc/testsuite/gcc.target/aarch64/int_mov_immediate_1.c b/gcc/testsuite/gcc.target/aarch64/int_mov_immediate_1.c
new file mode 100644
index 00000000000..6ac9065037f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/int_mov_immediate_1.c
@@ -0,0 +1,59 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O3" } */
+
+long long f1(void)
+{
+ return 0xffff6666;
+}
+
+int f3(void)
+{
+ return 0xffff6666;
+}
+
+
+long f2(void)
+{
+ return 0x11110000ffff6666;
+}
+
+long f4(void)
+{
+ return 0x11110001ffff6666;
+}
+
+long f5(void)
+{
+ return 0x111100001ff6666;
+}
+
+long f6(void)
+{
+ return 0x00001111ffff6666;
+}
+
+long f7(void)
+{
+ return 0x000011116666ffff;
+}
+
+long f8(void)
+{
+ return 0x0f0011116666ffff;
+}
+
+/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, -39322" 1 } } */
+/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, 4294927974" 3 } } */
+/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, 1718026239" 1 } } */
+/* { dg-final { scan-assembler-times "mov\tx\[0-9\]+, -2576941057" 1 } } */
+/* { dg-final { scan-assembler-times "mov\tx\[0-9\]+, -39322" 1 } } */
+/* { dg-final { scan-assembler-times "mov\tx\[0-9\]+, 26214" 1 } } */
+/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0xf00, lsl 48" 1 } } */
+/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0x1111, lsl 48" 2 } } */
+/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0x1000, lsl 32" 1 } } */
+/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0x1111, lsl 32" 3 } } */
+/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0x111, lsl 48" 1 } } */
+/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0x1ff, lsl 16" 1 } } */
+/* { dg-final { scan-assembler-times "movk\tx\[0-9\]+, 0x1, lsl 32" 1 } } */
+
diff --git a/gcc/testsuite/gcc.target/aarch64/pr63304_1.c b/gcc/testsuite/gcc.target/aarch64/pr63304_1.c
index c917f81c022..114d8c1a6c3 100644
--- a/gcc/testsuite/gcc.target/aarch64/pr63304_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/pr63304_1.c
@@ -4,10 +4,10 @@
#pragma GCC target ("+nothing+simd, cmodel=small")
int
-cal (float a)
+cal (double a)
{
- float b = 1.2;
- float c = 2.2;
+ double b = 3.2;
+ double c = 2.2;
if ((a + b) != c)
return 0;
else
@@ -19,11 +19,11 @@ cal (float a)
#pragma GCC target ("cmodel=large")
int
-cal2 (float a)
+cal2 (double a)
{
- float b = 1.2;
- float c = 2.2;
+ double b = 3.2;
+ double c = 2.2;
if ((a + b) != c)
return 0;
else
@@ -33,11 +33,11 @@ cal2 (float a)
#pragma GCC pop_options
int
-cal3 (float a)
+cal3 (double a)
{
- float b = 1.2;
- float c = 2.2;
+ double b = 3.2;
+ double c = 2.2;
if ((a + b) != c)
return 0;
else
diff --git a/gcc/testsuite/gcc.target/aarch64/pr79041-2.c b/gcc/testsuite/gcc.target/aarch64/pr79041-2.c
new file mode 100644
index 00000000000..a889dfdd895
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr79041-2.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mcmodel=large -mpc-relative-literal-loads" } */
+/* { dg-require-effective-target lp64 } */
+
+__int128
+t (void)
+{
+ return (__int128)1 << 80;
+}
+
+/* { dg-final { scan-assembler "adr" } } */
+/* { dg-final { scan-assembler-not "adrp" } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/pr81414.C b/gcc/testsuite/gcc.target/aarch64/pr81414.C
new file mode 100644
index 00000000000..53dfc7cf800
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr81414.C
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mcpu=cortex-a57" } */
+
+typedef __Float32x2_t float32x2_t;
+float32x2_t
+foo1 (float32x2_t __a, float32x2_t __b, float32x2_t __c) {
+ return __b * __c + __a;
+}
+
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vmla_elem_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vmla_elem_1.c
new file mode 100644
index 00000000000..df777581ab4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vmla_elem_1.c
@@ -0,0 +1,67 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+typedef short int __attribute__ ((vector_size (16))) v8hi;
+
+v8hi
+mla8hi (v8hi v0, v8hi v1, short int v2)
+{
+ /* { dg-final { scan-assembler "mla\\tv\[0-9\]\+\\.8h, v\[0-9\]\+\\.8h, v\[0-9\]\+\\.h\\\[0\\\]" } } */
+ return v0 + v1 * v2;
+}
+
+
+v8hi
+mls8hi (v8hi v0, v8hi v1, short int v2)
+{
+ /* { dg-final { scan-assembler "mls\\tv\[0-9\]\+\\.8h, v\[0-9\]\+\\.8h, v\[0-9\]\+\\.h\\\[0\\\]" } } */
+ return v0 - v1 * v2;
+}
+
+typedef short int __attribute__ ((vector_size (8))) v4hi;
+
+v4hi
+mla4hi (v4hi v0, v4hi v1, short int v2)
+{
+ /* { dg-final { scan-assembler "mla\\tv\[0-9\]\+\\.4h, v\[0-9\]\+\\.4h, v\[0-9\]\+\\.h\\\[0\\\]" } } */
+ return v0 + v1 * v2;
+}
+
+v4hi
+mls4hi (v4hi v0, v4hi v1, short int v2)
+{
+ /* { dg-final { scan-assembler "mls\\tv\[0-9\]\+\\.4h, v\[0-9\]\+\\.4h, v\[0-9\]\+\\.h\\\[0\\\]" } } */
+ return v0 - v1 * v2;
+}
+
+typedef int __attribute__ ((vector_size (16))) v4si;
+
+v4si
+mla4si (v4si v0, v4si v1, int v2)
+{
+ /* { dg-final { scan-assembler "mla\\tv\[0-9\]\+\\.4s, v\[0-9\]\+\\.4s, v\[0-9\]\+\\.s\\\[0\\\]" } } */
+ return v0 + v1 * v2;
+}
+
+v4si
+mls4si (v4si v0, v4si v1, int v2)
+{
+ /* { dg-final { scan-assembler "mls\\tv\[0-9\]\+\\.4s, v\[0-9\]\+\\.4s, v\[0-9\]\+\\.s\\\[0\\\]" } } */
+ return v0 - v1 * v2;
+}
+
+typedef int __attribute__((vector_size (8))) v2si;
+
+v2si
+mla2si (v2si v0, v2si v1, int v2)
+{
+ /* { dg-final { scan-assembler "mla\\tv\[0-9\]\+\\.2s, v\[0-9\]\+\\.2s, v\[0-9\]\+\\.s\\\[0\\\]" } } */
+ return v0 + v1 * v2;
+}
+
+v2si
+mls2si (v2si v0, v2si v1, int v2)
+{
+ /* { dg-final { scan-assembler "mls\\tv\[0-9\]\+\\.2s, v\[0-9\]\+\\.2s, v\[0-9\]\+\\.s\\\[0\\\]" } } */
+ return v0 - v1 * v2;
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/target_attr_1.c b/gcc/testsuite/gcc.target/aarch64/target_attr_1.c
index 0527d0c3d61..4a3a1ee233a 100644
--- a/gcc/testsuite/gcc.target/aarch64/target_attr_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/target_attr_1.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -mcpu=thunderx -dA" } */
+/* { dg-options "-O2 -mcpu=thunderx -march=armv8-a -dA" } */
/* Test that cpu attribute overrides the command-line -mcpu. */
diff --git a/gcc/testsuite/gcc.target/aarch64/target_attr_10.c b/gcc/testsuite/gcc.target/aarch64/target_attr_10.c
index 6d0577178f0..18499047112 100644
--- a/gcc/testsuite/gcc.target/aarch64/target_attr_10.c
+++ b/gcc/testsuite/gcc.target/aarch64/target_attr_10.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -march=armv8-a+simd" } */
+/* { dg-options "-O2 -march=armv8-a+simd -mcpu=generic" } */
/* Using a SIMD intrinsic from a function tagged with nosimd should fail
due to inlining rules. */
diff --git a/gcc/testsuite/gcc.target/aarch64/target_attr_13.c b/gcc/testsuite/gcc.target/aarch64/target_attr_13.c
index 0f81e9aa587..d5bee3a7b90 100644
--- a/gcc/testsuite/gcc.target/aarch64/target_attr_13.c
+++ b/gcc/testsuite/gcc.target/aarch64/target_attr_13.c
@@ -1,5 +1,5 @@
/* { dg-do assemble } */
-/* { dg-options "-O2 -march=armv8-a+crc+crypto" } */
+/* { dg-options "-O2 -march=armv8-a+crc+crypto -mcpu=generic" } */
#include "arm_acle.h"
diff --git a/gcc/testsuite/gcc.target/aarch64/target_attr_15.c b/gcc/testsuite/gcc.target/aarch64/target_attr_15.c
index 2d8c7b955ce..108b372e4cc 100644
--- a/gcc/testsuite/gcc.target/aarch64/target_attr_15.c
+++ b/gcc/testsuite/gcc.target/aarch64/target_attr_15.c
@@ -1,5 +1,5 @@
/* { dg-do assemble } */
-/* { dg-options "-march=armv8-a+crypto -save-temps" } */
+/* { dg-options "-march=armv8-a+crypto -mcpu=generic -save-temps" } */
/* Check that "+nothing" clears the ISA flags. */
diff --git a/gcc/testsuite/gcc.target/aarch64/target_attr_2.c b/gcc/testsuite/gcc.target/aarch64/target_attr_2.c
index 39bb6e7dd36..f84342d889f 100644
--- a/gcc/testsuite/gcc.target/aarch64/target_attr_2.c
+++ b/gcc/testsuite/gcc.target/aarch64/target_attr_2.c
@@ -1,5 +1,5 @@
/* { dg-do assemble } */
-/* { dg-options "-O2 -mcpu=cortex-a57 -ftree-vectorize -fdump-tree-vect-all" } */
+/* { dg-options "-O2 -mcpu=cortex-a57 -march=armv8-a -ftree-vectorize -fdump-tree-vect-all" } */
/* The various ways to turn off simd availability should
turn off vectorization. */
diff --git a/gcc/testsuite/gcc.target/aarch64/target_attr_3.c b/gcc/testsuite/gcc.target/aarch64/target_attr_3.c
index 9f9c27654f6..eacec5a6552 100644
--- a/gcc/testsuite/gcc.target/aarch64/target_attr_3.c
+++ b/gcc/testsuite/gcc.target/aarch64/target_attr_3.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -mno-fix-cortex-a53-835769 -save-temps" } */
+/* { dg-options "-O2 -mno-fix-cortex-a53-835769 -march=armv8-a -mcpu=generic -save-temps" } */
/* Check that the attribute overrides the command line option
and the fix is applied once. */
diff --git a/gcc/testsuite/gcc.target/aarch64/target_attr_4.c b/gcc/testsuite/gcc.target/aarch64/target_attr_4.c
index d98ba42303f..e0114084800 100644
--- a/gcc/testsuite/gcc.target/aarch64/target_attr_4.c
+++ b/gcc/testsuite/gcc.target/aarch64/target_attr_4.c
@@ -1,5 +1,5 @@
/* { dg-do assemble } */
-/* { dg-options "-O2 -march=armv8-a+nocrc -save-temps" } */
+/* { dg-options "-O2 -march=armv8-a+nocrc -mcpu=generic -save-temps" } */
#include "arm_acle.h"
diff --git a/gcc/testsuite/gcc.target/aarch64/target_attr_7.c b/gcc/testsuite/gcc.target/aarch64/target_attr_7.c
index 818d327705f..6067ffed30e 100644
--- a/gcc/testsuite/gcc.target/aarch64/target_attr_7.c
+++ b/gcc/testsuite/gcc.target/aarch64/target_attr_7.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -mcpu=thunderx -dA" } */
+/* { dg-options "-O2 -mcpu=thunderx -march=armv8-a -dA" } */
/* Make sure that #pragma overrides command line option and
target attribute overrides the pragma. */
diff --git a/gcc/testsuite/gcc.target/aarch64/target_attr_crypto_ice_1.c b/gcc/testsuite/gcc.target/aarch64/target_attr_crypto_ice_1.c
index 42f14c461a2..c74cc900f98 100644
--- a/gcc/testsuite/gcc.target/aarch64/target_attr_crypto_ice_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/target_attr_crypto_ice_1.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -mcpu=thunderx+nofp" } */
+/* { dg-options "-O2 -mcpu=thunderx+nofp -march=armv8-a" } */
#include "arm_neon.h"
diff --git a/gcc/testsuite/gcc.target/aarch64/target_attr_crypto_ice_2.c b/gcc/testsuite/gcc.target/aarch64/target_attr_crypto_ice_2.c
index d6e7b681832..d0a62b83351 100644
--- a/gcc/testsuite/gcc.target/aarch64/target_attr_crypto_ice_2.c
+++ b/gcc/testsuite/gcc.target/aarch64/target_attr_crypto_ice_2.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -mcpu=thunderx+nofp" } */
+/* { dg-options "-O2 -mcpu=thunderx+nofp -march=armv8-a" } */
/* Make sure that we don't ICE when dealing with vector parameters
in a simd-tagged function within a non-simd translation unit. */
diff --git a/gcc/testsuite/gcc.target/aarch64/tst_imm_split_1.c b/gcc/testsuite/gcc.target/aarch64/tst_imm_split_1.c
new file mode 100644
index 00000000000..33a2c0f45af
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/tst_imm_split_1.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int
+f (unsigned char *p)
+{
+ return p[0] == 50 || p[0] == 52;
+}
+
+int
+g (unsigned char *p)
+{
+ return (p[0] >> 4 & 0xfd) == 0;
+}
+
+/* { dg-final { scan-assembler-not "and\\t\[xw\]\[0-9\]+, \[xw\]\[0-9\]+.*" } } */
+/* { dg-final { scan-assembler "tst\\t\[xw\]\[0-9\]+, \[xw\]\[0-9\]+" } } */
+/* { dg-final { scan-assembler "tst\\t\[xw\]\[0-9\]+, \[xw\]\[0-9\]+, lsr 4" } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vect-xorsign_exec.c b/gcc/testsuite/gcc.target/aarch64/vect-xorsign_exec.c
new file mode 100644
index 00000000000..cfa22115831
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/vect-xorsign_exec.c
@@ -0,0 +1,58 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details --save-temps" } */
+
+extern void abort ();
+
+#define N 16
+float a[N] = {-0.1f, -3.2f, -6.3f, -9.4f,
+ -12.5f, -15.6f, -18.7f, -21.8f,
+ 24.9f, 27.1f, 30.2f, 33.3f,
+ 36.4f, 39.5f, 42.6f, 45.7f};
+float b[N] = {-1.2f, 3.4f, -5.6f, 7.8f,
+ -9.0f, 1.0f, -2.0f, 3.0f,
+ -4.0f, -5.0f, 6.0f, 7.0f,
+ -8.0f, -9.0f, 10.0f, 11.0f};
+float r[N];
+
+double ad[N] = {-0.1d, -3.2d, -6.3d, -9.4d,
+ -12.5d, -15.6d, -18.7d, -21.8d,
+ 24.9d, 27.1d, 30.2d, 33.3d,
+ 36.4d, 39.5d, 42.6d, 45.7d};
+double bd[N] = {-1.2d, 3.4d, -5.6d, 7.8d,
+ -9.0d, 1.0d, -2.0d, 3.0d,
+ -4.0d, -5.0d, 6.0d, 7.0d,
+ -8.0d, -9.0d, 10.0d, 11.0d};
+double rd[N];
+
+int
+main (void)
+{
+ int i;
+
+ for (i = 0; i < N; i++)
+ r[i] = a[i] * __builtin_copysignf (1.0f, b[i]);
+
+ /* check results: */
+ for (i = 0; i < N; i++)
+ if (r[i] != a[i] * __builtin_copysignf (1.0f, b[i]))
+ abort ();
+
+ for (i = 0; i < N; i++)
+ rd[i] = ad[i] * __builtin_copysign (1.0d, bd[i]);
+
+ /* check results: */
+ for (i = 0; i < N; i++)
+ if (rd[i] != ad[i] * __builtin_copysign (1.0d, bd[i]))
+ abort ();
+
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
+/* { dg-final { scan-assembler "\[ \t\]?eor\[ \t\]?" } } */
+/* { dg-final { scan-assembler "\[ \t\]?and\[ \t\]?" } } */
+/* { dg-final { scan-assembler-not "copysign" } } */
+/* { dg-final { scan-assembler-not "\[ \t\]?orr\[ \t\]?" } } */
+/* { dg-final { scan-assembler-not "\[ \t\]?fmul\[ \t\]?" } } */
+
diff --git a/gcc/testsuite/gcc.target/aarch64/xorsign.c b/gcc/testsuite/gcc.target/aarch64/xorsign.c
new file mode 100644
index 00000000000..22c5829449d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/xorsign.c
@@ -0,0 +1,86 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+double
+check_d_pos (double x, double y)
+{
+ return x * __builtin_copysign (1.0, y);
+}
+
+float
+check_f_pos (float x, float y)
+{
+ return x * __builtin_copysignf (1.0f, y);
+}
+
+long double
+check_l_pos (long double x, long double y)
+{
+ return x * __builtin_copysignl (1.0, y);
+}
+
+/* --------------- */
+
+double
+check_d_neg (double x, double y)
+{
+ return x * __builtin_copysign (-1.0, y);
+}
+
+float
+check_f_neg (float x, float y)
+{
+ return x * __builtin_copysignf (-1.0f, y);
+}
+
+long double
+check_l_neg (long double x, long double y)
+{
+ return x * __builtin_copysignl (-1.0, y);
+}
+
+/* --------------- */
+
+double
+check_d_pos_rev (double x, double y)
+{
+ return __builtin_copysign (1.0, y) * x;
+}
+
+float
+check_f_pos_rev (float x, float y)
+{
+ return __builtin_copysignf (1.0f, y) * x;
+}
+
+long double
+check_l_pos_rev (long double x, long double y)
+{
+ return __builtin_copysignl (1.0, y) * x;
+}
+
+/* --------------- */
+
+double
+check_d_neg_rev (double x, double y)
+{
+ return __builtin_copysign (-1.0, y) * x;
+}
+
+float
+check_f_neg_rev (float x, float y)
+{
+ return __builtin_copysignf (-1.0f, y) * x;
+}
+
+long double
+check_l_neg_rev (long double x, long double y)
+{
+ return __builtin_copysignl (-1.0, y) * x;
+}
+
+/* { dg-final { scan-assembler "\[ \t\]?eor\[ \t\]?" } } */
+/* { dg-final { scan-assembler "\[ \t\]?and\[ \t\]?" } } */
+/* { dg-final { scan-assembler-not "copysign" } } */
+/* { dg-final { scan-assembler-not "\[ \t\]?orr\[ \t\]?" } } */
+/* { dg-final { scan-assembler-not "\[ \t\]?fmul\[ \t\]?" } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/xorsign_exec.c b/gcc/testsuite/gcc.target/aarch64/xorsign_exec.c
new file mode 100644
index 00000000000..64bf8044cbd
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/xorsign_exec.c
@@ -0,0 +1,26 @@
+/* { dg-do run } */
+/* { dg-options "-O -ffast-math" } */
+
+#include <math.h>
+
+extern void abort(void);
+
+static double x = 2.0;
+static float y = 2.0;
+
+int main()
+{
+ if ((2.5 * __builtin_copysign(1.0d, x)) != 2.5)
+ abort();
+
+ if ((2.5 * __builtin_copysign(1.0f, y)) != 2.5)
+ abort();
+
+ if ((2.5 * __builtin_copysignf(1.0d, -x)) != -2.5)
+ abort();
+
+ if ((2.5 * __builtin_copysignf(1.0f, -y)) != -2.5)
+ abort();
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx-pr80846.c b/gcc/testsuite/gcc.target/i386/avx-pr80846.c
new file mode 100644
index 00000000000..338f01039f2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx-pr80846.c
@@ -0,0 +1,39 @@
+/* PR target/80846 */
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-O2 -mavx -mno-avx2" } */
+
+typedef __int128 V __attribute__((vector_size (32)));
+typedef long long W __attribute__((vector_size (32)));
+typedef int X __attribute__((vector_size (16)));
+typedef __int128 Y __attribute__((vector_size (64)));
+typedef long long Z __attribute__((vector_size (64)));
+
+W f1 (__int128 x, __int128 y) { return (W) ((V) { x, y }); }
+__int128 f2 (W x) { return ((V)x)[0]; }
+__int128 f3 (W x) { return ((V)x)[1]; }
+W f4 (X x, X y) { union { X x; __int128 i; } u = { .x = x }, v = { .x = y }; return (W) ((V) { u.i, v.i }); }
+X f5 (W x) { return (X)(((V)x)[0]); }
+X f6 (W x) { return (X)(((V)x)[1]); }
+W f7 (void) { return (W) ((V) { 2, 3 }); }
+W f8 (X x) { union { X x; __int128 i; } u = { .x = x }; return (W) ((V) { u.i, 3 }); }
+W f9 (X x) { union { X x; __int128 i; } u = { .x = x }; return (W) ((V) { 2, u.i }); }
+W f10 (X x) { union { X x; __int128 i; } u = { .x = x }; return (W) ((V) { u.i, u.i }); }
+#ifdef __AVX512F__
+Z f11 (__int128 x, __int128 y, __int128 z, __int128 a) { return (Z) ((Y) { x, y, z, a }); }
+__int128 f12 (Z x) { return ((Y)x)[0]; }
+__int128 f13 (Z x) { return ((Y)x)[1]; }
+__int128 f14 (Z x) { return ((Y)x)[2]; }
+__int128 f15 (Z x) { return ((Y)x)[3]; }
+Z f16 (X x, X y, X z, X a) { union { X x; __int128 i; } u = { .x = x }, v = { .x = y }, w = { .x = z }, t = { .x = a };
+ return (Z) ((Y) { u.i, v.i, w.i, t.i }); }
+X f17 (Z x) { return (X)(((Y)x)[0]); }
+X f18 (Z x) { return (X)(((Y)x)[1]); }
+X f19 (Z x) { return (X)(((Y)x)[2]); }
+X f20 (Z x) { return (X)(((Y)x)[3]); }
+Z f21 (void) { return (Z) ((Y) { 2, 3, 4, 5 }); }
+Z f22 (X x) { union { X x; __int128 i; } u = { .x = x }; return (Z) ((Y) { u.i, 3, 4, 5 }); }
+Z f23 (X x) { union { X x; __int128 i; } u = { .x = x }; return (Z) ((Y) { 2, u.i, 4, 5 }); }
+Z f24 (X x) { union { X x; __int128 i; } u = { .x = x }; return (Z) ((Y) { 2, 3, u.i, 5 }); }
+Z f25 (X x) { union { X x; __int128 i; } u = { .x = x }; return (Z) ((Y) { 2, 3, 4, u.i }); }
+Z f26 (X x) { union { X x; __int128 i; } u = { .x = x }; return (Z) ((Y) { u.i, u.i, u.i, u.i }); }
+#endif
diff --git a/gcc/testsuite/gcc.target/i386/avx2-pr80846.c b/gcc/testsuite/gcc.target/i386/avx2-pr80846.c
new file mode 100644
index 00000000000..907fd4f7b62
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-pr80846.c
@@ -0,0 +1,5 @@
+/* PR target/80846 */
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-O2 -mavx2 -mno-avx512f" } */
+
+#include "avx-pr80846.c"
diff --git a/gcc/testsuite/gcc.target/i386/avx512-check.h b/gcc/testsuite/gcc.target/i386/avx512-check.h
new file mode 100644
index 00000000000..bfe14960100
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512-check.h
@@ -0,0 +1,113 @@
+#include <stdlib.h>
+#include "cpuid.h"
+#include "m512-check.h"
+#include "avx512f-os-support.h"
+
+#ifndef DO_TEST
+#define DO_TEST do_test
+#ifdef AVX512VL
+static void test_256 (void);
+static void test_128 (void);
+#else
+static void test_512 (void);
+#endif
+
+__attribute__ ((noinline))
+static void
+do_test (void)
+{
+#ifdef AVX512VL
+ test_256 ();
+ test_128 ();
+#else
+ test_512 ();
+#endif
+}
+#endif
+
+int
+main ()
+{
+ unsigned int eax, ebx, ecx, edx;
+
+ if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
+ goto skipped;
+
+ /* Run AVX512F test only if host has AVX512F support. */
+ if (!(ecx & bit_OSXSAVE))
+ goto skipped;
+
+ if (__get_cpuid_max (0, NULL) < 7)
+ goto skipped;
+
+ __cpuid_count (7, 0, eax, ebx, ecx, edx);
+
+ if (!(ebx & bit_AVX512F))
+ goto skipped;
+
+#ifdef AVX512VL
+ if (!(ebx & bit_AVX512VL))
+ goto skipped;
+#endif
+
+#ifdef AVX512ER
+ if (!(ebx & bit_AVX512ER))
+ goto skipped;
+#endif
+
+#ifdef AVX512CD
+ if (!(ebx & bit_AVX512CD))
+ goto skipped;
+#endif
+
+#ifdef AVX512DQ
+ if (!(ebx & bit_AVX512DQ))
+ goto skipped;
+#endif
+
+#ifdef AVX512BW
+ if (!(ebx & bit_AVX512BW))
+ goto skipped;
+#endif
+
+#ifdef AVX512IFMA
+ if (!(ebx & bit_AVX512IFMA))
+ goto skipped;
+#endif
+
+#ifdef AVX512VBMI
+ if (!(ecx & bit_AVX512VBMI))
+ goto skipped;
+#endif
+
+#ifdef AVX5124FMAPS
+ if (!(edx & bit_AVX5124FMAPS))
+ goto skipped;
+#endif
+
+#ifdef AVX5124VNNIW
+ if (!(edx & bit_AVX5124VNNIW))
+ goto skipped;
+#endif
+
+#ifdef AVX512VPOPCNTDQ
+ if (!(ecx & bit_AVX512VPOPCNTDQ))
+ goto skipped;
+#endif
+
+ if (!avx512f_os_support ())
+ goto skipped;
+
+ DO_TEST ();
+
+#ifdef DEBUG
+ printf ("PASSED\n");
+#endif
+ return 0;
+
+skipped:
+#ifdef DEBUG
+ printf ("SKIPPED\n");
+#endif
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx5124fmaps-check.h b/gcc/testsuite/gcc.target/i386/avx5124fmaps-check.h
deleted file mode 100644
index 13ea70b0a8d..00000000000
--- a/gcc/testsuite/gcc.target/i386/avx5124fmaps-check.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx5124fmaps_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx5124fmaps_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run AVX512_4FMAPS test only if host has the support. */
- if ((ecx & bit_OSXSAVE) == (bit_OSXSAVE))
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((avx512f_os_support ()) && ((edx & bit_AVX5124FMAPS) == bit_AVX5124FMAPS))
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
diff --git a/gcc/testsuite/gcc.target/i386/avx5124vnniw-check.h b/gcc/testsuite/gcc.target/i386/avx5124vnniw-check.h
deleted file mode 100644
index 27d35a57490..00000000000
--- a/gcc/testsuite/gcc.target/i386/avx5124vnniw-check.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx5124vnniw_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx5124vnniw_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run AVX512_4VNNIW test only if host has the support. */
- if ((ecx & bit_OSXSAVE) == (bit_OSXSAVE))
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((avx512f_os_support ()) && ((edx & bit_AVX5124VNNIW) == bit_AVX5124VNNIW))
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-check.h b/gcc/testsuite/gcc.target/i386/avx512bw-check.h
index d5288aaabd4..899a006363e 100644
--- a/gcc/testsuite/gcc.target/i386/avx512bw-check.h
+++ b/gcc/testsuite/gcc.target/i386/avx512bw-check.h
@@ -1,47 +1,3 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512bw_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512bw_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run AVX512BW test only if host has AVX512BW support. */
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ebx & bit_AVX512BW) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
+#define AVX512BW
+#define avx512bw_test test_512
+#include "avx512-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-pr81532.c b/gcc/testsuite/gcc.target/i386/avx512bw-pr81532.c
new file mode 100644
index 00000000000..6ebaed6f715
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512bw-pr81532.c
@@ -0,0 +1,5 @@
+/* PR target/81532 */
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-O2 -mavx512bw -mavx512vl -mno-avx512dq" } */
+
+#include "avx512dq-pr81532.c"
diff --git a/gcc/testsuite/gcc.target/i386/avx512cd-check.h b/gcc/testsuite/gcc.target/i386/avx512cd-check.h
deleted file mode 100644
index fd0b9eb05d6..00000000000
--- a/gcc/testsuite/gcc.target/i386/avx512cd-check.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512cd_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512cd_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ebx & bit_AVX512CD) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
diff --git a/gcc/testsuite/gcc.target/i386/avx512dq-check.h b/gcc/testsuite/gcc.target/i386/avx512dq-check.h
index 7955f48e912..1b728836731 100644
--- a/gcc/testsuite/gcc.target/i386/avx512dq-check.h
+++ b/gcc/testsuite/gcc.target/i386/avx512dq-check.h
@@ -1,47 +1,3 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512dq_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512dq_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run AVX512DQ test only if host has AVX512DQ support. */
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ebx & bit_AVX512DQ) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
+#define AVX512DQ
+#define avx512dq_test test_512
+#include "avx512-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx512dq-pr81532.c b/gcc/testsuite/gcc.target/i386/avx512dq-pr81532.c
new file mode 100644
index 00000000000..39632a2c482
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512dq-pr81532.c
@@ -0,0 +1,12 @@
+/* PR target/81532 */
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-O2 -mavx512dq -mavx512vl -mno-avx512bw" } */
+
+typedef unsigned __int128 V __attribute__ ((vector_size (64)));
+
+V
+foo (V c)
+{
+ c >>= 0 != c;
+ return c;
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx512er-check.h b/gcc/testsuite/gcc.target/i386/avx512er-check.h
index 06fc18a098b..eb44c2f7ade 100644
--- a/gcc/testsuite/gcc.target/i386/avx512er-check.h
+++ b/gcc/testsuite/gcc.target/i386/avx512er-check.h
@@ -1,46 +1,3 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512er_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512er_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ebx & bit_AVX512ER) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
+#define AVX512ER
+#define avx512er_test test_512
+#include "avx512f-helper.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-check.h b/gcc/testsuite/gcc.target/i386/avx512f-check.h
index 811184b2fd7..b3bdd9a05c4 100644
--- a/gcc/testsuite/gcc.target/i386/avx512f-check.h
+++ b/gcc/testsuite/gcc.target/i386/avx512f-check.h
@@ -1,47 +1,2 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512f_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512f_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run AVX512F test only if host has AVX512F support. */
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ebx & bit_AVX512F) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
+#define avx512f_test test_512
+#include "avx512f-helper.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-helper.h b/gcc/testsuite/gcc.target/i386/avx512f-helper.h
index ef4661a3453..72982f95aed 100644
--- a/gcc/testsuite/gcc.target/i386/avx512f-helper.h
+++ b/gcc/testsuite/gcc.target/i386/avx512f-helper.h
@@ -8,29 +8,7 @@
#ifndef AVX512F_HELPER_INCLUDED
#define AVX512F_HELPER_INCLUDED
-#if defined (AVX512F) && !defined (AVX512VL)
-#include "avx512f-check.h"
-#elif defined (AVX512ER) && !defined (AVX512VL)
-#include "avx512er-check.h"
-#elif defined (AVX512CD) && !defined (AVX512VL)
-#include "avx512cd-check.h"
-#elif defined (AVX512DQ) && !defined (AVX512VL)
-#include "avx512dq-check.h"
-#elif defined (AVX512BW) && !defined (AVX512VL)
-#include "avx512bw-check.h"
-#elif defined (AVX512IFMA) && !defined (AVX512VL)
-#include "avx512ifma-check.h"
-#elif defined (AVX512VBMI) && !defined (AVX512VL)
-#include "avx512vbmi-check.h"
-#elif defined (AVX5124FMAPS) && !defined (AVX512VL)
-#include "avx5124fmaps-check.h"
-#elif defined (AVX5124VNNIW) && !defined (AVX512VL)
-#include "avx5124vnniw-check.h"
-#elif defined (AVX512VPOPCNTDQ) && !defined (AVX512VL)
-#include "avx512vpopcntdq-check.h"
-#elif defined (AVX512VL)
-#include "avx512vl-check.h"
-#endif
+#include "avx512-check.h"
/* Macros expansion. */
#define CONCAT(a,b,c) a ## b ## c
@@ -112,46 +90,6 @@ MAKE_MASK_ZERO(i_uq, unsigned long long)
#ifndef AVX512VL
#define AVX512F_LEN 512
#define AVX512F_LEN_HALF 256
-void test_512 ();
-#endif
-
-void test_512 ();
-void test_256 ();
-void test_128 ();
-
-#if defined (AVX512F) && !defined (AVX512VL)
-void
-avx512f_test (void) { test_512 (); }
-#elif defined (AVX512CD) && !defined (AVX512VL)
-void
-avx512cd_test (void) { test_512 (); }
-#elif defined (AVX512ER) && !defined (AVX512VL)
-void
-avx512er_test (void) { test_512 (); }
-#elif defined (AVX512DQ) && !defined (AVX512VL)
-void
-avx512dq_test (void) { test_512 (); }
-#elif defined (AVX512BW) && !defined (AVX512VL)
-void
-avx512bw_test (void) { test_512 (); }
-#elif defined (AVX512IFMA) && !defined (AVX512VL)
-void
-avx512ifma_test (void) { test_512 (); }
-#elif defined (AVX512VBMI) && !defined (AVX512VL)
-void
-avx512vbmi_test (void) { test_512 (); }
-#elif defined (AVX5124FMAPS) && !defined (AVX512VL)
-void
-avx5124fmaps_test (void) { test_512 (); }
-#elif defined (AVX5124VNNIW) && !defined (AVX512VL)
-void
-avx5124vnniw_test (void) { test_512 (); }
-#elif defined (AVX512VPOPCNTDQ) && !defined (AVX512VL)
-void
-avx512vpopcntdq_test (void) { test_512 (); }
-#elif defined (AVX512VL)
-void
-avx512vl_test (void) { test_256 (); test_128 (); }
#endif
#endif /* AVX512F_HELPER_INCLUDED */
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-pr71559.c b/gcc/testsuite/gcc.target/i386/avx512f-pr71559.c
index d78d86ac2f8..43dc236c410 100644
--- a/gcc/testsuite/gcc.target/i386/avx512f-pr71559.c
+++ b/gcc/testsuite/gcc.target/i386/avx512f-pr71559.c
@@ -3,6 +3,7 @@
/* { dg-options "-O2 -ftree-vectorize -mavx512f" } */
#include "avx512f-check.h"
+#undef TEST
#define PR71559_TEST avx512f_test
#include "sse2-pr71559.c"
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-pr80846.c b/gcc/testsuite/gcc.target/i386/avx512f-pr80846.c
new file mode 100644
index 00000000000..c32c9762cf9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512f-pr80846.c
@@ -0,0 +1,5 @@
+/* PR target/80846 */
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-O2 -mavx512f" } */
+
+#include "avx-pr80846.c"
diff --git a/gcc/testsuite/gcc.target/i386/avx512ifma-check.h b/gcc/testsuite/gcc.target/i386/avx512ifma-check.h
deleted file mode 100644
index b90a4d55103..00000000000
--- a/gcc/testsuite/gcc.target/i386/avx512ifma-check.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512ifma_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512ifma_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ebx & bit_AVX512IFMA) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vbmi-check.h b/gcc/testsuite/gcc.target/i386/avx512vbmi-check.h
deleted file mode 100644
index 2c1f6259401..00000000000
--- a/gcc/testsuite/gcc.target/i386/avx512vbmi-check.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512vbmi_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512vbmi_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ecx & bit_AVX512VBMI) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-check.h b/gcc/testsuite/gcc.target/i386/avx512vl-check.h
index 29d984d03dd..9d02cc82c46 100644
--- a/gcc/testsuite/gcc.target/i386/avx512vl-check.h
+++ b/gcc/testsuite/gcc.target/i386/avx512vl-check.h
@@ -1,47 +1,4 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512vl_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512vl_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run avx512vl test only if host has avx512vl support. */
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ebx & bit_AVX512VL) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
+#define AVX512VL
+#define DO_TEST avx512vl_test
+static void DO_TEST (void);
+#include "avx512-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx512vpopcntdq-check.h b/gcc/testsuite/gcc.target/i386/avx512vpopcntdq-check.h
deleted file mode 100644
index 179548bf8cb..00000000000
--- a/gcc/testsuite/gcc.target/i386/avx512vpopcntdq-check.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512vpopcntdq_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512vpopcntdq_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run AVX512_VPOPCNTDQ test only if host has the support. */
- if ((ecx & bit_OSXSAVE) == (bit_OSXSAVE))
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((avx512f_os_support ()) && ((ecx & bit_AVX512VPOPCNTDQ) == bit_AVX512VPOPCNTDQ))
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
diff --git a/gcc/testsuite/gcc.target/i386/funcspec-56.inc b/gcc/testsuite/gcc.target/i386/funcspec-56.inc
index 14abf42b887..746c9cfc4e1 100644
--- a/gcc/testsuite/gcc.target/i386/funcspec-56.inc
+++ b/gcc/testsuite/gcc.target/i386/funcspec-56.inc
@@ -99,7 +99,7 @@ extern void test_no_sha (void) __attribute__((__target__("no-sha")));
extern void test_no_pclmul (void) __attribute__((__target__("no-pclmul")));
extern void test_no_sse2 (void) __attribute__((__target__("no-sse2")));
extern void test_no_sse (void) __attribute__((__target__("no-sse")));
-extern void test_no_3dnowa (void) __attribute__((__target__("3dnowa")));
+extern void test_no_3dnowa (void) __attribute__((__target__("no-3dnowa")));
extern void test_no_3dnow (void) __attribute__((__target__("no-3dnow")));
extern void test_no_mmx (void) __attribute__((__target__("no-mmx")));
extern void test_no_rtm (void) __attribute__((__target__("no-rtm")));
diff --git a/gcc/testsuite/gcc.target/i386/interrupt-5.c b/gcc/testsuite/gcc.target/i386/interrupt-5.c
index 803c0636299..5742b6f4743 100644
--- a/gcc/testsuite/gcc.target/i386/interrupt-5.c
+++ b/gcc/testsuite/gcc.target/i386/interrupt-5.c
@@ -7,12 +7,21 @@ extern void link_error (void);
typedef unsigned int uword_t __attribute__ ((mode (__word__)));
+struct interrupt_frame
+{
+ uword_t ip;
+ uword_t cs;
+ uword_t flags;
+ uword_t sp;
+ uword_t ss;
+};
+
__attribute__ ((used, interrupt))
void
-foo (void *frame, uword_t error)
+foo (struct interrupt_frame *frame, uword_t error)
{
void *ra = __builtin_return_address (0);
- if ((uintptr_t) ra != (uintptr_t) error)
+ if ((uintptr_t) ra != (uintptr_t) frame->ip)
link_error ();
}
diff --git a/gcc/testsuite/gcc.target/i386/mpx/pr79987.c b/gcc/testsuite/gcc.target/i386/mpx/pr79987.c
new file mode 100644
index 00000000000..b3ebda95694
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/mpx/pr79987.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-fcheck-pointer-bounds -mmpx" } */
+
+extern void foo;
+void *bar = &foo; /* { dg-warning "taking address of expression of type .void." } */
diff --git a/gcc/testsuite/gcc.target/i386/naked-1.c b/gcc/testsuite/gcc.target/i386/naked-1.c
new file mode 100644
index 00000000000..cf62bb1114f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/naked-1.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O0 -fno-pic" } */
+
+/* Verify that __attribute__((naked)) produces a naked function
+ that does not use ret to return but traps at the end. */
+void
+__attribute__((naked))
+foo (void)
+{
+ __asm__ ("# naked");
+}
+/* { dg-final { scan-assembler "# naked" } } */
+/* { dg-final { scan-assembler "ud2" } } */
+/* { dg-final { scan-assembler-not "ret" } } */
diff --git a/gcc/testsuite/gcc.target/i386/naked-2.c b/gcc/testsuite/gcc.target/i386/naked-2.c
new file mode 100644
index 00000000000..adcd7121541
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/naked-2.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O0" } */
+
+/* Verify that __attribute__((naked)) produces a naked function
+ that does not construct a frame. */
+void
+__attribute__((naked))
+foo (void)
+{
+ __asm__ ("# naked");
+}
+/* { dg-final { scan-assembler "# naked" } } */
+/* { dg-final { scan-assembler-not "push" } } */
+/* { dg-final { scan-assembler-not "pop" } } */
diff --git a/gcc/testsuite/gcc.target/i386/naked-3.c b/gcc/testsuite/gcc.target/i386/naked-3.c
new file mode 100644
index 00000000000..b3a17f635ee
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/naked-3.c
@@ -0,0 +1,39 @@
+/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-options "-O0" } */
+
+#include <unistd.h>
+#include <signal.h>
+#include <stdlib.h>
+
+/* Verify that naked function traps at the end. */
+
+void
+__attribute__((naked, noinline, noclone))
+#ifdef __i386__
+__attribute__((regparm(1)))
+#endif
+naked (int data)
+{
+ if (data == 0x12345678)
+ return;
+ asm ("ret");
+}
+
+void handler (int i)
+{
+ exit (0);
+}
+
+int main ()
+{
+ struct sigaction s;
+
+ sigemptyset (&s.sa_mask);
+ s.sa_handler = handler;
+ s.sa_flags = 0;
+ sigaction (SIGILL, &s, NULL);
+
+ naked (0x12345678);
+
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/naked-4.c b/gcc/testsuite/gcc.target/i386/naked-4.c
new file mode 100644
index 00000000000..07b32424f5f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/naked-4.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O0" } */
+/* { dg-additional-options "-mregparm=3" { target ia32 } } */
+
+/* Verify that __attribute__((naked)) produces a naked function
+ that does not allocate stack slots for args. */
+extern void bar (int);
+
+int
+__attribute__((naked))
+foo (int a, int b, int c)
+{
+ bar (c);
+ asm volatile ("ret" :: "a" (b));
+}
+
+/* { dg-final { scan-assembler-not "%\[re\]bp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr79793-1.c b/gcc/testsuite/gcc.target/i386/pr79793-1.c
new file mode 100644
index 00000000000..1cc67a83ba3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr79793-1.c
@@ -0,0 +1,14 @@
+/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-options "-O2 -mgeneral-regs-only -mtune=generic" } */
+
+void
+ __attribute__ ((interrupt))
+fn1 (void *frame)
+{
+ char fxsave_region [512] __attribute__((aligned(16)));
+ __builtin_ia32_fxsave64 (fxsave_region);
+}
+
+/* { dg-final { scan-assembler-times "sub\[lq\]\[\t \]*\\\$400,\[\t \]*%\[re\]sp" 1 } } */
+/* { dg-final { scan-assembler-times "fxsave64\[\t \]*-120\\(%\[re\]sp\\)" 1 } } */
+/* { dg-final { scan-assembler-times "add\[lq\]\[\t \]*\\\$400,\[\t \]*%\[re\]sp" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr79793-2.c b/gcc/testsuite/gcc.target/i386/pr79793-2.c
new file mode 100644
index 00000000000..e1e6463e120
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr79793-2.c
@@ -0,0 +1,16 @@
+/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-options "-O2 -mgeneral-regs-only -mtune=generic" } */
+
+typedef unsigned int uword_t __attribute__ ((mode (__word__)));
+
+void
+ __attribute__ ((interrupt))
+fn1 (void *frame, uword_t error)
+{
+ char fxsave_region [512] __attribute__((aligned(16)));
+ __builtin_ia32_fxsave64 (fxsave_region);
+}
+
+/* { dg-final { scan-assembler-times "sub\[lq\]\[\t \]*\\\$392,\[\t \]*%\[re\]sp" 1 } } */
+/* { dg-final { scan-assembler-times "fxsave64\[\t \]*-120\\(%\[re\]sp\\)" 1 } } */
+/* { dg-final { scan-assembler-times "add\[lq\]\[\t \]*\\\$400,\[\t \]*%\[re\]sp" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr80569.c b/gcc/testsuite/gcc.target/i386/pr80569.c
new file mode 100644
index 00000000000..8e11c40bb08
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr80569.c
@@ -0,0 +1,9 @@
+/* PR target/80569 */
+/* { dg-do assemble } */
+/* { dg-options "-O2 -m16 -march=haswell" } */
+
+void load_kernel(void *setup_addr)
+{
+ unsigned int seg = (unsigned int)setup_addr >> 4;
+ asm("movl %0, %%es" : : "r"(seg));
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr80833-3.c b/gcc/testsuite/gcc.target/i386/pr80833-3.c
new file mode 100644
index 00000000000..6d5b8bb6b69
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr80833-3.c
@@ -0,0 +1,14 @@
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-O2 -mavx512dq -mavx512vl -mno-avx512bw -mtune=intel" } */
+
+__int128 test (__int128 a)
+{
+ asm ("" : "+v" (a) : : "xmm0", "xmm1", "xmm2", "xmm3",
+ "xmm4", "xmm5", "xmm6", "xmm7",
+ "xmm8", "xmm9", "xmm10", "xmm11",
+ "xmm12", "xmm13", "xmm14", "xmm15");
+ return a;
+}
+
+/* { dg-final { scan-assembler "pinsrq" } } */
+/* { dg-final { scan-assembler "pextrq" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81213.c b/gcc/testsuite/gcc.target/i386/pr81213.c
new file mode 100644
index 00000000000..13e15d5fef0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81213.c
@@ -0,0 +1,19 @@
+/* PR ipa/81214. */
+/* { dg-do compile } */
+/* { dg-require-ifunc "" } */
+
+__attribute__((target_clones("avx","arch=slm","arch=core-avx2","default")))
+static int
+foo ()
+{
+ return -2;
+}
+
+int main()
+{
+ return foo();
+}
+
+/* { dg-final { scan-assembler "\t.globl\tfoo\\..*\\.ifunc" } } */
+/* { dg-final { scan-assembler "foo.resolver:" } } */
+/* { dg-final { scan-assembler "foo\\..*\\.ifunc, @gnu_indirect_function" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81502.c b/gcc/testsuite/gcc.target/i386/pr81502.c
new file mode 100644
index 00000000000..d28791aacd7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81502.c
@@ -0,0 +1,34 @@
+/* { dg-do compile { target lp64 } } */
+/* { dg-options "-O2 -msse2" } */
+
+#include <emmintrin.h>
+
+#define SIZE (sizeof (void *))
+
+static int foo(unsigned char (*foo)[SIZE])
+{
+ __m128i acc = _mm_set_epi32(0, 0, 0, 0);
+ size_t i = 0;
+ for(; i + sizeof(__m128i) <= SIZE; i += sizeof(__m128i)) {
+ __m128i word;
+ __builtin_memcpy(&word, foo + i, sizeof(__m128i));
+ acc = _mm_add_epi32(word, acc);
+ }
+ if (i != SIZE) {
+ __m128i word = _mm_set_epi32(0, 0, 0, 0);
+ __builtin_memcpy(&word, foo + i, SIZE - i); // (1)
+ acc = _mm_add_epi32(word, acc);
+ }
+ int res;
+ __builtin_memcpy(&res, &acc, sizeof(res));
+ return res;
+}
+
+int bar(void *ptr)
+{
+ unsigned char buf[SIZE];
+ __builtin_memcpy(buf, &ptr, SIZE);
+ return foo((unsigned char(*)[SIZE])buf);
+}
+
+/* { dg-final { scan-assembler-times "mov" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81563.c b/gcc/testsuite/gcc.target/i386/pr81563.c
new file mode 100644
index 00000000000..ebfd583daf5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81563.c
@@ -0,0 +1,14 @@
+/* { dg-do compile { target ia32 } } */
+/* { dg-options "-O2 -maccumulate-outgoing-args -mincoming-stack-boundary=2 -mpreferred-stack-boundary=3 -mregparm=3 -mtune-ctrl=epilogue_using_move" } */
+
+extern void bar (long long int, int);
+
+long long int
+fn1 (long long int x)
+{
+ bar (x, 1);
+ return x;
+}
+
+/* { dg-final { scan-assembler-times "movl\[\\t \]*-8\\(%ebp\\),\[\\t \]*%esi" 1 } } */
+/* { dg-final { scan-assembler-times "movl\[\\t \]*-4\\(%ebp\\),\[\\t \]*%edi" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81639.c b/gcc/testsuite/gcc.target/i386/pr81639.c
new file mode 100644
index 00000000000..da2211532eb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81639.c
@@ -0,0 +1,12 @@
+/* PR target/81639 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+void b (void);
+
+void
+__attribute__ ((naked))
+a (void)
+{
+ b ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr81641.c b/gcc/testsuite/gcc.target/i386/pr81641.c
new file mode 100644
index 00000000000..15da9ac26ef
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81641.c
@@ -0,0 +1,11 @@
+/* PR target/81641 */
+/* { dg-do assemble } */
+/* { dg-options "-O -masm=intel" } */
+/* { dg-require-effective-target masm_intel } */
+
+int test(void)
+{
+ int __seg_fs *f = (int __seg_fs *)16;
+ int __seg_gs *g = (int __seg_gs *)16;
+ return *f + *g;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr81644.c b/gcc/testsuite/gcc.target/i386/pr81644.c
new file mode 100644
index 00000000000..61f94a409ff
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81644.c
@@ -0,0 +1,15 @@
+/* PR target/81644 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-mregparm=1" { target ia32 } } */
+
+void b (void);
+
+void
+__attribute__ ((naked))
+a (int z)
+{
+ if (z)
+ return;
+ b ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr81654.c b/gcc/testsuite/gcc.target/i386/pr81654.c
new file mode 100644
index 00000000000..2a1a4b72f1e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81654.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mgeneral-regs-only" } */
+
+__attribute__((interrupt, naked))
+void
+fn (void *frame) /* { dg-error "not compatible" } */
+{
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr81736-1.c b/gcc/testsuite/gcc.target/i386/pr81736-1.c
new file mode 100644
index 00000000000..92c7bc97a0d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81736-1.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-omit-frame-pointer" } */
+
+extern int i;
+
+int
+foo (void)
+{
+ return i;
+}
+
+/* No need to use a frame pointer. */
+/* { dg-final { scan-assembler-not "%\[re\]bp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81736-2.c b/gcc/testsuite/gcc.target/i386/pr81736-2.c
new file mode 100644
index 00000000000..a3720879937
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81736-2.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-omit-frame-pointer" } */
+
+int
+#ifndef __x86_64__
+__attribute__((regparm(3)))
+#endif
+foo (int i)
+{
+ return i;
+}
+
+/* No need to use a frame pointer. */
+/* { dg-final { scan-assembler-not "%\[re\]bp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81736-3.c b/gcc/testsuite/gcc.target/i386/pr81736-3.c
new file mode 100644
index 00000000000..c3bde7dd933
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81736-3.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-omit-frame-pointer" } */
+
+void
+foo (void)
+{
+ asm ("# " : : : "ebx");
+}
+
+/* Need to use a frame pointer. */
+/* { dg-final { scan-assembler "%\[re\]bp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81736-4.c b/gcc/testsuite/gcc.target/i386/pr81736-4.c
new file mode 100644
index 00000000000..25f50016a64
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81736-4.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-omit-frame-pointer" } */
+
+int
+foo (int i1, int i2, int i3, int i4, int i5, int i6, int i7)
+{
+ return i7;
+}
+
+/* Need to use a frame pointer. */
+/* { dg-final { scan-assembler "%\[re\]bp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81736-5.c b/gcc/testsuite/gcc.target/i386/pr81736-5.c
new file mode 100644
index 00000000000..e1602cf25ba
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81736-5.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-omit-frame-pointer -mavx" } */
+
+typedef int v8si __attribute__ ((vector_size (32)));
+
+void
+#ifndef __x86_64__
+__attribute__((regparm(3)))
+#endif
+foo (v8si *out_start, v8si *out_end, v8si *regions)
+{
+ v8si base = regions[3];
+ *out_start = base;
+ *out_end = base;
+}
+
+/* No need to use a frame pointer. */
+/* { dg-final { scan-assembler-not "%\[re\]bp" } } */
+/* Verify no dynamic realignment is performed. */
+/* { dg-final { scan-assembler-not "and\[^\n\r]*sp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81736-6.c b/gcc/testsuite/gcc.target/i386/pr81736-6.c
new file mode 100644
index 00000000000..6198574c8cc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81736-6.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-omit-frame-pointer" } */
+
+struct foo
+{
+ int head;
+} a;
+
+int
+bar (void)
+{
+ return a.head != 0;
+}
+
+/* No need to use a frame pointer. */
+/* { dg-final { scan-assembler-not "%\[re\]bp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81736-7.c b/gcc/testsuite/gcc.target/i386/pr81736-7.c
new file mode 100644
index 00000000000..f947886e642
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81736-7.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-omit-frame-pointer" } */
+
+extern int foo (void);
+
+int
+bar (void)
+{
+ return foo ();
+}
+
+/* No need to use a frame pointer. */
+/* { dg-final { scan-assembler-not "%\[re\]bp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/stack-prot-guard.c b/gcc/testsuite/gcc.target/i386/stack-prot-guard.c
new file mode 100644
index 00000000000..120ef3cf5c1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/stack-prot-guard.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fstack-protector-all -mstack-protector-guard=tls -mstack-protector-guard-reg=gs -mstack-protector-guard-offset=0x3038" } */
+
+void f(void) { }
+
+/* { dg-final { scan-assembler "gs:12344" } } */
diff --git a/gcc/testsuite/gcc.target/i386/stack-prot-sym.c b/gcc/testsuite/gcc.target/i386/stack-prot-sym.c
new file mode 100644
index 00000000000..7f63424c55f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/stack-prot-sym.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fstack-protector-all -mstack-protector-guard=tls -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=my_guard" } */
+
+void f(void) { }
+
+/* { dg-final { scan-assembler "gs:my_guard" } } */
diff --git a/gcc/testsuite/gcc.target/i386/vect-insert-1.c b/gcc/testsuite/gcc.target/i386/vect-insert-1.c
new file mode 100644
index 00000000000..55cc52334c2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/vect-insert-1.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O -msse2 -fdump-tree-ccp1" } */
+
+typedef int v4si __attribute__((vector_size(16)));
+
+float f;
+
+v4si foo (v4si a)
+{
+ __builtin_memcpy ((char *)&a + 4, &f, 4);
+ return a;
+}
+
+/* { dg-final { scan-tree-dump "Now a gimple register: a" "ccp1" } } */
+/* { dg-final { scan-tree-dump "BIT_INSERT_EXPR <a" "ccp1" } } */
diff --git a/gcc/testsuite/gcc.target/nvptx/patchable_function_entry-default.c b/gcc/testsuite/gcc.target/nvptx/patchable_function_entry-default.c
new file mode 100644
index 00000000000..42544562725
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/patchable_function_entry-default.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fpatchable-function-entry=3,1" } */
+
+extern int a;
+
+int f3 (void);
+
+int
+__attribute__((noinline))
+f3 (void)
+{
+ return 5*a;
+}
+
+/* { dg-excess-errors "sorry, unimplemented: not generating patch area, nops not supported" } */
diff --git a/gcc/testsuite/gcc.target/nvptx/slp-2.c b/gcc/testsuite/gcc.target/nvptx/slp-2.c
index 66394918d63..18219996788 100644
--- a/gcc/testsuite/gcc.target/nvptx/slp-2.c
+++ b/gcc/testsuite/gcc.target/nvptx/slp-2.c
@@ -9,7 +9,7 @@ foo ()
{
long long int a, b;
- unsigned int i;
+ int i;
for (i = 0; i < 1000; i += 2)
{
a = p[i];
diff --git a/gcc/testsuite/gcc.target/nvptx/slp.c b/gcc/testsuite/gcc.target/nvptx/slp.c
index 5dee147af9c..ca8191cccce 100644
--- a/gcc/testsuite/gcc.target/nvptx/slp.c
+++ b/gcc/testsuite/gcc.target/nvptx/slp.c
@@ -9,7 +9,7 @@ foo ()
{
int a, b;
- unsigned int i;
+ int i;
for (i = 0; i < 1000; i += 2)
{
a = p[i];
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-eq-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-eq-2.c
index 45f0df89894..e19ad0b349a 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-eq-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-eq-2.c
@@ -12,5 +12,5 @@ compare_exponents_eq (double *exponent1_p, double *exponent2_p)
double exponent1 = *exponent1_p;
double exponent2 = *exponent2_p;
- return __builtin_vec_scalar_cmp_exp_eq (exponent1, exponent2); /* { dg-error "Builtin function __builtin_vsx_scalar_cmp_exp_dp_eq requires" } */
+ return __builtin_vec_scalar_cmp_exp_eq (exponent1, exponent2); /* { dg-error "builtin function __builtin_vsx_scalar_cmp_exp_dp_eq requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-gt-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-gt-2.c
index 0ccf1ceea2a..cf0fafb5aad 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-gt-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-gt-2.c
@@ -12,5 +12,5 @@ compare_exponents_gt (double *exponent1_p, double *exponent2_p)
double exponent1 = *exponent1_p;
double exponent2 = *exponent2_p;
- return __builtin_vec_scalar_cmp_exp_gt (exponent1, exponent2); /* { dg-error "Builtin function __builtin_vsx_scalar_cmp_exp_dp_gt requires" } */
+ return __builtin_vec_scalar_cmp_exp_gt (exponent1, exponent2); /* { dg-error "builtin function __builtin_vsx_scalar_cmp_exp_dp_gt requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-lt-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-lt-2.c
index e453f236c66..592e320eb70 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-lt-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-lt-2.c
@@ -12,5 +12,5 @@ compare_exponents_lt (double *exponent1_p, double *exponent2_p)
double exponent1 = *exponent1_p;
double exponent2 = *exponent2_p;
- return __builtin_vec_scalar_cmp_exp_lt (exponent1, exponent2); /* { dg-error "Builtin function __builtin_vsx_scalar_cmp_exp_dp_lt requires" } */
+ return __builtin_vec_scalar_cmp_exp_lt (exponent1, exponent2); /* { dg-error "builtin function __builtin_vsx_scalar_cmp_exp_dp_lt requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-unordered-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-unordered-2.c
index dcedf0de887..e9a474e8e1b 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-unordered-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-unordered-2.c
@@ -12,5 +12,5 @@ compare_exponents_unordered (double *exponent1_p, double *exponent2_p)
double exponent1 = *exponent1_p;
double exponent2 = *exponent2_p;
- return __builtin_vec_scalar_cmp_exp_unordered (exponent1, exponent2); /* { dg-error "Builtin function __builtin_vsx_scalar_cmp_exp_dp_unordered requires" } */
+ return __builtin_vec_scalar_cmp_exp_unordered (exponent1, exponent2); /* { dg-error "builtin function __builtin_vsx_scalar_cmp_exp_dp_unordered requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-1.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-1.c
index e2f045cdce8..0b805221d1b 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-1.c
@@ -12,7 +12,7 @@ get_exponent (double *p)
{
double source = *p;
- return __builtin_vec_scalar_extract_exp (source); /* { dg-error "Builtin function __builtin_vsx_scalar_extract_exp requires" } */
+ return __builtin_vec_scalar_extract_exp (source); /* { dg-error "builtin function __builtin_vsx_scalar_extract_exp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c
index a60b54a6089..594d92cad99 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c
@@ -15,7 +15,7 @@ get_exponent (double *p)
{
double source = *p;
- return scalar_extract_exp (source); /* { dg-error "Builtin function __builtin_vec_scalar_extract_exp not supported in this compiler configuration" } */
+ return scalar_extract_exp (source); /* { dg-error "builtin function __builtin_vec_scalar_extract_exp not supported in this compiler configuration" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-4.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-4.c
index 502241581d9..d4dd43f5371 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-4.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-4.c
@@ -12,7 +12,7 @@ get_exponent (__ieee128 *p)
{
__ieee128 source = *p;
- return __builtin_vec_scalar_extract_exp (source); /* { dg-error "Builtin function __builtin_vsx_scalar_extract_expq requires" } */
+ return __builtin_vec_scalar_extract_exp (source); /* { dg-error "builtin function __builtin_vsx_scalar_extract_expq requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-5.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-5.c
index 07e0c1de7e3..569de683df0 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-5.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-5.c
@@ -15,7 +15,7 @@ get_exponent (__ieee128 *p)
{
__ieee128 source = *p;
- return scalar_extract_exp (source); /* { dg-error "Builtin function __builtin_vec_scalar_extract_exp not supported in this compiler configuration" } */
+ return scalar_extract_exp (source); /* { dg-error "builtin function __builtin_vec_scalar_extract_exp not supported in this compiler configuration" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-1.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-1.c
index b2e5647673d..a856028a1aa 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-1.c
@@ -12,5 +12,5 @@ get_significand (double *p)
{
double source = *p;
- return __builtin_vec_scalar_extract_sig (source); /* { dg-error "Builtin function __builtin_vsx_scalar_extract_sig requires" } */
+ return __builtin_vec_scalar_extract_sig (source); /* { dg-error "builtin function __builtin_vsx_scalar_extract_sig requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-2.c
index 237bd027cab..cdf163d9f9c 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-2.c
@@ -13,5 +13,5 @@ get_significand (double *p)
{
double source = *p;
- return __builtin_vec_scalar_extract_sig (source); /* { dg-error "Builtin function __builtin_vec_scalar_extract_sig not supported in this compiler configuration" } */
+ return __builtin_vec_scalar_extract_sig (source); /* { dg-error "builtin function __builtin_vec_scalar_extract_sig not supported in this compiler configuration" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-4.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-4.c
index 0c2ec4739f5..8b33c788db2 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-4.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-4.c
@@ -12,5 +12,5 @@ get_significand (__ieee128 *p)
{
__ieee128 source = *p;
- return __builtin_vec_scalar_extract_sig (source); /* { dg-error "Builtin function __builtin_vsx_scalar_extract_sigq requires" } */
+ return __builtin_vec_scalar_extract_sig (source); /* { dg-error "builtin function __builtin_vsx_scalar_extract_sigq requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-5.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-5.c
index 19ca4c4a09a..17ac4852984 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-5.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-5.c
@@ -13,5 +13,5 @@ get_significand (__ieee128 *p)
{
__ieee128 source = *p;
- return __builtin_vec_scalar_extract_sig (source); /* { dg-error "Builtin function __builtin_vec_scalar_extract_sig not supported in this compiler configuration" } */
+ return __builtin_vec_scalar_extract_sig (source); /* { dg-error "builtin function __builtin_vec_scalar_extract_sig not supported in this compiler configuration" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-1.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-1.c
index f2b720f444b..37c8796f040 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-1.c
@@ -14,5 +14,5 @@ insert_exponent (unsigned long long int *significand_p,
unsigned long long int significand = *significand_p;
unsigned long long int exponent = *exponent_p;
- return __builtin_vec_scalar_insert_exp (significand, exponent); /* { dg-error "Builtin function __builtin_vsx_scalar_insert_exp requires" } */
+ return __builtin_vec_scalar_insert_exp (significand, exponent); /* { dg-error "builtin function __builtin_vsx_scalar_insert_exp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-10.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-10.c
index e730556c5c9..096761fc2db 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-10.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-10.c
@@ -14,5 +14,5 @@ insert_exponent (__ieee128 *significand_p,
__ieee128 significand = *significand_p;
unsigned long long int exponent = *exponent_p;
- return __builtin_vec_scalar_insert_exp (significand, exponent); /* { dg-error "Builtin function __builtin_vsx_scalar_insert_exp_qp requires" } */
+ return __builtin_vec_scalar_insert_exp (significand, exponent); /* { dg-error "builtin function __builtin_vsx_scalar_insert_exp_qp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-11.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-11.c
index d44e6ccec5b..188bdfeac62 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-11.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-11.c
@@ -17,5 +17,5 @@ insert_exponent (__ieee128 *significand_p,
__ieee128 significand = *significand_p;
unsigned long long int exponent = *exponent_p;
- return scalar_insert_exp (significand, exponent); /* { dg-error "Builtin function __builtin_vec_scalar_insert_exp not supported in this compiler configuration" } */
+ return scalar_insert_exp (significand, exponent); /* { dg-error "builtin function __builtin_vec_scalar_insert_exp not supported in this compiler configuration" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-2.c
index 5044c81f069..c48d4e6885c 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-2.c
@@ -17,5 +17,5 @@ insert_exponent (unsigned long long int *significand_p,
unsigned long long int significand = *significand_p;
unsigned long long int exponent = *exponent_p;
- return scalar_insert_exp (significand, exponent); /* { dg-error "Builtin function __builtin_vec_scalar_insert_exp not supported in this compiler configuration" } */
+ return scalar_insert_exp (significand, exponent); /* { dg-error "builtin function __builtin_vec_scalar_insert_exp not supported in this compiler configuration" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-4.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-4.c
index 8b72cec88d9..2d17691e263 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-4.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-4.c
@@ -14,5 +14,5 @@ insert_exponent (double *significand_p,
double significand = *significand_p;
unsigned long long int exponent = *exponent_p;
- return __builtin_vec_scalar_insert_exp (significand, exponent); /* { dg-error "Builtin function __builtin_vsx_scalar_insert_exp_dp requires" } */
+ return __builtin_vec_scalar_insert_exp (significand, exponent); /* { dg-error "builtin function __builtin_vsx_scalar_insert_exp_dp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-5.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-5.c
index e831f20e589..f662fa86ced 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-5.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-5.c
@@ -17,5 +17,5 @@ insert_exponent (double *significand_p,
double significand = *significand_p;
unsigned long long int exponent = *exponent_p;
- return scalar_insert_exp (significand, exponent); /* { dg-error "Builtin function __builtin_vec_scalar_insert_exp not supported in this compiler configuration" } */
+ return scalar_insert_exp (significand, exponent); /* { dg-error "builtin function __builtin_vec_scalar_insert_exp not supported in this compiler configuration" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-7.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-7.c
index fe565c8f416..08e95207794 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-7.c
@@ -14,5 +14,5 @@ insert_exponent (unsigned __int128 *significand_p,
unsigned __int128 significand = *significand_p;
unsigned long long int exponent = *exponent_p;
- return __builtin_vec_scalar_insert_exp (significand, exponent); /* { dg-error "Builtin function __builtin_vsx_scalar_insert_exp_q requires" } */
+ return __builtin_vec_scalar_insert_exp (significand, exponent); /* { dg-error "builtin function __builtin_vsx_scalar_insert_exp_q requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-8.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-8.c
index 3a3f1c4aa82..ce6dd548727 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-8.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-8.c
@@ -17,5 +17,5 @@ insert_exponent (unsigned __int128 *significand_p, /* { dg-error "'__int128' is
unsigned __int128 significand = *significand_p; /* { dg-error "'__int128' is not supported on this target" } */
unsigned long long int exponent = *exponent_p;
- return scalar_insert_exp (significand, exponent); /* { dg-error "Builtin function __builtin_vec_scalar_insert_exp not supported in this compiler configuration" } */
+ return scalar_insert_exp (significand, exponent); /* { dg-error "builtin function __builtin_vec_scalar_insert_exp not supported in this compiler configuration" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-11.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-11.c
index 0065b77746a..7562cc3027e 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-11.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-11.c
@@ -11,5 +11,5 @@ test_data_class (__ieee128 *p)
{
__ieee128 source = *p;
- return __builtin_vec_scalar_test_data_class (source, 3); /* { dg-error "Builtin function __builtin_vsx_scalar_test_data_class_qp requires" } */
+ return __builtin_vec_scalar_test_data_class (source, 3); /* { dg-error "builtin function __builtin_vsx_scalar_test_data_class_qp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-6.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-6.c
index 10405a386c0..81dbe392c9d 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-6.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-6.c
@@ -11,5 +11,5 @@ test_data_class (double *p)
{
double source = *p;
- return __builtin_vec_scalar_test_data_class (source, 3); /* { dg-error "Builtin function __builtin_vsx_scalar_test_data_class_dp requires" } */
+ return __builtin_vec_scalar_test_data_class (source, 3); /* { dg-error "builtin function __builtin_vsx_scalar_test_data_class_dp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-7.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-7.c
index a7482eff559..8d4716b191c 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-7.c
@@ -11,5 +11,5 @@ test_data_class (float *p)
{
float source = *p;
- return __builtin_vec_scalar_test_data_class (source, 3); /* { dg-error "Builtin function __builtin_vsx_scalar_test_data_class_sp requires" } */
+ return __builtin_vec_scalar_test_data_class (source, 3); /* { dg-error "builtin function __builtin_vsx_scalar_test_data_class_sp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
index 3d93376e4bd..236a895fc3b 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
@@ -11,5 +11,5 @@ test_neg (float *p)
{
float source = *p;
- return __builtin_vec_scalar_test_neg_sp (source); /* { dg-error "Builtin function __builtin_vsx_scalar_test_neg_sp requires" } */
+ return __builtin_vec_scalar_test_neg_sp (source); /* { dg-error "builtin function __builtin_vsx_scalar_test_neg_sp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
index 33971f6574c..af5eb8c633f 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
@@ -11,5 +11,5 @@ test_neg (double *p)
{
double source = *p;
- return __builtin_vec_scalar_test_neg_dp (source); /* { dg-error "Builtin function __builtin_vsx_scalar_test_neg_dp requires" } */
+ return __builtin_vec_scalar_test_neg_dp (source); /* { dg-error "builtin function __builtin_vsx_scalar_test_neg_dp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
index 041a4a1c820..1018296cb4d 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
@@ -11,5 +11,5 @@ test_neg (__ieee128 *p)
{
__ieee128 source = *p;
- return __builtin_vec_scalar_test_neg_qp (source); /* { dg-error "Builtin function __builtin_vsx_scalar_test_neg_qp requires" } */
+ return __builtin_vec_scalar_test_neg_qp (source); /* { dg-error "builtin function __builtin_vsx_scalar_test_neg_qp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-exp-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-exp-2.c
index 1462e4797bf..4b8ad56e21b 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-exp-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-exp-2.c
@@ -10,5 +10,5 @@ get_exponents (__vector double *p)
{
__vector double source = *p;
- return __builtin_vec_extract_exp (source); /* { dg-error "Builtin function __builtin_vsx_extract_exp_dp requires" } */
+ return __builtin_vec_extract_exp (source); /* { dg-error "builtin function __builtin_vsx_extract_exp_dp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-exp-3.c b/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-exp-3.c
index 15dc0dde7ad..5b1637bce0c 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-exp-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-exp-3.c
@@ -10,5 +10,5 @@ get_exponents (__vector float *p)
{
__vector float source = *p;
- return __builtin_vec_extract_exp (source); /* { dg-error "Builtin function __builtin_vsx_extract_exp_sp requires" } */
+ return __builtin_vec_extract_exp (source); /* { dg-error "builtin function __builtin_vsx_extract_exp_sp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-sig-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-sig-2.c
index c4088cfc67e..c26739c5931 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-sig-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-sig-2.c
@@ -10,5 +10,5 @@ get_significands (__vector double *p)
{
__vector double source = *p;
- return __builtin_vec_extract_sig (source); /* { dg-error "Builtin function __builtin_vsx_extract_sig_dp requires" } */
+ return __builtin_vec_extract_sig (source); /* { dg-error "builtin function __builtin_vsx_extract_sig_dp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-sig-3.c b/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-sig-3.c
index 0adbbc25ee2..f01300fae64 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-sig-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-sig-3.c
@@ -10,5 +10,5 @@ get_significands (__vector float *p)
{
__vector float source = *p;
- return __builtin_vec_extract_sig (source); /* { dg-error "Builtin function __builtin_vsx_extract_sig_sp requires" } */
+ return __builtin_vec_extract_sig (source); /* { dg-error "builtin function __builtin_vsx_extract_sig_sp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-2.c
index 1a02bf2d81d..afb7b930eb4 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-2.c
@@ -12,5 +12,5 @@ make_floats (__vector unsigned int *significands_p,
__vector unsigned int significands = *significands_p;
__vector unsigned int exponents = *exponents_p;
- return __builtin_vec_insert_exp (significands, exponents); /* { dg-error "Builtin function __builtin_vsx_insert_exp_sp requires" } */
+ return __builtin_vec_insert_exp (significands, exponents); /* { dg-error "builtin function __builtin_vsx_insert_exp_sp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-3.c b/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-3.c
index 97d44719943..c612b250205 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-3.c
@@ -12,5 +12,5 @@ make_doubles (__vector unsigned long long int *significands_p,
__vector unsigned long long int significands = *significands_p;
__vector unsigned long long int exponents = *exponents_p;
- return __builtin_vec_insert_exp (significands, exponents); /* { dg-error "Builtin function __builtin_vsx_insert_exp_dp requires" } */
+ return __builtin_vec_insert_exp (significands, exponents); /* { dg-error "builtin function __builtin_vsx_insert_exp_dp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-6.c b/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-6.c
index 5a76af7ed67..f5790cd9c8d 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-6.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-6.c
@@ -12,5 +12,5 @@ make_floats (__vector float *significands_p,
__vector float significands = *significands_p;
__vector unsigned int exponents = *exponents_p;
- return __builtin_vec_insert_exp (significands, exponents); /* { dg-error "Builtin function __builtin_vsx_insert_exp_sp requires" } */
+ return __builtin_vec_insert_exp (significands, exponents); /* { dg-error "builtin function __builtin_vsx_insert_exp_sp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-7.c b/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-7.c
index 8655818fc40..90de306500a 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-7.c
@@ -12,5 +12,5 @@ make_doubles (__vector double *significands_p,
__vector double significands = *significands_p;
__vector unsigned long long int exponents = *exponents_p;
- return __builtin_vec_insert_exp (significands, exponents); /* { dg-error "Builtin function __builtin_vsx_insert_exp_dp requires" } */
+ return __builtin_vec_insert_exp (significands, exponents); /* { dg-error "builtin function __builtin_vsx_insert_exp_dp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-2.c
index c7e236fdb82..f60a148cdb1 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-2.c
@@ -10,5 +10,5 @@ get_data_class_flags (__vector double *p)
{
__vector double source = *p;
- return __builtin_vec_test_data_class (source, 0x37); /* { dg-error "Builtin function __builtin_vsx_test_data_class_dp requires" } */
+ return __builtin_vec_test_data_class (source, 0x37); /* { dg-error "builtin function __builtin_vsx_test_data_class_dp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-3.c b/gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-3.c
index 9a6c069ac11..2e2a99a6904 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-3.c
@@ -10,5 +10,5 @@ get_data_class_flags (__vector float *p)
{
__vector float source = *p;
- return __builtin_vec_test_data_class (source, 0x37); /* { dg-error "Builtin function __builtin_vsx_test_data_class_sp requires" } */
+ return __builtin_vec_test_data_class (source, 0x37); /* { dg-error "builtin function __builtin_vsx_test_data_class_sp requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-2-p9-runnable.c b/gcc/testsuite/gcc.target/powerpc/builtins-2-p9-runnable.c
index fa2bbc1eeb1..2f317077fcb 100644
--- a/gcc/testsuite/gcc.target/powerpc/builtins-2-p9-runnable.c
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-2-p9-runnable.c
@@ -1,7 +1,7 @@
/* { dg-do run { target { powerpc64*-*-* && { lp64 && p9vector_hw } } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
-/* { dg-options "-mcpu=power9 -O2 -mupper-regs-di" } */
+/* { dg-options "-mcpu=power9 -O2" } */
#include <altivec.h> // vector
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-3-p8.c b/gcc/testsuite/gcc.target/powerpc/builtins-3-p8.c
index 3baa1d85442..bc1c8508203 100644
--- a/gcc/testsuite/gcc.target/powerpc/builtins-3-p8.c
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-3-p8.c
@@ -85,6 +85,30 @@ test_vss_mradds_vss_vss (vector signed short x, vector signed short y,
return vec_mradds (x, y, z);
}
+vector signed long long
+test_vsll_mule_vsi_vsi (vector signed int x, vector signed int y)
+{
+ return vec_mule (x, y);
+}
+
+vector unsigned long long
+test_vull_mule_vui_vui (vector unsigned int x, vector unsigned int y)
+{
+ return vec_mule (x, y);
+}
+
+vector signed long long
+test_vsll_mulo_vsi_vsi (vector signed int x, vector signed int y)
+{
+ return vec_mulo (x, y);
+}
+
+vector unsigned long long
+test_vull_mulo_vui_vui (vector unsigned int x, vector unsigned int y)
+{
+ return vec_mulo (x, y);
+}
+
/* Expected test results:
test_eq_long_long 1 vcmpequd inst
@@ -98,7 +122,12 @@ test_vss_mradds_vss_vss (vector signed short x, vector signed short y,
test_unsigned_int_popcnt_signed_int 2 vpopcntw
test_unsigned_int_popcnt_unsigned_int 1 vpopcntd
test_unsigned_long_long_popcnt_unsigned_long 1 vpopcntd
- test_vss_mradds_vss_vsss 1 vmhraddshs */
+ test_vss_mradds_vss_vsss 1 vmhraddshs
+ test_vsll_mulo_vsi_vsi 1 vmulosw
+ test_vull_mulo_vui_vui 1 vmulouw
+ test_vsll_mule_vsi_vsi 1 vmulesw
+ test_vull_mule_vui_vui 1 vmuleuw
+ */
/* { dg-final { scan-assembler-times "vcmpequd" 1 } } */
/* { dg-final { scan-assembler-times "vpkudum" 1 } } */
@@ -109,3 +138,7 @@ test_vss_mradds_vss_vss (vector signed short x, vector signed short y,
/* { dg-final { scan-assembler-times "vpopcntw" 2 } } */
/* { dg-final { scan-assembler-times "vpopcntd" 2 } } */
/* { dg-final { scan-assembler-times "vmhraddshs" 1 } } */
+/* { dg-final { scan-assembler-times "vmulosw" 1 } } */
+/* { dg-final { scan-assembler-times "vmulouw" 1 } } */
+/* { dg-final { scan-assembler-times "vmulesw" 1 } } */
+/* { dg-final { scan-assembler-times "vmuleuw" 1 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c b/gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c
new file mode 100644
index 00000000000..24589b55639
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c
@@ -0,0 +1,35 @@
+/* { dg-do run { target { powerpc64*-*-* && { lp64 && p9vector_hw } } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+/* { dg-options "-mcpu=power9 -O2 -mupper-regs-di" } */
+
+#include <altivec.h> // vector
+
+void abort (void);
+
+int main() {
+ int i;
+ vector float vfr, vfexpt;
+ vector unsigned short vusha;
+
+ /* 1.0, -2.0, 0.0, 8.5, 1.5, 0.5, 1.25, -0.25 */
+ vusha = (vector unsigned short){0B011110000000000, 0B1100000000000000,
+ 0B000000000000000, 0B0100100001000000,
+ 0B011111000000000, 0B0011100000000000,
+ 0B011110100000000, 0B1011010000000000};
+
+ vfexpt = (vector float){1.0, -2.0, 0.0, 8.5};
+ vfr = vec_extract_fp_from_shorth(vusha);
+
+ for (i=0; i<4; i++) {
+ if (vfr[i] != vfexpt[i])
+ abort();
+ }
+
+ vfexpt = (vector float){1.5, 0.5, 1.25, -0.25};
+ vfr = vec_extract_fp_from_shortl(vusha);
+
+ for (i=0; i<4; i++) {
+ if (vfr[i] != vfexpt[i])
+ abort();
+ }
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-3.c b/gcc/testsuite/gcc.target/powerpc/builtins-3.c
index e0e3714dc54..42153da63b4 100644
--- a/gcc/testsuite/gcc.target/powerpc/builtins-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-3.c
@@ -112,30 +112,6 @@ test_vull_slo_vull_vuc (vector unsigned long long x, vector unsigned char y)
return vec_slo (x, y);
}
-vector signed long long
-test_vsll_mule_vsi_vsi (vector signed int x, vector signed int y)
-{
- return vec_mule (x, y);
-}
-
-vector unsigned long long
-test_vull_mule_vui_vui (vector unsigned int x, vector unsigned int y)
-{
- return vec_mule (x, y);
-}
-
-vector signed long long
-test_vsll_mulo_vsi_vsi (vector signed int x, vector signed int y)
-{
- return vec_mulo (x, y);
-}
-
-vector unsigned long long
-test_vull_mulo_vui_vui (vector unsigned int x, vector unsigned int y)
-{
- return vec_mulo (x, y);
-}
-
vector signed char
test_vsc_sldw_vsc_vsc (vector signed char x, vector signed char y)
{
@@ -207,10 +183,6 @@ test_vul_sldw_vul_vul (vector unsigned long long x,
test_vsll_slo_vsll_vuc 1 vslo
test_vull_slo_vsll_vsc 1 vslo
test_vull_slo_vsll_vuc 1 vslo
- test_vsll_mulo_vsi_vsi 1 vmulosw
- test_vull_mulo_vui_vui 1 vmulouw
- test_vsll_mule_vsi_vsi 1 vmulesw
- test_vull_mule_vui_vui 1 vmuleuw
test_vsc_mulo_vsc_vsc 1 xxsldwi
test_vuc_mulo_vuc_vuc 1 xxsldwi
test_vssi_mulo_vssi_vssi 1 xxsldwi
@@ -236,8 +208,4 @@ test_vul_sldw_vul_vul (vector unsigned long long x,
/* { dg-final { scan-assembler-times "xvnegsp" 1 } } */
/* { dg-final { scan-assembler-times "xvnegdp" 1 } } */
/* { dg-final { scan-assembler-times "vslo" 4 } } */
-/* { dang-remove { scan-assembler-times "vmulosw" 1 } } */
-/* { dang-remove { scan-assembler-times "vmulouw" 1 } } */
-/* { dang-remove { scan-assembler-times "vmulesw" 1 } } */
-/* { dang-remove { scan-assembler-times "vmuleuw" 1 } } */
/* { dg-final { scan-assembler-times "xxsldwi" 8 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-4-p9-runnable.c b/gcc/testsuite/gcc.target/powerpc/builtins-4-p9-runnable.c
new file mode 100644
index 00000000000..8e8fcabbe82
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-4-p9-runnable.c
@@ -0,0 +1,95 @@
+/* { dg-do run { target { powerpc*-*-* && { p9vector_hw } } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+/* { dg-options "-mcpu=power9 -O2 " } */
+
+#include <altivec.h> // vector
+
+void abort (void);
+
+int main() {
+ int i;
+
+ vector signed char vsca, vscr, vscexpt;
+ vector unsigned char vuca, vucr, vucexpt;
+ vector signed short int vssa, vssr, vssexpt;
+ vector unsigned short int vusa, vusr, vusexpt;
+ vector signed int vsia, vsir, vsiexpt;
+ vector unsigned int vuia, vuir, vuiexpt;
+ vector signed long long vslla, vsllr, vsllexpt;
+ vector unsigned long long vulla, vullr, vullexpt;
+
+ vsca = (vector signed char) {0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15};
+
+ vscexpt = (vector signed char) {8, 0, 1, 0, 2, 0, 1, 0,
+ 3, 0, 1, 0, 2, 0, 1, 0};
+
+ vuca = (vector unsigned char) {'0', '3', '6', '9', 'A', 'B', 'E', 'F',
+ 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N'};
+
+ vucexpt = (vector unsigned char) {4, 0, 1, 0, 0, 1, 0, 1,
+ 0, 3, 0, 1, 0, 2, 0, 1};
+
+ vssa = (vector short int) {0x1, 0x10, 0x100, 0x1000,
+ 0x2, 0x20, 0x200, 0x2000};
+
+ vssexpt = (vector short int) {0, 4, 8, 12, 1, 5, 9, 13};
+
+ vusa = (vector unsigned short int) {0x4, 0x40, 0x400, 0x4000,
+ 0x8, 0x80, 0x800, 0x8000};
+ vusexpt = (vector unsigned short int) {2, 6, 10, 14, 3, 7, 11, 15};
+
+ vsia = (vector int) {0x10000, 0x100000, 0x1000000, 0x10000000};
+ vsiexpt = (vector int){16, 20, 24, 28};
+
+ vuia = (vector unsigned int) {0x2, 0x20, 0x200, 0x2000};
+ vuiexpt = (vector unsigned int){1, 5, 9, 13};
+
+ vslla = (vector long long) {0x0000000000010000LL, 0x0001000100010000LL};
+ vsllexpt = (vector long long){16, 16};
+
+ vulla = (vector unsigned long long) {0x0000400000000000LL, 0x0080000000000000ULL};
+
+ vullexpt = (vector unsigned long long) {46, 55};
+
+ vscr = vec_cnttz (vsca);
+ vucr = vec_cnttz (vuca);
+ vssr = vec_cnttz (vssa);
+ vusr = vec_cnttz (vusa);
+ vsir = vec_cnttz (vsia);
+ vuir = vec_cnttz (vuia);
+ vsllr = vec_cnttz (vslla);
+ vullr = vec_cnttz (vulla);
+
+ for (i=0; i<16; i++) {
+ if (vscr[i] != vscexpt[i])
+ abort();
+
+ if (vucr[i] != vucexpt[i])
+ abort();
+ }
+
+ for (i=0; i<8; i++) {
+ if (vssr[i] != vssexpt[i])
+ abort();
+
+ if (vusr[i] != vusexpt[i])
+ abort();
+ }
+
+ for (i=0; i<4; i++) {
+ if (vsir[i] != vsiexpt[i])
+ abort();
+
+ if (vuir[i] != vuiexpt[i])
+ abort();
+ }
+
+ for (i=0; i<2; i++) {
+ if (vsllr[i] != vsllexpt[i])
+ abort();
+
+ if (vullr[i] != vullexpt[i])
+ abort();
+ }
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-4-runnable.c b/gcc/testsuite/gcc.target/powerpc/builtins-4-runnable.c
new file mode 100644
index 00000000000..ed37424ca86
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-4-runnable.c
@@ -0,0 +1,321 @@
+/* { dg-do run } */
+/* { dg-require-effective-target vsx_hw } */
+/* { dg-options "-maltivec -mvsx" } */
+
+#include <inttypes.h>
+#include <altivec.h> // vector
+#include <stdio.h>
+
+void abort (void);
+
+int main() {
+ int i;
+ signed char data_c[100];
+ unsigned char data_uc[100];
+
+ signed short int data_ssi[100];
+ unsigned short int data_usi[100];
+
+ signed int data_si[100];
+ unsigned int data_ui[100];
+
+ signed long long data_sll[100];
+ unsigned long long data_ull[100];
+
+ float data_f[100];
+ double data_d[100];
+
+ signed long long disp;
+
+ vector signed char vec_c_expected1, vec_c_expected2, vec_c_result1, vec_c_result2;
+ vector unsigned char vec_uc_expected1, vec_uc_expected2,
+ vec_uc_result1, vec_uc_result2;
+ vector signed short int vec_ssi_expected1, vec_ssi_expected2,
+ vec_ssi_result1, vec_ssi_result2;
+ vector unsigned short int vec_usi_expected1, vec_usi_expected2,
+ vec_usi_result1, vec_usi_result2;
+ vector signed int vec_si_expected1, vec_si_expected2, vec_si_result1,
+ vec_si_result2;
+ vector unsigned int vec_ui_expected1, vec_ui_expected2, vec_ui_result1,
+ vec_ui_result2;
+ vector signed long long vec_sll_expected1, vec_sll_expected2,
+ vec_sll_result1, vec_sll_result2;
+ vector unsigned long long vec_ull_expected1, vec_ull_expected2,
+ vec_ull_result1, vec_ull_result2;
+ vector float vec_f_expected1, vec_f_expected2, vec_f_result1, vec_f_result2;
+ vector double vec_d_expected1, vec_d_expected2, vec_d_result1, vec_d_result2;
+ char buf[20];
+ signed long long zero = (signed long long) 0;
+
+ for (i = 0; i < 100; i++)
+ {
+ data_c[i] = i;
+ data_uc[i] = i+1;
+ data_ssi[i] = i+10;
+ data_usi[i] = i+11;
+ data_si[i] = i+100;
+ data_ui[i] = i+101;
+ data_sll[i] = i+1000;
+ data_ull[i] = i+1001;
+ data_f[i] = i+100000.0;
+ data_d[i] = i+1000000.0;
+ }
+
+ disp = 0;
+#ifdef __BIG_ENDIAN__
+ printf("BIG ENDIAN\n");
+ vec_c_expected1 = (vector signed char){0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15};
+#else
+ printf("LITTLE ENDIAN\n");
+ vec_c_expected1 = (vector signed char){15, 14, 13, 12, 11, 10, 9, 8,
+ 7, 6, 5, 4, 3, 2, 1, 0};
+#endif
+ vec_c_result1 = vec_xl_be (0, data_c);
+
+ disp = 1;
+
+#ifdef __BIG_ENDIAN__
+ vec_c_expected2 = (vector signed char){1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 12, 13, 14, 15, 16};
+#else
+ vec_c_expected2 = (vector signed char){16, 15, 14, 13, 12, 11, 10, 9,
+ 8, 7, 6, 5, 4, 3, 2, 1};
+#endif
+
+ vec_c_result2 = vec_xl_be (disp, data_c);
+
+#ifdef __BIG_ENDIAN__
+ vec_uc_expected1 = (vector unsigned char){1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 12, 13, 14, 15, 16};
+#else
+ vec_uc_expected1 = (vector unsigned char){16, 15, 14, 13, 12, 11, 10, 9,
+ 8, 7, 6, 5, 4, 3, 2, 1};
+#endif
+
+ vec_uc_result1 = vec_xl_be (0, data_uc);
+
+#ifdef __BIG_ENDIAN__
+ vec_uc_expected2 = (vector unsigned char){2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17};
+#else
+ vec_uc_expected2 = (vector unsigned char){17, 16, 15, 14, 13, 12, 11, 10,
+ 9, 8, 7, 6, 5, 4, 3, 2};
+#endif
+
+ vec_uc_result2 = vec_xl_be (disp, data_uc);
+
+ for (i = 0; i < 16; i++)
+ {
+ if (vec_c_result1[i] != vec_c_expected1[i])
+ abort ();
+
+ if (vec_c_result2[i] != vec_c_expected2[i])
+ abort ();
+
+ if (vec_uc_result1[i] != vec_uc_expected1[i])
+ abort ();
+
+ if (vec_uc_result2[i] != vec_uc_expected2[i])
+ abort ();
+ }
+
+ vec_ssi_result1 = vec_xl_be (zero, data_ssi);
+
+#ifdef __BIG_ENDIAN__
+ vec_ssi_expected1 = (vector signed short){10, 11, 12, 13, 14, 15, 16, 17};
+#else
+ vec_ssi_expected1 = (vector signed short){17, 16, 15, 14, 13, 12, 11, 10};
+#endif
+
+ disp = 2;
+ vec_ssi_result2 = vec_xl_be (disp, data_ssi);
+
+#ifdef __BIG_ENDIAN__
+ vec_ssi_expected2 = (vector signed short){11, 12, 13, 14, 15, 16, 17, 18};
+#else
+ vec_ssi_expected2 = (vector signed short){18, 17, 16, 15, 14, 13, 12, 11};
+#endif
+
+ vec_usi_result1 = vec_xl_be (zero, data_usi);
+
+#ifdef __BIG_ENDIAN__
+ vec_usi_expected1 = (vector unsigned short){11, 12, 13, 14, 15, 16, 17, 18};
+#else
+ vec_usi_expected1 = (vector unsigned short){18, 17, 16, 15, 14, 13, 12, 11};
+#endif
+
+ disp = 2;
+ vec_usi_result2 = vec_xl_be (disp, data_usi);
+
+#ifdef __BIG_ENDIAN__
+ vec_usi_expected2 = (vector unsigned short){12, 13, 14, 15, 16, 17, 18, 19};
+#else
+ vec_usi_expected2 = (vector unsigned short){19, 18, 17, 16, 15, 14, 13, 12};
+#endif
+
+ for (i = 0; i < 8; i++)
+ {
+ if (vec_ssi_result1[i] != vec_ssi_expected1[i])
+ abort ();
+
+ if (vec_ssi_result2[i] != vec_ssi_expected2[i])
+ abort ();
+
+ if (vec_usi_result1[i] != vec_usi_expected1[i])
+ abort ();
+
+ if (vec_usi_result2[i] != vec_usi_expected2[i])
+ abort ();
+ }
+
+ vec_si_result1 = vec_xl_be (zero, data_si);
+
+#ifdef __BIG_ENDIAN__
+ vec_si_expected1 = (vector int){100, 101, 102, 103};
+#else
+ vec_si_expected1 = (vector int){103, 102, 101, 100};
+#endif
+
+ disp = 4;
+ vec_si_result2 = vec_xl_be (disp, data_si);
+
+#ifdef __BIG_ENDIAN__
+ vec_si_expected2 = (vector int){101, 102, 103, 104};
+#else
+ vec_si_expected2 = (vector int){104, 103, 102, 101};
+#endif
+
+ vec_ui_result1 = vec_xl_be (zero, data_ui);
+
+#ifdef __BIG_ENDIAN__
+ vec_ui_expected1 = (vector unsigned int){101, 102, 103, 104};
+#else
+ vec_ui_expected1 = (vector unsigned int){104, 103, 102, 101};
+#endif
+
+ disp = 4;
+ vec_ui_result2 = vec_xl_be (disp, data_ui);
+
+#ifdef __BIG_ENDIAN__
+ vec_ui_expected2 = (vector unsigned int){102, 103, 104, 105};
+#else
+ vec_ui_expected2 = (vector unsigned int){105, 104, 103, 102};
+#endif
+
+
+ for (i = 0; i < 4; i++)
+ {
+ if (vec_si_result1[i] != vec_si_expected1[i])
+ abort ();
+
+ if (vec_si_result2[i] != vec_si_expected2[i])
+ abort ();
+
+ if (vec_ui_result1[i] != vec_ui_expected1[i])
+ abort ();
+
+ if (vec_ui_result2[i] != vec_ui_expected2[i])
+ abort ();
+ }
+
+ vec_sll_result1 = vec_xl_be (zero, data_sll);
+
+#ifdef __BIG_ENDIAN__
+ vec_sll_expected1 = (vector signed long long){1000, 1001};
+#else
+ vec_sll_expected1 = (vector signed long long){1001, 1000};
+#endif
+
+ disp = 8;
+ vec_sll_result2 = vec_xl_be (disp, data_sll);
+
+#ifdef __BIG_ENDIAN__
+ vec_sll_expected2 = (vector signed long long){1001, 1002};
+#else
+ vec_sll_expected2 = (vector signed long long){1002, 1001};
+#endif
+
+ vec_ull_result1 = vec_xl_be (zero, data_ull);
+
+#ifdef __BIG_ENDIAN__
+ vec_ull_expected1 = (vector unsigned long long){1001, 1002};
+#else
+ vec_ull_expected1 = (vector unsigned long long){1002, 1001};
+#endif
+
+ disp = 8;
+ vec_ull_result2 = vec_xl_be (disp, data_ull);
+
+#ifdef __BIG_ENDIAN__
+ vec_ull_expected2 = (vector unsigned long long){1002, 1003};
+#else
+ vec_ull_expected2 = (vector unsigned long long){1003, 1002};
+#endif
+
+
+ for (i = 0; i < 2; i++)
+ {
+ if (vec_sll_result1[i] != vec_sll_expected1[i])
+ abort ();
+
+ if (vec_sll_result2[i] != vec_sll_expected2[i])
+ abort ();
+
+ if (vec_ull_result1[i] != vec_ull_expected1[i])
+ abort ();
+
+ if (vec_ull_result2[i] != vec_ull_expected2[i])
+ abort ();
+ }
+
+ vec_f_result1 = vec_xl_be (zero, data_f);
+
+#ifdef __BIG_ENDIAN__
+ vec_f_expected1 = (vector float){100000.0, 100001.0, 100002.0, 100003.0};
+#else
+ vec_f_expected1 = (vector float){100003.0, 100002.0, 100001.0, 100000.0};
+#endif
+
+ disp = 4;
+ vec_f_result2 = vec_xl_be (disp, data_f);
+
+#ifdef __BIG_ENDIAN__
+ vec_f_expected2 = (vector float){100001.0, 100002.0, 100003.0, 100004.0};
+#else
+ vec_f_expected2 = (vector float){100004.0, 100003.0, 100002.0, 100001.0};
+#endif
+
+ for (i = 0; i < 4; i++)
+ {
+ if (vec_f_result1[i] != vec_f_expected1[i])
+ abort ();
+ if (vec_f_result2[i] != vec_f_expected2[i])
+ abort ();
+ }
+
+ vec_d_result1 = vec_xl_be (zero, data_d);
+
+#ifdef __BIG_ENDIAN__
+ vec_d_expected1 = (vector double){1000000.0, 1000001.0};
+#else
+ vec_d_expected1 = (vector double){1000001.0, 1000000.0};
+#endif
+
+ disp = 8;
+ vec_d_result2 = vec_xl_be (disp, data_d);
+
+#ifdef __BIG_ENDIAN__
+ vec_d_expected2 = (vector double){1000001.0, 1000002.0};
+#else
+ vec_d_expected2 = (vector double){1000002.0, 1000001.0};
+#endif
+
+ for (i = 0; i < 2; i++)
+ {
+ if (vec_d_result1[i] != vec_d_expected1[i])
+ abort ();
+ if (vec_d_result2[i] != vec_d_expected2[i])
+ abort ();
+ }
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/byte-in-either-range-1.c b/gcc/testsuite/gcc.target/powerpc/byte-in-either-range-1.c
index 52107c716c5..28b19820e57 100644
--- a/gcc/testsuite/gcc.target/powerpc/byte-in-either-range-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/byte-in-either-range-1.c
@@ -18,5 +18,5 @@ test_byte_in_either_range (unsigned char b,
range_encoding = ((first_hi_bound << 24) | (first_lo_bound << 16)
| (second_hi_bound << 8) | second_lo_bound);
- return __builtin_byte_in_either_range (b, range_encoding); /* { dg-error "Builtin function __builtin_scalar_byte_in_either_range requires" } */
+ return __builtin_byte_in_either_range (b, range_encoding); /* { dg-error "builtin function __builtin_scalar_byte_in_either_range requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/byte-in-range-1.c b/gcc/testsuite/gcc.target/powerpc/byte-in-range-1.c
index aaf46d0f8f3..e002c44dd8f 100644
--- a/gcc/testsuite/gcc.target/powerpc/byte-in-range-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/byte-in-range-1.c
@@ -11,6 +11,6 @@ test_byte_in_range (unsigned char b,
unsigned char low_range, unsigned char high_range)
{
unsigned int range_encoding = (high_range << 8) | low_range;
- return __builtin_byte_in_range (b, range_encoding); /* { dg-error "Builtin function __builtin_scalar_byte_in_range requires" } */
+ return __builtin_byte_in_range (b, range_encoding); /* { dg-error "builtin function __builtin_scalar_byte_in_range requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/byte-in-set-1.c b/gcc/testsuite/gcc.target/powerpc/byte-in-set-1.c
index 80c3a7d1a4d..bd5b50366e3 100644
--- a/gcc/testsuite/gcc.target/powerpc/byte-in-set-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/byte-in-set-1.c
@@ -10,5 +10,5 @@
int
test_byte_in_set (unsigned char b, unsigned long long set_members)
{
- return __builtin_byte_in_set (b, set_members); /* { dg-error "Builtin function __builtin_scalar_byte_in_set requires" } */
+ return __builtin_byte_in_set (b, set_members); /* { dg-error "builtin function __builtin_scalar_byte_in_set requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/byte-in-set-2.c b/gcc/testsuite/gcc.target/powerpc/byte-in-set-2.c
index 1915c707162..b2a6a98c8e3 100644
--- a/gcc/testsuite/gcc.target/powerpc/byte-in-set-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/byte-in-set-2.c
@@ -12,5 +12,5 @@
int
test_byte_in_set (unsigned char b, unsigned long long set_members)
{
- return __builtin_byte_in_set (b, set_members); /* { dg-error "Builtin function __builtin_byte_in_set not supported in this compiler configuration" } */
+ return __builtin_byte_in_set (b, set_members); /* { dg-error "builtin function __builtin_byte_in_set not supported in this compiler configuration" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/cmpb-3.c b/gcc/testsuite/gcc.target/powerpc/cmpb-3.c
index edb62f19b83..a3b72581434 100644
--- a/gcc/testsuite/gcc.target/powerpc/cmpb-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/cmpb-3.c
@@ -9,7 +9,7 @@ void abort ();
long long int
do_compare (long long int a, long long int b)
{
- return __builtin_cmpb (a, b); /* { dg-error "Builtin function __builtin_cmpb not supported in this compiler configuration" } */
+ return __builtin_cmpb (a, b); /* { dg-error "builtin function __builtin_cmpb not supported in this compiler configuration" } */
}
void expect (long long int pattern, long long int value)
diff --git a/gcc/testsuite/gcc.target/powerpc/cpu-builtin-1.c b/gcc/testsuite/gcc.target/powerpc/cpu-builtin-1.c
index 1de4b6980af..c190f246231 100644
--- a/gcc/testsuite/gcc.target/powerpc/cpu-builtin-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/cpu-builtin-1.c
@@ -71,6 +71,8 @@ use_cpu_supports_builtins (unsigned int *p)
p[35] = __builtin_cpu_supports ("ucache");
p[36] = __builtin_cpu_supports ("vcrypto");
p[37] = __builtin_cpu_supports ("vsx");
+ p[38] = __builtin_cpu_supports ("darn");
+ p[39] = __builtin_cpu_supports ("scv");
#else
p[0] = 0;
#endif
diff --git a/gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c b/gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c
index f3d58b0c80b..4df13c7cf3c 100644
--- a/gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c
@@ -6,21 +6,21 @@
void use_builtins_d (__vector unsigned long long *p, __vector unsigned long long *q, __vector unsigned long long *r, __vector unsigned long long *s)
{
- p[0] = __builtin_crypto_vcipher (q[0], r[0]); /* { dg-error "Builtin function __builtin_crypto_vcipher is not supported with the current options" } */
- p[1] = __builtin_crypto_vcipherlast (q[1], r[1]); /* { dg-error "Builtin function __builtin_crypto_vcipherlast is not supported with the current options" } */
- p[2] = __builtin_crypto_vncipher (q[2], r[2]); /* { dg-error "Builtin function __builtin_crypto_vncipher is not supported with the current options" } */
- p[3] = __builtin_crypto_vncipherlast (q[3], r[3]); /* { dg-error "Builtin function __builtin_crypto_vncipherlast is not supported with the current options" } */
+ p[0] = __builtin_crypto_vcipher (q[0], r[0]); /* { dg-error "builtin function __builtin_crypto_vcipher is not supported with the current options" } */
+ p[1] = __builtin_crypto_vcipherlast (q[1], r[1]); /* { dg-error "builtin function __builtin_crypto_vcipherlast is not supported with the current options" } */
+ p[2] = __builtin_crypto_vncipher (q[2], r[2]); /* { dg-error "builtin function __builtin_crypto_vncipher is not supported with the current options" } */
+ p[3] = __builtin_crypto_vncipherlast (q[3], r[3]); /* { dg-error "builtin function __builtin_crypto_vncipherlast is not supported with the current options" } */
p[4] = __builtin_crypto_vpermxor (q[4], r[4], s[4]);
p[5] = __builtin_crypto_vpmsumd (q[5], r[5]);
- p[6] = __builtin_crypto_vshasigmad (q[6], 1, 15); /* { dg-error "Builtin function __builtin_crypto_vshasigmad is not supported with the current options" } */
- p[7] = __builtin_crypto_vsbox (q[7]); /* { dg-error "Builtin function __builtin_crypto_vsbox is not supported with the current options" } */
+ p[6] = __builtin_crypto_vshasigmad (q[6], 1, 15); /* { dg-error "builtin function __builtin_crypto_vshasigmad is not supported with the current options" } */
+ p[7] = __builtin_crypto_vsbox (q[7]); /* { dg-error "builtin function __builtin_crypto_vsbox is not supported with the current options" } */
}
void use_builtins_w (__vector unsigned int *p, __vector unsigned int *q, __vector unsigned int *r, __vector unsigned int *s)
{
p[0] = __builtin_crypto_vpermxor (q[0], r[0], s[0]);
p[1] = __builtin_crypto_vpmsumw (q[1], r[1]);
- p[2] = __builtin_crypto_vshasigmaw (q[2], 1, 15); /* { dg-error "Builtin function __builtin_crypto_vshasigmaw is not supported with the current options" } */
+ p[2] = __builtin_crypto_vshasigmaw (q[2], 1, 15); /* { dg-error "builtin function __builtin_crypto_vshasigmaw is not supported with the current options" } */
}
void use_builtins_h (__vector unsigned short *p, __vector unsigned short *q, __vector unsigned short *r, __vector unsigned short *s)
diff --git a/gcc/testsuite/gcc.target/powerpc/dform-1.c b/gcc/testsuite/gcc.target/powerpc/dform-1.c
index 12623f20262..37a30d1c92f 100644
--- a/gcc/testsuite/gcc.target/powerpc/dform-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/dform-1.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
-/* { dg-options "-mcpu=power9 -mpower9-dform -O2 -mlra" } */
+/* { dg-options "-mcpu=power9 -mpower9-dform -O2" } */
#ifndef TYPE
#define TYPE double
diff --git a/gcc/testsuite/gcc.target/powerpc/dform-2.c b/gcc/testsuite/gcc.target/powerpc/dform-2.c
index 86d65b5b1fd..b4c4199c0b3 100644
--- a/gcc/testsuite/gcc.target/powerpc/dform-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/dform-2.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
-/* { dg-options "-mcpu=power9 -mpower9-dform -O2 -mlra" } */
+/* { dg-options "-mcpu=power9 -mpower9-dform -O2" } */
#ifndef TYPE
#define TYPE float
diff --git a/gcc/testsuite/gcc.target/powerpc/dform-3.c b/gcc/testsuite/gcc.target/powerpc/dform-3.c
index b1c481fbf6d..c261c4e6f5d 100644
--- a/gcc/testsuite/gcc.target/powerpc/dform-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/dform-3.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
-/* { dg-options "-mcpu=power9 -mpower9-dform -O2 -mlra" } */
+/* { dg-options "-mcpu=power9 -mpower9-dform -O2" } */
#ifndef TYPE
#define TYPE vector double
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-1.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-1.c
index d634a2acd04..7a791af07f8 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-1.c
@@ -10,6 +10,6 @@ int doTestBCDSignificance (_Decimal64 *p)
{
_Decimal64 source = *p;
- return __builtin_dfp_dtstsfi_lt (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_lt_dd requires" } */
+ return __builtin_dfp_dtstsfi_lt (5, source); /* { dg-error "builtin function __builtin_dtstsfi_lt_dd requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
index 523facea156..4a57a208b1f 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
@@ -10,6 +10,6 @@ int doTestBCDSignificance (_Decimal64 *p)
{
_Decimal64 source = *p;
- return __builtin_dfp_dtstsfi_lt_dd (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_lt_dd requires" } */
+ return __builtin_dfp_dtstsfi_lt_dd (5, source); /* { dg-error "builtin function __builtin_dtstsfi_lt_dd requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
index dcd4a16635f..b6998f2025a 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
@@ -10,7 +10,7 @@ int doTestBCDSignificance (_Decimal128 *p)
{
_Decimal128 source = *p;
- return __builtin_dfp_dtstsfi_lt_td (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_lt_td requires" } */
+ return __builtin_dfp_dtstsfi_lt_td (5, source); /* { dg-error "builtin function __builtin_dtstsfi_lt_td requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-21.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-21.c
index 975843c6a02..0f6d70e7e60 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-21.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-21.c
@@ -10,6 +10,6 @@ int doTestBCDSignificance (_Decimal64 *p)
{
_Decimal64 source = *p;
- return __builtin_dfp_dtstsfi_gt (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_gt_dd requires" } */
+ return __builtin_dfp_dtstsfi_gt (5, source); /* { dg-error "builtin function __builtin_dtstsfi_gt_dd requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-26.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-26.c
index e30c2f4ac79..f47cbcee383 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-26.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-26.c
@@ -10,7 +10,7 @@ int doTestBCDSignificance (_Decimal128 *p)
{
_Decimal128 source = *p;
- return __builtin_dfp_dtstsfi_gt (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_gt_td requires" } */
+ return __builtin_dfp_dtstsfi_gt (5, source); /* { dg-error "builtin function __builtin_dtstsfi_gt_td requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
index a95dcb8dbb6..bce88ca5d30 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
@@ -10,6 +10,6 @@ int doTestBCDSignificance (_Decimal64 *p)
{
_Decimal64 source = *p;
- return __builtin_dfp_dtstsfi_gt_dd (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_gt_dd requires" } */
+ return __builtin_dfp_dtstsfi_gt_dd (5, source); /* { dg-error "builtin function __builtin_dtstsfi_gt_dd requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
index 00be5389310..5cdfa1be7e2 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
@@ -10,7 +10,7 @@ int doTestBCDSignificance (_Decimal128 *p)
{
_Decimal128 source = *p;
- return __builtin_dfp_dtstsfi_gt_td (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_gt_td requires" } */
+ return __builtin_dfp_dtstsfi_gt_td (5, source); /* { dg-error "builtin function __builtin_dtstsfi_gt_td requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-41.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-41.c
index c84387dc38b..c3b84332316 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-41.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-41.c
@@ -10,6 +10,6 @@ int doTestBCDSignificance (_Decimal64 *p)
{
_Decimal64 source = *p;
- return __builtin_dfp_dtstsfi_eq (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_eq_dd requires" } */
+ return __builtin_dfp_dtstsfi_eq (5, source); /* { dg-error "builtin function __builtin_dtstsfi_eq_dd requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-46.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-46.c
index f1d6e2de80f..fbcbbdb0abc 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-46.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-46.c
@@ -10,7 +10,7 @@ int doTestBCDSignificance (_Decimal128 *p)
{
_Decimal128 source = *p;
- return __builtin_dfp_dtstsfi_eq (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_eq_td requires" } */
+ return __builtin_dfp_dtstsfi_eq (5, source); /* { dg-error "builtin function __builtin_dtstsfi_eq_td requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
index 58f542673de..71839922eec 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
@@ -10,6 +10,6 @@ int doTestBCDSignificance (_Decimal64 *p)
{
_Decimal64 source = *p;
- return __builtin_dfp_dtstsfi_eq_dd (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_eq_dd requires" } */
+ return __builtin_dfp_dtstsfi_eq_dd (5, source); /* { dg-error "builtin function __builtin_dtstsfi_eq_dd requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
index 7efb1a3d0f1..1b894ff669c 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
@@ -10,7 +10,7 @@ int doTestBCDSignificance (_Decimal128 *p)
{
_Decimal128 source = *p;
- return __builtin_dfp_dtstsfi_eq_td (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_eq_td requires" } */
+ return __builtin_dfp_dtstsfi_eq_td (5, source); /* { dg-error "builtin function __builtin_dtstsfi_eq_td requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-6.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-6.c
index 1bddb651b0e..293e6ca19ad 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-6.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-6.c
@@ -10,7 +10,7 @@ int doTestBCDSignificance (_Decimal128 *p)
{
_Decimal128 source = *p;
- return __builtin_dfp_dtstsfi_lt (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_lt_td requires" } */
+ return __builtin_dfp_dtstsfi_lt (5, source); /* { dg-error "builtin function __builtin_dtstsfi_lt_td requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-61.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-61.c
index 247c1448a70..aa7591f7dc4 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-61.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-61.c
@@ -10,6 +10,6 @@ int doTestBCDSignificance (_Decimal64 *p)
{
_Decimal64 source = *p;
- return __builtin_dfp_dtstsfi_ov (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_ov_dd requires" } */
+ return __builtin_dfp_dtstsfi_ov (5, source); /* { dg-error "builtin function __builtin_dtstsfi_ov_dd requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-66.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-66.c
index 69272acb47a..644f3101c13 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-66.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-66.c
@@ -10,7 +10,7 @@ int doTestBCDSignificance (_Decimal128 *p)
{
_Decimal128 source = *p;
- return __builtin_dfp_dtstsfi_ov (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_ov_td requires" } */
+ return __builtin_dfp_dtstsfi_ov (5, source); /* { dg-error "builtin function __builtin_dtstsfi_ov_td requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
index 3e512038cf3..3f71eee3858 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
@@ -10,6 +10,6 @@ int doTestBCDSignificance (_Decimal64 *p)
{
_Decimal64 source = *p;
- return __builtin_dfp_dtstsfi_ov_dd (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_ov_dd requires" } */
+ return __builtin_dfp_dtstsfi_ov_dd (5, source); /* { dg-error "builtin function __builtin_dtstsfi_ov_dd requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
index 572897fee55..d9e327a7b34 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
@@ -10,7 +10,7 @@ int doTestBCDSignificance (_Decimal128 *p)
{
_Decimal128 source = *p;
- return __builtin_dfp_dtstsfi_ov_td (5, source); /* { dg-error "Builtin function __builtin_dtstsfi_ov_td requires" } */
+ return __builtin_dfp_dtstsfi_ov_td (5, source); /* { dg-error "builtin function __builtin_dtstsfi_ov_td requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-char.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-char.c
new file mode 100644
index 00000000000..61dfbccd672
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-char.c
@@ -0,0 +1,22 @@
+/* Verify that overloaded built-ins for vec_cntlz with char
+ inputs produce the right results. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-maltivec -mpower8-vector -O2" } */
+
+#include <altivec.h>
+
+vector signed char
+testsc_h (vector signed char vsc2)
+{
+ return vec_cntlz (vsc2);
+}
+
+vector unsigned char
+testuc_h (vector unsigned char vuc2)
+{
+ return vec_cntlz (vuc2);
+}
+
+/* { dg-final { scan-assembler-times "vclzb" 2 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-int.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-int.c
new file mode 100644
index 00000000000..ae4dd577692
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-int.c
@@ -0,0 +1,22 @@
+/* Verify that overloaded built-ins for vec_cntlz with int
+ inputs produce the right results. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-maltivec -mpower8-vector -O2" } */
+
+#include <altivec.h>
+
+vector signed int
+testsi (vector signed int vsi2)
+{
+ return vec_cntlz (vsi2);
+}
+
+vector unsigned int
+testui (vector unsigned int vui2)
+{
+ return vec_cntlz (vui2);
+}
+
+/* { dg-final { scan-assembler-times "vclzw" 2 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-longlong.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-longlong.c
new file mode 100644
index 00000000000..1a72a2d38c7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-longlong.c
@@ -0,0 +1,22 @@
+/* Verify that overloaded built-ins for vec_cntlz with long long
+ inputs produce the right results. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mvsx -mpower8-vector -O2" } */
+
+#include <altivec.h>
+
+vector signed long long
+testsl (vector signed long long vsl2)
+{
+ return vec_cntlz (vsl2);
+}
+
+vector unsigned long long
+testul (vector unsigned long long vul2)
+{
+ return vec_cntlz (vul2);
+}
+
+/* { dg-final { scan-assembler-times "vclzd" 2 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-short.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-short.c
new file mode 100644
index 00000000000..0f05cace2e6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-short.c
@@ -0,0 +1,22 @@
+/* Verify that overloaded built-ins for vec_cntlz with int
+ inputs produce the right results. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-maltivec -mpower8-vector -O2" } */
+
+#include <altivec.h>
+
+vector signed short
+testsi (vector signed short vss2)
+{
+ return vec_cntlz (vss2);
+}
+
+vector unsigned short
+testui (vector unsigned short vus2)
+{
+ return vec_cntlz (vus2);
+}
+
+/* { dg-final { scan-assembler-times "vclzh" 2 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-madd-double.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-madd-double.c
new file mode 100644
index 00000000000..0fe78241294
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-madd-double.c
@@ -0,0 +1,17 @@
+/* Verify that overloaded built-ins for vec_madd with
+ double inputs produce the right results. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mvsx -O2" } */
+
+#include <altivec.h>
+
+vector double
+testd_l (vector double vd2, vector double vd3, vector double vd4)
+{
+ return vec_madd (vd2, vd3, vd4);
+}
+
+/* { dg-final { scan-assembler-times "xvmaddmdp|xvmaddadp" 1 } } */
+
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-madd-float.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-madd-float.c
new file mode 100644
index 00000000000..fcfe0c38656
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-madd-float.c
@@ -0,0 +1,17 @@
+/* Verify that overloaded built-ins for vec_madd with float
+ inputs produce the right results. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mvsx -O2" } */
+
+#include <altivec.h>
+
+vector float
+testf_l (vector float vf2, vector float vf3, vector float vf4)
+{
+ return vec_madd (vf2, vf3, vf4);
+}
+
+/* { dg-final { scan-assembler-times "xvmaddmsp|xvmaddasp" 1 } } */
+
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-madd-short.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-madd-short.c
new file mode 100644
index 00000000000..0e78f3585f5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-madd-short.c
@@ -0,0 +1,38 @@
+/* Verify that overloaded built-ins for vec_madd with short
+ inputs produce the right results. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -O2" } */
+
+#include <altivec.h>
+
+vector signed short
+test_mad_sss (vector signed short vss2, vector signed short vss3,
+ vector signed short vss4)
+{
+ return vec_madd (vss2, vss3, vss4);
+}
+
+vector signed short
+test_mad_suu (vector signed short vss2, vector unsigned short vus3,
+ vector unsigned short vus4)
+{
+ return vec_madd (vss2, vus3, vus4);
+}
+
+vector signed short
+test_mad_uss (vector unsigned short vus2, vector signed short vss3,
+ vector signed short vss4)
+{
+ return vec_madd (vus2, vss3, vss4);
+}
+
+vector unsigned short
+test_mad_uuu (vector unsigned short vus2, vector unsigned short vus3,
+ vector unsigned short vus4)
+{
+ return vec_madd (vus2, vus3, vus4);
+}
+
+/* { dg-final { scan-assembler-times "vmladduhm" 4 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-msum-char.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-msum-char.c
new file mode 100644
index 00000000000..53519d50293
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-msum-char.c
@@ -0,0 +1,25 @@
+/* Verify that overloaded built-ins for vec_msum() with char inputs
+ produce the right results. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -O2" } */
+
+#include <altivec.h>
+
+vector unsigned int
+test_msum_ui_uc_uc_ui (vector unsigned char vuc2, vector unsigned char vuc3,
+ vector unsigned int vui2)
+{
+ return vec_msum (vuc2, vuc3, vui2);
+}
+
+vector signed int
+test_msum_si_sc_uc_si (vector signed char vsc2, vector unsigned char vuc3,
+ vector signed int vsi2)
+{
+ return vec_msum (vsc2, vuc3, vsi2);
+}
+
+/* { dg-final { scan-assembler-times "vmsumubm" 1 } } */
+/* { dg-final { scan-assembler-times "vmsummbm" 1 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-msum-short.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-msum-short.c
new file mode 100644
index 00000000000..2e590ab8066
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-msum-short.c
@@ -0,0 +1,25 @@
+/* Verify that overloaded built-ins for vec_msum with int
+ inputs produce the right results. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -O2" } */
+
+#include <altivec.h>
+
+vector signed int
+test_msum_si (vector signed short vss2, vector signed short vss3,
+ vector signed int vsi2)
+{
+ return vec_msum (vss2, vss3, vsi2);
+}
+
+vector unsigned int
+test_msum_ui (vector unsigned short vus2, vector unsigned short vus3,
+ vector unsigned int vui2)
+{
+ return vec_msum (vus2, vus3, vui2);
+}
+
+/* { dg-final { scan-assembler-times "vmsumshm" 1 } } */
+/* { dg-final { scan-assembler-times "vmsumuhm" 1 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-pack-double.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-pack-double.c
new file mode 100644
index 00000000000..29d049abe80
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-pack-double.c
@@ -0,0 +1,18 @@
+/* Verify that overloaded built-ins for vec_pack with
+ double inputs produce the right results. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mvsx -mpower8-vector -O2" } */
+
+#include <altivec.h>
+
+// vector float vec_pack (vector double, vector double);
+
+vector float
+test_pack (vector double vd2, vector double vd3)
+{
+ return vec_pack (vd2, vd3);
+}
+
+/* { dg-final { scan-assembler-times "vpkudum" 1 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-pack-int.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-pack-int.c
new file mode 100644
index 00000000000..940faf36755
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-pack-int.c
@@ -0,0 +1,28 @@
+/* Verify that overloaded built-ins for vec_pack with int
+ inputs produce the right results. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -O2" } */
+
+#include <altivec.h>
+
+vector bool short
+testbi_h (vector bool int vbi2, vector bool int vbi3)
+{
+ return vec_pack (vbi2, vbi3);
+}
+
+vector signed short
+testsi_h (vector signed int vsi2, vector signed int vsi3)
+{
+ return vec_pack (vsi2, vsi3);
+}
+
+vector unsigned short
+testui_h (vector unsigned int vui2, vector unsigned int vui3)
+{
+ return vec_pack (vui2, vui3);
+}
+
+/* { dg-final { scan-assembler-times "vpkuwum" 3 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-pack-longlong.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-pack-longlong.c
new file mode 100644
index 00000000000..25c3c3710d2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-pack-longlong.c
@@ -0,0 +1,28 @@
+/* Verify that overloaded built-ins for vec_pack with long long
+ inputs produce the right results. */
+
+/* { dg-do compile { target lp64 } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mvsx -mpower8-vector -O2" } */
+
+#include <altivec.h>
+
+vector bool int
+testbl_h (vector bool long long vbl2, vector bool long long vbl3)
+{
+ return vec_pack (vbl2, vbl3);
+}
+
+vector signed int
+testsl_h (vector signed long long vsl2, vector signed long long vsl3)
+{
+ return vec_pack (vsl2, vsl3);
+}
+
+vector unsigned int
+testul_h (vector unsigned long vul2, vector unsigned long vul3)
+{
+ return vec_pack (vul2, vul3);
+}
+
+/* { dg-final { scan-assembler-times "vpkudum" 3 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-pack-short.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-pack-short.c
new file mode 100644
index 00000000000..37cd191dbd8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-pack-short.c
@@ -0,0 +1,28 @@
+/* Verify that overloaded built-ins for vec_pack with short
+ inputs produce the right results. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -O2" } */
+
+#include <altivec.h>
+
+vector bool char
+testbi_eh (vector bool short vbs2, vector bool short vbs3)
+{
+ return vec_pack (vbs2, vbs3);
+}
+
+vector signed char
+testsi_eh (vector signed short vss2, vector signed short vss3)
+{
+ return vec_pack (vss2, vss3);
+}
+
+vector unsigned char
+testui_eh (vector unsigned short vus2, vector unsigned short vus3)
+{
+ return vec_pack (vus2, vus3);
+}
+
+/* { dg-final { scan-assembler-times "vpkuhum" 3 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-check.h b/gcc/testsuite/gcc.target/powerpc/mmx-check.h
new file mode 100644
index 00000000000..e08077f6d80
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-check.h
@@ -0,0 +1,35 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+static void mmx_test (void);
+
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ mmx_test ();
+}
+
+int
+main ()
+ {
+#ifdef __BUILTIN_CPU_SUPPORTS__
+ /* Many MMX intrinsics are simpler / faster to implement by
+ transferring the __m64 (long int) to vector registers for SIMD
+ operations. To be efficient we also need the direct register
+ transfer instructions from POWER8. So we can test for
+ arch_2_07. */
+ if ( __builtin_cpu_supports ("arch_2_07") )
+ {
+ do_test ();
+#ifdef DEBUG
+ printf ("PASSED\n");
+#endif
+ }
+#ifdef DEBUG
+ else
+ printf ("SKIPPED\n");
+#endif
+#endif /* __BUILTIN_CPU_SUPPORTS__ */
+ return 0;
+ }
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-packs.c b/gcc/testsuite/gcc.target/powerpc/mmx-packs.c
new file mode 100644
index 00000000000..18faa5a18eb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-packs.c
@@ -0,0 +1,91 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#include <mmintrin.h>
+#include "mmx-check.h"
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+static void
+__attribute__ ((noinline))
+check_packs_pu16 (unsigned long long int src1, unsigned long long int src2,
+ unsigned long long int res_ref)
+{
+ unsigned long long int res;
+
+ res = (unsigned long long int) _mm_packs_pu16 ((__m64 ) src1, (__m64 ) src2);
+
+ if (res != res_ref)
+ abort ();
+}
+
+static void
+__attribute__ ((noinline))
+check_packs_pi16 (unsigned long long int src1, unsigned long long int src2,
+ unsigned long long int res_ref)
+{
+ unsigned long long int res;
+
+ res = (unsigned long long int) _mm_packs_pi16 ((__m64 ) src1, (__m64 ) src2);
+
+
+ if (res != res_ref)
+ abort ();
+}
+
+static void
+__attribute__ ((noinline))
+check_packs_pi32 (unsigned long long int src1, unsigned long long int src2,
+ unsigned long long int res_ref)
+{
+ unsigned long long int res;
+
+ res = (unsigned long long int) _mm_packs_pi32 ((__m64 ) src1, (__m64 ) src2);
+
+ if (res != res_ref)
+ abort ();
+}
+
+static unsigned long long int src1[] =
+ { 0xffff0000fffe0000UL, 0x0001000000020000UL, 0xfffffffffffffffeUL,
+ 0x0000000100000002UL, 0x0001000200030004UL, 0xfffffffefffdfffcUL,
+ 0x0100020003000400UL, 0xff00fe01fe02fe03UL };
+
+static unsigned long long int src2[] =
+ { 0xfffffffdfffffffcUL, 0x0000000200000003UL, 0xfffffffdfffffffcUL,
+ 0x0000000300000004UL, 0x0005000600070008UL, 0xfffbfffafff9fff8UL,
+ 0x0005000600070008UL, 0xfffbfffafff9fff8UL };
+
+static unsigned long long int res_pi16[] =
+ { 0xfffdfffcff00fe00UL, 0x0002000301000200UL, 0xfffdfffcfffffffeUL,
+ 0x0003000400010002UL, 0x0506070801020304UL, 0xfbfaf9f8fffefdfcUL,
+ 0x050607087f7f7f7fUL, 0xfbfaf9f880808080UL };
+
+static unsigned long long int res_pi32[] =
+ { 0xfffdfffc80008000UL, 0x000200037fff7fffUL, 0xfffdfffcfffffffeUL,
+ 0x0003000400010002UL, 0x7fff7fff7fff7fffUL, 0x80008000fffe8000UL,
+ 0x7fff7fff7fff7fffUL, 0x8000800080008000UL };
+
+static unsigned long long int res_pu16[] =
+ { 0x0000000000000000UL, 0x0002000301000200UL, 0x0000000000000000UL,
+ 0x0003000400010002UL, 0x0506070801020304UL, 0x000000000000000UL,
+ 0x5060708ffffffffUL, 0x0000000000000000UL };
+
+static void
+TEST ()
+{
+ long i;
+
+ for (i = 0; i < 8; i++)
+ {
+ check_packs_pu16 (src1[i], src2[i], res_pu16[i]);
+ check_packs_pi16 (src1[i], src2[i], res_pi16[i]);
+ check_packs_pi32 (src1[i], src2[i], res_pi32[i]);
+ }
+}
+
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-packssdw-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-packssdw-1.c
new file mode 100644
index 00000000000..8698d55f012
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-packssdw-1.c
@@ -0,0 +1,60 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_packs_pi32 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union s1, s2;
+ __m64_union u;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_set_pi32 (2134, -128);
+ s2.as_m64 = _mm_set_pi32 (41124, 234);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 2; i++)
+ {
+ if (s1.as_int[i] > 32767)
+ e.as_short[i] = 32767;
+ else if (s1.as_int[i] < -32768)
+ e.as_short[i] = -32768;
+ else
+ e.as_short[i] = s1.as_int[i];
+ }
+
+ for (i = 0; i < 2; i++)
+ {
+ if (s2.as_int[i] > 32767)
+ e.as_short[i+2] = 32767;
+ else if (s2.as_int[i] < -32768)
+ e.as_short[i+2] = -32768;
+ else
+ e.as_short[i+2] = s2.as_int[i];
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-packsswb-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-packsswb-1.c
new file mode 100644
index 00000000000..96bea7b81ab
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-packsswb-1.c
@@ -0,0 +1,60 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_packs_pi16 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union s1, s2;
+ __m64_union u;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_set_pi16 (2134, -128, 1234, 6354);
+ s2.as_m64 = _mm_set_pi16 (41124, 234, 2344, 2354);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 4; i++)
+ {
+ if (s1.as_short[i] > 127)
+ e.as_char[i] = 127;
+ else if (s1.as_short[i] < -128)
+ e.as_char[i] = -128;
+ else
+ e.as_char[i] = s1.as_short[i];
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ if (s2.as_short[i] > 127)
+ e.as_char[i+4] = 127;
+ else if (s2.as_short[i] < -128)
+ e.as_char[i+4] = -128;
+ else
+ e.as_char[i+4] = s2.as_short[i];
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-packuswb-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-packuswb-1.c
new file mode 100644
index 00000000000..029d5687d71
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-packuswb-1.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-O3" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_packs_pu16 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union s1, s2;
+ __m64_union u;
+ __m64_union e;
+ int i, tmp;
+
+ s1.as_m64 = _mm_set_pi16 (1, 2, 3, 4);
+ s2.as_m64 = _mm_set_pi16 (-9, -10, -11, -12);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i=0; i<4; i++)
+ {
+ tmp = s1.as_short[i]<0 ? 0 : s1.as_short[i];
+ tmp = tmp>255 ? 255 : tmp;
+ e.as_char[i] = tmp;
+
+ tmp = s2.as_short[i]<0 ? 0 : s2.as_short[i];
+ tmp = tmp>255 ? 255 : tmp;
+ e.as_char[i+4] = tmp;
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-paddb-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-paddb-1.c
new file mode 100644
index 00000000000..46b0584549e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-paddb-1.c
@@ -0,0 +1,42 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_add_pi8 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_set_pi8 (1, 2, 3, 4, 10, 20, 30, 90);
+ s2.as_m64 = _mm_set_pi8 (88, 44, 33, 22, 11, 98, 76, -100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 8; i++)
+ e.as_char[i] = s1.as_char[i] + s2.as_char[i];
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-paddd-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-paddd-1.c
new file mode 100644
index 00000000000..a006dda0ee4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-paddd-1.c
@@ -0,0 +1,42 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_add_pi32 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_set_pi32 (30, 90);
+ s2.as_m64 = _mm_set_pi32 (76, -100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 2; i++)
+ e.as_int[i] = s1.as_int[i] + s2.as_int[i];
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-paddsb-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-paddsb-1.c
new file mode 100644
index 00000000000..5722302095e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-paddsb-1.c
@@ -0,0 +1,51 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_adds_pi8 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i, tmp;
+
+ s1.as_m64 = _mm_set_pi8 (1, 2, 3, 4, 10, 20, 30, 90);
+ s2.as_m64 = _mm_set_pi8 (88, 44, 33, 22, 11, 98, 76, -100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 8; i++)
+ {
+ tmp = s1.as_signed_char[i] + s2.as_signed_char[i];
+
+ if (tmp > 127)
+ tmp = 127;
+ if (tmp < -128)
+ tmp = -128;
+
+ e.as_signed_char[i] = tmp;
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-paddsw-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-paddsw-1.c
new file mode 100644
index 00000000000..f7518b4dbae
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-paddsw-1.c
@@ -0,0 +1,51 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_adds_pi16 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i, tmp;
+
+ s1.as_m64 = _mm_set_pi16 (1, 2, 3, 4);
+ s2.as_m64 = _mm_set_pi16 (11, 98, 76, -100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 4; i++)
+ {
+ tmp = s1.as_short[i] + s2.as_short[i];
+
+ if (tmp > 32767)
+ tmp = 32767;
+ if (tmp < -32768)
+ tmp = -32768;
+
+ e.as_short[i] = tmp;
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-paddusb-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-paddusb-1.c
new file mode 100644
index 00000000000..a209e3e30dd
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-paddusb-1.c
@@ -0,0 +1,51 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_adds_pu8 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i, tmp;
+
+ s1.as_m64 = _mm_set_pi8 (30, 2, 3, 4, 10, 20, 30, 90);
+ s2.as_m64 = _mm_set_pi8 (88, 44, 33, 22, 11, 98, 76, 100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 8; i++)
+ {
+ tmp = s1.as_char[i] + s2.as_char[i];
+
+ if (tmp > 255)
+ tmp = -1;
+ if (tmp < 0)
+ tmp = 0;
+
+ e.as_char[i] = tmp;
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-paddusw-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-paddusw-1.c
new file mode 100644
index 00000000000..b46b7f636bb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-paddusw-1.c
@@ -0,0 +1,52 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_adds_pu16 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i, tmp;
+
+ s1.as_m64 = _mm_set_pi16 (1, 2, 3, 4);
+ s2.as_m64 = _mm_set_pi16 (11, 98, 76, 100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 4; i++)
+ {
+ tmp = (unsigned short)s1.as_short[i] + (unsigned short)s2.as_short[i];
+
+ if (tmp > 65535)
+ tmp = -1;
+
+ if (tmp < 0)
+ tmp = 0;
+
+ e.as_short[i] = tmp;
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-paddw-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-paddw-1.c
new file mode 100644
index 00000000000..748fe2b5703
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-paddw-1.c
@@ -0,0 +1,42 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_add_pi16 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_set_pi16 (10, 20, 30, 90);
+ s2.as_m64 = _mm_set_pi16 (11, 98, 76, -100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 4; i++)
+ e.as_short[i] = s1.as_short[i] + s2.as_short[i];
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-pcmpeqb-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-pcmpeqb-1.c
new file mode 100644
index 00000000000..c779b26e691
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-pcmpeqb-1.c
@@ -0,0 +1,42 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_cmpeq_pi8 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_set_pi8 (1, 2, 3, 4, 10, 20, 30, 90);
+ s2.as_m64 = _mm_set_pi8 (88, 44, 3, 22, 11, 98, 30, 100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 8; i++)
+ e.as_char[i] = (s1.as_char[i] == s2.as_char[i]) ? -1:0;
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-pcmpeqd-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-pcmpeqd-1.c
new file mode 100644
index 00000000000..a7807a2fdd9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-pcmpeqd-1.c
@@ -0,0 +1,42 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_cmpeq_pi32 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_set_pi32 (98, 25);
+ s2.as_m64 = _mm_set_pi32 (98, -100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 2; i++)
+ e.as_int[i] = (s1.as_int[i] == s2.as_int[i]) ? -1:0;
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-pcmpeqw-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-pcmpeqw-1.c
new file mode 100644
index 00000000000..e25fd54c6b5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-pcmpeqw-1.c
@@ -0,0 +1,42 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_cmpeq_pi16 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_set_pi16 (20, 30, 90, 80);
+ s2.as_m64 = _mm_set_pi16 (34, 78, 90, 6);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 4; i++)
+ e.as_short[i] = (s1.as_short[i] == s2.as_short[i]) ? -1:0;
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-pcmpgtb-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-pcmpgtb-1.c
new file mode 100644
index 00000000000..7f841b0b26e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-pcmpgtb-1.c
@@ -0,0 +1,42 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_cmpgt_pi8 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_set_pi8 (1, 2, 3, 4, 10, 20, 30, 90);
+ s2.as_m64 = _mm_set_pi8 (88, 44, 3, 22, 11, 98, 28, 100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 8; i++)
+ e.as_char[i] = (s1.as_char[i] > s2.as_char[i]) ? -1 : 0;
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-pcmpgtd-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-pcmpgtd-1.c
new file mode 100644
index 00000000000..9f503b5ec9e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-pcmpgtd-1.c
@@ -0,0 +1,42 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_cmpgt_pi32 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_set_pi32 (99, 25);
+ s2.as_m64 = _mm_set_pi32 (98, -100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 2; i++)
+ e.as_int[i] = (s1.as_int[i] > s2.as_int[i]) ? -1:0;
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-pcmpgtw-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-pcmpgtw-1.c
new file mode 100644
index 00000000000..85716937e0d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-pcmpgtw-1.c
@@ -0,0 +1,42 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_cmpgt_pi16 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_set_pi16 (20, 30, 90, 80);
+ s2.as_m64 = _mm_set_pi16 (34, 78, 90, 6);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 4; i++)
+ e.as_short[i] = (s1.as_short[i] > s2.as_short[i]) ? -1:0;
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-pmaddwd-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-pmaddwd-1.c
new file mode 100644
index 00000000000..220b4f65209
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-pmaddwd-1.c
@@ -0,0 +1,43 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_madd_pi16 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_set_pi16 (2134, 3334, 1234, 6354);
+ s2.as_m64 = _mm_set_pi16 (1, 3, 4, 5);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 2; i++)
+ e.as_int[i] = (s1.as_short[i * 2] * s2.as_short[i * 2])
+ + (s1.as_short[(i * 2) + 1] * s2.as_short[(i * 2) + 1]);
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-pmulhw-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-pmulhw-1.c
new file mode 100644
index 00000000000..79b7c7b1838
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-pmulhw-1.c
@@ -0,0 +1,46 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_mulhi_pi16 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i, tmp;
+
+ s1.as_m64 = _mm_set_pi16 (10, 2067, -3033, 90);
+ s2.as_m64 = _mm_set_pi16 (11, 9834, 7444, -10222);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 4; i++)
+ {
+ tmp = s1.as_short[i] * s2.as_short[i];
+
+ e.as_short[i] = (tmp & 0xffff0000)>>16;
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-pmullw-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-pmullw-1.c
new file mode 100644
index 00000000000..6d041691772
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-pmullw-1.c
@@ -0,0 +1,46 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_mullo_pi16 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i, tmp;
+
+ s1.as_m64 = _mm_set_pi16 (10, 2067, -3033, 90);
+ s2.as_m64 = _mm_set_pi16 (11, 9834, 7444, -10222);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 4; i++)
+ {
+ tmp = s1.as_short[i] * s2.as_short[i];
+
+ e.as_short[i] = tmp;
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-pslld-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-pslld-1.c
new file mode 100644
index 00000000000..af687cd1e96
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-pslld-1.c
@@ -0,0 +1,45 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#define N 0xb
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1)
+{
+ return _mm_sll_pi32 (s1, N);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_setr_pi32 (1, -2);
+ u.as_m64 = test (s1.as_m64);
+
+
+ if (N < 16)
+ for (i = 0; i < 2; i++)
+ e.as_int[i] = s1.as_int[i] << N;
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-psllw-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-psllw-1.c
new file mode 100644
index 00000000000..415f6a84176
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-psllw-1.c
@@ -0,0 +1,45 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#define N 0xb
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1)
+{
+ return _mm_sll_pi16 (s1, N);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_setr_pi16 (1, 2, 0x7000, 0x9000);
+ u.as_m64 = test (s1.as_m64);
+
+
+ if (N < 16)
+ for (i = 0; i < 4; i++)
+ e.as_short[i] = s1.as_short[i] << N;
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-psrad-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-psrad-1.c
new file mode 100644
index 00000000000..eaaf214292e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-psrad-1.c
@@ -0,0 +1,44 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#define N 0xb
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1)
+{
+ return _mm_sra_pi32 (s1, N);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_setr_pi32 (1000, -20000);
+ u.as_m64 = test (s1.as_m64);
+
+ if (N < 16)
+ for (i = 0; i < 2; i++)
+ e.as_int[i] = s1.as_int[i] >> N;
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-psraw-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-psraw-1.c
new file mode 100644
index 00000000000..eb7c3aec150
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-psraw-1.c
@@ -0,0 +1,44 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#define N 0xb
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1)
+{
+ return _mm_sra_pi16 (s1, N);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_setr_pi16 (1, -2, 0x7000, 0x9000);
+ u.as_m64 = test (s1.as_m64);
+
+ if (N < 16)
+ for (i = 0; i < 4; i++)
+ e.as_short[i] = s1.as_short[i] >> N;
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-psrld-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-psrld-1.c
new file mode 100644
index 00000000000..1eb9d2897a7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-psrld-1.c
@@ -0,0 +1,44 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#define N 0xb
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1)
+{
+ return _mm_srl_pi32 (s1, N);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_setr_pi32 (1000, -20000);
+ u.as_m64 = test (s1.as_m64);
+
+ if (N < 16)
+ for (i = 0; i < 2; i++)
+ e.as_int[i] = (unsigned int)s1.as_int[i] >> N;
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-psrlw-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-psrlw-1.c
new file mode 100644
index 00000000000..d066159e8eb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-psrlw-1.c
@@ -0,0 +1,44 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#define N 0xb
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1)
+{
+ return _mm_srl_pi16 (s1, N);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_setr_pi16 (1, -2, 0x7000, 0x9000);
+ u.as_m64 = test (s1.as_m64);
+
+ if (N < 16)
+ for (i = 0; i < 4; i++)
+ e.as_short[i] = (unsigned short)s1.as_short[i] >> N;
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-psubb-2.c b/gcc/testsuite/gcc.target/powerpc/mmx-psubb-2.c
new file mode 100644
index 00000000000..c64204afa41
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-psubb-2.c
@@ -0,0 +1,42 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_sub_pi8 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_set_pi8 (1, 2, 3, 4, 10, 20, 30, 90);
+ s2.as_m64 = _mm_set_pi8 (88, 44, 3, 22, 11, 98, 76, -100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 8; i++)
+ e.as_char[i] = s1.as_char[i] - s2.as_char[i];
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-psubd-2.c b/gcc/testsuite/gcc.target/powerpc/mmx-psubd-2.c
new file mode 100644
index 00000000000..3260f611748
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-psubd-2.c
@@ -0,0 +1,42 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_sub_pi32 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_setr_pi32 (30, 90);
+ s2.as_m64 = _mm_setr_pi32 (76, -100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 2; i++)
+ e.as_int[i] = s1.as_int[i] - s2.as_int[i];
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-psubsb-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-psubsb-1.c
new file mode 100644
index 00000000000..3f0fb2af899
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-psubsb-1.c
@@ -0,0 +1,51 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_subs_pi8 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i, tmp;
+
+ s1.as_m64 = _mm_set_pi8 (1, 2, 3, 4, 10, 20, 30, 90);
+ s2.as_m64 = _mm_set_pi8 (88, 44, 3, 22, 11, 98, 76, -100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 8; i++)
+ {
+ tmp = s1.as_signed_char[i] - s2.as_signed_char[i];
+
+ if (tmp > 127)
+ tmp = 127;
+ if (tmp < -128)
+ tmp = -128;
+
+ e.as_signed_char[i] = tmp;
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-psubsw-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-psubsw-1.c
new file mode 100644
index 00000000000..ae819e19c25
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-psubsw-1.c
@@ -0,0 +1,51 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_subs_pi16 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i, tmp;
+
+ s1.as_m64 = _mm_set_pi16 (10, 20, 30, 00);
+ s2.as_m64 = _mm_set_pi16 (11, 98, 76, -100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 4; i++)
+ {
+ tmp = s1.as_short[i] - s2.as_short[i];
+
+ if (tmp > 32767)
+ tmp = 32767;
+ if (tmp < -32768)
+ tmp = -32768;
+
+ e.as_short[i] = tmp;
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-psubusb-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-psubusb-1.c
new file mode 100644
index 00000000000..bbdc0977109
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-psubusb-1.c
@@ -0,0 +1,51 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_subs_pu8 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i, tmp;
+
+ s1.as_m64 = _mm_set_pi8 (30, 2, 3, 4, 10, 20, 30, 90);
+ s2.as_m64 = _mm_set_pi8 (88, 44, 3, 22, 11, 98, 76, 100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 8; i++)
+ {
+ tmp = s1.as_char[i] - s2.as_char[i];
+
+ if (tmp > 255)
+ tmp = -1;
+ if (tmp < 0)
+ tmp = 0;
+
+ e.as_char[i] = tmp;
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-psubusw-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-psubusw-1.c
new file mode 100644
index 00000000000..e26c380daee
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-psubusw-1.c
@@ -0,0 +1,52 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_subs_pu16 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i, tmp;
+
+ s1.as_m64 = _mm_set_pi16 (10, 20, 30, 40);
+ s2.as_m64 = _mm_set_pi16 (11, 98, 76, 100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 4; i++)
+ {
+ tmp = (unsigned short)s1.as_short[i] - (unsigned short)s2.as_short[i];
+
+ if (tmp > 65535)
+ tmp = -1;
+
+ if (tmp < 0)
+ tmp = 0;
+
+ e.as_short[i] = tmp;
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-psubw-2.c b/gcc/testsuite/gcc.target/powerpc/mmx-psubw-2.c
new file mode 100644
index 00000000000..39e4cdea04a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-psubw-2.c
@@ -0,0 +1,42 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_sub_pi16 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2;
+ __m64_union e;
+ int i;
+
+ s1.as_m64 = _mm_set_pi16 (10, 20, 30, 90);
+ s2.as_m64 = _mm_set_pi16 (11, 98, 76, -100);
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 4; i++)
+ e.as_short[i] = s1.as_short[i] - s2.as_short[i];
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-punpckhbw-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-punpckhbw-1.c
new file mode 100644
index 00000000000..dba56ca205b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-punpckhbw-1.c
@@ -0,0 +1,44 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_unpackhi_pi8 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2, e;
+ int i;
+
+ s1.as_m64 = 0x0706050403020100UL;
+ s2.as_m64 = 0x1716151413121110UL;
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 4; i++)
+ {
+ e.as_char[2*i] = s1.as_char[4+i];
+ e.as_char[2*i + 1] = s2.as_char[4+i];
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-punpckhdq-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-punpckhdq-1.c
new file mode 100644
index 00000000000..f2f53c434c5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-punpckhdq-1.c
@@ -0,0 +1,40 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_unpackhi_pi32 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2, e;
+
+ s1.as_m64 = 0x0706050403020100UL;
+ s2.as_m64 = 0x1716151413121110UL;
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ e.as_int[0] = s1.as_int[1];
+ e.as_int[1] = s2.as_int[1];
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-punpckhwd-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-punpckhwd-1.c
new file mode 100644
index 00000000000..f0264463a81
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-punpckhwd-1.c
@@ -0,0 +1,44 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_unpackhi_pi16 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2, e;
+ int i;
+
+ s1.as_m64 = 0x0706050403020100UL;
+ s2.as_m64 = 0x1716151413121110UL;
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 2; i++)
+ {
+ e.as_short[2*i] = s1.as_short[2+i];
+ e.as_short[2*i + 1] = s2.as_short[2+i];
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-punpcklbw-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-punpcklbw-1.c
new file mode 100644
index 00000000000..36cf241ab19
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-punpcklbw-1.c
@@ -0,0 +1,44 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_unpacklo_pi8 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2, e;
+ int i;
+
+ s1.as_m64 = 0x0706050403020100UL;
+ s2.as_m64 = 0x1716151413121110UL;
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 4; i++)
+ {
+ e.as_char[2*i] = s1.as_char[i];
+ e.as_char[2*i + 1] = s2.as_char[i];
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-punpckldq-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-punpckldq-1.c
new file mode 100644
index 00000000000..8fb0251560a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-punpckldq-1.c
@@ -0,0 +1,40 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_unpacklo_pi32 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2, e;
+
+ s1.as_m64 = 0x0706050403020100UL;
+ s2.as_m64 = 0x1716151413121110UL;
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ e.as_int[0] = s1.as_int[0];
+ e.as_int[1] = s2.as_int[0];
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mmx-punpcklwd-1.c b/gcc/testsuite/gcc.target/powerpc/mmx-punpcklwd-1.c
new file mode 100644
index 00000000000..37b6b6ff8c6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmx-punpcklwd-1.c
@@ -0,0 +1,44 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mpower8-vector" } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target p8vector_hw } */
+
+#define NO_WARN_X86_INTRINSICS 1
+#ifndef CHECK_H
+#define CHECK_H "mmx-check.h"
+#endif
+
+#ifndef TEST
+#define TEST mmx_test
+#endif
+
+#include CHECK_H
+
+#include <mmintrin.h>
+
+static __m64
+__attribute__((noinline, unused))
+test (__m64 s1, __m64 s2)
+{
+ return _mm_unpacklo_pi16 (s1, s2);
+}
+
+static void
+TEST (void)
+{
+ __m64_union u, s1, s2, e;
+ int i;
+
+ s1.as_m64 = 0x0706050403020100UL;
+ s2.as_m64 = 0x1716151413121110UL;
+ u.as_m64 = test (s1.as_m64, s2.as_m64);
+
+ for (i = 0; i < 2; i++)
+ {
+ e.as_short[2*i] = s1.as_short[i];
+ e.as_short[2*i + 1] = s2.as_short[i];
+ }
+
+ if (u.as_m64 != e.as_m64)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-fp.c b/gcc/testsuite/gcc.target/powerpc/p8vector-fp.c
index 17b73bbc7b3..7b30e4c4e23 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-fp.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-fp.c
@@ -2,7 +2,7 @@
/* { 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 -mupper-regs-df -mupper-regs-sf -fno-math-errno" } */
+/* { dg-options "-mcpu=power8 -O2 -fno-math-errno" } */
float abs_sf (float *p)
{
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c b/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c
index 23663b96da6..992ed225d5f 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c
@@ -2,7 +2,7 @@
/* { 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 -O3 -mvsx-timode -mlra" } */
+/* { dg-options "-mcpu=power8 -O3 -mvsx-timode" } */
#include <altivec.h>
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c b/gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c
index 58e1f4485be..e683d614d62 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c
@@ -2,7 +2,7 @@
/* { 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 -mupper-regs-df -mupper-regs-sf" } */
+/* { dg-options "-mcpu=power8 -O2" } */
float
load_store_sf (unsigned long num,
diff --git a/gcc/testsuite/gcc.target/powerpc/p9-dimode1.c b/gcc/testsuite/gcc.target/powerpc/p9-dimode1.c
index c29b69d3e9e..64f0e31fb00 100644
--- a/gcc/testsuite/gcc.target/powerpc/p9-dimode1.c
+++ b/gcc/testsuite/gcc.target/powerpc/p9-dimode1.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
-/* { dg-options "-mcpu=power9 -O2 -mupper-regs-di" } */
+/* { dg-options "-mcpu=power9 -O2" } */
/* Verify P9 changes to allow DImode into Altivec registers, and generate
constants using XXSPLTIB. */
@@ -43,8 +43,8 @@ p9_minus_1 (void)
return ret;
}
-/* { dg-final { scan-assembler "\[ \t\]xxspltib" } } */
-/* { dg-final { scan-assembler-not "\[ \t\]mtvsrd" } } */
-/* { dg-final { scan-assembler-not "\[ \t\]lfd" } } */
-/* { dg-final { scan-assembler-not "\[ \t\]ld" } } */
-/* { dg-final { scan-assembler-not "\[ \t\]lxsd" } } */
+/* { dg-final { scan-assembler {\mxxspltib\M} } } */
+/* { dg-final { scan-assembler-not {\mmtvsrd\M} } } */
+/* { dg-final { scan-assembler-not {\mlfd\M} } } */
+/* { dg-final { scan-assembler-not {\mld\M} } } */
+/* { dg-final { scan-assembler-not {\mlxsd\M} } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p9-dimode2.c b/gcc/testsuite/gcc.target/powerpc/p9-dimode2.c
index f33d18c6078..9e27936d748 100644
--- a/gcc/testsuite/gcc.target/powerpc/p9-dimode2.c
+++ b/gcc/testsuite/gcc.target/powerpc/p9-dimode2.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
-/* { dg-options "-mcpu=power9 -O2 -mupper-regs-di" } */
+/* { dg-options "-mcpu=power9 -O2" } */
/* Verify that large integer constants are loaded via direct move instead of being
loaded from memory. */
@@ -21,7 +21,7 @@ p9_large (void)
return ret;
}
-/* { dg-final { scan-assembler "\[ \t\]mtvsrd" } } */
-/* { dg-final { scan-assembler-not "\[ \t\]ld" } } */
-/* { dg-final { scan-assembler-not "\[ \t\]lfd" } } */
-/* { dg-final { scan-assembler-not "\[ \t\]lxsd" } } */
+/* { dg-final { scan-assembler {\mmtvsrd\M} } } */
+/* { dg-final { scan-assembler-not {\mld\M} } } */
+/* { dg-final { scan-assembler-not {\mlfd\M} } } */
+/* { dg-final { scan-assembler-not {\mlxsd\M} } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p9-vparity.c b/gcc/testsuite/gcc.target/powerpc/p9-vparity.c
index af5b5905a6f..6e49606fe0b 100644
--- a/gcc/testsuite/gcc.target/powerpc/p9-vparity.c
+++ b/gcc/testsuite/gcc.target/powerpc/p9-vparity.c
@@ -2,7 +2,7 @@
/* { 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 -mlra -mvsx-timode" } */
+/* { dg-options "-mcpu=power9 -O2 -mvsx-timode" } */
#include <altivec.h>
diff --git a/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-1.c b/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-1.c
index 2efa952a239..de508b784c9 100644
--- a/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-1.c
@@ -2,15 +2,13 @@
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
-/* { dg-options "-O2 -mcpu=power7 -ffast-math -mno-upper-regs-df" } */
-/* { dg-final { scan-assembler-times "lfiwax" 2 } } */
-/* { dg-final { scan-assembler-times "lfiwzx" 2 } } */
-/* { dg-final { scan-assembler-times "fcfids " 3 } } */
-/* { dg-final { scan-assembler-times "fcfidus " 1 } } */
-/* { dg-final { scan-assembler-times "fcfid " 3 } } */
-/* { dg-final { scan-assembler-times "fcfidu " 1 } } */
-/* { dg-final { scan-assembler-not "xscvdpsxds" } } */
-/* { dg-final { scan-assembler-not "xscvdpuxds" } } */
+/* { dg-options "-O2 -mcpu=power7 -ffast-math" } */
+/* { dg-final { scan-assembler-times {\mlfiwax\M|\mlxsiwax\M} 2 } } */
+/* { dg-final { scan-assembler-times {\mlfiwzx\M|\mlxsiwzx\M} 2 } } */
+/* { dg-final { scan-assembler-times {\mfcfids\M|\mxscvsxdsp\M} 3 } } */
+/* { dg-final { scan-assembler-times {\mfcfidus\M|\mxscvuxdsp\M} 1 } } */
+/* { dg-final { scan-assembler-times {\mfcfid\M|\mxscvsxddp\M} 3 } } */
+/* { dg-final { scan-assembler-times {\mfcfidu\M|\mxscvuxddp\M} 1 } } */
void int_to_float (float *dest, int *src)
{
diff --git a/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-10.c b/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-10.c
index 9e192d13398..cb6dea41b06 100644
--- a/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-10.c
+++ b/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-10.c
@@ -2,8 +2,8 @@
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
-/* { dg-options "-O2 -mcpu=power7 -ffast-math -mno-upper-regs-df" } */
-/* { dg-final { scan-assembler "friz" } } */
+/* { dg-options "-O2 -mcpu=power7 -ffast-math" } */
+/* { dg-final { scan-assembler {\mfriz\M|\mxsrdpiz\M} } } */
double round_double_llong (double a)
{
diff --git a/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-5.c b/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-5.c
index b59cac3a5bb..6bffa164fcd 100644
--- a/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-5.c
+++ b/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-5.c
@@ -2,13 +2,11 @@
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
-/* { dg-options "-O3 -mcpu=power7 -ffast-math -mno-upper-regs-df" } */
-/* { dg-final { scan-assembler-times "fctiwz " 2 } } */
-/* { dg-final { scan-assembler-times "fctiwuz " 2 } } */
-/* { dg-final { scan-assembler-times "fctidz " 2 } } */
-/* { dg-final { scan-assembler-times "fctiduz " 2 } } */
-/* { dg-final { scan-assembler-not "xscvdpsxds" } } */
-/* { dg-final { scan-assembler-not "xscvdpuxds" } } */
+/* { dg-options "-O3 -mcpu=power7 -ffast-math" } */
+/* { dg-final { scan-assembler-times {\mfctiwz\M|\mxscvdpsxws\M} 2 } } */
+/* { dg-final { scan-assembler-times {\mfctiwuz\M|\mxscvdpuxws\M} 2 } } */
+/* { dg-final { scan-assembler-times {\mfctidz\M|\mxscvdpsxds\M} 2 } } */
+/* { dg-final { scan-assembler-times {\mfctiduz\M|\mxscvdpuxds\M} 2 } } */
void float_to_int (int *dest, float src) { *dest = (int) src; }
void double_to_int (int *dest, double src) { *dest = (int) src; }
diff --git a/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-9.c b/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-9.c
index 372b2334686..d376936a750 100644
--- a/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-9.c
+++ b/gcc/testsuite/gcc.target/powerpc/ppc-fpconv-9.c
@@ -2,12 +2,12 @@
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
-/* { dg-options "-O3 -mcpu=power7 -ffast-math -mno-upper-regs-df" } */
-/* { dg-final { scan-assembler-times "fctidz" 2 } } */
-/* { dg-final { scan-assembler-not "lwz" } } */
-/* { dg-final { scan-assembler-not "stw" } } */
-/* { dg-final { scan-assembler-not "ld " } } */
-/* { dg-final { scan-assembler-not "std" } } */
+/* { dg-options "-O3 -mcpu=power7 -ffast-math" } */
+/* { dg-final { scan-assembler-times {\mfctidz\M|\mxscvdpsxds\M} 2 } } */
+/* { dg-final { scan-assembler-not {\mlwz\M} } } */
+/* { dg-final { scan-assembler-not {\mstw\M} } } */
+/* { dg-final { scan-assembler-not {\mld\M} } } */
+/* { dg-final { scan-assembler-not {\mstd\M} } } */
void float_to_llong (long long *dest, float src) { *dest = (long long) src; }
void double_to_llong (long long *dest, double src) { *dest = (long long) src; }
diff --git a/gcc/testsuite/gcc.target/powerpc/ppc-round.c b/gcc/testsuite/gcc.target/powerpc/ppc-round.c
index 0cfa0da2a72..50ab078f55a 100644
--- a/gcc/testsuite/gcc.target/powerpc/ppc-round.c
+++ b/gcc/testsuite/gcc.target/powerpc/ppc-round.c
@@ -2,15 +2,15 @@
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
-/* { dg-options "-O2 -mcpu=power7 -mno-upper-regs-df" } */
-/* { dg-final { scan-assembler-times "stfiwx" 4 } } */
-/* { dg-final { scan-assembler-times "lfiwax" 2 } } */
-/* { dg-final { scan-assembler-times "lfiwzx" 2 } } */
-/* { dg-final { scan-assembler-times "fctiwz " 2 } } */
-/* { dg-final { scan-assembler-times "fctiwuz " 2 } } */
-/* { dg-final { scan-assembler-times "fcfids " 2 } } */
-/* { dg-final { scan-assembler-not "lwz" } } */
-/* { dg-final { scan-assembler-not "stw" } } */
+/* { dg-options "-O2 -mcpu=power7" } */
+/* { dg-final { scan-assembler-times {\mstfiwx\M|\mstxsiwx\M} 4 } } */
+/* { dg-final { scan-assembler-times {\mlfiwax\M|\mlxsiwax\M} 2 } } */
+/* { dg-final { scan-assembler-times {\mlfiwzx\M|\mlxsiwzx\M} 2 } } */
+/* { dg-final { scan-assembler-times {\mfctiwz\M|\mxscvdpsxws\M} 2 } } */
+/* { dg-final { scan-assembler-times {\mfctiwuz\M|\mxscvdpuxws\M} 2 } } */
+/* { dg-final { scan-assembler-times {\mfcfids\M|\mxscvsxdsp\M} 2 } } */
+/* { dg-final { scan-assembler-not {\mlwz\M} } } */
+/* { dg-final { scan-assembler-not {\mstw\M} } } */
/* Make sure we don't have loads/stores to the GPR unit. */
double
diff --git a/gcc/testsuite/gcc.target/powerpc/pr63491.c b/gcc/testsuite/gcc.target/powerpc/pr63491.c
index a1518912308..be6a40eb32d 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr63491.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr63491.c
@@ -1,5 +1,5 @@
/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
-/* { dg-options "-O1 -mcpu=power8 -mlra" } */
+/* { dg-options "-O1 -mcpu=power8" } */
typedef __int128_t __attribute__((__vector_size__(16))) vector_128_t;
typedef unsigned long long scalar_64_t;
diff --git a/gcc/testsuite/gcc.target/powerpc/pr65849-1.c b/gcc/testsuite/gcc.target/powerpc/pr65849-1.c
deleted file mode 100644
index 288fdeed2ca..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/pr65849-1.c
+++ /dev/null
@@ -1,728 +0,0 @@
-/* { dg-do compile { target { powerpc*-*-* } } } */
-/* { dg-require-effective-target powerpc_vsx_ok } */
-/* { dg-skip-if "" { powerpc*-*-darwin* } } */
-/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
-/* { dg-options "-mcpu=power7 -O2 -mno-upper-regs-df" } */
-
-/* Test whether we can enable the -mupper-regs-df with target pragmas. Make
- sure double values are allocated to the Altivec registers as well as the
- traditional FPR registers. */
-
-#ifndef TYPE
-#define TYPE double
-#endif
-
-#ifndef MASK_TYPE
-#define MASK_TYPE unsigned long long
-#endif
-
-#define MASK_ONE ((MASK_TYPE)1)
-#define ZERO ((TYPE) 0.0)
-
-#pragma GCC target ("upper-regs-df")
-TYPE
-test_add (const MASK_TYPE *add_mask, const TYPE *add_values,
- const MASK_TYPE *sub_mask, const TYPE *sub_values,
- const MASK_TYPE *mul_mask, const TYPE *mul_values,
- const MASK_TYPE *div_mask, const TYPE *div_values,
- const MASK_TYPE *eq0_mask, int *eq0_ptr)
-{
- TYPE value;
- TYPE value00 = ZERO;
- TYPE value01 = ZERO;
- TYPE value02 = ZERO;
- TYPE value03 = ZERO;
- TYPE value04 = ZERO;
- TYPE value05 = ZERO;
- TYPE value06 = ZERO;
- TYPE value07 = ZERO;
- TYPE value08 = ZERO;
- TYPE value09 = ZERO;
- TYPE value10 = ZERO;
- TYPE value11 = ZERO;
- TYPE value12 = ZERO;
- TYPE value13 = ZERO;
- TYPE value14 = ZERO;
- TYPE value15 = ZERO;
- TYPE value16 = ZERO;
- TYPE value17 = ZERO;
- TYPE value18 = ZERO;
- TYPE value19 = ZERO;
- TYPE value20 = ZERO;
- TYPE value21 = ZERO;
- TYPE value22 = ZERO;
- TYPE value23 = ZERO;
- TYPE value24 = ZERO;
- TYPE value25 = ZERO;
- TYPE value26 = ZERO;
- TYPE value27 = ZERO;
- TYPE value28 = ZERO;
- TYPE value29 = ZERO;
- TYPE value30 = ZERO;
- TYPE value31 = ZERO;
- TYPE value32 = ZERO;
- TYPE value33 = ZERO;
- TYPE value34 = ZERO;
- TYPE value35 = ZERO;
- TYPE value36 = ZERO;
- TYPE value37 = ZERO;
- TYPE value38 = ZERO;
- TYPE value39 = ZERO;
- MASK_TYPE mask;
- int eq0;
-
- while ((mask = *add_mask++) != 0)
- {
- value = *add_values++;
-
- __asm__ (" #reg %0" : "+d" (value));
-
- if ((mask & (MASK_ONE << 0)) != 0)
- value00 += value;
-
- if ((mask & (MASK_ONE << 1)) != 0)
- value01 += value;
-
- if ((mask & (MASK_ONE << 2)) != 0)
- value02 += value;
-
- if ((mask & (MASK_ONE << 3)) != 0)
- value03 += value;
-
- if ((mask & (MASK_ONE << 4)) != 0)
- value04 += value;
-
- if ((mask & (MASK_ONE << 5)) != 0)
- value05 += value;
-
- if ((mask & (MASK_ONE << 6)) != 0)
- value06 += value;
-
- if ((mask & (MASK_ONE << 7)) != 0)
- value07 += value;
-
- if ((mask & (MASK_ONE << 8)) != 0)
- value08 += value;
-
- if ((mask & (MASK_ONE << 9)) != 0)
- value09 += value;
-
- if ((mask & (MASK_ONE << 10)) != 0)
- value10 += value;
-
- if ((mask & (MASK_ONE << 11)) != 0)
- value11 += value;
-
- if ((mask & (MASK_ONE << 12)) != 0)
- value12 += value;
-
- if ((mask & (MASK_ONE << 13)) != 0)
- value13 += value;
-
- if ((mask & (MASK_ONE << 14)) != 0)
- value14 += value;
-
- if ((mask & (MASK_ONE << 15)) != 0)
- value15 += value;
-
- if ((mask & (MASK_ONE << 16)) != 0)
- value16 += value;
-
- if ((mask & (MASK_ONE << 17)) != 0)
- value17 += value;
-
- if ((mask & (MASK_ONE << 18)) != 0)
- value18 += value;
-
- if ((mask & (MASK_ONE << 19)) != 0)
- value19 += value;
-
- if ((mask & (MASK_ONE << 20)) != 0)
- value20 += value;
-
- if ((mask & (MASK_ONE << 21)) != 0)
- value21 += value;
-
- if ((mask & (MASK_ONE << 22)) != 0)
- value22 += value;
-
- if ((mask & (MASK_ONE << 23)) != 0)
- value23 += value;
-
- if ((mask & (MASK_ONE << 24)) != 0)
- value24 += value;
-
- if ((mask & (MASK_ONE << 25)) != 0)
- value25 += value;
-
- if ((mask & (MASK_ONE << 26)) != 0)
- value26 += value;
-
- if ((mask & (MASK_ONE << 27)) != 0)
- value27 += value;
-
- if ((mask & (MASK_ONE << 28)) != 0)
- value28 += value;
-
- if ((mask & (MASK_ONE << 29)) != 0)
- value29 += value;
-
- if ((mask & (MASK_ONE << 30)) != 0)
- value30 += value;
-
- if ((mask & (MASK_ONE << 31)) != 0)
- value31 += value;
-
- if ((mask & (MASK_ONE << 32)) != 0)
- value32 += value;
-
- if ((mask & (MASK_ONE << 33)) != 0)
- value33 += value;
-
- if ((mask & (MASK_ONE << 34)) != 0)
- value34 += value;
-
- if ((mask & (MASK_ONE << 35)) != 0)
- value35 += value;
-
- if ((mask & (MASK_ONE << 36)) != 0)
- value36 += value;
-
- if ((mask & (MASK_ONE << 37)) != 0)
- value37 += value;
-
- if ((mask & (MASK_ONE << 38)) != 0)
- value38 += value;
-
- if ((mask & (MASK_ONE << 39)) != 0)
- value39 += value;
- }
-
- while ((mask = *sub_mask++) != 0)
- {
- value = *sub_values++;
-
- __asm__ (" #reg %0" : "+d" (value));
-
- if ((mask & (MASK_ONE << 0)) != 0)
- value00 -= value;
-
- if ((mask & (MASK_ONE << 1)) != 0)
- value01 -= value;
-
- if ((mask & (MASK_ONE << 2)) != 0)
- value02 -= value;
-
- if ((mask & (MASK_ONE << 3)) != 0)
- value03 -= value;
-
- if ((mask & (MASK_ONE << 4)) != 0)
- value04 -= value;
-
- if ((mask & (MASK_ONE << 5)) != 0)
- value05 -= value;
-
- if ((mask & (MASK_ONE << 6)) != 0)
- value06 -= value;
-
- if ((mask & (MASK_ONE << 7)) != 0)
- value07 -= value;
-
- if ((mask & (MASK_ONE << 8)) != 0)
- value08 -= value;
-
- if ((mask & (MASK_ONE << 9)) != 0)
- value09 -= value;
-
- if ((mask & (MASK_ONE << 10)) != 0)
- value10 -= value;
-
- if ((mask & (MASK_ONE << 11)) != 0)
- value11 -= value;
-
- if ((mask & (MASK_ONE << 12)) != 0)
- value12 -= value;
-
- if ((mask & (MASK_ONE << 13)) != 0)
- value13 -= value;
-
- if ((mask & (MASK_ONE << 14)) != 0)
- value14 -= value;
-
- if ((mask & (MASK_ONE << 15)) != 0)
- value15 -= value;
-
- if ((mask & (MASK_ONE << 16)) != 0)
- value16 -= value;
-
- if ((mask & (MASK_ONE << 17)) != 0)
- value17 -= value;
-
- if ((mask & (MASK_ONE << 18)) != 0)
- value18 -= value;
-
- if ((mask & (MASK_ONE << 19)) != 0)
- value19 -= value;
-
- if ((mask & (MASK_ONE << 20)) != 0)
- value20 -= value;
-
- if ((mask & (MASK_ONE << 21)) != 0)
- value21 -= value;
-
- if ((mask & (MASK_ONE << 22)) != 0)
- value22 -= value;
-
- if ((mask & (MASK_ONE << 23)) != 0)
- value23 -= value;
-
- if ((mask & (MASK_ONE << 24)) != 0)
- value24 -= value;
-
- if ((mask & (MASK_ONE << 25)) != 0)
- value25 -= value;
-
- if ((mask & (MASK_ONE << 26)) != 0)
- value26 -= value;
-
- if ((mask & (MASK_ONE << 27)) != 0)
- value27 -= value;
-
- if ((mask & (MASK_ONE << 28)) != 0)
- value28 -= value;
-
- if ((mask & (MASK_ONE << 29)) != 0)
- value29 -= value;
-
- if ((mask & (MASK_ONE << 30)) != 0)
- value30 -= value;
-
- if ((mask & (MASK_ONE << 31)) != 0)
- value31 -= value;
-
- if ((mask & (MASK_ONE << 32)) != 0)
- value32 -= value;
-
- if ((mask & (MASK_ONE << 33)) != 0)
- value33 -= value;
-
- if ((mask & (MASK_ONE << 34)) != 0)
- value34 -= value;
-
- if ((mask & (MASK_ONE << 35)) != 0)
- value35 -= value;
-
- if ((mask & (MASK_ONE << 36)) != 0)
- value36 -= value;
-
- if ((mask & (MASK_ONE << 37)) != 0)
- value37 -= value;
-
- if ((mask & (MASK_ONE << 38)) != 0)
- value38 -= value;
-
- if ((mask & (MASK_ONE << 39)) != 0)
- value39 -= value;
- }
-
- while ((mask = *mul_mask++) != 0)
- {
- value = *mul_values++;
-
- __asm__ (" #reg %0" : "+d" (value));
-
- if ((mask & (MASK_ONE << 0)) != 0)
- value00 *= value;
-
- if ((mask & (MASK_ONE << 1)) != 0)
- value01 *= value;
-
- if ((mask & (MASK_ONE << 2)) != 0)
- value02 *= value;
-
- if ((mask & (MASK_ONE << 3)) != 0)
- value03 *= value;
-
- if ((mask & (MASK_ONE << 4)) != 0)
- value04 *= value;
-
- if ((mask & (MASK_ONE << 5)) != 0)
- value05 *= value;
-
- if ((mask & (MASK_ONE << 6)) != 0)
- value06 *= value;
-
- if ((mask & (MASK_ONE << 7)) != 0)
- value07 *= value;
-
- if ((mask & (MASK_ONE << 8)) != 0)
- value08 *= value;
-
- if ((mask & (MASK_ONE << 9)) != 0)
- value09 *= value;
-
- if ((mask & (MASK_ONE << 10)) != 0)
- value10 *= value;
-
- if ((mask & (MASK_ONE << 11)) != 0)
- value11 *= value;
-
- if ((mask & (MASK_ONE << 12)) != 0)
- value12 *= value;
-
- if ((mask & (MASK_ONE << 13)) != 0)
- value13 *= value;
-
- if ((mask & (MASK_ONE << 14)) != 0)
- value14 *= value;
-
- if ((mask & (MASK_ONE << 15)) != 0)
- value15 *= value;
-
- if ((mask & (MASK_ONE << 16)) != 0)
- value16 *= value;
-
- if ((mask & (MASK_ONE << 17)) != 0)
- value17 *= value;
-
- if ((mask & (MASK_ONE << 18)) != 0)
- value18 *= value;
-
- if ((mask & (MASK_ONE << 19)) != 0)
- value19 *= value;
-
- if ((mask & (MASK_ONE << 20)) != 0)
- value20 *= value;
-
- if ((mask & (MASK_ONE << 21)) != 0)
- value21 *= value;
-
- if ((mask & (MASK_ONE << 22)) != 0)
- value22 *= value;
-
- if ((mask & (MASK_ONE << 23)) != 0)
- value23 *= value;
-
- if ((mask & (MASK_ONE << 24)) != 0)
- value24 *= value;
-
- if ((mask & (MASK_ONE << 25)) != 0)
- value25 *= value;
-
- if ((mask & (MASK_ONE << 26)) != 0)
- value26 *= value;
-
- if ((mask & (MASK_ONE << 27)) != 0)
- value27 *= value;
-
- if ((mask & (MASK_ONE << 28)) != 0)
- value28 *= value;
-
- if ((mask & (MASK_ONE << 29)) != 0)
- value29 *= value;
-
- if ((mask & (MASK_ONE << 30)) != 0)
- value30 *= value;
-
- if ((mask & (MASK_ONE << 31)) != 0)
- value31 *= value;
-
- if ((mask & (MASK_ONE << 32)) != 0)
- value32 *= value;
-
- if ((mask & (MASK_ONE << 33)) != 0)
- value33 *= value;
-
- if ((mask & (MASK_ONE << 34)) != 0)
- value34 *= value;
-
- if ((mask & (MASK_ONE << 35)) != 0)
- value35 *= value;
-
- if ((mask & (MASK_ONE << 36)) != 0)
- value36 *= value;
-
- if ((mask & (MASK_ONE << 37)) != 0)
- value37 *= value;
-
- if ((mask & (MASK_ONE << 38)) != 0)
- value38 *= value;
-
- if ((mask & (MASK_ONE << 39)) != 0)
- value39 *= value;
- }
-
- while ((mask = *div_mask++) != 0)
- {
- value = *div_values++;
-
- __asm__ (" #reg %0" : "+d" (value));
-
- if ((mask & (MASK_ONE << 0)) != 0)
- value00 /= value;
-
- if ((mask & (MASK_ONE << 1)) != 0)
- value01 /= value;
-
- if ((mask & (MASK_ONE << 2)) != 0)
- value02 /= value;
-
- if ((mask & (MASK_ONE << 3)) != 0)
- value03 /= value;
-
- if ((mask & (MASK_ONE << 4)) != 0)
- value04 /= value;
-
- if ((mask & (MASK_ONE << 5)) != 0)
- value05 /= value;
-
- if ((mask & (MASK_ONE << 6)) != 0)
- value06 /= value;
-
- if ((mask & (MASK_ONE << 7)) != 0)
- value07 /= value;
-
- if ((mask & (MASK_ONE << 8)) != 0)
- value08 /= value;
-
- if ((mask & (MASK_ONE << 9)) != 0)
- value09 /= value;
-
- if ((mask & (MASK_ONE << 10)) != 0)
- value10 /= value;
-
- if ((mask & (MASK_ONE << 11)) != 0)
- value11 /= value;
-
- if ((mask & (MASK_ONE << 12)) != 0)
- value12 /= value;
-
- if ((mask & (MASK_ONE << 13)) != 0)
- value13 /= value;
-
- if ((mask & (MASK_ONE << 14)) != 0)
- value14 /= value;
-
- if ((mask & (MASK_ONE << 15)) != 0)
- value15 /= value;
-
- if ((mask & (MASK_ONE << 16)) != 0)
- value16 /= value;
-
- if ((mask & (MASK_ONE << 17)) != 0)
- value17 /= value;
-
- if ((mask & (MASK_ONE << 18)) != 0)
- value18 /= value;
-
- if ((mask & (MASK_ONE << 19)) != 0)
- value19 /= value;
-
- if ((mask & (MASK_ONE << 20)) != 0)
- value20 /= value;
-
- if ((mask & (MASK_ONE << 21)) != 0)
- value21 /= value;
-
- if ((mask & (MASK_ONE << 22)) != 0)
- value22 /= value;
-
- if ((mask & (MASK_ONE << 23)) != 0)
- value23 /= value;
-
- if ((mask & (MASK_ONE << 24)) != 0)
- value24 /= value;
-
- if ((mask & (MASK_ONE << 25)) != 0)
- value25 /= value;
-
- if ((mask & (MASK_ONE << 26)) != 0)
- value26 /= value;
-
- if ((mask & (MASK_ONE << 27)) != 0)
- value27 /= value;
-
- if ((mask & (MASK_ONE << 28)) != 0)
- value28 /= value;
-
- if ((mask & (MASK_ONE << 29)) != 0)
- value29 /= value;
-
- if ((mask & (MASK_ONE << 30)) != 0)
- value30 /= value;
-
- if ((mask & (MASK_ONE << 31)) != 0)
- value31 /= value;
-
- if ((mask & (MASK_ONE << 32)) != 0)
- value32 /= value;
-
- if ((mask & (MASK_ONE << 33)) != 0)
- value33 /= value;
-
- if ((mask & (MASK_ONE << 34)) != 0)
- value34 /= value;
-
- if ((mask & (MASK_ONE << 35)) != 0)
- value35 /= value;
-
- if ((mask & (MASK_ONE << 36)) != 0)
- value36 /= value;
-
- if ((mask & (MASK_ONE << 37)) != 0)
- value37 /= value;
-
- if ((mask & (MASK_ONE << 38)) != 0)
- value38 /= value;
-
- if ((mask & (MASK_ONE << 39)) != 0)
- value39 /= value;
- }
-
- while ((mask = *eq0_mask++) != 0)
- {
- eq0 = 0;
-
- if ((mask & (MASK_ONE << 0)) != 0)
- eq0 |= (value00 == ZERO);
-
- if ((mask & (MASK_ONE << 1)) != 0)
- eq0 |= (value01 == ZERO);
-
- if ((mask & (MASK_ONE << 2)) != 0)
- eq0 |= (value02 == ZERO);
-
- if ((mask & (MASK_ONE << 3)) != 0)
- eq0 |= (value03 == ZERO);
-
- if ((mask & (MASK_ONE << 4)) != 0)
- eq0 |= (value04 == ZERO);
-
- if ((mask & (MASK_ONE << 5)) != 0)
- eq0 |= (value05 == ZERO);
-
- if ((mask & (MASK_ONE << 6)) != 0)
- eq0 |= (value06 == ZERO);
-
- if ((mask & (MASK_ONE << 7)) != 0)
- eq0 |= (value07 == ZERO);
-
- if ((mask & (MASK_ONE << 8)) != 0)
- eq0 |= (value08 == ZERO);
-
- if ((mask & (MASK_ONE << 9)) != 0)
- eq0 |= (value09 == ZERO);
-
- if ((mask & (MASK_ONE << 10)) != 0)
- eq0 |= (value10 == ZERO);
-
- if ((mask & (MASK_ONE << 11)) != 0)
- eq0 |= (value11 == ZERO);
-
- if ((mask & (MASK_ONE << 12)) != 0)
- eq0 |= (value12 == ZERO);
-
- if ((mask & (MASK_ONE << 13)) != 0)
- eq0 |= (value13 == ZERO);
-
- if ((mask & (MASK_ONE << 14)) != 0)
- eq0 |= (value14 == ZERO);
-
- if ((mask & (MASK_ONE << 15)) != 0)
- eq0 |= (value15 == ZERO);
-
- if ((mask & (MASK_ONE << 16)) != 0)
- eq0 |= (value16 == ZERO);
-
- if ((mask & (MASK_ONE << 17)) != 0)
- eq0 |= (value17 == ZERO);
-
- if ((mask & (MASK_ONE << 18)) != 0)
- eq0 |= (value18 == ZERO);
-
- if ((mask & (MASK_ONE << 19)) != 0)
- eq0 |= (value19 == ZERO);
-
- if ((mask & (MASK_ONE << 20)) != 0)
- eq0 |= (value20 == ZERO);
-
- if ((mask & (MASK_ONE << 21)) != 0)
- eq0 |= (value21 == ZERO);
-
- if ((mask & (MASK_ONE << 22)) != 0)
- eq0 |= (value22 == ZERO);
-
- if ((mask & (MASK_ONE << 23)) != 0)
- eq0 |= (value23 == ZERO);
-
- if ((mask & (MASK_ONE << 24)) != 0)
- eq0 |= (value24 == ZERO);
-
- if ((mask & (MASK_ONE << 25)) != 0)
- eq0 |= (value25 == ZERO);
-
- if ((mask & (MASK_ONE << 26)) != 0)
- eq0 |= (value26 == ZERO);
-
- if ((mask & (MASK_ONE << 27)) != 0)
- eq0 |= (value27 == ZERO);
-
- if ((mask & (MASK_ONE << 28)) != 0)
- eq0 |= (value28 == ZERO);
-
- if ((mask & (MASK_ONE << 29)) != 0)
- eq0 |= (value29 == ZERO);
-
- if ((mask & (MASK_ONE << 30)) != 0)
- eq0 |= (value30 == ZERO);
-
- if ((mask & (MASK_ONE << 31)) != 0)
- eq0 |= (value31 == ZERO);
-
- if ((mask & (MASK_ONE << 32)) != 0)
- eq0 |= (value32 == ZERO);
-
- if ((mask & (MASK_ONE << 33)) != 0)
- eq0 |= (value33 == ZERO);
-
- if ((mask & (MASK_ONE << 34)) != 0)
- eq0 |= (value34 == ZERO);
-
- if ((mask & (MASK_ONE << 35)) != 0)
- eq0 |= (value35 == ZERO);
-
- if ((mask & (MASK_ONE << 36)) != 0)
- eq0 |= (value36 == ZERO);
-
- if ((mask & (MASK_ONE << 37)) != 0)
- eq0 |= (value37 == ZERO);
-
- if ((mask & (MASK_ONE << 38)) != 0)
- eq0 |= (value38 == ZERO);
-
- if ((mask & (MASK_ONE << 39)) != 0)
- eq0 |= (value39 == ZERO);
-
- *eq0_ptr++ = eq0;
- }
-
- return ( value00 + value01 + value02 + value03 + value04
- + value05 + value06 + value07 + value08 + value09
- + value10 + value11 + value12 + value13 + value14
- + value15 + value16 + value17 + value18 + value19
- + value20 + value21 + value22 + value23 + value24
- + value25 + value26 + value27 + value28 + value29
- + value30 + value31 + value32 + value33 + value34
- + value35 + value36 + value37 + value38 + value39);
-}
-
-/* { dg-final { scan-assembler "fadd" } } */
-/* { dg-final { scan-assembler "fsub" } } */
-/* { dg-final { scan-assembler "fmul" } } */
-/* { dg-final { scan-assembler "fdiv" } } */
-/* { dg-final { scan-assembler "fcmpu" } } */
-/* { dg-final { scan-assembler "xsadddp" } } */
-/* { dg-final { scan-assembler "xssubdp" } } */
-/* { dg-final { scan-assembler "xsmuldp" } } */
-/* { dg-final { scan-assembler "xsdivdp" } } */
-/* { dg-final { scan-assembler "xscmpudp" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr65849-2.c b/gcc/testsuite/gcc.target/powerpc/pr65849-2.c
deleted file mode 100644
index 0af6a4a51c7..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/pr65849-2.c
+++ /dev/null
@@ -1,728 +0,0 @@
-/* { dg-do compile { target { powerpc*-*-* } } } */
-/* { dg-require-effective-target powerpc_p8vector_ok } */
-/* { dg-skip-if "" { powerpc*-*-darwin* } } */
-/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
-/* { dg-options "-mcpu=power8 -O2 -mno-upper-regs-sf" } */
-
-/* Test whether we can enable the -mupper-regs-sf with target pragmas. Make
- sure float values are allocated to the Altivec registers as well as the
- traditional FPR registers. */
-
-#ifndef TYPE
-#define TYPE float
-#endif
-
-#ifndef MASK_TYPE
-#define MASK_TYPE unsigned long long
-#endif
-
-#define MASK_ONE ((MASK_TYPE)1)
-#define ZERO ((TYPE) 0.0)
-
-#pragma GCC target ("upper-regs-sf")
-TYPE
-test_add (const MASK_TYPE *add_mask, const TYPE *add_values,
- const MASK_TYPE *sub_mask, const TYPE *sub_values,
- const MASK_TYPE *mul_mask, const TYPE *mul_values,
- const MASK_TYPE *div_mask, const TYPE *div_values,
- const MASK_TYPE *eq0_mask, int *eq0_ptr)
-{
- TYPE value;
- TYPE value00 = ZERO;
- TYPE value01 = ZERO;
- TYPE value02 = ZERO;
- TYPE value03 = ZERO;
- TYPE value04 = ZERO;
- TYPE value05 = ZERO;
- TYPE value06 = ZERO;
- TYPE value07 = ZERO;
- TYPE value08 = ZERO;
- TYPE value09 = ZERO;
- TYPE value10 = ZERO;
- TYPE value11 = ZERO;
- TYPE value12 = ZERO;
- TYPE value13 = ZERO;
- TYPE value14 = ZERO;
- TYPE value15 = ZERO;
- TYPE value16 = ZERO;
- TYPE value17 = ZERO;
- TYPE value18 = ZERO;
- TYPE value19 = ZERO;
- TYPE value20 = ZERO;
- TYPE value21 = ZERO;
- TYPE value22 = ZERO;
- TYPE value23 = ZERO;
- TYPE value24 = ZERO;
- TYPE value25 = ZERO;
- TYPE value26 = ZERO;
- TYPE value27 = ZERO;
- TYPE value28 = ZERO;
- TYPE value29 = ZERO;
- TYPE value30 = ZERO;
- TYPE value31 = ZERO;
- TYPE value32 = ZERO;
- TYPE value33 = ZERO;
- TYPE value34 = ZERO;
- TYPE value35 = ZERO;
- TYPE value36 = ZERO;
- TYPE value37 = ZERO;
- TYPE value38 = ZERO;
- TYPE value39 = ZERO;
- MASK_TYPE mask;
- int eq0;
-
- while ((mask = *add_mask++) != 0)
- {
- value = *add_values++;
-
- __asm__ (" #reg %0" : "+d" (value));
-
- if ((mask & (MASK_ONE << 0)) != 0)
- value00 += value;
-
- if ((mask & (MASK_ONE << 1)) != 0)
- value01 += value;
-
- if ((mask & (MASK_ONE << 2)) != 0)
- value02 += value;
-
- if ((mask & (MASK_ONE << 3)) != 0)
- value03 += value;
-
- if ((mask & (MASK_ONE << 4)) != 0)
- value04 += value;
-
- if ((mask & (MASK_ONE << 5)) != 0)
- value05 += value;
-
- if ((mask & (MASK_ONE << 6)) != 0)
- value06 += value;
-
- if ((mask & (MASK_ONE << 7)) != 0)
- value07 += value;
-
- if ((mask & (MASK_ONE << 8)) != 0)
- value08 += value;
-
- if ((mask & (MASK_ONE << 9)) != 0)
- value09 += value;
-
- if ((mask & (MASK_ONE << 10)) != 0)
- value10 += value;
-
- if ((mask & (MASK_ONE << 11)) != 0)
- value11 += value;
-
- if ((mask & (MASK_ONE << 12)) != 0)
- value12 += value;
-
- if ((mask & (MASK_ONE << 13)) != 0)
- value13 += value;
-
- if ((mask & (MASK_ONE << 14)) != 0)
- value14 += value;
-
- if ((mask & (MASK_ONE << 15)) != 0)
- value15 += value;
-
- if ((mask & (MASK_ONE << 16)) != 0)
- value16 += value;
-
- if ((mask & (MASK_ONE << 17)) != 0)
- value17 += value;
-
- if ((mask & (MASK_ONE << 18)) != 0)
- value18 += value;
-
- if ((mask & (MASK_ONE << 19)) != 0)
- value19 += value;
-
- if ((mask & (MASK_ONE << 20)) != 0)
- value20 += value;
-
- if ((mask & (MASK_ONE << 21)) != 0)
- value21 += value;
-
- if ((mask & (MASK_ONE << 22)) != 0)
- value22 += value;
-
- if ((mask & (MASK_ONE << 23)) != 0)
- value23 += value;
-
- if ((mask & (MASK_ONE << 24)) != 0)
- value24 += value;
-
- if ((mask & (MASK_ONE << 25)) != 0)
- value25 += value;
-
- if ((mask & (MASK_ONE << 26)) != 0)
- value26 += value;
-
- if ((mask & (MASK_ONE << 27)) != 0)
- value27 += value;
-
- if ((mask & (MASK_ONE << 28)) != 0)
- value28 += value;
-
- if ((mask & (MASK_ONE << 29)) != 0)
- value29 += value;
-
- if ((mask & (MASK_ONE << 30)) != 0)
- value30 += value;
-
- if ((mask & (MASK_ONE << 31)) != 0)
- value31 += value;
-
- if ((mask & (MASK_ONE << 32)) != 0)
- value32 += value;
-
- if ((mask & (MASK_ONE << 33)) != 0)
- value33 += value;
-
- if ((mask & (MASK_ONE << 34)) != 0)
- value34 += value;
-
- if ((mask & (MASK_ONE << 35)) != 0)
- value35 += value;
-
- if ((mask & (MASK_ONE << 36)) != 0)
- value36 += value;
-
- if ((mask & (MASK_ONE << 37)) != 0)
- value37 += value;
-
- if ((mask & (MASK_ONE << 38)) != 0)
- value38 += value;
-
- if ((mask & (MASK_ONE << 39)) != 0)
- value39 += value;
- }
-
- while ((mask = *sub_mask++) != 0)
- {
- value = *sub_values++;
-
- __asm__ (" #reg %0" : "+d" (value));
-
- if ((mask & (MASK_ONE << 0)) != 0)
- value00 -= value;
-
- if ((mask & (MASK_ONE << 1)) != 0)
- value01 -= value;
-
- if ((mask & (MASK_ONE << 2)) != 0)
- value02 -= value;
-
- if ((mask & (MASK_ONE << 3)) != 0)
- value03 -= value;
-
- if ((mask & (MASK_ONE << 4)) != 0)
- value04 -= value;
-
- if ((mask & (MASK_ONE << 5)) != 0)
- value05 -= value;
-
- if ((mask & (MASK_ONE << 6)) != 0)
- value06 -= value;
-
- if ((mask & (MASK_ONE << 7)) != 0)
- value07 -= value;
-
- if ((mask & (MASK_ONE << 8)) != 0)
- value08 -= value;
-
- if ((mask & (MASK_ONE << 9)) != 0)
- value09 -= value;
-
- if ((mask & (MASK_ONE << 10)) != 0)
- value10 -= value;
-
- if ((mask & (MASK_ONE << 11)) != 0)
- value11 -= value;
-
- if ((mask & (MASK_ONE << 12)) != 0)
- value12 -= value;
-
- if ((mask & (MASK_ONE << 13)) != 0)
- value13 -= value;
-
- if ((mask & (MASK_ONE << 14)) != 0)
- value14 -= value;
-
- if ((mask & (MASK_ONE << 15)) != 0)
- value15 -= value;
-
- if ((mask & (MASK_ONE << 16)) != 0)
- value16 -= value;
-
- if ((mask & (MASK_ONE << 17)) != 0)
- value17 -= value;
-
- if ((mask & (MASK_ONE << 18)) != 0)
- value18 -= value;
-
- if ((mask & (MASK_ONE << 19)) != 0)
- value19 -= value;
-
- if ((mask & (MASK_ONE << 20)) != 0)
- value20 -= value;
-
- if ((mask & (MASK_ONE << 21)) != 0)
- value21 -= value;
-
- if ((mask & (MASK_ONE << 22)) != 0)
- value22 -= value;
-
- if ((mask & (MASK_ONE << 23)) != 0)
- value23 -= value;
-
- if ((mask & (MASK_ONE << 24)) != 0)
- value24 -= value;
-
- if ((mask & (MASK_ONE << 25)) != 0)
- value25 -= value;
-
- if ((mask & (MASK_ONE << 26)) != 0)
- value26 -= value;
-
- if ((mask & (MASK_ONE << 27)) != 0)
- value27 -= value;
-
- if ((mask & (MASK_ONE << 28)) != 0)
- value28 -= value;
-
- if ((mask & (MASK_ONE << 29)) != 0)
- value29 -= value;
-
- if ((mask & (MASK_ONE << 30)) != 0)
- value30 -= value;
-
- if ((mask & (MASK_ONE << 31)) != 0)
- value31 -= value;
-
- if ((mask & (MASK_ONE << 32)) != 0)
- value32 -= value;
-
- if ((mask & (MASK_ONE << 33)) != 0)
- value33 -= value;
-
- if ((mask & (MASK_ONE << 34)) != 0)
- value34 -= value;
-
- if ((mask & (MASK_ONE << 35)) != 0)
- value35 -= value;
-
- if ((mask & (MASK_ONE << 36)) != 0)
- value36 -= value;
-
- if ((mask & (MASK_ONE << 37)) != 0)
- value37 -= value;
-
- if ((mask & (MASK_ONE << 38)) != 0)
- value38 -= value;
-
- if ((mask & (MASK_ONE << 39)) != 0)
- value39 -= value;
- }
-
- while ((mask = *mul_mask++) != 0)
- {
- value = *mul_values++;
-
- __asm__ (" #reg %0" : "+d" (value));
-
- if ((mask & (MASK_ONE << 0)) != 0)
- value00 *= value;
-
- if ((mask & (MASK_ONE << 1)) != 0)
- value01 *= value;
-
- if ((mask & (MASK_ONE << 2)) != 0)
- value02 *= value;
-
- if ((mask & (MASK_ONE << 3)) != 0)
- value03 *= value;
-
- if ((mask & (MASK_ONE << 4)) != 0)
- value04 *= value;
-
- if ((mask & (MASK_ONE << 5)) != 0)
- value05 *= value;
-
- if ((mask & (MASK_ONE << 6)) != 0)
- value06 *= value;
-
- if ((mask & (MASK_ONE << 7)) != 0)
- value07 *= value;
-
- if ((mask & (MASK_ONE << 8)) != 0)
- value08 *= value;
-
- if ((mask & (MASK_ONE << 9)) != 0)
- value09 *= value;
-
- if ((mask & (MASK_ONE << 10)) != 0)
- value10 *= value;
-
- if ((mask & (MASK_ONE << 11)) != 0)
- value11 *= value;
-
- if ((mask & (MASK_ONE << 12)) != 0)
- value12 *= value;
-
- if ((mask & (MASK_ONE << 13)) != 0)
- value13 *= value;
-
- if ((mask & (MASK_ONE << 14)) != 0)
- value14 *= value;
-
- if ((mask & (MASK_ONE << 15)) != 0)
- value15 *= value;
-
- if ((mask & (MASK_ONE << 16)) != 0)
- value16 *= value;
-
- if ((mask & (MASK_ONE << 17)) != 0)
- value17 *= value;
-
- if ((mask & (MASK_ONE << 18)) != 0)
- value18 *= value;
-
- if ((mask & (MASK_ONE << 19)) != 0)
- value19 *= value;
-
- if ((mask & (MASK_ONE << 20)) != 0)
- value20 *= value;
-
- if ((mask & (MASK_ONE << 21)) != 0)
- value21 *= value;
-
- if ((mask & (MASK_ONE << 22)) != 0)
- value22 *= value;
-
- if ((mask & (MASK_ONE << 23)) != 0)
- value23 *= value;
-
- if ((mask & (MASK_ONE << 24)) != 0)
- value24 *= value;
-
- if ((mask & (MASK_ONE << 25)) != 0)
- value25 *= value;
-
- if ((mask & (MASK_ONE << 26)) != 0)
- value26 *= value;
-
- if ((mask & (MASK_ONE << 27)) != 0)
- value27 *= value;
-
- if ((mask & (MASK_ONE << 28)) != 0)
- value28 *= value;
-
- if ((mask & (MASK_ONE << 29)) != 0)
- value29 *= value;
-
- if ((mask & (MASK_ONE << 30)) != 0)
- value30 *= value;
-
- if ((mask & (MASK_ONE << 31)) != 0)
- value31 *= value;
-
- if ((mask & (MASK_ONE << 32)) != 0)
- value32 *= value;
-
- if ((mask & (MASK_ONE << 33)) != 0)
- value33 *= value;
-
- if ((mask & (MASK_ONE << 34)) != 0)
- value34 *= value;
-
- if ((mask & (MASK_ONE << 35)) != 0)
- value35 *= value;
-
- if ((mask & (MASK_ONE << 36)) != 0)
- value36 *= value;
-
- if ((mask & (MASK_ONE << 37)) != 0)
- value37 *= value;
-
- if ((mask & (MASK_ONE << 38)) != 0)
- value38 *= value;
-
- if ((mask & (MASK_ONE << 39)) != 0)
- value39 *= value;
- }
-
- while ((mask = *div_mask++) != 0)
- {
- value = *div_values++;
-
- __asm__ (" #reg %0" : "+d" (value));
-
- if ((mask & (MASK_ONE << 0)) != 0)
- value00 /= value;
-
- if ((mask & (MASK_ONE << 1)) != 0)
- value01 /= value;
-
- if ((mask & (MASK_ONE << 2)) != 0)
- value02 /= value;
-
- if ((mask & (MASK_ONE << 3)) != 0)
- value03 /= value;
-
- if ((mask & (MASK_ONE << 4)) != 0)
- value04 /= value;
-
- if ((mask & (MASK_ONE << 5)) != 0)
- value05 /= value;
-
- if ((mask & (MASK_ONE << 6)) != 0)
- value06 /= value;
-
- if ((mask & (MASK_ONE << 7)) != 0)
- value07 /= value;
-
- if ((mask & (MASK_ONE << 8)) != 0)
- value08 /= value;
-
- if ((mask & (MASK_ONE << 9)) != 0)
- value09 /= value;
-
- if ((mask & (MASK_ONE << 10)) != 0)
- value10 /= value;
-
- if ((mask & (MASK_ONE << 11)) != 0)
- value11 /= value;
-
- if ((mask & (MASK_ONE << 12)) != 0)
- value12 /= value;
-
- if ((mask & (MASK_ONE << 13)) != 0)
- value13 /= value;
-
- if ((mask & (MASK_ONE << 14)) != 0)
- value14 /= value;
-
- if ((mask & (MASK_ONE << 15)) != 0)
- value15 /= value;
-
- if ((mask & (MASK_ONE << 16)) != 0)
- value16 /= value;
-
- if ((mask & (MASK_ONE << 17)) != 0)
- value17 /= value;
-
- if ((mask & (MASK_ONE << 18)) != 0)
- value18 /= value;
-
- if ((mask & (MASK_ONE << 19)) != 0)
- value19 /= value;
-
- if ((mask & (MASK_ONE << 20)) != 0)
- value20 /= value;
-
- if ((mask & (MASK_ONE << 21)) != 0)
- value21 /= value;
-
- if ((mask & (MASK_ONE << 22)) != 0)
- value22 /= value;
-
- if ((mask & (MASK_ONE << 23)) != 0)
- value23 /= value;
-
- if ((mask & (MASK_ONE << 24)) != 0)
- value24 /= value;
-
- if ((mask & (MASK_ONE << 25)) != 0)
- value25 /= value;
-
- if ((mask & (MASK_ONE << 26)) != 0)
- value26 /= value;
-
- if ((mask & (MASK_ONE << 27)) != 0)
- value27 /= value;
-
- if ((mask & (MASK_ONE << 28)) != 0)
- value28 /= value;
-
- if ((mask & (MASK_ONE << 29)) != 0)
- value29 /= value;
-
- if ((mask & (MASK_ONE << 30)) != 0)
- value30 /= value;
-
- if ((mask & (MASK_ONE << 31)) != 0)
- value31 /= value;
-
- if ((mask & (MASK_ONE << 32)) != 0)
- value32 /= value;
-
- if ((mask & (MASK_ONE << 33)) != 0)
- value33 /= value;
-
- if ((mask & (MASK_ONE << 34)) != 0)
- value34 /= value;
-
- if ((mask & (MASK_ONE << 35)) != 0)
- value35 /= value;
-
- if ((mask & (MASK_ONE << 36)) != 0)
- value36 /= value;
-
- if ((mask & (MASK_ONE << 37)) != 0)
- value37 /= value;
-
- if ((mask & (MASK_ONE << 38)) != 0)
- value38 /= value;
-
- if ((mask & (MASK_ONE << 39)) != 0)
- value39 /= value;
- }
-
- while ((mask = *eq0_mask++) != 0)
- {
- eq0 = 0;
-
- if ((mask & (MASK_ONE << 0)) != 0)
- eq0 |= (value00 == ZERO);
-
- if ((mask & (MASK_ONE << 1)) != 0)
- eq0 |= (value01 == ZERO);
-
- if ((mask & (MASK_ONE << 2)) != 0)
- eq0 |= (value02 == ZERO);
-
- if ((mask & (MASK_ONE << 3)) != 0)
- eq0 |= (value03 == ZERO);
-
- if ((mask & (MASK_ONE << 4)) != 0)
- eq0 |= (value04 == ZERO);
-
- if ((mask & (MASK_ONE << 5)) != 0)
- eq0 |= (value05 == ZERO);
-
- if ((mask & (MASK_ONE << 6)) != 0)
- eq0 |= (value06 == ZERO);
-
- if ((mask & (MASK_ONE << 7)) != 0)
- eq0 |= (value07 == ZERO);
-
- if ((mask & (MASK_ONE << 8)) != 0)
- eq0 |= (value08 == ZERO);
-
- if ((mask & (MASK_ONE << 9)) != 0)
- eq0 |= (value09 == ZERO);
-
- if ((mask & (MASK_ONE << 10)) != 0)
- eq0 |= (value10 == ZERO);
-
- if ((mask & (MASK_ONE << 11)) != 0)
- eq0 |= (value11 == ZERO);
-
- if ((mask & (MASK_ONE << 12)) != 0)
- eq0 |= (value12 == ZERO);
-
- if ((mask & (MASK_ONE << 13)) != 0)
- eq0 |= (value13 == ZERO);
-
- if ((mask & (MASK_ONE << 14)) != 0)
- eq0 |= (value14 == ZERO);
-
- if ((mask & (MASK_ONE << 15)) != 0)
- eq0 |= (value15 == ZERO);
-
- if ((mask & (MASK_ONE << 16)) != 0)
- eq0 |= (value16 == ZERO);
-
- if ((mask & (MASK_ONE << 17)) != 0)
- eq0 |= (value17 == ZERO);
-
- if ((mask & (MASK_ONE << 18)) != 0)
- eq0 |= (value18 == ZERO);
-
- if ((mask & (MASK_ONE << 19)) != 0)
- eq0 |= (value19 == ZERO);
-
- if ((mask & (MASK_ONE << 20)) != 0)
- eq0 |= (value20 == ZERO);
-
- if ((mask & (MASK_ONE << 21)) != 0)
- eq0 |= (value21 == ZERO);
-
- if ((mask & (MASK_ONE << 22)) != 0)
- eq0 |= (value22 == ZERO);
-
- if ((mask & (MASK_ONE << 23)) != 0)
- eq0 |= (value23 == ZERO);
-
- if ((mask & (MASK_ONE << 24)) != 0)
- eq0 |= (value24 == ZERO);
-
- if ((mask & (MASK_ONE << 25)) != 0)
- eq0 |= (value25 == ZERO);
-
- if ((mask & (MASK_ONE << 26)) != 0)
- eq0 |= (value26 == ZERO);
-
- if ((mask & (MASK_ONE << 27)) != 0)
- eq0 |= (value27 == ZERO);
-
- if ((mask & (MASK_ONE << 28)) != 0)
- eq0 |= (value28 == ZERO);
-
- if ((mask & (MASK_ONE << 29)) != 0)
- eq0 |= (value29 == ZERO);
-
- if ((mask & (MASK_ONE << 30)) != 0)
- eq0 |= (value30 == ZERO);
-
- if ((mask & (MASK_ONE << 31)) != 0)
- eq0 |= (value31 == ZERO);
-
- if ((mask & (MASK_ONE << 32)) != 0)
- eq0 |= (value32 == ZERO);
-
- if ((mask & (MASK_ONE << 33)) != 0)
- eq0 |= (value33 == ZERO);
-
- if ((mask & (MASK_ONE << 34)) != 0)
- eq0 |= (value34 == ZERO);
-
- if ((mask & (MASK_ONE << 35)) != 0)
- eq0 |= (value35 == ZERO);
-
- if ((mask & (MASK_ONE << 36)) != 0)
- eq0 |= (value36 == ZERO);
-
- if ((mask & (MASK_ONE << 37)) != 0)
- eq0 |= (value37 == ZERO);
-
- if ((mask & (MASK_ONE << 38)) != 0)
- eq0 |= (value38 == ZERO);
-
- if ((mask & (MASK_ONE << 39)) != 0)
- eq0 |= (value39 == ZERO);
-
- *eq0_ptr++ = eq0;
- }
-
- return ( value00 + value01 + value02 + value03 + value04
- + value05 + value06 + value07 + value08 + value09
- + value10 + value11 + value12 + value13 + value14
- + value15 + value16 + value17 + value18 + value19
- + value20 + value21 + value22 + value23 + value24
- + value25 + value26 + value27 + value28 + value29
- + value30 + value31 + value32 + value33 + value34
- + value35 + value36 + value37 + value38 + value39);
-}
-
-/* { dg-final { scan-assembler "fadds" } } */
-/* { dg-final { scan-assembler "fsubs" } } */
-/* { dg-final { scan-assembler "fmuls" } } */
-/* { dg-final { scan-assembler "fdivs" } } */
-/* { dg-final { scan-assembler "fcmpu" } } */
-/* { dg-final { scan-assembler "xsaddsp" } } */
-/* { dg-final { scan-assembler "xssubsp" } } */
-/* { dg-final { scan-assembler "xsmulsp" } } */
-/* { dg-final { scan-assembler "xsdivsp" } } */
-/* { dg-final { scan-assembler "xscmpudp" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr67808.c b/gcc/testsuite/gcc.target/powerpc/pr67808.c
index 16b309c151e..3ee8003bebc 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr67808.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr67808.c
@@ -2,7 +2,7 @@
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
-/* { dg-options "-O1 -mvsx -mlra -mcpu=power7 -mlong-double-128" } */
+/* { dg-options "-O1 -mvsx -mcpu=power7 -mlong-double-128" } */
/* PR 67808: LRA ICEs on simple double to long double conversion test case */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr68805.c b/gcc/testsuite/gcc.target/powerpc/pr68805.c
index 5510811107d..f4454a9e2d2 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr68805.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr68805.c
@@ -1,6 +1,6 @@
/* { dg-do compile { target powerpc64le-*-* } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
-/* { dg-options "-O2 -mvsx-timode -mcpu=power8 -mlra" } */
+/* { dg-options "-O2 -mvsx-timode -mcpu=power8" } */
typedef struct bar {
void *a;
diff --git a/gcc/testsuite/gcc.target/powerpc/pr69461.c b/gcc/testsuite/gcc.target/powerpc/pr69461.c
index 406e7049d29..f693a5f0146 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr69461.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr69461.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O3 -mlra" } */
+/* { dg-options "-O3" } */
extern void _setjmp (void);
typedef struct {
diff --git a/gcc/testsuite/gcc.target/powerpc/pr71656-1.c b/gcc/testsuite/gcc.target/powerpc/pr71656-1.c
index fa6b4ffb816..1cb809f8b2a 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr71656-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr71656-1.c
@@ -2,7 +2,7 @@
/* { dg-do compile } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
-/* { dg-options "-O1 -mcpu=power9 -mpower9-dform-vector -mno-lra" } */
+/* { dg-options "-O1 -mcpu=power9 -mpower9-dform-vector" } */
typedef __attribute__((altivec(vector__))) int type_t;
type_t
diff --git a/gcc/testsuite/gcc.target/powerpc/pr71656-2.c b/gcc/testsuite/gcc.target/powerpc/pr71656-2.c
index 99855fa1667..f953ebe4f9e 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr71656-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr71656-2.c
@@ -2,7 +2,7 @@
/* { dg-do compile } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
-/* { dg-options "-O3 -mcpu=power9 -mpower9-dform-vector -mno-lra -funroll-loops -fno-aggressive-loop-optimizations" } */
+/* { dg-options "-O3 -mcpu=power9 -mpower9-dform-vector -funroll-loops -fno-aggressive-loop-optimizations" } */
typedef double vec[3];
struct vec_t
diff --git a/gcc/testsuite/gcc.target/powerpc/pr71680.c b/gcc/testsuite/gcc.target/powerpc/pr71680.c
index fe5260f73d9..cdb7b5143ed 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr71680.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr71680.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { powerpc*-*-* } } } */
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
-/* { dg-options "-mcpu=power8 -O1 -mlra" } */
+/* { dg-options "-mcpu=power8 -O1" } */
#pragma pack(1)
struct
diff --git a/gcc/testsuite/gcc.target/powerpc/pr71698.c b/gcc/testsuite/gcc.target/powerpc/pr71698.c
index c752f64e1c7..eba47b0951f 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr71698.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr71698.c
@@ -3,7 +3,7 @@
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-require-effective-target dfp } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
-/* { dg-options "-O1 -mcpu=power9 -mno-lra" } */
+/* { dg-options "-O1 -mcpu=power9" } */
extern void testvad128 (int n, ...);
void
diff --git a/gcc/testsuite/gcc.target/powerpc/pr71720.c b/gcc/testsuite/gcc.target/powerpc/pr71720.c
index a0c330db931..732daf97595 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr71720.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr71720.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
-/* { dg-options "-mcpu=power9 -O2 -mupper-regs-di" } */
+/* { dg-options "-mcpu=power9 -O2" } */
/* Verify that we generate xxspltw <reg>,<reg>,0 for V4SFmode splat. */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr72853.c b/gcc/testsuite/gcc.target/powerpc/pr72853.c
index 8a086087088..9dc1bd2344c 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr72853.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr72853.c
@@ -2,7 +2,7 @@
/* { 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" } */
+/* { dg-options "-mcpu=power9 -O3 -funroll-loops" } */
/* derived from 20021120-1.c, compiled for -mcpu=power9. */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr77289.c b/gcc/testsuite/gcc.target/powerpc/pr77289.c
index 295aa27acdc..474bdbf0b16 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr77289.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr77289.c
@@ -2,7 +2,7 @@
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
-/* { dg-options "-O3 -mcpu=power7 -funroll-loops -ffast-math -mlra -mupdate -fno-auto-inc-dec" } */
+/* { dg-options "-O3 -mcpu=power7 -funroll-loops -ffast-math -mupdate -fno-auto-inc-dec" } */
/* PR 77289: LRA ICEs due to invalid constraint checking. */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr78458.c b/gcc/testsuite/gcc.target/powerpc/pr78458.c
index 777ac43bcad..a27876375af 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr78458.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr78458.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-mcpu=8548 -mspe -mabi=spe -mlra" } */
+/* { dg-options "-mcpu=8548 -mspe -mabi=spe" } */
/* { dg-skip-if "not an SPE target" { ! powerpc_spe_nocache } } */
extern void bar (void);
diff --git a/gcc/testsuite/gcc.target/powerpc/pr78543.c b/gcc/testsuite/gcc.target/powerpc/pr78543.c
index 0421344d3ce..13b34e58a0b 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr78543.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr78543.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
-/* { dg-options "-mcpu=power8 -O1 -mno-lra" } */
+/* { dg-options "-mcpu=power8 -O1" } */
typedef long a;
enum c { e, f, g, h, i, ab } j();
diff --git a/gcc/testsuite/gcc.target/powerpc/pr78953.c b/gcc/testsuite/gcc.target/powerpc/pr78953.c
index 34a3083918d..fd26f073499 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr78953.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr78953.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
-/* { dg-options "-mcpu=power9 -O2 -mupper-regs-di" } */
+/* { dg-options "-mcpu=power9 -O2" } */
#include <altivec.h>
@@ -16,4 +16,4 @@ foo (vector int *vp, int *ip)
ip[4] = vec_extract (v, 0);
}
-/* { dg-final { scan-assembler "xxextractuw\|vextuw\[lr\]x" } } */
+/* { dg-final { scan-assembler {\mxxextractuw\M|\mvextuw[lr]x\M} } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr79907.c b/gcc/testsuite/gcc.target/powerpc/pr79907.c
index c0e669b3264..240a1f46713 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr79907.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr79907.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { powerpc*-*-* } } } */
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
-/* { dg-options "-mcpu=power8 -O3 -mno-upper-regs-df" } */
+/* { dg-options "-mcpu=power8 -O3" } */
int foo (short a[], int x)
{
diff --git a/gcc/testsuite/gcc.target/powerpc/pr80099-1.c b/gcc/testsuite/gcc.target/powerpc/pr80099-1.c
deleted file mode 100644
index 9f34c5fbef8..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/pr80099-1.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
-/* { dg-require-effective-target powerpc_p8vector_ok } */
-/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
-/* { dg-options "-mcpu=power8 -O2 -mno-upper-regs-sf" } */
-
-/* PR target/80099: compiler internal error if -mno-upper-regs-sf used. */
-
-int a;
-int int_from_mem (vector float *c)
-{
- return __builtin_vec_extract (*c, a);
-}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr80099-2.c b/gcc/testsuite/gcc.target/powerpc/pr80099-2.c
deleted file mode 100644
index 5800db63212..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/pr80099-2.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
-/* { dg-require-effective-target powerpc_p8vector_ok } */
-/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
-/* { dg-options "-mcpu=power8 -O2 -mno-upper-regs-sf" } */
-
-/* PR target/80099 was an issue with -mno-upper-regs-sf. Test for all variable
- extract types with various -mno-upper-regs-* options. */
-
-double
-d_extract_arg_n (vector double v, unsigned long n)
-{
- return __builtin_vec_extract (v, n);
-}
-
-float
-f_extract_arg_n (vector float v, unsigned long n)
-{
- return __builtin_vec_extract (v, n);
-}
-
-long
-sl_extract_arg_n (vector long v, unsigned long n)
-{
- return (long) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-ul_extract_arg_n (vector unsigned long v, unsigned long n)
-{
- return (unsigned long) __builtin_vec_extract (v, n);
-}
-
-long
-si_extract_arg_n (vector int v, unsigned long n)
-{
- return (int) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-ui_extract_arg_n (vector unsigned int v, unsigned long n)
-{
- return (unsigned int) __builtin_vec_extract (v, n);
-}
-
-long
-ss_extract_arg_n (vector short v, unsigned long n)
-{
- return (short) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-us_extract_arg_n (vector unsigned short v, unsigned long n)
-{
- return (unsigned short) __builtin_vec_extract (v, n);
-}
-
-long
-sc_extract_arg_n (vector signed char v, unsigned long n)
-{
- return (signed char) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-uc_extract_arg_n (vector unsigned char v, unsigned long n)
-{
- return (unsigned char) __builtin_vec_extract (v, n);
-}
-
-
-double
-d_extract_mem_n (vector double *p, unsigned long n)
-{
- return __builtin_vec_extract (*p, n);
-}
-
-float
-f_extract_mem_n (vector float *p, unsigned long n)
-{
- return __builtin_vec_extract (*p, n);
-}
-
-long
-sl_extract_mem_n (vector long *p, unsigned long n)
-{
- return (long) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-ul_extract_mem_n (vector unsigned long *p, unsigned long n)
-{
- return (unsigned long) __builtin_vec_extract (*p, n);
-}
-
-long
-si_extract_mem_n (vector int *p, unsigned long n)
-{
- return (int) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-ui_extract_mem_n (vector unsigned int *p, unsigned long n)
-{
- return (unsigned int) __builtin_vec_extract (*p, n);
-}
-
-long
-ss_extract_mem_n (vector short *p, unsigned long n)
-{
- return (short) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-us_extract_mem_n (vector unsigned short *p, unsigned long n)
-{
- return (unsigned short) __builtin_vec_extract (*p, n);
-}
-
-long
-sc_extract_mem_n (vector signed char *p, unsigned long n)
-{
- return (signed char) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-uc_extract_mem_n (vector unsigned char *p, unsigned long n)
-{
- return (unsigned char) __builtin_vec_extract (*p, n);
-}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr80099-3.c b/gcc/testsuite/gcc.target/powerpc/pr80099-3.c
deleted file mode 100644
index 71c2b40b0d1..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/pr80099-3.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
-/* { dg-require-effective-target powerpc_p8vector_ok } */
-/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
-/* { dg-options "-mcpu=power8 -O2 -mno-upper-regs-df" } */
-
-/* PR target/80099 was an issue with -mno-upper-regs-sf. Test for all variable
- extract types with various -mno-upper-regs-* options. */
-
-double
-d_extract_arg_n (vector double v, unsigned long n)
-{
- return __builtin_vec_extract (v, n);
-}
-
-float
-f_extract_arg_n (vector float v, unsigned long n)
-{
- return __builtin_vec_extract (v, n);
-}
-
-long
-sl_extract_arg_n (vector long v, unsigned long n)
-{
- return (long) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-ul_extract_arg_n (vector unsigned long v, unsigned long n)
-{
- return (unsigned long) __builtin_vec_extract (v, n);
-}
-
-long
-si_extract_arg_n (vector int v, unsigned long n)
-{
- return (int) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-ui_extract_arg_n (vector unsigned int v, unsigned long n)
-{
- return (unsigned int) __builtin_vec_extract (v, n);
-}
-
-long
-ss_extract_arg_n (vector short v, unsigned long n)
-{
- return (short) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-us_extract_arg_n (vector unsigned short v, unsigned long n)
-{
- return (unsigned short) __builtin_vec_extract (v, n);
-}
-
-long
-sc_extract_arg_n (vector signed char v, unsigned long n)
-{
- return (signed char) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-uc_extract_arg_n (vector unsigned char v, unsigned long n)
-{
- return (unsigned char) __builtin_vec_extract (v, n);
-}
-
-
-double
-d_extract_mem_n (vector double *p, unsigned long n)
-{
- return __builtin_vec_extract (*p, n);
-}
-
-float
-f_extract_mem_n (vector float *p, unsigned long n)
-{
- return __builtin_vec_extract (*p, n);
-}
-
-long
-sl_extract_mem_n (vector long *p, unsigned long n)
-{
- return (long) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-ul_extract_mem_n (vector unsigned long *p, unsigned long n)
-{
- return (unsigned long) __builtin_vec_extract (*p, n);
-}
-
-long
-si_extract_mem_n (vector int *p, unsigned long n)
-{
- return (int) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-ui_extract_mem_n (vector unsigned int *p, unsigned long n)
-{
- return (unsigned int) __builtin_vec_extract (*p, n);
-}
-
-long
-ss_extract_mem_n (vector short *p, unsigned long n)
-{
- return (short) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-us_extract_mem_n (vector unsigned short *p, unsigned long n)
-{
- return (unsigned short) __builtin_vec_extract (*p, n);
-}
-
-long
-sc_extract_mem_n (vector signed char *p, unsigned long n)
-{
- return (signed char) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-uc_extract_mem_n (vector unsigned char *p, unsigned long n)
-{
- return (unsigned char) __builtin_vec_extract (*p, n);
-}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr80099-4.c b/gcc/testsuite/gcc.target/powerpc/pr80099-4.c
deleted file mode 100644
index 145dd1724af..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/pr80099-4.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
-/* { dg-require-effective-target powerpc_p8vector_ok } */
-/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
-/* { dg-options "-mcpu=power8 -O2 -mno-upper-regs-di" } */
-
-/* PR target/80099 was an issue with -mno-upper-regs-sf. Test for all variable
- extract types with various -mno-upper-regs-* options. */
-
-double
-d_extract_arg_n (vector double v, unsigned long n)
-{
- return __builtin_vec_extract (v, n);
-}
-
-float
-f_extract_arg_n (vector float v, unsigned long n)
-{
- return __builtin_vec_extract (v, n);
-}
-
-long
-sl_extract_arg_n (vector long v, unsigned long n)
-{
- return (long) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-ul_extract_arg_n (vector unsigned long v, unsigned long n)
-{
- return (unsigned long) __builtin_vec_extract (v, n);
-}
-
-long
-si_extract_arg_n (vector int v, unsigned long n)
-{
- return (int) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-ui_extract_arg_n (vector unsigned int v, unsigned long n)
-{
- return (unsigned int) __builtin_vec_extract (v, n);
-}
-
-long
-ss_extract_arg_n (vector short v, unsigned long n)
-{
- return (short) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-us_extract_arg_n (vector unsigned short v, unsigned long n)
-{
- return (unsigned short) __builtin_vec_extract (v, n);
-}
-
-long
-sc_extract_arg_n (vector signed char v, unsigned long n)
-{
- return (signed char) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-uc_extract_arg_n (vector unsigned char v, unsigned long n)
-{
- return (unsigned char) __builtin_vec_extract (v, n);
-}
-
-
-double
-d_extract_mem_n (vector double *p, unsigned long n)
-{
- return __builtin_vec_extract (*p, n);
-}
-
-float
-f_extract_mem_n (vector float *p, unsigned long n)
-{
- return __builtin_vec_extract (*p, n);
-}
-
-long
-sl_extract_mem_n (vector long *p, unsigned long n)
-{
- return (long) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-ul_extract_mem_n (vector unsigned long *p, unsigned long n)
-{
- return (unsigned long) __builtin_vec_extract (*p, n);
-}
-
-long
-si_extract_mem_n (vector int *p, unsigned long n)
-{
- return (int) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-ui_extract_mem_n (vector unsigned int *p, unsigned long n)
-{
- return (unsigned int) __builtin_vec_extract (*p, n);
-}
-
-long
-ss_extract_mem_n (vector short *p, unsigned long n)
-{
- return (short) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-us_extract_mem_n (vector unsigned short *p, unsigned long n)
-{
- return (unsigned short) __builtin_vec_extract (*p, n);
-}
-
-long
-sc_extract_mem_n (vector signed char *p, unsigned long n)
-{
- return (signed char) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-uc_extract_mem_n (vector unsigned char *p, unsigned long n)
-{
- return (unsigned char) __builtin_vec_extract (*p, n);
-}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr80099-5.c b/gcc/testsuite/gcc.target/powerpc/pr80099-5.c
deleted file mode 100644
index 9ebc0fe466d..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/pr80099-5.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
-/* { dg-require-effective-target powerpc_p8vector_ok } */
-/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
-/* { dg-options "-mcpu=power8 -O2 -mno-upper-regs" } */
-
-/* PR target/80099 was an issue with -mno-upper-regs-sf. Test for all variable
- extract types with various -mno-upper-regs-* options. */
-
-double
-d_extract_arg_n (vector double v, unsigned long n)
-{
- return __builtin_vec_extract (v, n);
-}
-
-float
-f_extract_arg_n (vector float v, unsigned long n)
-{
- return __builtin_vec_extract (v, n);
-}
-
-long
-sl_extract_arg_n (vector long v, unsigned long n)
-{
- return (long) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-ul_extract_arg_n (vector unsigned long v, unsigned long n)
-{
- return (unsigned long) __builtin_vec_extract (v, n);
-}
-
-long
-si_extract_arg_n (vector int v, unsigned long n)
-{
- return (int) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-ui_extract_arg_n (vector unsigned int v, unsigned long n)
-{
- return (unsigned int) __builtin_vec_extract (v, n);
-}
-
-long
-ss_extract_arg_n (vector short v, unsigned long n)
-{
- return (short) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-us_extract_arg_n (vector unsigned short v, unsigned long n)
-{
- return (unsigned short) __builtin_vec_extract (v, n);
-}
-
-long
-sc_extract_arg_n (vector signed char v, unsigned long n)
-{
- return (signed char) __builtin_vec_extract (v, n);
-}
-
-unsigned long
-uc_extract_arg_n (vector unsigned char v, unsigned long n)
-{
- return (unsigned char) __builtin_vec_extract (v, n);
-}
-
-
-double
-d_extract_mem_n (vector double *p, unsigned long n)
-{
- return __builtin_vec_extract (*p, n);
-}
-
-float
-f_extract_mem_n (vector float *p, unsigned long n)
-{
- return __builtin_vec_extract (*p, n);
-}
-
-long
-sl_extract_mem_n (vector long *p, unsigned long n)
-{
- return (long) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-ul_extract_mem_n (vector unsigned long *p, unsigned long n)
-{
- return (unsigned long) __builtin_vec_extract (*p, n);
-}
-
-long
-si_extract_mem_n (vector int *p, unsigned long n)
-{
- return (int) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-ui_extract_mem_n (vector unsigned int *p, unsigned long n)
-{
- return (unsigned int) __builtin_vec_extract (*p, n);
-}
-
-long
-ss_extract_mem_n (vector short *p, unsigned long n)
-{
- return (short) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-us_extract_mem_n (vector unsigned short *p, unsigned long n)
-{
- return (unsigned short) __builtin_vec_extract (*p, n);
-}
-
-long
-sc_extract_mem_n (vector signed char *p, unsigned long n)
-{
- return (signed char) __builtin_vec_extract (*p, n);
-}
-
-unsigned long
-uc_extract_mem_n (vector unsigned char *p, unsigned long n)
-{
- return (unsigned char) __builtin_vec_extract (*p, n);
-}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr81622.c b/gcc/testsuite/gcc.target/powerpc/pr81622.c
new file mode 100644
index 00000000000..fa13ac98a2b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr81622.c
@@ -0,0 +1,13 @@
+/* PR target/81622 */
+/* { dg-do compile { target { powerpc*-*-linux* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+/* { dg-require-effective-target powerpc_p9vector_ok } */
+/* { dg-options "-mcpu=power9 -O2" } */
+
+void
+foo (void)
+{
+ __builtin_vec_ld (1, 2); /* { dg-error "invalid parameter combination" } */
+ __builtin_vec_cmpne (1, 2); /* { dg-error "invalid parameter combination" } */
+ __builtin_vec_st (1, 0, 5); /* { dg-error "invalid parameter combination" } */
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/upper-regs-df.c b/gcc/testsuite/gcc.target/powerpc/upper-regs-df.c
index 17f01bfbfca..0df579797ad 100644
--- a/gcc/testsuite/gcc.target/powerpc/upper-regs-df.c
+++ b/gcc/testsuite/gcc.target/powerpc/upper-regs-df.c
@@ -2,10 +2,10 @@
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
-/* { dg-options "-mcpu=power7 -O2 -mupper-regs-df" } */
+/* { dg-options "-mcpu=power7 -O2" } */
-/* Test for the -mupper-regs-df option to make sure double values are allocated
- to the Altivec registers as well as the traditional FPR registers. */
+/* Test to make sure double values are allocated to the Altivec registers as
+ well as the traditional FPR registers. */
#ifndef TYPE
#define TYPE double
diff --git a/gcc/testsuite/gcc.target/powerpc/upper-regs-sf.c b/gcc/testsuite/gcc.target/powerpc/upper-regs-sf.c
index 8c246796805..fd29fb5fd6e 100644
--- a/gcc/testsuite/gcc.target/powerpc/upper-regs-sf.c
+++ b/gcc/testsuite/gcc.target/powerpc/upper-regs-sf.c
@@ -2,10 +2,10 @@
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
-/* { dg-options "-mcpu=power8 -O2 -mupper-regs-df -mupper-regs-sf" } */
+/* { dg-options "-mcpu=power8 -O2" } */
-/* Test for the -mupper-regs-df option to make sure double values are allocated
- to the Altivec registers as well as the traditional FPR registers. */
+/* Test make sure single precision values are allocated to the Altivec
+ registers as well as the traditional FPR registers. */
#ifndef TYPE
#define TYPE float
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-extract-1.c b/gcc/testsuite/gcc.target/powerpc/vec-extract-1.c
index 2f9624d4c86..9c8e6f3a684 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-extract-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-extract-1.c
@@ -2,7 +2,7 @@
/* { 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 -mupper-regs-df -mupper-regs-di" } */
+/* { dg-options "-mcpu=power8 -O2" } */
#include <altivec.h>
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-init-3.c b/gcc/testsuite/gcc.target/powerpc/vec-init-3.c
index d6d546942da..f4a536a2ea9 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-init-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-init-3.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
-/* { dg-options "-mcpu=power9 -O2 -mupper-regs-di" } */
+/* { dg-options "-mcpu=power9 -O2" } */
vector long
merge (long a, long b)
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-init-6.c b/gcc/testsuite/gcc.target/powerpc/vec-init-6.c
index 14e605ca435..8d610e158cc 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-init-6.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-init-6.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-require-effective-target powerpc_p8vector_ok } */
-/* { dg-options "-mcpu=power8 -O2 -mupper-regs-di" } */
+/* { dg-options "-mcpu=power8 -O2" } */
vector int
merge (int a, int b, int c, int d)
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-init-7.c b/gcc/testsuite/gcc.target/powerpc/vec-init-7.c
index b5e531ea7f1..c44fa9b2a3d 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-init-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-init-7.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-require-effective-target powerpc_p8vector_ok } */
-/* { dg-options "-mcpu=power8 -O2 -mupper-regs-di" } */
+/* { dg-options "-mcpu=power8 -O2" } */
vector int
splat (int a)
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-set-char.c b/gcc/testsuite/gcc.target/powerpc/vec-set-char.c
index 2da79ef9e9d..5df260ded29 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-set-char.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-set-char.c
@@ -3,7 +3,7 @@
/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
-/* { dg-options "-mcpu=power9 -O2 -mupper-regs-di -mvsx-small-integer" } */
+/* { dg-options "-mcpu=power9 -O2" } */
vector char
insert_0_0 (vector char v)
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-set-int.c b/gcc/testsuite/gcc.target/powerpc/vec-set-int.c
index dc97ac9d4d3..deaa6acfa6e 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-set-int.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-set-int.c
@@ -3,7 +3,7 @@
/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
-/* { dg-options "-mcpu=power9 -O2 -mupper-regs-di -mvsx-small-integer" } */
+/* { dg-options "-mcpu=power9 -O2" } */
vector int
insert_0_0 (vector int v)
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-set-short.c b/gcc/testsuite/gcc.target/powerpc/vec-set-short.c
index d82760955fd..eabcf3488de 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-set-short.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-set-short.c
@@ -3,7 +3,7 @@
/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
-/* { dg-options "-mcpu=power9 -O2 -mupper-regs-di -mvsx-small-integer" } */
+/* { dg-options "-mcpu=power9 -O2" } */
vector short
insert_0_0 (vector short v)
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-setup-be-double.c b/gcc/testsuite/gcc.target/powerpc/vec-setup-be-double.c
new file mode 100644
index 00000000000..acf429acaa9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/vec-setup-be-double.c
@@ -0,0 +1,12 @@
+/* { dg-do run { target { powerpc*-*-linux* } } } */
+/* { dg-require-effective-target vsx_hw } */
+/* { dg-options "-O2 -mvsx" } */
+
+/* Test various ways of creating vectors with 2 double words and accessing the
+ elements. This test uses the double datatype.
+
+ This test explicitly tests -maltivec=be to make sure things are correct. */
+
+#define DO_DOUBLE
+
+#include "vec-setup.h"
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-setup-be-long.c b/gcc/testsuite/gcc.target/powerpc/vec-setup-be-long.c
new file mode 100644
index 00000000000..492cd2d76a2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/vec-setup-be-long.c
@@ -0,0 +1,11 @@
+/* { dg-do run { target { powerpc64le*-*-linux* } } } */
+/* { dg-require-effective-target vsx_hw } */
+/* { dg-options "-O2 -mvsx -maltivec=be" } */
+
+/* Test various ways of creating vectors with 2 double words and accessing the
+ elements. This test uses the long (on 64-bit systems) or long long datatype
+ (on 32-bit systems).
+
+ This test explicitly tests -maltivec=be to make sure things are correct. */
+
+#include "vec-setup.h"
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-setup-double.c b/gcc/testsuite/gcc.target/powerpc/vec-setup-double.c
new file mode 100644
index 00000000000..36c6405caf7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/vec-setup-double.c
@@ -0,0 +1,11 @@
+/* { dg-do run { target { powerpc*-*-linux* } } } */
+/* { dg-require-effective-target vsx_hw } */
+/* { dg-options "-O2 -mvsx" } */
+
+/* Test various ways of creating vectors with 2 double words and accessing the
+ elements. This test uses the double datatype and the default endian
+ order. */
+
+#define DO_DOUBLE
+
+#include "vec-setup.h"
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-setup-long.c b/gcc/testsuite/gcc.target/powerpc/vec-setup-long.c
new file mode 100644
index 00000000000..5588e1586f3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/vec-setup-long.c
@@ -0,0 +1,9 @@
+/* { dg-do run { target { powerpc*-*-linux* } } } */
+/* { dg-require-effective-target vsx_hw } */
+/* { dg-options "-O2 -mvsx" } */
+
+/* Test various ways of creating vectors with 2 double words and accessing the
+ elements. This test uses the long (on 64-bit systems) or long long datatype
+ (on 32-bit systems). The default endian order is used. */
+
+#include "vec-setup.h"
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-setup.h b/gcc/testsuite/gcc.target/powerpc/vec-setup.h
new file mode 100644
index 00000000000..9e251646d2d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/vec-setup.h
@@ -0,0 +1,366 @@
+#include <altivec.h>
+
+/* Test various ways of creating vectors with 2 double words and accessing the
+ elements. This include files supports:
+
+ testing double
+ testing long on 64-bit systems
+ testing long long on 32-bit systems.
+
+ The endian support is:
+
+ big endian
+ little endian with little endian element ordering
+ little endian with big endian element ordering. */
+
+#ifdef DEBUG
+#include <stdio.h>
+#define DEBUG0(STR) fputs (STR, stdout)
+#define DEBUG2(STR,A,B) printf (STR, A, B)
+
+static int errors = 0;
+
+#else
+#include <stdlib.h>
+#define DEBUG0(STR)
+#define DEBUG2(STR,A,B)
+#endif
+
+#if defined(DO_DOUBLE)
+#define TYPE double
+#define STYPE "double"
+#define ZERO 0.0
+#define ONE 1.0
+#define TWO 2.0
+#define THREE 3.0
+#define FOUR 4.0
+#define FIVE 5.0
+#define SIX 6.0
+#define FMT "g"
+
+#elif defined(_ARCH_PPC64)
+#define TYPE long
+#define STYPE "long"
+#define ZERO 0L
+#define ONE 1L
+#define TWO 2L
+#define THREE 3L
+#define FOUR 4L
+#define FIVE 5L
+#define SIX 6L
+#define FMT "ld"
+
+#else
+#define TYPE long long
+#define STYPE "long long"
+#define ZERO 0LL
+#define ONE 1LL
+#define TWO 2LL
+#define THREE 3LL
+#define FOUR 4LL
+#define FIVE 5LL
+#define SIX 6LL
+#define FMT "lld"
+#endif
+
+/* Macros to order the left/right values correctly. Note, -maltivec=be does
+ not change the order for static initializations, so we have to handle it
+ specially. */
+
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+#define INIT_ORDER(A, B) (TYPE) A, (TYPE) B
+#define ELEMENT_ORDER(A, B) (TYPE) A, (TYPE) B
+#define ENDIAN "-mbig"
+
+#elif __VEC_ELEMENT_REG_ORDER__ == __ORDER_BIG_ENDIAN__
+#define NO_ARRAY
+#define INIT_ORDER(A, B) (TYPE) B, (TYPE) A
+#define ELEMENT_ORDER(A, B) (TYPE) A, (TYPE) B
+#define ENDIAN "-mlittle -maltivec=be"
+
+#else
+#define INIT_ORDER(A, B) (TYPE) B, (TYPE) A
+#define ELEMENT_ORDER(A, B) (TYPE) B, (TYPE) A
+#define ENDIAN "-mlittle"
+#endif
+
+static volatile TYPE five = FIVE;
+static volatile TYPE six = SIX;
+static volatile vector TYPE s_v12 = { ONE, TWO };
+static volatile vector TYPE g_v34 = { THREE, FOUR };
+
+
+__attribute__((__noinline__))
+static void
+vector_check (vector TYPE v, TYPE expect_hi, TYPE expect_lo)
+{
+ TYPE actual_hi, actual_lo;
+#ifdef DEBUG
+ const char *pass_fail;
+#endif
+
+ __asm__ ("xxlor %x0,%x1,%x1" : "=&wa" (actual_hi) : "wa" (v));
+ __asm__ ("xxpermdi %x0,%x1,%x1,3" : "=&wa" (actual_lo) : "wa" (v));
+
+#ifdef DEBUG
+ if ((actual_hi == expect_hi) && (actual_lo == expect_lo))
+ pass_fail = ", pass";
+ else
+ {
+ pass_fail = ", fail";
+ errors++;
+ }
+
+ printf ("Expected %" FMT ", %" FMT ", got %" FMT ", %" FMT "%s\n",
+ expect_hi, expect_lo,
+ actual_hi, actual_lo,
+ pass_fail);
+#else
+ if ((actual_hi != expect_hi) || (actual_lo != expect_lo))
+ abort ();
+#endif
+}
+
+__attribute__((__noinline__))
+static vector TYPE
+combine (TYPE op0, TYPE op1)
+{
+ return (vector TYPE) { op0, op1 };
+}
+
+__attribute__((__noinline__))
+static vector TYPE
+combine_insert (TYPE op0, TYPE op1)
+{
+ vector TYPE ret = (vector TYPE) { ZERO, ZERO };
+ ret = vec_insert (op0, ret, 0);
+ ret = vec_insert (op1, ret, 1);
+ return ret;
+}
+
+__attribute__((__noinline__))
+static vector TYPE
+concat_extract_00 (vector TYPE a, vector TYPE b)
+{
+ return (vector TYPE) { vec_extract (a, 0), vec_extract (b, 0) };
+}
+
+__attribute__((__noinline__))
+static vector TYPE
+concat_extract_01 (vector TYPE a, vector TYPE b)
+{
+ return (vector TYPE) { vec_extract (a, 0), vec_extract (b, 1) };
+}
+
+__attribute__((__noinline__))
+static vector TYPE
+concat_extract_10 (vector TYPE a, vector TYPE b)
+{
+ return (vector TYPE) { vec_extract (a, 1), vec_extract (b, 0) };
+}
+
+__attribute__((__noinline__))
+static vector TYPE
+concat_extract_11 (vector TYPE a, vector TYPE b)
+{
+ return (vector TYPE) { vec_extract (a, 1), vec_extract (b, 1) };
+}
+
+__attribute__((__noinline__))
+static vector TYPE
+concat_extract2_0s (vector TYPE a, TYPE b)
+{
+ return (vector TYPE) { vec_extract (a, 0), b };
+}
+
+__attribute__((__noinline__))
+static vector TYPE
+concat_extract2_1s (vector TYPE a, TYPE b)
+{
+ return (vector TYPE) { vec_extract (a, 1), b };
+}
+
+__attribute__((__noinline__))
+static vector TYPE
+concat_extract2_s0 (TYPE a, vector TYPE b)
+{
+ return (vector TYPE) { a, vec_extract (b, 0) };
+}
+
+__attribute__((__noinline__))
+static vector TYPE
+concat_extract2_s1 (TYPE a, vector TYPE b)
+{
+ return (vector TYPE) { a, vec_extract (b, 1) };
+}
+
+__attribute__((__noinline__))
+static vector TYPE
+concat_extract_nn (vector TYPE a, vector TYPE b, size_t i, size_t j)
+{
+ return (vector TYPE) { vec_extract (a, i), vec_extract (b, j) };
+}
+
+#ifndef NO_ARRAY
+__attribute__((__noinline__))
+static vector TYPE
+array_0 (vector TYPE v, TYPE a)
+{
+ v[0] = a;
+ return v;
+}
+
+__attribute__((__noinline__))
+static vector TYPE
+array_1 (vector TYPE v, TYPE a)
+{
+ v[1] = a;
+ return v;
+}
+
+__attribute__((__noinline__))
+static vector TYPE
+array_01 (vector TYPE v, TYPE a, TYPE b)
+{
+ v[0] = a;
+ v[1] = b;
+ return v;
+}
+
+__attribute__((__noinline__))
+static vector TYPE
+array_01b (TYPE a, TYPE b)
+{
+ vector TYPE v = (vector TYPE) { 0, 0 };
+ v[0] = a;
+ v[1] = b;
+ return v;
+}
+#endif
+
+int
+main (void)
+{
+ vector TYPE a = (vector TYPE) { ONE, TWO };
+ vector TYPE b = (vector TYPE) { THREE, FOUR };
+ size_t i, j;
+
+#ifndef NO_ARRAY
+ vector TYPE z = (vector TYPE) { ZERO, ZERO };
+#endif
+
+ DEBUG2 ("Endian: %s, type: %s\n", ENDIAN, STYPE);
+ DEBUG0 ("\nStatic/global initialization\n");
+ vector_check (s_v12, INIT_ORDER (1, 2));
+ vector_check (g_v34, INIT_ORDER (3, 4));
+
+ DEBUG0 ("\nVector via constant runtime intiialization\n");
+ vector_check (a, INIT_ORDER (1, 2));
+ vector_check (b, INIT_ORDER (3, 4));
+
+ DEBUG0 ("\nCombine scalars using vector initialization\n");
+ vector_check (combine (1, 2), INIT_ORDER (1, 2));
+ vector_check (combine (3, 4), INIT_ORDER (3, 4));
+
+ DEBUG0 ("\nSetup with vec_insert\n");
+ a = combine_insert (1, 2);
+ b = combine_insert (3, 4);
+ vector_check (a, ELEMENT_ORDER (1, 2));
+ vector_check (b, ELEMENT_ORDER (3, 4));
+
+#ifndef NO_ARRAY
+ DEBUG0 ("\nTesting array syntax\n");
+ vector_check (array_0 (a, FIVE), ELEMENT_ORDER (5, 2));
+ vector_check (array_1 (b, SIX), ELEMENT_ORDER (3, 6));
+ vector_check (array_01 (z, FIVE, SIX), ELEMENT_ORDER (5, 6));
+ vector_check (array_01b (FIVE, SIX), ELEMENT_ORDER (5, 6));
+
+ vector_check (array_0 (a, five), ELEMENT_ORDER (5, 2));
+ vector_check (array_1 (b, six), ELEMENT_ORDER (3, 6));
+ vector_check (array_01 (z, five, six), ELEMENT_ORDER (5, 6));
+ vector_check (array_01b (five, six), ELEMENT_ORDER (5, 6));
+#else
+ DEBUG0 ("\nSkipping array syntax on -maltivec=be\n");
+#endif
+
+ DEBUG0 ("\nTesting concat and extract\n");
+ vector_check (concat_extract_00 (a, b), INIT_ORDER (1, 3));
+ vector_check (concat_extract_01 (a, b), INIT_ORDER (1, 4));
+ vector_check (concat_extract_10 (a, b), INIT_ORDER (2, 3));
+ vector_check (concat_extract_11 (a, b), INIT_ORDER (2, 4));
+
+ DEBUG0 ("\nTesting concat and extract #2\n");
+ vector_check (concat_extract2_0s (a, FIVE), INIT_ORDER (1, 5));
+ vector_check (concat_extract2_1s (a, FIVE), INIT_ORDER (2, 5));
+ vector_check (concat_extract2_s0 (SIX, a), INIT_ORDER (6, 1));
+ vector_check (concat_extract2_s1 (SIX, a), INIT_ORDER (6, 2));
+
+ DEBUG0 ("\nTesting variable concat and extract\n");
+ for (i = 0; i < 2; i++)
+ {
+ for (j = 0; j < 2; j++)
+ {
+ static struct {
+ TYPE hi;
+ TYPE lo;
+ } hilo[2][2] =
+ { { { ONE, THREE }, { ONE, FOUR } },
+ { { TWO, THREE }, { TWO, FOUR } } };
+
+ vector_check (concat_extract_nn (a, b, i, j),
+ INIT_ORDER (hilo[i][j].hi, hilo[i][j].lo));
+ }
+ }
+
+ DEBUG0 ("\nTesting separate function\n");
+ vector_check (combine (vec_extract (a, 0), vec_extract (b, 0)),
+ INIT_ORDER (1, 3));
+
+ vector_check (combine (vec_extract (a, 0), vec_extract (b, 1)),
+ INIT_ORDER (1, 4));
+
+ vector_check (combine (vec_extract (a, 1), vec_extract (b, 0)),
+ INIT_ORDER (2, 3));
+
+ vector_check (combine (vec_extract (a, 1), vec_extract (b, 1)),
+ INIT_ORDER (2, 4));
+
+ vector_check (combine_insert (vec_extract (a, 0), vec_extract (b, 0)),
+ ELEMENT_ORDER (1, 3));
+
+ vector_check (combine_insert (vec_extract (a, 0), vec_extract (b, 1)),
+ ELEMENT_ORDER (1, 4));
+
+ vector_check (combine_insert (vec_extract (a, 1), vec_extract (b, 0)),
+ ELEMENT_ORDER (2, 3));
+
+ vector_check (combine_insert (vec_extract (a, 1), vec_extract (b, 1)),
+ ELEMENT_ORDER (2, 4));
+
+
+#if defined(DO_DOUBLE)
+ DEBUG0 ("\nTesting explicit 2df concat\n");
+ vector_check (__builtin_vsx_concat_2df (FIVE, SIX), INIT_ORDER (5, 6));
+ vector_check (__builtin_vsx_concat_2df (five, six), INIT_ORDER (5, 6));
+
+#elif defined(_ARCH_PPC64)
+ DEBUG0 ("\nTesting explicit 2di concat\n");
+ vector_check (__builtin_vsx_concat_2di (FIVE, SIX), INIT_ORDER (5, 6));
+ vector_check (__builtin_vsx_concat_2di (five, six), INIT_ORDER (5, 6));
+
+#else
+ DEBUG0 ("\nSkip explicit 2di concat on 32-bit\n");
+#endif
+
+#ifdef DEBUG
+ if (errors)
+ printf ("\n%d error%s were found", errors, (errors == 1) ? "" : "s");
+ else
+ printf ("\nNo errors were found.\n");
+
+ return errors;
+
+#else
+ return 0;
+#endif
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-7.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-7.c
index 8f8271f8f1c..d2febf934f3 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-7.c
@@ -12,5 +12,5 @@ test_all_not_equal_and_not_zero (vector unsigned short *arg1_p,
vector unsigned short arg_1 = *arg1_p;
vector unsigned short arg_2 = *arg2_p;
- return __builtin_vec_vcmpnez_p (__CR6_LT, arg_1, arg_2); /* { dg-error "Builtin function __builtin_vec_vcmpnez_p not supported in this compiler configuration" } */
+ return __builtin_vec_vcmpnez_p (__CR6_LT, arg_1, arg_2); /* { dg-error "builtin function __builtin_vec_vcmpnez_p not supported in this compiler configuration" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-7.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-7.c
index 7b2d4ddf49b..5e1226a651e 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-7.c
@@ -11,5 +11,5 @@ test_any_equal (vector unsigned int *arg1_p, vector unsigned int *arg2_p)
vector unsigned int arg_1 = *arg1_p;
vector unsigned int arg_2 = *arg2_p;
- return __builtin_vec_vcmpnez_p (__CR6_LT_REV, arg_1, arg_2); /* { dg-error "Builtin function __builtin_vec_vcmpnez_p not supported in this compiler configuration" } */
+ return __builtin_vec_vcmpnez_p (__CR6_LT_REV, arg_1, arg_2); /* { dg-error "builtin function __builtin_vec_vcmpnez_p not supported in this compiler configuration" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-7.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-7.c
index 06eb8d7cec6..c425d5a37c2 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-7.c
@@ -11,5 +11,5 @@ fetch_data (vector unsigned int *arg1_p, vector unsigned int *arg2_p)
vector unsigned int arg_1 = *arg1_p;
vector unsigned int arg_2 = *arg2_p;
- return __builtin_vec_vcmpnez (arg_1, arg_2); /* { dg-error "Builtin function __builtin_altivec_vcmpnezw requires the -mcpu=power9 option" } */
+ return __builtin_vec_vcmpnez (arg_1, arg_2); /* { dg-error "builtin function __builtin_altivec_vcmpnezw requires the -mcpu=power9 option" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c
index f1f30092bd3..03c44c11fb5 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c
@@ -10,5 +10,5 @@ count_leading_zero_byte_bits (vector unsigned char *arg1_p)
{
vector unsigned char arg_1 = *arg1_p;
- return __builtin_vec_vclzlsbb (arg_1); /* { dg-error "Builtin function __builtin_altivec_vclzlsbb requires the -mcpu=power9 option" } */
+ return __builtin_vec_vclzlsbb (arg_1); /* { dg-error "builtin function __builtin_altivec_vclzlsbb requires the -mcpu=power9 option" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c
index 4d6182b02c7..1171e25adba 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c
@@ -10,5 +10,5 @@ count_trailing_zero_byte_bits (vector unsigned char *arg1_p)
{
vector unsigned char arg_1 = *arg1_p;
- return __builtin_vec_vctzlsbb (arg_1); /* { dg-error "Builtin function __builtin_altivec_vctzlsbb requires the -mcpu=power9 option" } */
+ return __builtin_vec_vctzlsbb (arg_1); /* { dg-error "builtin function __builtin_altivec_vctzlsbb requires the -mcpu=power9 option" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-12.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-12.c
index 6e81b383936..cb61fc8a9b9 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-12.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-12.c
@@ -12,5 +12,5 @@
__vector float
fetch_data (float *address, size_t length)
{
- return __builtin_vec_lxvl (address, length); /* { dg-error "Builtin function __builtin_vsx_lxvl requires" } */
+ return __builtin_vec_lxvl (address, length); /* { dg-error "builtin function __builtin_vsx_lxvl requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-13.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-13.c
index 58d364131ba..55e3db43ca2 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-13.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-13.c
@@ -14,5 +14,5 @@
__vector float
fetch_data (float *address, size_t length)
{
- return __builtin_vec_lxvl (address, length); /* { dg-error "Builtin function __builtin_vec_lxvl not supported in this compiler configuration" } */
+ return __builtin_vec_lxvl (address, length); /* { dg-error "builtin function __builtin_vec_lxvl not supported in this compiler configuration" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xlx-7.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xlx-7.c
index 2fc5567b043..2a69302fe56 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xlx-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xlx-7.c
@@ -11,5 +11,5 @@ fetch_data (unsigned int offset, vector signed int *datap)
{
vector signed int data = *datap;
- return __builtin_vec_vextulx (offset, data); /* { dg-error "Builtin function __builtin_altivec_vextuwlx requires" } */
+ return __builtin_vec_vextulx (offset, data); /* { dg-error "builtin function __builtin_altivec_vextuwlx requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xrx-7.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xrx-7.c
index fb82157ca10..27215ce23e5 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xrx-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xrx-7.c
@@ -11,5 +11,5 @@ fetch_data (unsigned short offset, vector signed short *datap)
{
vector signed short data = *datap;
- return __builtin_vec_vexturx (offset, data); /* { dg-error "Builtin function __builtin_altivec_vextuhrx requires" } */
+ return __builtin_vec_vexturx (offset, data); /* { dg-error "builtin function __builtin_altivec_vextuhrx requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-12.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-12.c
index 42fe2c638ed..86354b03d66 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-12.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-12.c
@@ -14,5 +14,5 @@ store_data (vector double *datap, double *address, size_t length)
{
vector double data = *datap;
- __builtin_vec_stxvl (data, address, length); /* { dg-error "Builtin function __builtin_vec_stxvl not supported in this compiler configuration" } */
+ __builtin_vec_stxvl (data, address, length); /* { dg-error "builtin function __builtin_vec_stxvl not supported in this compiler configuration" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-13.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-13.c
index cc07b3a7f64..49feaa67a18 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-13.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-13.c
@@ -15,5 +15,5 @@ store_data (vector double *datap, double *address, size_t length)
{
vector double data = *datap;
- __builtin_vec_stxvl (data, address, length); /* { dg-error "Builtin function __builtin_altivec_stxvl requires" } */
+ __builtin_vec_stxvl (data, address, length); /* { dg-error "builtin function __builtin_altivec_stxvl requires" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-extract-6.c b/gcc/testsuite/gcc.target/powerpc/vsx-extract-6.c
new file mode 100644
index 00000000000..8a5eb573f79
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-extract-6.c
@@ -0,0 +1,25 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O2 -mvsx" } */
+
+vector unsigned long
+test_vpasted (vector unsigned long high, vector unsigned long low)
+{
+ vector unsigned long res;
+ res[1] = high[1];
+ res[0] = low[0];
+ return res;
+}
+
+/* { dg-final { scan-assembler-times {\mxxpermdi\M} 1 } } */
+/* { dg-final { scan-assembler-not {\mvspltisw\M} } } */
+/* { dg-final { scan-assembler-not {\mxxlor\M} } } */
+/* { dg-final { scan-assembler-not {\mxxlxor\M} } } */
+/* { dg-final { scan-assembler-not {\mxxspltib\M} } } */
+/* { dg-final { scan-assembler-not {\mlxvx?\M} } } */
+/* { dg-final { scan-assembler-not {\mlxv[dw][24]x\M} } } */
+/* { dg-final { scan-assembler-not {\mlvx\M} } } */
+/* { dg-final { scan-assembler-not {\mstxvx?\M} } } */
+/* { dg-final { scan-assembler-not {\mstxv[dw][24]x\M} } } */
+/* { dg-final { scan-assembler-not {\mstvx\M} } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-extract-7.c b/gcc/testsuite/gcc.target/powerpc/vsx-extract-7.c
new file mode 100644
index 00000000000..961a980794e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-extract-7.c
@@ -0,0 +1,25 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O2 -mvsx" } */
+
+vector double
+test_vpasted (vector double high, vector double low)
+{
+ vector double res;
+ res[1] = high[1];
+ res[0] = low[0];
+ return res;
+}
+
+/* { dg-final { scan-assembler-times {\mxxpermdi\M} 1 } } */
+/* { dg-final { scan-assembler-not {\mvspltisw\M} } } */
+/* { dg-final { scan-assembler-not {\mxxlor\M} } } */
+/* { dg-final { scan-assembler-not {\mxxlxor\M} } } */
+/* { dg-final { scan-assembler-not {\mxxspltib\M} } } */
+/* { dg-final { scan-assembler-not {\mlxvx?\M} } } */
+/* { dg-final { scan-assembler-not {\mlxv[dw][24]x\M} } } */
+/* { dg-final { scan-assembler-not {\mlvx\M} } } */
+/* { dg-final { scan-assembler-not {\mstxvx?\M} } } */
+/* { dg-final { scan-assembler-not {\mstxv[dw][24]x\M} } } */
+/* { dg-final { scan-assembler-not {\mstvx\M} } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-himode.c b/gcc/testsuite/gcc.target/powerpc/vsx-himode.c
index 8f710e5c5bd..2a4e610de72 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsx-himode.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-himode.c
@@ -2,7 +2,7 @@
/* { 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 -mvsx-small-integer" } */
+/* { dg-options "-mcpu=power9 -O2" } */
double load_asm_d_constraint (short *p)
{
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-himode2.c b/gcc/testsuite/gcc.target/powerpc/vsx-himode2.c
index e6f26a8e014..6ee08cf109a 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsx-himode2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-himode2.c
@@ -2,7 +2,7 @@
/* { 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 -mvsx-small-integer" } */
+/* { dg-options "-mcpu=power9 -O2" } */
unsigned int foo (unsigned short u)
{
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-himode3.c b/gcc/testsuite/gcc.target/powerpc/vsx-himode3.c
index 3c0e66d14ca..972be677dd6 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsx-himode3.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-himode3.c
@@ -2,7 +2,7 @@
/* { 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 -mvsx-small-integer" } */
+/* { dg-options "-mcpu=power9 -O2" } */
double load_asm_v_constraint (short *p)
{
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-qimode.c b/gcc/testsuite/gcc.target/powerpc/vsx-qimode.c
index a252457f314..1c224cb1b61 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsx-qimode.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-qimode.c
@@ -2,7 +2,7 @@
/* { 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 -mvsx-small-integer" } */
+/* { dg-options "-mcpu=power9 -O2" } */
double load_asm_d_constraint (signed char *p)
{
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-qimode2.c b/gcc/testsuite/gcc.target/powerpc/vsx-qimode2.c
index d321970d0ac..478c9da3051 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsx-qimode2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-qimode2.c
@@ -2,7 +2,7 @@
/* { 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 -mvsx-small-integer" } */
+/* { dg-options "-mcpu=power9 -O2" } */
unsigned int foo (unsigned char u)
{
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-qimode3.c b/gcc/testsuite/gcc.target/powerpc/vsx-qimode3.c
index 50142e8d86d..6537d8b80a0 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsx-qimode3.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-qimode3.c
@@ -2,7 +2,7 @@
/* { 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 -mvsx-small-integer" } */
+/* { dg-options "-mcpu=power9 -O2" } */
double load_asm_v_constraint (signed char *p)
{
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-simode.c b/gcc/testsuite/gcc.target/powerpc/vsx-simode.c
index 91d55bb8791..77049008845 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsx-simode.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-simode.c
@@ -2,7 +2,7 @@
/* { 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 -mvsx-small-integer" } */
+/* { dg-options "-mcpu=power8 -O2" } */
double load_asm_d_constraint (int *p)
{
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-simode2.c b/gcc/testsuite/gcc.target/powerpc/vsx-simode2.c
index 56793a16222..92053d9ac35 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsx-simode2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-simode2.c
@@ -2,7 +2,7 @@
/* { 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 -mvsx-small-integer" } */
+/* { dg-options "-mcpu=power8 -O2" } */
unsigned int foo (unsigned int u)
{
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-simode3.c b/gcc/testsuite/gcc.target/powerpc/vsx-simode3.c
index a35e6db0b79..62f5ab46c04 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsx-simode3.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-simode3.c
@@ -2,7 +2,7 @@
/* { 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 -mvsx-small-integer" } */
+/* { dg-options "-mcpu=power8 -O2" } */
double load_asm_v_constraint (int *p)
{
diff --git a/gcc/testsuite/gcc.target/s390/pr81534.c b/gcc/testsuite/gcc.target/s390/pr81534.c
new file mode 100644
index 00000000000..0e1bd99b9cb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/pr81534.c
@@ -0,0 +1,17 @@
+/* PR81534 This testcase used to fail because the HI/QI
+ "atomic_fetch_<atomic><mode>" expander accepted symbolic references
+ and emitted CAS patterns whose insn definition rejected them. */
+
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=zEC12" } */
+
+struct {
+ short b;
+ long c;
+} a = {};
+
+void
+d ()
+{
+ __atomic_fetch_add(&a.b, 0, 5);
+}
diff --git a/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/do-test.S b/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/do-test.S
index 1395235fd1e..ffe011bcc68 100644
--- a/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/do-test.S
+++ b/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/do-test.S
@@ -23,141 +23,101 @@ 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/>. */
-#ifdef __x86_64__
-
-# ifdef __ELF__
-# define ELFFN_BEGIN(fn) .type fn,@function
-# define ELFFN_END(fn) .size fn,.-fn
-# else
-# define ELFFN_BEGIN(fn)
-# define ELFFN_END(fn)
-# endif
-
-# define FUNC(fn) \
- .global fn; \
- ELFFN_BEGIN(fn); \
-fn:
-
-#define FUNC_END(fn) ELFFN_END(fn)
-
-# ifdef __AVX__
-# define MOVAPS vmovaps
-# else
-# define MOVAPS movaps
-# endif
-
-/* TODO: Is there a cleaner way to provide these offsets? */
- .struct 0
-test_data_save:
-
- .struct test_data_save + 224
-test_data_input:
-
- .struct test_data_save + 448
-test_data_output:
-
- .struct test_data_save + 672
-test_data_fn:
-
- .struct test_data_save + 680
-test_data_retaddr:
+#if defined(__x86_64__) && defined(__SSE2__)
+
+/* These macros currently support GNU/Linux, Solaris and Darwin. */
+
+#ifdef __ELF__
+# define FN_TYPE(fn) .type fn,@function
+# define FN_SIZE(fn) .size fn,.-fn
+#else
+# define FN_TYPE(fn)
+# define FN_SIZE(fn)
+#endif
+
+#ifdef __USER_LABEL_PREFIX__
+# define ASMNAME2(prefix, name) prefix ## name
+# define ASMNAME1(prefix, name) ASMNAME2(prefix, name)
+# define ASMNAME(name) ASMNAME1(__USER_LABEL_PREFIX__, name)
+#else
+# define ASMNAME(name) name
+#endif
+
+#define FUNC_BEGIN(fn) \
+ .globl ASMNAME(fn); \
+ FN_TYPE (ASMNAME(fn)); \
+ASMNAME(fn):
+
+#define FUNC_END(fn) FN_SIZE(ASMNAME(fn))
+
+#ifdef __AVX__
+# define MOVAPS vmovaps
+#else
+# define MOVAPS movaps
+#endif
.text
-regs_to_mem:
- MOVAPS %xmm6, (%rax)
- MOVAPS %xmm7, 0x10(%rax)
- MOVAPS %xmm8, 0x20(%rax)
- MOVAPS %xmm9, 0x30(%rax)
- MOVAPS %xmm10, 0x40(%rax)
- MOVAPS %xmm11, 0x50(%rax)
- MOVAPS %xmm12, 0x60(%rax)
- MOVAPS %xmm13, 0x70(%rax)
- MOVAPS %xmm14, 0x80(%rax)
- MOVAPS %xmm15, 0x90(%rax)
- mov %rsi, 0xa0(%rax)
- mov %rdi, 0xa8(%rax)
- mov %rbx, 0xb0(%rax)
- mov %rbp, 0xb8(%rax)
- mov %r12, 0xc0(%rax)
- mov %r13, 0xc8(%rax)
- mov %r14, 0xd0(%rax)
- mov %r15, 0xd8(%rax)
+FUNC_BEGIN(regs_to_mem)
+ MOVAPS %xmm6, (%r10)
+ MOVAPS %xmm7, 0x10(%r10)
+ MOVAPS %xmm8, 0x20(%r10)
+ MOVAPS %xmm9, 0x30(%r10)
+ MOVAPS %xmm10, 0x40(%r10)
+ MOVAPS %xmm11, 0x50(%r10)
+ MOVAPS %xmm12, 0x60(%r10)
+ MOVAPS %xmm13, 0x70(%r10)
+ MOVAPS %xmm14, 0x80(%r10)
+ MOVAPS %xmm15, 0x90(%r10)
+ mov %rsi, 0xa0(%r10)
+ mov %rdi, 0xa8(%r10)
+ mov %rbx, 0xb0(%r10)
+ mov %rbp, 0xb8(%r10)
+ mov %r12, 0xc0(%r10)
+ mov %r13, 0xc8(%r10)
+ mov %r14, 0xd0(%r10)
+ mov %r15, 0xd8(%r10)
retq
-
-mem_to_regs:
- MOVAPS (%rax), %xmm6
- MOVAPS 0x10(%rax),%xmm7
- MOVAPS 0x20(%rax),%xmm8
- MOVAPS 0x30(%rax),%xmm9
- MOVAPS 0x40(%rax),%xmm10
- MOVAPS 0x50(%rax),%xmm11
- MOVAPS 0x60(%rax),%xmm12
- MOVAPS 0x70(%rax),%xmm13
- MOVAPS 0x80(%rax),%xmm14
- MOVAPS 0x90(%rax),%xmm15
- mov 0xa0(%rax),%rsi
- mov 0xa8(%rax),%rdi
- mov 0xb0(%rax),%rbx
- mov 0xb8(%rax),%rbp
- mov 0xc0(%rax),%r12
- mov 0xc8(%rax),%r13
- mov 0xd0(%rax),%r14
- mov 0xd8(%rax),%r15
+FUNC_END(regs_to_mem)
+
+FUNC_BEGIN(mem_to_regs)
+ MOVAPS (%r10), %xmm6
+ MOVAPS 0x10(%r10),%xmm7
+ MOVAPS 0x20(%r10),%xmm8
+ MOVAPS 0x30(%r10),%xmm9
+ MOVAPS 0x40(%r10),%xmm10
+ MOVAPS 0x50(%r10),%xmm11
+ MOVAPS 0x60(%r10),%xmm12
+ MOVAPS 0x70(%r10),%xmm13
+ MOVAPS 0x80(%r10),%xmm14
+ MOVAPS 0x90(%r10),%xmm15
+ mov 0xa0(%r10),%rsi
+ mov 0xa8(%r10),%rdi
+ mov 0xb0(%r10),%rbx
+ mov 0xb8(%r10),%rbp
+ mov 0xc0(%r10),%r12
+ mov 0xc8(%r10),%r13
+ mov 0xd0(%r10),%r14
+ mov 0xd8(%r10),%r15
retq
+FUNC_END(mem_to_regs)
# NOTE: Not MT safe
-FUNC(do_test_unaligned)
- .cfi_startproc
+FUNC_BEGIN(do_test_unaligned)
# The below alignment checks are to verify correctness of the test
# its self.
# Verify that incoming stack is aligned + 8
- pushf
- test $0x8, %rsp
- jne L0
+ test $0xf, %rsp
+ je ASMNAME(do_test_body)
int $3 # Stack not unaligned
+FUNC_END(do_test_unaligned)
-FUNC(do_test_aligned)
+FUNC_BEGIN(do_test_aligned)
# Verify that incoming stack is aligned
- pushf
- test $0xf, %rsp
- je L0
+ test $0x8, %rsp
+ jne ASMNAME(do_test_body)
int $3 # Stack not aligned
-L0:
- popf
-
- # Save registers
- lea test_data(%rip), %rax
- call regs_to_mem
-
- # Load register with random data
- lea test_data + test_data_input(%rip), %rax
- call mem_to_regs
-
- # Save original return address
- pop %rax
- movq %rax, test_data + test_data_retaddr(%rip)
-
- # Call the test function
- call *test_data + test_data_fn(%rip)
-
- # Restore the original return address
- movq test_data + test_data_retaddr(%rip), %rcx
- push %rcx
-
- # Save test function return value and store resulting register values
- push %rax
- lea test_data + test_data_output(%rip), %rax
- call regs_to_mem
-
- # Restore registers
- lea test_data(%rip), %rax
- call mem_to_regs
- pop %rax
- retq
- .cfi_endproc
FUNC_END(do_test_aligned)
-FUNC_END(do_test_unaligned)
#endif /* __x86_64__ */
diff --git a/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.c b/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.c
index 2a011f5103d..5fdd1e20674 100644
--- a/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.c
+++ b/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.c
@@ -46,6 +46,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
is then called. After the function returns, the value of all volatile
registers is verified against the random data and then restored. */
+/* { dg-do run } */
+/* { dg-additional-sources "do-test.S" } */
+/* { dg-additional-options "-Wall" } */
+
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
@@ -58,8 +62,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include <errno.h>
#include <ctype.h>
-#ifndef __x86_64__
-# error Test only valid on x86_64
+#if !defined(__x86_64__) || !defined(__SSE2__)
+# error Test only valid on x86_64 with -msse2
#endif
enum reg_data_sets
@@ -144,6 +148,72 @@ static __attribute__((ms_abi)) long
static int arbitrarily_fail;
static const char *argv0;
+
+#define PASTE_STR2(a) #a
+#define PASTE_STR1(a, b) PASTE_STR2(a ## b)
+#define PASTE_STR(a, b) PASTE_STR1(a, b)
+
+#ifdef __USER_LABEL_PREFIX__
+# define ASMNAME(name) PASTE_STR(__USER_LABEL_PREFIX__, name)
+#else
+# define ASMNAME(name) #name
+#endif
+
+#ifdef __MACH__
+# define LOAD_TEST_DATA_ADDR(dest) \
+ " mov " ASMNAME(test_data) "@GOTPCREL(%%rip), " dest "\n"
+#else
+# define LOAD_TEST_DATA_ADDR(dest) \
+ " lea " ASMNAME(test_data) "(%%rip), " dest "\n"
+#endif
+
+#define TEST_DATA_OFFSET(f) ((int)__builtin_offsetof(struct test_data, f))
+
+void __attribute__((naked))
+do_test_body (void)
+{__asm__ (
+ " # rax, r10 and r11 are usable here.\n"
+ "\n"
+ " # Save registers.\n"
+ LOAD_TEST_DATA_ADDR("%%rax")
+ " lea %p0(%%rax), %%r10\n"
+ " call " ASMNAME(regs_to_mem) "\n"
+ "\n"
+ " # Load registers with random data.\n"
+ " lea %p1(%%rax), %%r10\n"
+ " call " ASMNAME(mem_to_regs) "\n"
+ "\n"
+ " # Pop and save original return address.\n"
+ " pop %%r10\n"
+ " mov %%r10, %p4(%%rax)\n"
+ "\n"
+ " # Call the test function, after which rcx, rdx and r8-11\n"
+ " # become usable.\n"
+ " lea %p3(%%rax), %%rax\n"
+ " call *(%%rax)\n"
+ "\n"
+ " # Store resulting register values.\n"
+ LOAD_TEST_DATA_ADDR("%%rcx")
+ " lea %p2(%%rcx), %%r10\n"
+ " call " ASMNAME(regs_to_mem) "\n"
+ "\n"
+ " # Push the original return address.\n"
+ " lea %p4(%%rcx), %%r10\n"
+ " push (%%r10)\n"
+ "\n"
+ " # Restore registers.\n"
+ " lea %p0(%%rcx), %%r10\n"
+ " call " ASMNAME(mem_to_regs) "\n"
+ "\n"
+ " retq\n"
+ ::
+ "i"(TEST_DATA_OFFSET(regdata[REG_SET_SAVE])),
+ "i"(TEST_DATA_OFFSET(regdata[REG_SET_INPUT])),
+ "i"(TEST_DATA_OFFSET(regdata[REG_SET_OUTPUT])),
+ "i"(TEST_DATA_OFFSET(fn)),
+ "i"(TEST_DATA_OFFSET(retaddr)) : "memory");
+}
+
static void __attribute__((noinline))
init_test (void *fn, const char *name, enum alignment_option alignment,
enum shrink_wrap_option shrink_wrap, long ret_expected)
diff --git a/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp b/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp
index 26777e0b59f..87f81690bc7 100644
--- a/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp
+++ b/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp
@@ -56,52 +56,48 @@ proc host_supports_c++11 {} {
# Exit immediately if this isn't a native x86_64 target.
if { (![istarget x86_64-*-*] && ![istarget i?86-*-*])
- || ![is-effective-target lp64] || ![isnative]
- || ![host_supports_c++11] } then {
- unsupported "$subdir"
+ || ![is-effective-target lp64] || ![isnative]
+ || ![host_supports_c++11] } then {
+
+ # Gate "unsupported" message return value of first runtest_file_p call.
+ if [runtest_file_p $runtests "$srcdir/$subdir/ms-sysv.c"] {
+ unsupported "$subdir"
+ }
return
}
-global GCC_RUNTEST_PARALLELIZE_DIR
-
proc runtest_ms_sysv { cflags generator_args } {
global GCC_UNDER_TEST HOSTCXX HOSTCXXFLAGS tmpdir srcdir subdir \
- parallel_dir next_test
+ TEST_ALWAYS_FLAGS runtests
set objdir "$tmpdir/ms-sysv"
set generator "$tmpdir/ms-sysv-generate.exe"
set generated_header "$objdir/ms-sysv-generated.h"
- set do_test_o "$objdir/do-test.o"
- set ms_sysv_o "$objdir/ms-sysv.o"
- set ms_sysv_exe "$objdir/ms-sysv.exe"
set status 0
set warn_flags "-Wall"
- set this_test $next_test
- incr next_test
-
- # Do parallelization here
- if [catch {set fd [open "$parallel_dir/$this_test" \
- [list RDWR CREAT EXCL]]} ] {
- if { [lindex $::errorCode 1] eq "EEXIST" } then {
- # Another job is running this test
- return
- } else {
- error "Failed to open $parallel_dir/$this_test: $::errorCode"
- set status 1
- }
- } else {
- close $fd
- }
# Detect when hard frame pointers are enabled (or required) so we know not
# to generate bp clobbers.
- if [regexp "^(.+ +| *)-(O0|fno-omit-frame-pointer|p|pg)( +.*)?$" \
- $cflags match] then {
+ if { [regexp "(^| )-(O0|fno-omit-frame-pointer|p|pg)( |$)" \
+ "$TEST_ALWAYS_FLAGS $cflags" match]
+ || [istarget *-*-solaris*] } then {
set generator_args "$generator_args --omit-rbp-clobbers"
}
- set descr "$subdir CFLAGS=\"$cflags\" generator_args=\"$generator_args\""
- verbose "$tmpdir: Running test $descr" 1
+ # Add all other flags
+ set escaped_generator_args [regsub -all " " $generator_args "\\ "]
+ set cflags "$cflags\"-DGEN_ARGS=$escaped_generator_args\""
+
+ gcc_parallel_test_enable 1
+ if ![runtest_file_p $runtests "$srcdir/$subdir/ms-sysv.c"] then {
+ return
+ }
+
+ #verbose "runtest_ms_sysv $cflags" 0
+
+ # Make sure there's no previous header file so that we can't accidentally
+ # pass if generation fails.
+ file delete -force $generated_header
# Cleanup any previous test in objdir
file delete -force $objdir
@@ -109,18 +105,16 @@ proc runtest_ms_sysv { cflags generator_args } {
# Build the generator (only needs to be done once).
set src "$srcdir/$subdir/gen.cc"
- if { $status == 0 } then {
- if { (![file exists "$generator"]) || ([file mtime "$generator"]
- < [file mtime "$src"]) } {
- # Temporarily switch to the environment for the host compiler.
- restore_ld_library_path_env_vars
- set cxx "$HOSTCXX $HOSTCXXFLAGS $warn_flags -std=c++11"
- set status [remote_exec host "$cxx -o $generator $src"]
- set status [lindex $status 0]
- set_ld_library_path_env_vars
- if { $status != 0 } then {
- warning "Could not build $subdir generator"
- }
+ if { (![file exists "$generator"]) || ([file mtime "$generator"]
+ < [file mtime "$src"]) } {
+ # Temporarily switch to the environment for the host compiler.
+ restore_ld_library_path_env_vars
+ set cxx "$HOSTCXX $HOSTCXXFLAGS $TEST_ALWAYS_FLAGS $warn_flags -std=c++11"
+ set status [remote_exec host "$cxx -o $generator $src"]
+ set status [lindex $status 0]
+ set_ld_library_path_env_vars
+ if { $status != 0 } then {
+ warning "Could not build $subdir generator"
}
}
@@ -133,75 +127,26 @@ proc runtest_ms_sysv { cflags generator_args } {
}
}
- set cc "$GCC_UNDER_TEST -I$objdir -I$srcdir/$subdir $cflags $warn_flags"
-
- # Assemble do-test.S
- set src "$srcdir/$subdir/do-test.S"
- if { $status == 0 } then {
- set status [remote_exec build "$cc -c -o $do_test_o $src"]
- set status [lindex $status 0]
- if { $status != 0 } then {
- warning "Could not assemble $src"
- }
- }
-
- # Build ms-sysv.c
- set src "$srcdir/$subdir/ms-sysv.c"
- if { $status == 0 } then {
- set status [remote_exec build "$cc -c -o $ms_sysv_o $src" "" "" "" 1200]
- set status [lindex $status 0]
- if { $status != 0 } then {
- warning "Could not build $src."
- }
- }
-
- # Link
- if { $status == 0 } then {
- set status [remote_exec build "$cc -o $ms_sysv_exe $ms_sysv_o $do_test_o"]
- set status [lindex $status 0]
- if { $status != 0 } then {
- warning "Link failed."
- }
- }
-
- # Execute
- if { $status == 0 } then {
- set status [remote_exec build "$ms_sysv_exe"]
- set status [lindex $status 0]
- }
-
- if { $status != 0 } then {
- fail $descr
- } else {
- pass $descr
- }
+ gcc_parallel_test_enable 0
+ dg-runtest $srcdir/$subdir/ms-sysv.c "$cflags" "-I$objdir -I$srcdir/$subdir $warn_flags"
+ gcc_parallel_test_enable 1
}
dg-init
-# Setup parallelization
-set next_test 0
-set parallel_dir "$env(GCC_RUNTEST_PARALLELIZE_DIR)/abi-ms-sysv"
-file mkdir "$env(GCC_RUNTEST_PARALLELIZE_DIR)"
-file mkdir "$parallel_dir"
-
-if { ![file isdirectory "$parallel_dir"] } then {
- error "Failed to create directory $parallel_dir: $::errorCode"
- return
-}
+# Standard test parameters.
+set gen_pcount_opts [list "-p0" "-p1" "-p5"]
+set base_cflags_arr [list " -O2 " " -O0 -g3 "]
-set gen_opts "-p0-5"
-set all_options [list "-O2" "-O0 -g3"]
+foreach gen_opts $gen_pcount_opts {
+ foreach cflags $base_cflags_arr {
+ # Run without -mcall-ms2sysv-xlogues always
+ runtest_ms_sysv "$cflags" "$gen_opts"
-# Run without -mcall-ms2sysv-xlogues always
-foreach opt $all_options {
- runtest_ms_sysv "$opt" "$gen_opts"
-}
-
-# Skip -mcall-ms2sysv-xlogues on Windows (not supported)
-if { ![istarget *-*-cygwin*] && ![istarget *-*-mingw*] } {
- foreach opt $all_options {
- runtest_ms_sysv "-mcall-ms2sysv-xlogues $opt" "$gen_opts"
+ # Skip unsupported -mcall-ms2sysv-xlogues on Windows
+ if { ![istarget *-*-cygwin*] && ![istarget *-*-mingw*] } {
+ runtest_ms_sysv "-mcall-ms2sysv-xlogues$cflags" "$gen_opts"
+ }
}
}
diff --git a/gcc/testsuite/gfortran.dg/bind_c_usage_30.f90 b/gcc/testsuite/gfortran.dg/bind_c_usage_30.f90
new file mode 100644
index 00000000000..932d38edd30
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/bind_c_usage_30.f90
@@ -0,0 +1,6 @@
+! { dg-do compile }
+! PR 60355 - there was no error message for implicitly typed variables
+! Test case contributed by Vladimir Fuka
+program main
+ bind(c) test_BIND ! { dg-error "cannot be BIND" }
+END
diff --git a/gcc/testsuite/gfortran.dg/dec_d_lines_1.f b/gcc/testsuite/gfortran.dg/dec_d_lines_1.f
new file mode 100644
index 00000000000..2cc7a01daff
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dec_d_lines_1.f
@@ -0,0 +1,9 @@
+! { dg-do compile }
+! { dg-options "-ffixed-form -fd-lines-as-code -fdec" }
+!
+! Ensure -fd-lines-as-code is not overridden by -fdec.
+!
+ i = 0
+d end
+ subroutine s
+D end
diff --git a/gcc/testsuite/gfortran.dg/dec_d_lines_2.f b/gcc/testsuite/gfortran.dg/dec_d_lines_2.f
new file mode 100644
index 00000000000..31eaf5f2328
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dec_d_lines_2.f
@@ -0,0 +1,8 @@
+! { dg-do compile }
+! { dg-options "-ffixed-form -fdec" }
+!
+! Ensure -fd-lines-as-comments is enabled by default with -fdec.
+!
+d This is a comment.
+D This line, too.
+ end
diff --git a/gcc/testsuite/gfortran.dg/dec_structure_18.f90 b/gcc/testsuite/gfortran.dg/dec_structure_18.f90
new file mode 100644
index 00000000000..1e6b229216b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dec_structure_18.f90
@@ -0,0 +1,38 @@
+ ! { dg-do run }
+ ! { dg-options "-fdec-structure -ffixed-form" }
+ !
+ ! Test the %FILL component extension.
+ !
+ implicit none
+
+ structure /s/
+ character(2) i
+ character(2) %fill
+ character(2) j
+ end structure
+
+ structure /s2/
+ character buf(6)
+ end structure
+
+ record /s/ x
+ record /s2/ y
+ equivalence (x, y)
+
+ x.i = '12'
+ x.j = '34'
+
+ if (y.buf(1) .ne. '1') then
+ call abort
+ endif
+ if (y.buf(2) .ne. '2') then
+ call abort
+ endif
+ if (y.buf(5) .ne. '3') then
+ call abort
+ endif
+ if (y.buf(6) .ne. '4') then
+ call abort
+ endif
+
+ end
diff --git a/gcc/testsuite/gfortran.dg/dec_structure_19.f90 b/gcc/testsuite/gfortran.dg/dec_structure_19.f90
new file mode 100644
index 00000000000..9ea0b3efe13
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dec_structure_19.f90
@@ -0,0 +1,38 @@
+! { dg-do compile }
+! { dg-options "-fdec-structure -ffree-form" }
+!
+! Test the %FILL component extension.
+!
+implicit none
+
+structure /s/
+ character(2) i
+ character(2) %fill
+ character(2) j
+end structure
+
+structure /s2/
+ character buf(6)
+end structure
+
+record /s/ x
+record /s2/ y
+equivalence (x, y)
+
+x.i = "12"
+x.j = "34"
+
+if (y.buf(1) .ne. '1') then
+ call abort
+endif
+if (y.buf(2) .ne. '2') then
+ call abort
+endif
+if (y.buf(5) .ne. '3') then
+ call abort
+endif
+if (y.buf(6) .ne. '4') then
+ call abort
+endif
+
+end
diff --git a/gcc/testsuite/gfortran.dg/dec_structure_20.f90 b/gcc/testsuite/gfortran.dg/dec_structure_20.f90
new file mode 100644
index 00000000000..9e952040076
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dec_structure_20.f90
@@ -0,0 +1,18 @@
+ ! { dg-do compile }
+ ! { dg-options "-fdec-structure" }
+ !
+ ! Test error handling for %FILL
+ !
+ implicit none
+
+ structure /s/
+ integer(2) i /3/
+ integer(2) %fill /4/ ! { dg-error "cannot have an initializer" }
+ integer(2), pointer :: %fill ! { dg-error "cannot have attributes" }
+ end structure
+
+ type t
+ integer %fill ! { dg-error "not allowed outside STRUCTURE" }
+ endtype
+
+ end
diff --git a/gcc/testsuite/gfortran.dg/dec_structure_21.f90 b/gcc/testsuite/gfortran.dg/dec_structure_21.f90
new file mode 100644
index 00000000000..64e8ca39e46
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dec_structure_21.f90
@@ -0,0 +1,10 @@
+ ! { dg-do compile }
+ ! { dg-options "-ffixed-form" }
+ !
+ ! Test errors for %FILL without -fdec-structure.
+ !
+ implicit none
+
+ character(2) %fill ! { dg-error "is a DEC extension" }
+
+ end
diff --git a/gcc/testsuite/gfortran.dg/dim_sum_1.f90 b/gcc/testsuite/gfortran.dg/dim_sum_1.f90
new file mode 100644
index 00000000000..b2fb94312d3
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dim_sum_1.f90
@@ -0,0 +1,37 @@
+! { dg-do run }
+! { dg-shouldfail "Dim argument incorrect in SUM intrinsic: is 5, should be between 1 and 2" }
+
+program summation
+
+ integer, parameter :: n1=5, n2=7
+ integer, dimension(1:n1,1:n2) :: arr
+ integer, dimension(1:n1) :: r2
+ integer, dimension(1:n2) :: r1
+ integer :: i,j
+ character(len=80) :: c1, c2
+ character(len=50) :: fmt = '(10I5)'
+ do j=1,n2
+ do i=1,n1
+ arr(i,j) = i+j*10
+ end do
+ end do
+
+ r1 = sum(arr,dim=1)
+ write (unit=c2, fmt=fmt) r1
+ call print_sum(1,c1)
+ if (c1 /= c2) call abort
+ r2 = sum(arr,dim=2)
+ write (unit=c2, fmt=fmt) r2
+ call print_sum(2,c1)
+ if (c1 /= c2) call abort
+ call print_sum(5,c1)
+
+contains
+
+ subroutine print_sum(d, c)
+ integer, intent(in) :: d
+ character(len=80), intent(out) :: c
+ write (unit=c, fmt=fmt) sum(arr,dim=d)
+ end subroutine
+
+end
diff --git a/gcc/testsuite/gfortran.dg/dim_sum_2.f90 b/gcc/testsuite/gfortran.dg/dim_sum_2.f90
new file mode 100644
index 00000000000..6290444a81d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dim_sum_2.f90
@@ -0,0 +1,37 @@
+! { dg-do run }
+! { dg-shouldfail "Dim argument incorrect in SUM intrinsic: is 5, should be between 1 and 2" }
+
+program summation
+
+ integer, parameter :: n1=5, n2=7
+ integer, dimension(1:n1,1:n2) :: arr
+ integer, dimension(1:n1) :: r2
+ integer, dimension(1:n2) :: r1
+ integer :: i,j
+ character(len=80) :: c1, c2
+ character(len=50) :: fmt = '(10I5)'
+ do j=1,n2
+ do i=1,n1
+ arr(i,j) = i+j*10
+ end do
+ end do
+
+ r1 = sum(arr,dim=1,mask=arr>23)
+ write (unit=c2, fmt=fmt) r1
+ call print_sum(1,c1)
+ if (c1 /= c2) call abort
+ r2 = sum(arr,dim=2,mask=arr>23)
+ write (unit=c2, fmt=fmt) r2
+ call print_sum(2,c1)
+ if (c1 /= c2) call abort
+ call print_sum(5,c1)
+
+contains
+
+ subroutine print_sum(d, c)
+ integer, intent(in) :: d
+ character(len=80), intent(out) :: c
+ write (unit=c, fmt=fmt) sum(arr,dim=d,mask=arr>23)
+ end subroutine
+
+end
diff --git a/gcc/testsuite/gfortran.dg/dim_sum_3.f90 b/gcc/testsuite/gfortran.dg/dim_sum_3.f90
new file mode 100644
index 00000000000..2661b3700fd
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dim_sum_3.f90
@@ -0,0 +1,37 @@
+! { dg-do run }
+! { dg-shouldfail "Dim argument incorrect in SUM intrinsic: is 5, should be between 1 and 2" }
+
+program summation
+
+ integer, parameter :: n1=5, n2=7
+ integer, dimension(1:n1,1:n2) :: arr
+ integer, dimension(1:n1) :: r2
+ integer, dimension(1:n2) :: r1
+ integer :: i,j
+ character(len=80) :: c1, c2
+ character(len=50) :: fmt = '(10I5)'
+ do j=1,n2
+ do i=1,n1
+ arr(i,j) = i+j*10
+ end do
+ end do
+
+ r1 = sum(arr,dim=1,mask=.true.)
+ write (unit=c2, fmt=fmt) r1
+ call print_sum(1,c1)
+ if (c1 /= c2) call abort
+ r2 = sum(arr,dim=2,mask=.true.)
+ write (unit=c2, fmt=fmt) r2
+ call print_sum(2,c1)
+ if (c1 /= c2) call abort
+ call print_sum(5,c1)
+
+contains
+
+ subroutine print_sum(d, c)
+ integer, intent(in) :: d
+ character(len=80), intent(out) :: c
+ write (unit=c, fmt=fmt) sum(arr,dim=d,mask=.true.)
+ end subroutine
+
+end
diff --git a/gcc/testsuite/gfortran.dg/logical_assignment_1.f90 b/gcc/testsuite/gfortran.dg/logical_assignment_1.f90
new file mode 100644
index 00000000000..c2289805118
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/logical_assignment_1.f90
@@ -0,0 +1,10 @@
+! { dg-do compile }
+! PR 79312 - assigning a logical value to a real
+! is invalid.
+! Test case by John Harper.
+program emptyarray5
+ implicit none
+ real a(0)
+ a = [logical::] ! { dg-error "Can't convert LOGICAL" }
+ print *,size(a)
+end program emptyarray5
diff --git a/gcc/testsuite/gfortran.dg/o_fast_stacksize.f90 b/gcc/testsuite/gfortran.dg/o_fast_stacksize.f90
new file mode 100644
index 00000000000..a373d15e54e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/o_fast_stacksize.f90
@@ -0,0 +1,17 @@
+! { dg-do compile }
+! { dg-options "-Ofast -fmax-stack-var-size=100 -fdump-tree-original" }
+MODULE foo
+CONTAINS
+ SUBROUTINE mysum(a)
+ INTEGER :: a(:)
+ WRITE(6,*) SUM(a)
+ END SUBROUTINE
+END MODULE foo
+
+USE foo
+INTEGER, ALLOCATABLE :: a(:)
+INTEGER, PARAMETER :: N=2**26 ! 256Mb array
+ALLOCATE(a(N)) ; a=1
+CALL mysum(a*a)
+END
+! { dg-final { scan-tree-dump-times "__builtin_malloc" 2 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/pr81529.f90 b/gcc/testsuite/gfortran.dg/pr81529.f90
new file mode 100644
index 00000000000..92e3d48e727
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr81529.f90
@@ -0,0 +1,32 @@
+! { dg-do compile }
+! { dg-options "-std=gnu -fno-tree-scev-cprop -Ofast" }
+
+subroutine CalcCgr(C,rmax,ordgr_max)
+ integer, intent(in) :: rmax,ordgr_max
+ double complex :: Zadj(2,2), Zadj2(2,2)
+ double complex, intent(out) :: C(0:rmax,0:rmax,0:rmax)
+ double complex, allocatable :: Cexpgr(:,:,:,:)
+ double complex :: Caux
+ integer :: rmaxB,rmaxExp,r,n0,n1,n2,k,l,i,j,m,n,nn
+
+ rmaxB = 2*rmax
+ rmaxExp = rmaxB
+ allocate(Cexpgr(0:rmaxExp/2,0:rmaxExp,0:rmaxExp,0:ordgr_max))
+
+ rloop: do r=0,rmaxExp/2
+ do n0=r,1,-1
+ do nn=r-n0,0,-1
+ do i=1,2
+ Caux = Caux - Zadj(i,l)
+ end do
+ Cexpgr(n0,0,0,0) = Caux/(2*(nn+1))
+ end do
+ end do
+ do n1=0,r
+ n2 = r-n1
+ if (r.le.rmax) then
+ C(0,n1,n2) = Cexpgr(0,n1,n2,0)
+ end if
+ end do
+ end do rloop
+end subroutine CalcCgr
diff --git a/gcc/testsuite/gfortran.dg/pr81723.f b/gcc/testsuite/gfortran.dg/pr81723.f
new file mode 100644
index 00000000000..977c1b69bbf
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr81723.f
@@ -0,0 +1,56 @@
+! { dg-do compile }
+! { dg-options "-O3 -fno-automatic" }
+
+ FUNCTION WWERF(Z)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ COMPLEX*16 WWERF
+ COMPLEX*16 Z,ZH,R(37),S,T,V,W
+
+ PARAMETER (Z1 = 1, HF = Z1/2, Z10 = 10)
+ PARAMETER (C1 = 74/Z10, C2 = 83/Z10, C3 = Z10/32, C4 = 16/Z10)
+ PARAMETER (C = 1.12837 91670 95512 57D0, P = (2*C4)**33)
+
+ DOUBLE PRECISION GREAL,GIMAG,XARG,YARG
+ COMPLEX*16 ZARG,GCONJG,GCMPLX
+ GREAL( ZARG)=DREAL( ZARG)
+ GIMAG( ZARG)=DIMAG( ZARG)
+ GCONJG(ZARG)=DCONJG(ZARG)
+ GCMPLX(XARG,YARG)=DCMPLX(XARG,YARG)
+
+ X=Z
+ Y=GIMAG(Z)
+ XA=ABS(X)
+ YA=ABS(Y)
+ IF(YA .LT. C1 .AND. XA .LT. C2) THEN
+ ZH=GCMPLX(YA+C4,XA)
+ R(37)=0
+ DO 1 N = 36,1,-1
+ T=ZH+N*GCONJG(R(N+1))
+ 1 R(N)=HF*T/(GREAL(T)**2+GIMAG(T)**2)
+ XL=P
+ S=0
+ DO 2 N = 33,1,-1
+ XL=C3*XL
+ 2 S=R(N)*(S+XL)
+ V=C*S
+ ELSE
+ ZH=GCMPLX(YA,XA)
+ R(1)=0
+ DO 3 N = 9,1,-1
+ T=ZH+N*GCONJG(R(1))
+ 3 R(1)=HF*T/(GREAL(T)**2+GIMAG(T)**2)
+ V=C*R(1)
+ END IF
+ IF(YA .EQ. 0) V=GCMPLX(EXP(-XA**2),GIMAG(V))
+ IF(Y .LT. 0) THEN
+ V=2*EXP(-GCMPLX(XA,YA)**2)-V
+ IF(X .GT. 0) V=GCONJG(V)
+ ELSE
+ IF(X .LT. 0) V=GCONJG(V)
+ END IF
+
+ WWERF=V
+
+ RETURN
+ END
diff --git a/gcc/testsuite/gfortran.dg/realloc_on_assign_28.f90 b/gcc/testsuite/gfortran.dg/realloc_on_assign_28.f90
new file mode 100644
index 00000000000..2e338e470fd
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/realloc_on_assign_28.f90
@@ -0,0 +1,40 @@
+! { dg-do run }
+!
+! PR fortran/66102
+!
+! Contributed by Vladimir Fuka <vladimir.fuka@gmail.com>
+!
+ type t
+ integer,allocatable :: i
+ end type
+
+ type(t) :: e
+ type(t), allocatable, dimension(:) :: a, b
+ integer :: chksum = 0
+
+ do i=1,3 ! Was 100 in original
+ e%i = i
+ chksum = chksum + i
+ if (.not.allocated(a)) then
+ a = [e]
+ b = first_arg([e], [e])
+ else
+ call foo
+ end if
+ end do
+
+ if (sum ([(a(i)%i, i=1,size(a))]) .ne. chksum) call abort
+ if (any([(a(i)%i, i=1,size(a))] /= [(i, i=1,size(a))])) call abort
+ if (size(a) /= size(b)) call abort
+ if (any([(b(i)%i, i=1,size(b))] /= [(i, i=1,size(b))])) call abort
+contains
+ subroutine foo
+ b = first_arg([b, e], [a, e])
+ a = [a, e]
+ end subroutine
+ elemental function first_arg(arg1, arg2)
+ type(t), intent(in) :: arg1, arg2
+ type(t) :: first_arg
+ first_arg = arg1
+ end function first_arg
+end
diff --git a/gcc/testsuite/gfortran.dg/use_30.f90 b/gcc/testsuite/gfortran.dg/use_30.f90
new file mode 100644
index 00000000000..b0f2ad470bb
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/use_30.f90
@@ -0,0 +1,17 @@
+! { dg-do compile }
+!
+! PR53542 USE-associated variables shows original instead of renamed symbol name
+! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
+!
+module select_precision
+ integer :: dp = kind(1.0)
+end module select_precision
+
+module ode_types
+ use select_precision, only: wp => dp
+contains
+ subroutine ode_derivative(x)
+ real(wp) :: x ! { dg-error "Parameter .wp. at .1. has not been declared" }
+ end subroutine ode_derivative
+end module ode_types
+end
diff --git a/gcc/testsuite/gnat.dg/debug13.adb b/gcc/testsuite/gnat.dg/debug13.adb
new file mode 100644
index 00000000000..4b94b3e6bf1
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/debug13.adb
@@ -0,0 +1,38 @@
+-- { dg-options "-cargs -O2 -g -margs" }
+
+package body Debug13 is
+
+ procedure Compile (P : Natural)
+ is
+ Max_Pos : constant Natural := P;
+ type Position_Set is array (1 .. Max_Pos) of Boolean;
+
+ Empty : constant Position_Set := (others => False);
+
+ type Position_Set_Array is array (1 .. Max_Pos) of Position_Set;
+
+ Follow : Position_Set_Array := (others => Empty);
+
+ function Get_Follows return Position_Set;
+
+ procedure Make_DFA;
+
+ function Get_Follows return Position_Set is
+ Result : Position_Set := Empty;
+ begin
+ Result := Result or Follow (1);
+
+ return Result;
+ end Get_Follows;
+
+ procedure Make_DFA is
+ Next : constant Position_Set := Get_Follows;
+ begin
+ null;
+ end Make_DFA;
+
+ begin
+ Make_DFA;
+ end Compile;
+
+end Debug13;
diff --git a/gcc/testsuite/gnat.dg/debug13.ads b/gcc/testsuite/gnat.dg/debug13.ads
new file mode 100644
index 00000000000..512a9ef75bb
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/debug13.ads
@@ -0,0 +1,5 @@
+package Debug13 is
+
+ procedure Compile (P : Natural);
+
+end Debug13;
diff --git a/gcc/testsuite/gnat.dg/opt66.adb b/gcc/testsuite/gnat.dg/opt66.adb
new file mode 100644
index 00000000000..94a1790737c
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/opt66.adb
@@ -0,0 +1,13 @@
+-- { dg-do compile }
+-- { dg-options "-O" }
+
+procedure Opt66 (I : Integer) is
+ E : exception;
+begin
+ if I = 0 then
+ raise E;
+ end if;
+ Opt66 (I - I / abs (I));
+exception
+ when others => null;
+end;
diff --git a/gcc/testsuite/jit.dg/all-non-failing-tests.h b/gcc/testsuite/jit.dg/all-non-failing-tests.h
index 58e0c30eb0f..4af704a4ca2 100644
--- a/gcc/testsuite/jit.dg/all-non-failing-tests.h
+++ b/gcc/testsuite/jit.dg/all-non-failing-tests.h
@@ -228,6 +228,8 @@
of gcc_jit_context_set_bool_allow_unreachable_blocks affects the whole
context. */
+/* test-vector-types.cc: We don't use this, since it's C++. */
+
/* test-volatile.c */
#define create_code create_code_volatile
#define verify_code verify_code_volatile
diff --git a/gcc/testsuite/jit.dg/test-error-gcc_jit_type_get_vector-bad-type.c b/gcc/testsuite/jit.dg/test-error-gcc_jit_type_get_vector-bad-type.c
new file mode 100644
index 00000000000..59aed337184
--- /dev/null
+++ b/gcc/testsuite/jit.dg/test-error-gcc_jit_type_get_vector-bad-type.c
@@ -0,0 +1,30 @@
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "libgccjit.h"
+
+#include "harness.h"
+
+void
+create_code (gcc_jit_context *ctxt, void *user_data)
+{
+ gcc_jit_type *void_type =
+ gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_VOID);
+
+ /* Trigger an API error by passing a bad type. */
+ (void)gcc_jit_type_get_vector (void_type, 4);
+}
+
+void
+verify_code (gcc_jit_context *ctxt, gcc_jit_result *result)
+{
+ /* Ensure that the bad API usage prevents the API giving a bogus
+ result back. */
+ CHECK_VALUE (result, NULL);
+
+ /* Verify that the correct error message was emitted. */
+ CHECK_STRING_VALUE (gcc_jit_context_get_first_error (ctxt),
+ ("gcc_jit_type_get_vector:"
+ " type is not integral or floating point: void"));
+}
+
diff --git a/gcc/testsuite/jit.dg/test-error-gcc_jit_type_get_vector-non-power-of-two.c b/gcc/testsuite/jit.dg/test-error-gcc_jit_type_get_vector-non-power-of-two.c
new file mode 100644
index 00000000000..aa3bdbde507
--- /dev/null
+++ b/gcc/testsuite/jit.dg/test-error-gcc_jit_type_get_vector-non-power-of-two.c
@@ -0,0 +1,29 @@
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "libgccjit.h"
+
+#include "harness.h"
+
+void
+create_code (gcc_jit_context *ctxt, void *user_data)
+{
+ gcc_jit_type *int_type =
+ gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT);
+
+ /* Trigger an API error by passing a bad number of units. */
+ (void)gcc_jit_type_get_vector (int_type, 7);
+}
+
+void
+verify_code (gcc_jit_context *ctxt, gcc_jit_result *result)
+{
+ /* Ensure that the bad API usage prevents the API giving a bogus
+ result back. */
+ CHECK_VALUE (result, NULL);
+
+ /* Verify that the correct error message was emitted. */
+ CHECK_STRING_VALUE (gcc_jit_context_get_first_error (ctxt),
+ ("gcc_jit_type_get_vector:"
+ " num_units not a power of two: 7"));
+}
diff --git a/gcc/testsuite/jit.dg/test-vector-types.cc b/gcc/testsuite/jit.dg/test-vector-types.cc
new file mode 100644
index 00000000000..3389e04a082
--- /dev/null
+++ b/gcc/testsuite/jit.dg/test-vector-types.cc
@@ -0,0 +1,185 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "libgccjit.h"
+
+#include "harness.h"
+
+typedef int v4si __attribute__ ((vector_size (16)));
+typedef unsigned int v4ui __attribute__ ((vector_size (16)));
+typedef float v4f __attribute__ ((vector_size (16)));
+
+static void
+create_vec_fn (gcc_jit_context *ctxt, const char *fnname,
+ gcc_jit_type *the_type, enum gcc_jit_binary_op op)
+{
+ /* Create equivalent to:
+
+ static void
+ FNNAME (const T *a, const T *b, T *c)
+ {
+ *c = *a OP *b;
+ }
+
+ where T is "the_type" (e.g. v4si). */
+
+ gcc_jit_type *ptr_type = gcc_jit_type_get_pointer (the_type);
+
+ gcc_jit_type *const_type = gcc_jit_type_get_const (the_type);
+ gcc_jit_type *ptr_to_const_type = gcc_jit_type_get_pointer (const_type);
+
+ gcc_jit_param *a =
+ gcc_jit_context_new_param (ctxt, NULL, ptr_to_const_type, "a");
+ gcc_jit_param *b =
+ gcc_jit_context_new_param (ctxt, NULL, ptr_to_const_type, "b");
+ gcc_jit_param *c =
+ gcc_jit_context_new_param (ctxt, NULL, ptr_type, "c");
+
+ gcc_jit_type *return_type =
+ gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_VOID);
+
+ gcc_jit_param *params[3] = {a, b, c};
+ gcc_jit_function *func =
+ gcc_jit_context_new_function (ctxt, NULL,
+ GCC_JIT_FUNCTION_EXPORTED,
+ return_type,
+ fnname,
+ 3, params, 0);
+ gcc_jit_block *initial =
+ gcc_jit_function_new_block (func, "initial");
+
+ /* (*a OP *b) */
+ gcc_jit_rvalue *op_result =
+ gcc_jit_context_new_binary_op (
+ ctxt, NULL,
+ op,
+ the_type,
+ gcc_jit_lvalue_as_rvalue (gcc_jit_rvalue_dereference (gcc_jit_param_as_rvalue (a),
+ NULL)),
+ gcc_jit_lvalue_as_rvalue (gcc_jit_rvalue_dereference (gcc_jit_param_as_rvalue (b),
+ NULL)));
+ /* *c = *a OP *b; */
+ gcc_jit_block_add_assignment (
+ initial, NULL,
+ gcc_jit_rvalue_dereference (gcc_jit_param_as_rvalue (c), NULL),
+ op_result);
+ gcc_jit_block_end_with_void_return (initial, NULL);
+}
+
+void
+create_code (gcc_jit_context *ctxt, void *user_data)
+{
+ gcc_jit_type *int_type = gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT);
+ gcc_jit_type *unsigned_type
+ = gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_UNSIGNED_INT);
+ gcc_jit_type *float_type = gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT);
+
+ gcc_jit_type *v4si_type = gcc_jit_type_get_vector (int_type, 4);
+ gcc_jit_type *v4ui_type = gcc_jit_type_get_vector (unsigned_type, 4);
+ gcc_jit_type *v4f_type = gcc_jit_type_get_vector (float_type, 4);
+
+ create_vec_fn (ctxt, "jit_v4si_add",
+ v4si_type, GCC_JIT_BINARY_OP_PLUS);
+ create_vec_fn (ctxt, "jit_v4si_sub",
+ v4si_type, GCC_JIT_BINARY_OP_MINUS);
+ create_vec_fn (ctxt, "jit_v4si_mult",
+ v4si_type, GCC_JIT_BINARY_OP_MULT);
+ create_vec_fn (ctxt, "jit_v4si_div",
+ v4si_type, GCC_JIT_BINARY_OP_DIVIDE);
+
+ create_vec_fn (ctxt, "jit_v4ui_add",
+ v4ui_type, GCC_JIT_BINARY_OP_PLUS);
+ create_vec_fn (ctxt, "jit_v4ui_sub",
+ v4ui_type, GCC_JIT_BINARY_OP_MINUS);
+ create_vec_fn (ctxt, "jit_v4ui_mult",
+ v4ui_type, GCC_JIT_BINARY_OP_MULT);
+ create_vec_fn (ctxt, "jit_v4ui_div",
+ v4ui_type, GCC_JIT_BINARY_OP_DIVIDE);
+
+ create_vec_fn (ctxt, "jit_v4f_add",
+ v4f_type, GCC_JIT_BINARY_OP_PLUS);
+ create_vec_fn (ctxt, "jit_v4f_sub",
+ v4f_type, GCC_JIT_BINARY_OP_MINUS);
+ create_vec_fn (ctxt, "jit_v4f_mult",
+ v4f_type, GCC_JIT_BINARY_OP_MULT);
+ create_vec_fn (ctxt, "jit_v4f_div",
+ v4f_type, GCC_JIT_BINARY_OP_DIVIDE);
+}
+
+template <typename T>
+void
+check_add (const T &a, const T &b, const T &c)
+{
+ for (int i = 0; i < 4; i++)
+ CHECK_VALUE (c[i], a[i] + b[i]);
+}
+
+template <typename T>
+void
+check_sub (const T &a, const T &b, const T &c)
+{
+ for (int i = 0; i < 4; i++)
+ CHECK_VALUE (c[i], a[i] - b[i]);
+}
+
+template <typename T>
+void
+check_mult (const T &a, const T &b, const T &c)
+{
+ for (int i = 0; i < 4; i++)
+ CHECK_VALUE (c[i], a[i] * b[i]);
+}
+
+template <typename T>
+void
+check_div (const T &a, const T &b, const T &c)
+{
+ for (int i = 0; i < 4; i++)
+ CHECK_VALUE (c[i], a[i] / b[i]);
+}
+
+template <typename T>
+void
+verify_vec_code (gcc_jit_context *ctxt, gcc_jit_result *result,
+ const char *fnname,
+ void (*check_cb) (const T &a, const T &b, const T &c))
+{
+ typedef void (*binop_type) (const T *a, const T *b, T *c);
+ CHECK_NON_NULL (result);
+ binop_type fn =
+ (binop_type)gcc_jit_result_get_code (result, fnname);
+ CHECK_NON_NULL (fn);
+
+ T a, b, c;
+
+ /* Init. */
+ for (int i = 0; i < 4; i++)
+ {
+ a[i] = i + 5;
+ b[i] = (i + 4) * 3;
+ }
+
+ /* Run jit-compiled code and verify result. */
+ fn (&a, &b, &c);
+ check_cb (a, b, c);
+}
+
+void
+verify_code (gcc_jit_context *ctxt, gcc_jit_result *result)
+{
+ verify_vec_code<v4si> (ctxt, result, "jit_v4si_add", check_add);
+ verify_vec_code<v4si> (ctxt, result, "jit_v4si_sub", check_sub);
+ verify_vec_code<v4si> (ctxt, result, "jit_v4si_mult", check_mult);
+ verify_vec_code<v4si> (ctxt, result, "jit_v4si_div", check_div);
+
+ verify_vec_code<v4ui> (ctxt, result, "jit_v4ui_add", check_add);
+ verify_vec_code<v4ui> (ctxt, result, "jit_v4ui_sub", check_sub);
+ verify_vec_code<v4ui> (ctxt, result, "jit_v4ui_mult", check_mult);
+ verify_vec_code<v4ui> (ctxt, result, "jit_v4ui_div", check_div);
+
+ verify_vec_code<v4f> (ctxt, result, "jit_v4f_add", check_add);
+ verify_vec_code<v4f> (ctxt, result, "jit_v4f_sub", check_sub);
+ verify_vec_code<v4f> (ctxt, result, "jit_v4f_mult", check_mult);
+ verify_vec_code<v4f> (ctxt, result, "jit_v4f_div", check_div);
+}
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 97d834c63fc..5a6562794b2 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -3436,7 +3436,7 @@ proc add_options_for_arm_v8_1a_neon { flags } {
return "$flags"
}
global et_arm_v8_1a_neon_flags
- return "$flags $et_arm_v8_1a_neon_flags -march=armv8.1-a"
+ return "$flags $et_arm_v8_1a_neon_flags"
}
# Add the options needed for ARMv8.2 with the scalar FP16 extension.
@@ -4127,13 +4127,15 @@ proc check_effective_target_arm_v8_1a_neon_ok_nocache { } {
# since AArch64 only needs the -march setting.
foreach flags {"" "-mfpu=neon-fp-armv8" "-mfloat-abi=softfp" \
"-mfpu=neon-fp-armv8 -mfloat-abi=softfp"} {
- if { [check_no_compiler_messages_nocache arm_v8_1a_neon_ok object {
- #if !defined (__ARM_FEATURE_QRDMX)
- #error "__ARM_FEATURE_QRDMX not defined"
- #endif
- } "$flags -march=armv8.1-a"] } {
- set et_arm_v8_1a_neon_flags "$flags -march=armv8.1-a"
- return 1
+ foreach arches { "-march=armv8-a+rdma" "-march=armv8.1-a" } {
+ if { [check_no_compiler_messages_nocache arm_v8_1a_neon_ok object {
+ #if !defined (__ARM_FEATURE_QRDMX)
+ #error "__ARM_FEATURE_QRDMX not defined"
+ #endif
+ } "$flags $arches"] } {
+ set et_arm_v8_1a_neon_flags "$flags $arches"
+ return 1
+ }
}
}
diff --git a/gcc/testsuite/objc.dg/proto-lossage-4.m b/gcc/testsuite/objc.dg/proto-lossage-4.m
index e72328b3703..c9c80b7c427 100644
--- a/gcc/testsuite/objc.dg/proto-lossage-4.m
+++ b/gcc/testsuite/objc.dg/proto-lossage-4.m
@@ -28,13 +28,13 @@ long foo(void) {
receiver += [receiver anotherValue]; /* { dg-warning "invalid receiver type .intptr_t." } */
receiver += [(Obj *)receiver someValue]; /* { dg-warning ".Obj. may not respond to .\\-someValue." } */
-/* { dg-warning "assignment makes integer from pointer without a cast" "" { target *-*-* } .-1 } */
+/* { dg-warning "assignment to 'intptr_t {aka (long )?int}' from 'id' makes integer from pointer without a cast" "" { target *-*-* } .-1 } */
receiver += [(Obj *)receiver anotherValue];
receiver += [(Obj <Proto> *)receiver someValue];
receiver += [(Obj <Proto> *)receiver anotherValue];
receiver += [objrcvr someValue]; /* { dg-warning ".Obj. may not respond to .\\-someValue." } */
-/* { dg-warning "assignment makes integer from pointer without a cast" "" { target *-*-* } .-1 } */
+/* { dg-warning "assignment to 'intptr_t {aka (long )?int}' from 'id' makes integer from pointer without a cast" "" { target *-*-* } .-1 } */
receiver += [objrcvr anotherValue];
receiver += [(Obj <Proto> *)objrcvr someValue];
@@ -42,7 +42,7 @@ long foo(void) {
receiver += [objrcvr2 someValue];
receiver += [objrcvr2 anotherValue];
receiver += [(Obj *)objrcvr2 someValue]; /* { dg-warning ".Obj. may not respond to .\\-someValue." } */
-/* { dg-warning "assignment makes integer from pointer without a cast" "" { target *-*-* } .-1 } */
+/* { dg-warning "assignment to 'intptr_t {aka (long )?int}' from 'id' makes integer from pointer without a cast" "" { target *-*-* } .-1 } */
receiver += [(Obj *)objrcvr2 anotherValue];
diff --git a/gcc/toplev.c b/gcc/toplev.c
index e6c69a4ba93..d23714c4773 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -63,6 +63,8 @@ along with GCC; see the file COPYING3. If not see
#include "hosthooks.h"
#include "opts.h"
#include "opts-diagnostic.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
#include "tsan.h"
#include "plugin.h"
@@ -80,6 +82,7 @@ along with GCC; see the file COPYING3. If not see
#include "hsa-common.h"
#include "edit-context.h"
#include "tree-pass.h"
+#include "dumpfile.h"
#if defined(DBX_DEBUGGING_INFO) || defined(XCOFF_DEBUGGING_INFO)
#include "dbxout.h"
@@ -1064,11 +1067,22 @@ open_auxiliary_file (const char *ext)
return file;
}
+/* Alternative diagnostics callback for reentered ICE reporting. */
+
+static void
+internal_error_reentered (diagnostic_context *, const char *, va_list *)
+{
+ /* Flush the dump file if emergency_dump_function itself caused an ICE. */
+ if (dump_file)
+ fflush (dump_file);
+}
+
/* Auxiliary callback for the diagnostics code. */
static void
internal_error_function (diagnostic_context *, const char *, va_list *)
{
+ global_dc->internal_error = internal_error_reentered;
warn_if_plugins ();
emergency_dump_function ();
}
@@ -1630,8 +1644,10 @@ process_options (void)
}
/* Do not use IPA optimizations for register allocation if profiler is active
+ or patchable function entries are inserted for run-time instrumentation
or port does not emit prologue and epilogue as RTL. */
- if (profile_flag || !targetm.have_prologue () || !targetm.have_epilogue ())
+ if (profile_flag || function_entry_patch_area_size
+ || !targetm.have_prologue () || !targetm.have_epilogue ())
flag_ipa_ra = 0;
/* Enable -Werror=coverage-mismatch when -Werror and -Wno-error
diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c
index eb03560be26..40b53681186 100644
--- a/gcc/trans-mem.c
+++ b/gcc/trans-mem.c
@@ -50,7 +50,8 @@
#include "langhooks.h"
#include "cfgloop.h"
#include "tree-ssa-address.h"
-
+#include "stringpool.h"
+#include "attribs.h"
#define A_RUNINSTRUMENTEDCODE 0x0001
#define A_RUNUNINSTRUMENTEDCODE 0x0002
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 83e4ee60e9f..f26b12ff30d 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -1701,8 +1701,9 @@ group_case_labels_stmt (gswitch *stmt)
gcc_assert (base_case);
base_bb = label_to_block (CASE_LABEL (base_case));
- /* Discard cases that have the same destination as the default case. */
- if (base_bb == default_bb)
+ /* Discard cases that have the same destination as the default case or
+ whose destiniation blocks have already been removed as unreachable. */
+ if (base_bb == NULL || base_bb == default_bb)
{
i++;
continue;
@@ -3053,7 +3054,9 @@ verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
tree t1 = TREE_OPERAND (t, 1);
tree t2 = TREE_OPERAND (t, 2);
if (!tree_fits_uhwi_p (t1)
- || !tree_fits_uhwi_p (t2))
+ || !tree_fits_uhwi_p (t2)
+ || !types_compatible_p (bitsizetype, TREE_TYPE (t1))
+ || !types_compatible_p (bitsizetype, TREE_TYPE (t2)))
{
error ("invalid position or size operand to BIT_FIELD_REF");
return t;
@@ -4247,6 +4250,7 @@ verify_gimple_assign_ternary (gassign *stmt)
return true;
}
if (! tree_fits_uhwi_p (rhs3)
+ || ! types_compatible_p (bitsizetype, TREE_TYPE (rhs3))
|| ! tree_fits_uhwi_p (TYPE_SIZE (rhs2_type)))
{
error ("invalid position or size in BIT_INSERT_EXPR");
@@ -6714,7 +6718,15 @@ move_stmt_op (tree *tp, int *walk_subtrees, void *data)
*tp = t = out->to;
}
- DECL_CONTEXT (t) = p->to_context;
+ /* For FORCED_LABELs we can end up with references from other
+ functions if some SESE regions are outlined. It is UB to
+ jump in between them, but they could be used just for printing
+ addresses etc. In that case, DECL_CONTEXT on the label should
+ be the function containing the glabel stmt with that LABEL_DECL,
+ rather than whatever function a reference to the label was seen
+ last time. */
+ if (!FORCED_LABEL (t) && !DECL_NONLOCAL (t))
+ DECL_CONTEXT (t) = p->to_context;
}
else if (p->remap_decls_p)
{
@@ -6832,6 +6844,21 @@ move_stmt_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p,
case GIMPLE_OMP_RETURN:
case GIMPLE_OMP_CONTINUE:
break;
+
+ case GIMPLE_LABEL:
+ {
+ /* For FORCED_LABEL, move_stmt_op doesn't adjust DECL_CONTEXT,
+ so that such labels can be referenced from other regions.
+ Make sure to update it when seeing a GIMPLE_LABEL though,
+ that is the owner of the label. */
+ walk_gimple_op (stmt, move_stmt_op, wi);
+ *handled_ops_p = true;
+ tree label = gimple_label_label (as_a <glabel *> (stmt));
+ if (FORCED_LABEL (label) || DECL_NONLOCAL (label))
+ DECL_CONTEXT (label) = p->to_context;
+ }
+ break;
+
default:
if (is_gimple_omp (stmt))
{
diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c
index e241f50f308..951aec10b3a 100644
--- a/gcc/tree-chkp.c
+++ b/gcc/tree-chkp.c
@@ -52,6 +52,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-dfa.h"
#include "ipa-chkp.h"
#include "params.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Pointer Bounds Checker instruments code with memory checks to find
out-of-bounds memory accesses. Checks are performed by computing
@@ -3195,6 +3197,9 @@ chkp_get_bounds_for_decl_addr (tree decl)
&& !flag_chkp_incomplete_type)
return chkp_get_zero_bounds ();
+ if (VOID_TYPE_P (TREE_TYPE (decl)))
+ return chkp_get_zero_bounds ();
+
if (flag_chkp_use_static_bounds
&& VAR_P (decl)
&& (TREE_STATIC (decl)
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index b7f9a570abb..26387f86b87 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -124,8 +124,7 @@ static struct datadep_stats
} dependence_stats;
static bool subscript_dependence_tester_1 (struct data_dependence_relation *,
- struct data_reference *,
- struct data_reference *,
+ unsigned int, unsigned int,
struct loop *);
/* Returns true iff A divides B. */
@@ -145,6 +144,21 @@ int_divides_p (int a, int b)
return ((b % a) == 0);
}
+/* Return true if reference REF contains a union access. */
+
+static bool
+ref_contains_union_access_p (tree ref)
+{
+ while (handled_component_p (ref))
+ {
+ ref = TREE_OPERAND (ref, 0);
+ if (TREE_CODE (TREE_TYPE (ref)) == UNION_TYPE
+ || TREE_CODE (TREE_TYPE (ref)) == QUAL_UNION_TYPE)
+ return true;
+ }
+ return false;
+}
+
/* Dump into FILE all the data references from DATAREFS. */
@@ -434,13 +448,14 @@ dump_data_dependence_relation (FILE *outf,
unsigned int i;
struct loop *loopi;
- for (i = 0; i < DDR_NUM_SUBSCRIPTS (ddr); i++)
+ subscript *sub;
+ FOR_EACH_VEC_ELT (DDR_SUBSCRIPTS (ddr), i, sub)
{
fprintf (outf, " access_fn_A: ");
- print_generic_stmt (outf, DR_ACCESS_FN (dra, i));
+ print_generic_stmt (outf, SUB_ACCESS_FN (sub, 0));
fprintf (outf, " access_fn_B: ");
- print_generic_stmt (outf, DR_ACCESS_FN (drb, i));
- dump_subscript (outf, DDR_SUBSCRIPT (ddr, i));
+ print_generic_stmt (outf, SUB_ACCESS_FN (sub, 1));
+ dump_subscript (outf, sub);
}
fprintf (outf, " inner loop index: %d\n", DDR_INNER_LOOP (ddr));
@@ -920,6 +935,27 @@ dr_analyze_innermost (innermost_loop_behavior *drb, tree ref,
return true;
}
+/* Return true if OP is a valid component reference for a DR access
+ function. This accepts a subset of what handled_component_p accepts. */
+
+static bool
+access_fn_component_p (tree op)
+{
+ switch (TREE_CODE (op))
+ {
+ case REALPART_EXPR:
+ case IMAGPART_EXPR:
+ case ARRAY_REF:
+ return true;
+
+ case COMPONENT_REF:
+ return TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == RECORD_TYPE;
+
+ default:
+ return false;
+ }
+}
+
/* Determines the base object and the list of indices of memory reference
DR, analyzed in LOOP and instantiated in loop nest NEST. */
@@ -957,7 +993,9 @@ dr_analyze_indices (struct data_reference *dr, loop_p nest, loop_p loop)
access_fns.safe_push (integer_one_node);
}
- /* Analyze access functions of dimensions we know to be independent. */
+ /* Analyze access functions of dimensions we know to be independent.
+ The list of component references handled here should be kept in
+ sync with access_fn_component_p. */
while (handled_component_p (ref))
{
if (TREE_CODE (ref) == ARRAY_REF)
@@ -1087,15 +1125,19 @@ free_data_ref (data_reference_p dr)
free (dr);
}
-/* Analyzes memory reference MEMREF accessed in STMT. The reference
- is read if IS_READ is true, write otherwise. Returns the
- data_reference description of MEMREF. NEST is the outermost loop
- in which the reference should be instantiated, LOOP is the loop in
- which the data reference should be analyzed. */
+/* Analyze memory reference MEMREF, which is accessed in STMT.
+ The reference is a read if IS_READ is true, otherwise it is a write.
+ IS_CONDITIONAL_IN_STMT indicates that the reference is conditional
+ within STMT, i.e. that it might not occur even if STMT is executed
+ and runs to completion.
+
+ Return the data_reference description of MEMREF. NEST is the outermost
+ loop in which the reference should be instantiated, LOOP is the loop
+ in which the data reference should be analyzed. */
struct data_reference *
create_data_ref (loop_p nest, loop_p loop, tree memref, gimple *stmt,
- bool is_read)
+ bool is_read, bool is_conditional_in_stmt)
{
struct data_reference *dr;
@@ -1110,6 +1152,7 @@ create_data_ref (loop_p nest, loop_p loop, tree memref, gimple *stmt,
DR_STMT (dr) = stmt;
DR_REF (dr) = memref;
DR_IS_READ (dr) = is_read;
+ DR_IS_CONDITIONAL_IN_STMT (dr) = is_conditional_in_stmt;
dr_analyze_innermost (&DR_INNERMOST (dr), memref,
nest != NULL ? loop : NULL);
@@ -2148,6 +2191,38 @@ dr_may_alias_p (const struct data_reference *a, const struct data_reference *b,
return refs_may_alias_p (addr_a, addr_b);
}
+/* REF_A and REF_B both satisfy access_fn_component_p. Return true
+ if it is meaningful to compare their associated access functions
+ when checking for dependencies. */
+
+static bool
+access_fn_components_comparable_p (tree ref_a, tree ref_b)
+{
+ /* Allow pairs of component refs from the following sets:
+
+ { REALPART_EXPR, IMAGPART_EXPR }
+ { COMPONENT_REF }
+ { ARRAY_REF }. */
+ tree_code code_a = TREE_CODE (ref_a);
+ tree_code code_b = TREE_CODE (ref_b);
+ if (code_a == IMAGPART_EXPR)
+ code_a = REALPART_EXPR;
+ if (code_b == IMAGPART_EXPR)
+ code_b = REALPART_EXPR;
+ if (code_a != code_b)
+ return false;
+
+ if (TREE_CODE (ref_a) == COMPONENT_REF)
+ /* ??? We cannot simply use the type of operand #0 of the refs here as
+ the Fortran compiler smuggles type punning into COMPONENT_REFs.
+ Use the DECL_CONTEXT of the FIELD_DECLs instead. */
+ return (DECL_CONTEXT (TREE_OPERAND (ref_a, 1))
+ == DECL_CONTEXT (TREE_OPERAND (ref_b, 1)));
+
+ return types_compatible_p (TREE_TYPE (TREE_OPERAND (ref_a, 0)),
+ TREE_TYPE (TREE_OPERAND (ref_b, 0)));
+}
+
/* Initialize a data dependence relation between data accesses A and
B. NB_LOOPS is the number of loops surrounding the references: the
size of the classic distance/direction vectors. */
@@ -2160,11 +2235,10 @@ initialize_data_dependence_relation (struct data_reference *a,
struct data_dependence_relation *res;
unsigned int i;
- res = XNEW (struct data_dependence_relation);
+ res = XCNEW (struct data_dependence_relation);
DDR_A (res) = a;
DDR_B (res) = b;
DDR_LOOP_NEST (res).create (0);
- DDR_REVERSED_P (res) = false;
DDR_SUBSCRIPTS (res).create (0);
DDR_DIR_VECTS (res).create (0);
DDR_DIST_VECTS (res).create (0);
@@ -2182,82 +2256,286 @@ initialize_data_dependence_relation (struct data_reference *a,
return res;
}
- /* The case where the references are exactly the same. */
- if (operand_equal_p (DR_REF (a), DR_REF (b), 0))
+ unsigned int num_dimensions_a = DR_NUM_DIMENSIONS (a);
+ unsigned int num_dimensions_b = DR_NUM_DIMENSIONS (b);
+ if (num_dimensions_a == 0 || num_dimensions_b == 0)
{
- if ((loop_nest.exists ()
- && !object_address_invariant_in_loop_p (loop_nest[0],
- DR_BASE_OBJECT (a)))
- || DR_NUM_DIMENSIONS (a) == 0)
+ DDR_ARE_DEPENDENT (res) = chrec_dont_know;
+ return res;
+ }
+
+ /* For unconstrained bases, the root (highest-indexed) subscript
+ describes a variation in the base of the original DR_REF rather
+ than a component access. We have no type that accurately describes
+ the new DR_BASE_OBJECT (whose TREE_TYPE describes the type *after*
+ applying this subscript) so limit the search to the last real
+ component access.
+
+ E.g. for:
+
+ void
+ f (int a[][8], int b[][8])
{
- DDR_ARE_DEPENDENT (res) = chrec_dont_know;
- return res;
+ for (int i = 0; i < 8; ++i)
+ a[i * 2][0] = b[i][0];
+ }
+
+ the a and b accesses have a single ARRAY_REF component reference [0]
+ but have two subscripts. */
+ if (DR_UNCONSTRAINED_BASE (a))
+ num_dimensions_a -= 1;
+ if (DR_UNCONSTRAINED_BASE (b))
+ num_dimensions_b -= 1;
+
+ /* These structures describe sequences of component references in
+ DR_REF (A) and DR_REF (B). Each component reference is tied to a
+ specific access function. */
+ struct {
+ /* The sequence starts at DR_ACCESS_FN (A, START_A) of A and
+ DR_ACCESS_FN (B, START_B) of B (inclusive) and extends to higher
+ indices. In C notation, these are the indices of the rightmost
+ component references; e.g. for a sequence .b.c.d, the start
+ index is for .d. */
+ unsigned int start_a;
+ unsigned int start_b;
+
+ /* The sequence contains LENGTH consecutive access functions from
+ each DR. */
+ unsigned int length;
+
+ /* The enclosing objects for the A and B sequences respectively,
+ i.e. the objects to which DR_ACCESS_FN (A, START_A + LENGTH - 1)
+ and DR_ACCESS_FN (B, START_B + LENGTH - 1) are applied. */
+ tree object_a;
+ tree object_b;
+ } full_seq = {}, struct_seq = {};
+
+ /* Before each iteration of the loop:
+
+ - REF_A is what you get after applying DR_ACCESS_FN (A, INDEX_A) and
+ - REF_B is what you get after applying DR_ACCESS_FN (B, INDEX_B). */
+ unsigned int index_a = 0;
+ unsigned int index_b = 0;
+ tree ref_a = DR_REF (a);
+ tree ref_b = DR_REF (b);
+
+ /* Now walk the component references from the final DR_REFs back up to
+ the enclosing base objects. Each component reference corresponds
+ to one access function in the DR, with access function 0 being for
+ the final DR_REF and the highest-indexed access function being the
+ one that is applied to the base of the DR.
+
+ Look for a sequence of component references whose access functions
+ are comparable (see access_fn_components_comparable_p). If more
+ than one such sequence exists, pick the one nearest the base
+ (which is the leftmost sequence in C notation). Store this sequence
+ in FULL_SEQ.
+
+ For example, if we have:
+
+ struct foo { struct bar s; ... } (*a)[10], (*b)[10];
+
+ A: a[0][i].s.c.d
+ B: __real b[0][i].s.e[i].f
+
+ (where d is the same type as the real component of f) then the access
+ functions would be:
+
+ 0 1 2 3
+ A: .d .c .s [i]
+
+ 0 1 2 3 4 5
+ B: __real .f [i] .e .s [i]
+
+ The A0/B2 column isn't comparable, since .d is a COMPONENT_REF
+ and [i] is an ARRAY_REF. However, the A1/B3 column contains two
+ COMPONENT_REF accesses for struct bar, so is comparable. Likewise
+ the A2/B4 column contains two COMPONENT_REF accesses for struct foo,
+ so is comparable. The A3/B5 column contains two ARRAY_REFs that
+ index foo[10] arrays, so is again comparable. The sequence is
+ therefore:
+
+ A: [1, 3] (i.e. [i].s.c)
+ B: [3, 5] (i.e. [i].s.e)
+
+ Also look for sequences of component references whose access
+ functions are comparable and whose enclosing objects have the same
+ RECORD_TYPE. Store this sequence in STRUCT_SEQ. In the above
+ example, STRUCT_SEQ would be:
+
+ A: [1, 2] (i.e. s.c)
+ B: [3, 4] (i.e. s.e) */
+ while (index_a < num_dimensions_a && index_b < num_dimensions_b)
+ {
+ /* REF_A and REF_B must be one of the component access types
+ allowed by dr_analyze_indices. */
+ gcc_checking_assert (access_fn_component_p (ref_a));
+ gcc_checking_assert (access_fn_component_p (ref_b));
+
+ /* Get the immediately-enclosing objects for REF_A and REF_B,
+ i.e. the references *before* applying DR_ACCESS_FN (A, INDEX_A)
+ and DR_ACCESS_FN (B, INDEX_B). */
+ tree object_a = TREE_OPERAND (ref_a, 0);
+ tree object_b = TREE_OPERAND (ref_b, 0);
+
+ tree type_a = TREE_TYPE (object_a);
+ tree type_b = TREE_TYPE (object_b);
+ if (access_fn_components_comparable_p (ref_a, ref_b))
+ {
+ /* This pair of component accesses is comparable for dependence
+ analysis, so we can include DR_ACCESS_FN (A, INDEX_A) and
+ DR_ACCESS_FN (B, INDEX_B) in the sequence. */
+ if (full_seq.start_a + full_seq.length != index_a
+ || full_seq.start_b + full_seq.length != index_b)
+ {
+ /* The accesses don't extend the current sequence,
+ so start a new one here. */
+ full_seq.start_a = index_a;
+ full_seq.start_b = index_b;
+ full_seq.length = 0;
+ }
+
+ /* Add this pair of references to the sequence. */
+ full_seq.length += 1;
+ full_seq.object_a = object_a;
+ full_seq.object_b = object_b;
+
+ /* If the enclosing objects are structures (and thus have the
+ same RECORD_TYPE), record the new sequence in STRUCT_SEQ. */
+ if (TREE_CODE (type_a) == RECORD_TYPE)
+ struct_seq = full_seq;
+
+ /* Move to the next containing reference for both A and B. */
+ ref_a = object_a;
+ ref_b = object_b;
+ index_a += 1;
+ index_b += 1;
+ continue;
+ }
+
+ /* Try to approach equal type sizes. */
+ if (!COMPLETE_TYPE_P (type_a)
+ || !COMPLETE_TYPE_P (type_b)
+ || !tree_fits_uhwi_p (TYPE_SIZE_UNIT (type_a))
+ || !tree_fits_uhwi_p (TYPE_SIZE_UNIT (type_b)))
+ break;
+
+ unsigned HOST_WIDE_INT size_a = tree_to_uhwi (TYPE_SIZE_UNIT (type_a));
+ unsigned HOST_WIDE_INT size_b = tree_to_uhwi (TYPE_SIZE_UNIT (type_b));
+ if (size_a <= size_b)
+ {
+ index_a += 1;
+ ref_a = object_a;
+ }
+ if (size_b <= size_a)
+ {
+ index_b += 1;
+ ref_b = object_b;
}
- DDR_AFFINE_P (res) = true;
- DDR_ARE_DEPENDENT (res) = NULL_TREE;
- DDR_SUBSCRIPTS (res).create (DR_NUM_DIMENSIONS (a));
- DDR_LOOP_NEST (res) = loop_nest;
- DDR_INNER_LOOP (res) = 0;
- DDR_SELF_REFERENCE (res) = true;
- for (i = 0; i < DR_NUM_DIMENSIONS (a); i++)
- {
- struct subscript *subscript;
-
- subscript = XNEW (struct subscript);
- SUB_CONFLICTS_IN_A (subscript) = conflict_fn_not_known ();
- SUB_CONFLICTS_IN_B (subscript) = conflict_fn_not_known ();
- SUB_LAST_CONFLICT (subscript) = chrec_dont_know;
- SUB_DISTANCE (subscript) = chrec_dont_know;
- DDR_SUBSCRIPTS (res).safe_push (subscript);
- }
- return res;
}
- /* If the references do not access the same object, we do not know
- whether they alias or not. We do not care about TBAA or alignment
- info so we can use OEP_ADDRESS_OF to avoid false negatives.
- But the accesses have to use compatible types as otherwise the
- built indices would not match. */
- if (!operand_equal_p (DR_BASE_OBJECT (a), DR_BASE_OBJECT (b), OEP_ADDRESS_OF)
- || !types_compatible_p (TREE_TYPE (DR_BASE_OBJECT (a)),
- TREE_TYPE (DR_BASE_OBJECT (b))))
+ /* See whether FULL_SEQ ends at the base and whether the two bases
+ are equal. We do not care about TBAA or alignment info so we can
+ use OEP_ADDRESS_OF to avoid false negatives. */
+ tree base_a = DR_BASE_OBJECT (a);
+ tree base_b = DR_BASE_OBJECT (b);
+ bool same_base_p = (full_seq.start_a + full_seq.length == num_dimensions_a
+ && full_seq.start_b + full_seq.length == num_dimensions_b
+ && DR_UNCONSTRAINED_BASE (a) == DR_UNCONSTRAINED_BASE (b)
+ && operand_equal_p (base_a, base_b, OEP_ADDRESS_OF)
+ && types_compatible_p (TREE_TYPE (base_a),
+ TREE_TYPE (base_b))
+ && (!loop_nest.exists ()
+ || (object_address_invariant_in_loop_p
+ (loop_nest[0], base_a))));
+
+ /* If the bases are the same, we can include the base variation too.
+ E.g. the b accesses in:
+
+ for (int i = 0; i < n; ++i)
+ b[i + 4][0] = b[i][0];
+
+ have a definite dependence distance of 4, while for:
+
+ for (int i = 0; i < n; ++i)
+ a[i + 4][0] = b[i][0];
+
+ the dependence distance depends on the gap between a and b.
+
+ If the bases are different then we can only rely on the sequence
+ rooted at a structure access, since arrays are allowed to overlap
+ arbitrarily and change shape arbitrarily. E.g. we treat this as
+ valid code:
+
+ int a[256];
+ ...
+ ((int (*)[4][3]) &a[1])[i][0] += ((int (*)[4][3]) &a[2])[i][0];
+
+ where two lvalues with the same int[4][3] type overlap, and where
+ both lvalues are distinct from the object's declared type. */
+ if (same_base_p)
{
- DDR_ARE_DEPENDENT (res) = chrec_dont_know;
- return res;
+ if (DR_UNCONSTRAINED_BASE (a))
+ full_seq.length += 1;
}
+ else
+ full_seq = struct_seq;
- /* If the base of the object is not invariant in the loop nest, we cannot
- analyze it. TODO -- in fact, it would suffice to record that there may
- be arbitrary dependences in the loops where the base object varies. */
- if ((loop_nest.exists ()
- && !object_address_invariant_in_loop_p (loop_nest[0], DR_BASE_OBJECT (a)))
- || DR_NUM_DIMENSIONS (a) == 0)
+ /* Punt if we didn't find a suitable sequence. */
+ if (full_seq.length == 0)
{
DDR_ARE_DEPENDENT (res) = chrec_dont_know;
return res;
}
- /* If the number of dimensions of the access to not agree we can have
- a pointer access to a component of the array element type and an
- array access while the base-objects are still the same. Punt. */
- if (DR_NUM_DIMENSIONS (a) != DR_NUM_DIMENSIONS (b))
+ if (!same_base_p)
{
- DDR_ARE_DEPENDENT (res) = chrec_dont_know;
- return res;
+ /* Partial overlap is possible for different bases when strict aliasing
+ is not in effect. It's also possible if either base involves a union
+ access; e.g. for:
+
+ struct s1 { int a[2]; };
+ struct s2 { struct s1 b; int c; };
+ struct s3 { int d; struct s1 e; };
+ union u { struct s2 f; struct s3 g; } *p, *q;
+
+ the s1 at "p->f.b" (base "p->f") partially overlaps the s1 at
+ "p->g.e" (base "p->g") and might partially overlap the s1 at
+ "q->g.e" (base "q->g"). */
+ if (!flag_strict_aliasing
+ || ref_contains_union_access_p (full_seq.object_a)
+ || ref_contains_union_access_p (full_seq.object_b))
+ {
+ DDR_ARE_DEPENDENT (res) = chrec_dont_know;
+ return res;
+ }
+
+ DDR_COULD_BE_INDEPENDENT_P (res) = true;
+ if (!loop_nest.exists ()
+ || (object_address_invariant_in_loop_p (loop_nest[0],
+ full_seq.object_a)
+ && object_address_invariant_in_loop_p (loop_nest[0],
+ full_seq.object_b)))
+ {
+ DDR_OBJECT_A (res) = full_seq.object_a;
+ DDR_OBJECT_B (res) = full_seq.object_b;
+ }
}
DDR_AFFINE_P (res) = true;
DDR_ARE_DEPENDENT (res) = NULL_TREE;
- DDR_SUBSCRIPTS (res).create (DR_NUM_DIMENSIONS (a));
+ DDR_SUBSCRIPTS (res).create (full_seq.length);
DDR_LOOP_NEST (res) = loop_nest;
DDR_INNER_LOOP (res) = 0;
DDR_SELF_REFERENCE (res) = false;
- for (i = 0; i < DR_NUM_DIMENSIONS (a); i++)
+ for (i = 0; i < full_seq.length; ++i)
{
struct subscript *subscript;
subscript = XNEW (struct subscript);
+ SUB_ACCESS_FN (subscript, 0) = DR_ACCESS_FN (a, full_seq.start_a + i);
+ SUB_ACCESS_FN (subscript, 1) = DR_ACCESS_FN (b, full_seq.start_b + i);
SUB_CONFLICTS_IN_A (subscript) = conflict_fn_not_known ();
SUB_CONFLICTS_IN_B (subscript) = conflict_fn_not_known ();
SUB_LAST_CONFLICT (subscript) = chrec_dont_know;
@@ -3839,14 +4117,15 @@ add_outer_distances (struct data_dependence_relation *ddr,
}
/* Return false when fail to represent the data dependence as a
- distance vector. INIT_B is set to true when a component has been
+ distance vector. A_INDEX is the index of the first reference
+ (0 for DDR_A, 1 for DDR_B) and B_INDEX is the index of the
+ second reference. INIT_B is set to true when a component has been
added to the distance vector DIST_V. INDEX_CARRY is then set to
the index in DIST_V that carries the dependence. */
static bool
build_classic_dist_vector_1 (struct data_dependence_relation *ddr,
- struct data_reference *ddr_a,
- struct data_reference *ddr_b,
+ unsigned int a_index, unsigned int b_index,
lambda_vector dist_v, bool *init_b,
int *index_carry)
{
@@ -3864,8 +4143,8 @@ build_classic_dist_vector_1 (struct data_dependence_relation *ddr,
return false;
}
- access_fn_a = DR_ACCESS_FN (ddr_a, i);
- access_fn_b = DR_ACCESS_FN (ddr_b, i);
+ access_fn_a = SUB_ACCESS_FN (subscript, a_index);
+ access_fn_b = SUB_ACCESS_FN (subscript, b_index);
if (TREE_CODE (access_fn_a) == POLYNOMIAL_CHREC
&& TREE_CODE (access_fn_b) == POLYNOMIAL_CHREC)
@@ -3925,10 +4204,11 @@ static bool
constant_access_functions (const struct data_dependence_relation *ddr)
{
unsigned i;
+ subscript *sub;
- for (i = 0; i < DDR_NUM_SUBSCRIPTS (ddr); i++)
- if (!evolution_function_is_constant_p (DR_ACCESS_FN (DDR_A (ddr), i))
- || !evolution_function_is_constant_p (DR_ACCESS_FN (DDR_B (ddr), i)))
+ FOR_EACH_VEC_ELT (DDR_SUBSCRIPTS (ddr), i, sub)
+ if (!evolution_function_is_constant_p (SUB_ACCESS_FN (sub, 0))
+ || !evolution_function_is_constant_p (SUB_ACCESS_FN (sub, 1)))
return false;
return true;
@@ -3991,10 +4271,11 @@ add_other_self_distances (struct data_dependence_relation *ddr)
lambda_vector dist_v;
unsigned i;
int index_carry = DDR_NB_LOOPS (ddr);
+ subscript *sub;
- for (i = 0; i < DDR_NUM_SUBSCRIPTS (ddr); i++)
+ FOR_EACH_VEC_ELT (DDR_SUBSCRIPTS (ddr), i, sub)
{
- tree access_fun = DR_ACCESS_FN (DDR_A (ddr), i);
+ tree access_fun = SUB_ACCESS_FN (sub, 0);
if (TREE_CODE (access_fun) == POLYNOMIAL_CHREC)
{
@@ -4006,7 +4287,7 @@ add_other_self_distances (struct data_dependence_relation *ddr)
return;
}
- access_fun = DR_ACCESS_FN (DDR_A (ddr), 0);
+ access_fun = SUB_ACCESS_FN (DDR_SUBSCRIPT (ddr, 0), 0);
if (TREE_CODE (CHREC_LEFT (access_fun)) == POLYNOMIAL_CHREC)
add_multivariate_self_dist (ddr, access_fun);
@@ -4077,6 +4358,23 @@ add_distance_for_zero_overlaps (struct data_dependence_relation *ddr)
}
}
+/* Return true when the DDR contains two data references that have the
+ same access functions. */
+
+static inline bool
+same_access_functions (const struct data_dependence_relation *ddr)
+{
+ unsigned i;
+ subscript *sub;
+
+ FOR_EACH_VEC_ELT (DDR_SUBSCRIPTS (ddr), i, sub)
+ if (!eq_evolutions_p (SUB_ACCESS_FN (sub, 0),
+ SUB_ACCESS_FN (sub, 1)))
+ return false;
+
+ return true;
+}
+
/* Compute the classic per loop distance vector. DDR is the data
dependence relation to build a vector from. Return false when fail
to represent the data dependence as a distance vector. */
@@ -4108,8 +4406,7 @@ build_classic_dist_vector (struct data_dependence_relation *ddr,
}
dist_v = lambda_vector_new (DDR_NB_LOOPS (ddr));
- if (!build_classic_dist_vector_1 (ddr, DDR_A (ddr), DDR_B (ddr),
- dist_v, &init_b, &index_carry))
+ if (!build_classic_dist_vector_1 (ddr, 0, 1, dist_v, &init_b, &index_carry))
return false;
/* Save the distance vector if we initialized one. */
@@ -4142,12 +4439,11 @@ build_classic_dist_vector (struct data_dependence_relation *ddr,
if (!lambda_vector_lexico_pos (dist_v, DDR_NB_LOOPS (ddr)))
{
lambda_vector save_v = lambda_vector_new (DDR_NB_LOOPS (ddr));
- if (!subscript_dependence_tester_1 (ddr, DDR_B (ddr), DDR_A (ddr),
- loop_nest))
+ if (!subscript_dependence_tester_1 (ddr, 1, 0, loop_nest))
return false;
compute_subscript_distance (ddr);
- if (!build_classic_dist_vector_1 (ddr, DDR_B (ddr), DDR_A (ddr),
- save_v, &init_b, &index_carry))
+ if (!build_classic_dist_vector_1 (ddr, 1, 0, save_v, &init_b,
+ &index_carry))
return false;
save_dist_v (ddr, save_v);
DDR_REVERSED_P (ddr) = true;
@@ -4183,12 +4479,10 @@ build_classic_dist_vector (struct data_dependence_relation *ddr,
{
lambda_vector opposite_v = lambda_vector_new (DDR_NB_LOOPS (ddr));
- if (!subscript_dependence_tester_1 (ddr, DDR_B (ddr),
- DDR_A (ddr), loop_nest))
+ if (!subscript_dependence_tester_1 (ddr, 1, 0, loop_nest))
return false;
compute_subscript_distance (ddr);
- if (!build_classic_dist_vector_1 (ddr, DDR_B (ddr), DDR_A (ddr),
- opposite_v, &init_b,
+ if (!build_classic_dist_vector_1 (ddr, 1, 0, opposite_v, &init_b,
&index_carry))
return false;
@@ -4267,13 +4561,13 @@ build_classic_dir_vector (struct data_dependence_relation *ddr)
}
}
-/* Helper function. Returns true when there is a dependence between
- data references DRA and DRB. */
+/* Helper function. Returns true when there is a dependence between the
+ data references. A_INDEX is the index of the first reference (0 for
+ DDR_A, 1 for DDR_B) and B_INDEX is the index of the second reference. */
static bool
subscript_dependence_tester_1 (struct data_dependence_relation *ddr,
- struct data_reference *dra,
- struct data_reference *drb,
+ unsigned int a_index, unsigned int b_index,
struct loop *loop_nest)
{
unsigned int i;
@@ -4285,8 +4579,8 @@ subscript_dependence_tester_1 (struct data_dependence_relation *ddr,
{
conflict_function *overlaps_a, *overlaps_b;
- analyze_overlapping_iterations (DR_ACCESS_FN (dra, i),
- DR_ACCESS_FN (drb, i),
+ analyze_overlapping_iterations (SUB_ACCESS_FN (subscript, a_index),
+ SUB_ACCESS_FN (subscript, b_index),
&overlaps_a, &overlaps_b,
&last_conflicts, loop_nest);
@@ -4335,7 +4629,7 @@ static void
subscript_dependence_tester (struct data_dependence_relation *ddr,
struct loop *loop_nest)
{
- if (subscript_dependence_tester_1 (ddr, DDR_A (ddr), DDR_B (ddr), loop_nest))
+ if (subscript_dependence_tester_1 (ddr, 0, 1, loop_nest))
dependence_stats.num_dependence_dependent++;
compute_subscript_distance (ddr);
@@ -4485,6 +4779,11 @@ struct data_ref_loc
/* True if the memory reference is read. */
bool is_read;
+
+ /* True if the data reference is conditional within the containing
+ statement, i.e. if it might not occur even when the statement
+ is executed and runs to completion. */
+ bool is_conditional_in_stmt;
};
@@ -4551,6 +4850,7 @@ get_references_in_stmt (gimple *stmt, vec<data_ref_loc, va_heap> *references)
{
ref.ref = op1;
ref.is_read = true;
+ ref.is_conditional_in_stmt = false;
references->safe_push (ref);
}
}
@@ -4578,6 +4878,7 @@ get_references_in_stmt (gimple *stmt, vec<data_ref_loc, va_heap> *references)
type = TREE_TYPE (gimple_call_arg (stmt, 3));
if (TYPE_ALIGN (type) != align)
type = build_aligned_type (type, align);
+ ref.is_conditional_in_stmt = true;
ref.ref = fold_build2 (MEM_REF, type, gimple_call_arg (stmt, 0),
ptr);
references->safe_push (ref);
@@ -4597,6 +4898,7 @@ get_references_in_stmt (gimple *stmt, vec<data_ref_loc, va_heap> *references)
{
ref.ref = op1;
ref.is_read = true;
+ ref.is_conditional_in_stmt = false;
references->safe_push (ref);
}
}
@@ -4610,6 +4912,7 @@ get_references_in_stmt (gimple *stmt, vec<data_ref_loc, va_heap> *references)
{
ref.ref = op0;
ref.is_read = false;
+ ref.is_conditional_in_stmt = false;
references->safe_push (ref);
}
return clobbers_memory;
@@ -4674,8 +4977,8 @@ find_data_references_in_stmt (struct loop *nest, gimple *stmt,
FOR_EACH_VEC_ELT (references, i, ref)
{
- dr = create_data_ref (nest, loop_containing_stmt (stmt),
- ref->ref, stmt, ref->is_read);
+ dr = create_data_ref (nest, loop_containing_stmt (stmt), ref->ref,
+ stmt, ref->is_read, ref->is_conditional_in_stmt);
gcc_assert (dr != NULL);
datarefs->safe_push (dr);
}
@@ -4704,7 +5007,8 @@ graphite_find_data_references_in_stmt (loop_p nest, loop_p loop, gimple *stmt,
FOR_EACH_VEC_ELT (references, i, ref)
{
- dr = create_data_ref (nest, loop, ref->ref, stmt, ref->is_read);
+ dr = create_data_ref (nest, loop, ref->ref, stmt, ref->is_read,
+ ref->is_conditional_in_stmt);
gcc_assert (dr != NULL);
datarefs->safe_push (dr);
}
diff --git a/gcc/tree-data-ref.h b/gcc/tree-data-ref.h
index 1559cd90bd2..a66d335f4a0 100644
--- a/gcc/tree-data-ref.h
+++ b/gcc/tree-data-ref.h
@@ -159,6 +159,11 @@ struct data_reference
/* True when the data reference is in RHS of a stmt. */
bool is_read;
+ /* True when the data reference is conditional within STMT,
+ i.e. if it might not occur even when the statement is executed
+ and runs to completion. */
+ bool is_conditional_in_stmt;
+
/* Behavior of the memory reference in the innermost loop. */
struct innermost_loop_behavior innermost;
@@ -178,6 +183,7 @@ struct data_reference
#define DR_NUM_DIMENSIONS(DR) DR_ACCESS_FNS (DR).length ()
#define DR_IS_READ(DR) (DR)->is_read
#define DR_IS_WRITE(DR) (!DR_IS_READ (DR))
+#define DR_IS_CONDITIONAL_IN_STMT(DR) (DR)->is_conditional_in_stmt
#define DR_BASE_ADDRESS(DR) (DR)->innermost.base_address
#define DR_OFFSET(DR) (DR)->innermost.offset
#define DR_INIT(DR) (DR)->innermost.init
@@ -260,6 +266,9 @@ struct conflict_function
struct subscript
{
+ /* The access functions of the two references. */
+ tree access_fn[2];
+
/* A description of the iterations for which the elements are
accessed twice. */
conflict_function *conflicting_iterations_in_a;
@@ -278,6 +287,7 @@ struct subscript
typedef struct subscript *subscript_p;
+#define SUB_ACCESS_FN(SUB, I) (SUB)->access_fn[I]
#define SUB_CONFLICTS_IN_A(SUB) (SUB)->conflicting_iterations_in_a
#define SUB_CONFLICTS_IN_B(SUB) (SUB)->conflicting_iterations_in_b
#define SUB_LAST_CONFLICT(SUB) (SUB)->last_conflict
@@ -305,6 +315,13 @@ struct data_dependence_relation
but the analyzer cannot be more specific. */
tree are_dependent;
+ /* If nonnull, COULD_BE_INDEPENDENT_P is true and the accesses are
+ independent when the runtime addresses of OBJECT_A and OBJECT_B
+ are different. The addresses of both objects are invariant in the
+ loop nest. */
+ tree object_a;
+ tree object_b;
+
/* For each subscript in the dependence test, there is an element in
this array. This is the attribute that labels the edge A->B of
the data_dependence_relation. */
@@ -333,6 +350,33 @@ struct data_dependence_relation
/* Set to true when the dependence relation is on the same data
access. */
bool self_reference_p;
+
+ /* True if the dependence described is conservatively correct rather
+ than exact, and if it is still possible for the accesses to be
+ conditionally independent. For example, the a and b references in:
+
+ struct s *a, *b;
+ for (int i = 0; i < n; ++i)
+ a->f[i] += b->f[i];
+
+ conservatively have a distance vector of (0), for the case in which
+ a == b, but the accesses are independent if a != b. Similarly,
+ the a and b references in:
+
+ struct s *a, *b;
+ for (int i = 0; i < n; ++i)
+ a[0].f[i] += b[i].f[i];
+
+ conservatively have a distance vector of (0), but they are indepenent
+ when a != b + i. In contrast, the references in:
+
+ struct s *a;
+ for (int i = 0; i < n; ++i)
+ a->f[i] += a->f[i];
+
+ have the same distance vector of (0), but the accesses can never be
+ independent. */
+ bool could_be_independent_p;
};
typedef struct data_dependence_relation *ddr_p;
@@ -341,6 +385,8 @@ typedef struct data_dependence_relation *ddr_p;
#define DDR_B(DDR) (DDR)->b
#define DDR_AFFINE_P(DDR) (DDR)->affine_p
#define DDR_ARE_DEPENDENT(DDR) (DDR)->are_dependent
+#define DDR_OBJECT_A(DDR) (DDR)->object_a
+#define DDR_OBJECT_B(DDR) (DDR)->object_b
#define DDR_SUBSCRIPTS(DDR) (DDR)->subscripts
#define DDR_SUBSCRIPT(DDR, I) DDR_SUBSCRIPTS (DDR)[I]
#define DDR_NUM_SUBSCRIPTS(DDR) DDR_SUBSCRIPTS (DDR).length ()
@@ -363,6 +409,7 @@ typedef struct data_dependence_relation *ddr_p;
#define DDR_DIST_VECT(DDR, I) \
DDR_DIST_VECTS (DDR)[I]
#define DDR_REVERSED_P(DDR) (DDR)->reversed_p
+#define DDR_COULD_BE_INDEPENDENT_P(DDR) (DDR)->could_be_independent_p
bool dr_analyze_innermost (innermost_loop_behavior *, tree, struct loop *);
@@ -393,7 +440,8 @@ extern bool graphite_find_data_references_in_stmt (loop_p, loop_p, gimple *,
vec<data_reference_p> *);
tree find_data_references_in_loop (struct loop *, vec<data_reference_p> *);
bool loop_nest_has_data_refs (loop_p loop);
-struct data_reference *create_data_ref (loop_p, loop_p, tree, gimple *, bool);
+struct data_reference *create_data_ref (loop_p, loop_p, tree, gimple *, bool,
+ bool);
extern bool find_loop_nest (struct loop *, vec<loop_p> *);
extern struct data_dependence_relation *initialize_data_dependence_relation
(struct data_reference *, struct data_reference *, vec<loop_p>);
@@ -459,22 +507,6 @@ same_data_refs (data_reference_p a, data_reference_p b)
return true;
}
-/* Return true when the DDR contains two data references that have the
- same access functions. */
-
-static inline bool
-same_access_functions (const struct data_dependence_relation *ddr)
-{
- unsigned i;
-
- for (i = 0; i < DDR_NUM_SUBSCRIPTS (ddr); i++)
- if (!eq_evolutions_p (DR_ACCESS_FN (DDR_A (ddr), i),
- DR_ACCESS_FN (DDR_B (ddr), i)))
- return false;
-
- return true;
-}
-
/* Returns true when all the dependences are computable. */
inline bool
diff --git a/gcc/tree-dump.c b/gcc/tree-dump.c
index 0eab7ac590a..da36031da30 100644
--- a/gcc/tree-dump.c
+++ b/gcc/tree-dump.c
@@ -490,7 +490,6 @@ dequeue_and_dump (dump_info_p di)
dump_string_field (di, "tag", "union");
dump_child ("flds", TYPE_FIELDS (t));
- dump_child ("fncs", TYPE_METHODS (t));
queue_and_dump_index (di, "binf", TYPE_BINFO (t),
DUMP_BINFO);
break;
diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c
index c68d71a5e54..938197992ce 100644
--- a/gcc/tree-eh.c
+++ b/gcc/tree-eh.c
@@ -43,6 +43,8 @@ along with GCC; see the file COPYING3. If not see
#include "langhooks.h"
#include "cfgloop.h"
#include "gimple-low.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
/* In some instances a tree and a gimple need to be stored in a same table,
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index d4e4ef17247..affde64d2fd 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -57,7 +57,8 @@ along with GCC; see the file COPYING3. If not see
#include "cfgloop.h"
#include "builtins.h"
#include "tree-chkp.h"
-
+#include "stringpool.h"
+#include "attribs.h"
/* I'm not real happy about this, but we need to handle gimple and
non-gimple trees. */
diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c
index d4056373f31..28f72e4ce32 100644
--- a/gcc/tree-into-ssa.c
+++ b/gcc/tree-into-ssa.c
@@ -38,6 +38,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa.h"
#include "domwalk.h"
#include "statistics.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
#define PERCENT(x,y) ((float)(x) * 100.0 / (float)(y))
diff --git a/gcc/tree-object-size.c b/gcc/tree-object-size.c
index 723a5283da6..a56b78a4510 100644
--- a/gcc/tree-object-size.c
+++ b/gcc/tree-object-size.c
@@ -32,6 +32,8 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-fold.h"
#include "gimple-iterator.h"
#include "tree-cfg.h"
+#include "stringpool.h"
+#include "attribs.h"
struct object_size_info
{
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index 470964bebf7..cfc143f3c02 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -58,6 +58,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-eh.h"
#include "gomp-constants.h"
#include "tree-dfa.h"
+#include "stringpool.h"
+#include "attribs.h"
/* This pass tries to distribute iterations of loops into several threads.
The implementation is straightforward -- for each loop we test whether its
@@ -2475,23 +2477,39 @@ build_new_reduction (reduction_info_table_type *reduction_list,
gcc_assert (reduc_stmt);
- if (dump_file && (dump_flags & TDF_DETAILS))
- {
- fprintf (dump_file,
- "Detected reduction. reduction stmt is:\n");
- print_gimple_stmt (dump_file, reduc_stmt, 0);
- fprintf (dump_file, "\n");
- }
-
if (gimple_code (reduc_stmt) == GIMPLE_PHI)
{
tree op1 = PHI_ARG_DEF (reduc_stmt, 0);
gimple *def1 = SSA_NAME_DEF_STMT (op1);
reduction_code = gimple_assign_rhs_code (def1);
}
-
else
reduction_code = gimple_assign_rhs_code (reduc_stmt);
+ /* Check for OpenMP supported reduction. */
+ switch (reduction_code)
+ {
+ case PLUS_EXPR:
+ case MULT_EXPR:
+ case MAX_EXPR:
+ case MIN_EXPR:
+ case BIT_IOR_EXPR:
+ case BIT_XOR_EXPR:
+ case BIT_AND_EXPR:
+ case TRUTH_OR_EXPR:
+ case TRUTH_XOR_EXPR:
+ case TRUTH_AND_EXPR:
+ break;
+ default:
+ return;
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "Detected reduction. reduction stmt is:\n");
+ print_gimple_stmt (dump_file, reduc_stmt, 0);
+ fprintf (dump_file, "\n");
+ }
new_reduction = XCNEW (struct reduction_info);
@@ -2561,7 +2579,7 @@ gather_scalar_reductions (loop_p loop, reduction_info_table_type *reduction_list
build_new_reduction (reduction_list, reduc_stmt, phi);
}
- destroy_loop_vec_info (simple_loop_info, true);
+ delete simple_loop_info;
if (!double_reduc_phis.is_empty ())
{
@@ -2597,7 +2615,7 @@ gather_scalar_reductions (loop_p loop, reduction_info_table_type *reduction_list
build_new_reduction (reduction_list, double_reduc_stmts[i], phi);
}
- destroy_loop_vec_info (simple_loop_info, true);
+ delete simple_loop_info;
}
}
diff --git a/gcc/tree-predcom.c b/gcc/tree-predcom.c
index 6baa6062118..e7b10cb390f 100644
--- a/gcc/tree-predcom.c
+++ b/gcc/tree-predcom.c
@@ -156,29 +156,45 @@ along with GCC; see the file COPYING3. If not see
b[10] = x;
}
- TODO -- stores killing other stores can be taken into account, e.g.,
- for (i = 0; i < n; i++)
- {
- a[i] = 1;
- a[i+2] = 2;
- }
+ Apart from predictive commoning on Load-Load and Store-Load chains, we
+ also support Store-Store chains -- stores killed by other store can be
+ eliminated. Given below example:
+
+ for (i = 0; i < n; i++)
+ {
+ a[i] = 1;
+ a[i+2] = 2;
+ }
- can be replaced with
+ It can be replaced with:
- t0 = a[0];
- t1 = a[1];
- for (i = 0; i < n; i++)
- {
- a[i] = 1;
- t2 = 2;
- t0 = t1;
- t1 = t2;
- }
- a[n] = t0;
- a[n+1] = t1;
+ t0 = a[0];
+ t1 = a[1];
+ for (i = 0; i < n; i++)
+ {
+ a[i] = 1;
+ t2 = 2;
+ t0 = t1;
+ t1 = t2;
+ }
+ a[n] = t0;
+ a[n+1] = t1;
+
+ If the loop runs more than 1 iterations, it can be further simplified into:
+
+ for (i = 0; i < n; i++)
+ {
+ a[i] = 1;
+ }
+ a[n] = 2;
+ a[n+1] = 2;
- The interesting part is that this would generalize store motion; still, since
- sm is performed elsewhere, it does not seem that important.
+ The interesting part is this can be viewed either as general store motion
+ or general dead store elimination in either intra/inter-iterations way.
+
+ TODO: For now, we don't support store-store chains in multi-exit loops. We
+ force to not unroll in case of store-store chain even if other chains might
+ ask for unroll.
Predictive commoning can be generalized for arbitrary computations (not
just memory loads), and also nontrivial transfer functions (e.g., replacing
@@ -265,6 +281,9 @@ enum chain_type
/* Root of the chain is store, the rest are loads. */
CT_STORE_LOAD,
+ /* There are only stores in the chain. */
+ CT_STORE_STORE,
+
/* A combination of two chains. */
CT_COMBINATION
};
@@ -294,6 +313,15 @@ typedef struct chain
/* Initializers for the variables. */
vec<tree> inits;
+ /* Finalizers for the eliminated stores. */
+ vec<tree> finis;
+
+ /* gimple stmts intializing the initial variables of the chain. */
+ gimple_seq init_seq;
+
+ /* gimple stmts finalizing the eliminated stores of the chain. */
+ gimple_seq fini_seq;
+
/* True if there is a use of a variable with the maximal distance
that comes after the root in the loop. */
unsigned has_max_use_after : 1;
@@ -303,6 +331,10 @@ typedef struct chain
/* True if this chain was combined together with some other chain. */
unsigned combined : 1;
+
+ /* True if this is store elimination chain and eliminated stores store
+ loop invariant value into memory. */
+ unsigned inv_store_elimination : 1;
} *chain_p;
@@ -331,6 +363,10 @@ struct component
/* What we know about the step of the references in the component. */
enum ref_step_type comp_step;
+ /* True if all references in component are stores and we try to do
+ intra/inter loop iteration dead store elimination. */
+ bool eliminate_store_p;
+
/* Next component in the list. */
struct component *next;
};
@@ -401,6 +437,10 @@ dump_chain (FILE *file, chain_p chain)
chain_type = "Store-loads";
break;
+ case CT_STORE_STORE:
+ chain_type = "Store-stores";
+ break;
+
case CT_COMBINATION:
chain_type = "Combination";
break;
@@ -511,6 +551,12 @@ release_chain (chain_p chain)
chain->refs.release ();
chain->vars.release ();
chain->inits.release ();
+ if (chain->init_seq)
+ gimple_seq_discard (chain->init_seq);
+
+ chain->finis.release ();
+ if (chain->fini_seq)
+ gimple_seq_discard (chain->fini_seq);
free (chain);
}
@@ -714,6 +760,8 @@ split_data_refs_to_components (struct loop *loop,
struct data_dependence_relation *ddr;
struct component *comp_list = NULL, *comp;
dref dataref;
+ /* Don't do store elimination if loop has multiple exit edges. */
+ bool eliminate_store_p = single_exit (loop) != NULL;
basic_block last_always_executed = last_always_executed_block (loop);
FOR_EACH_VEC_ELT (datarefs, i, dr)
@@ -756,6 +804,14 @@ split_data_refs_to_components (struct loop *loop,
dra = DDR_A (ddr);
drb = DDR_B (ddr);
+
+ /* Don't do store elimination if there is any unknown dependence for
+ any store data reference. */
+ if ((DR_IS_WRITE (dra) || DR_IS_WRITE (drb))
+ && (DDR_ARE_DEPENDENT (ddr) == chrec_dont_know
+ || DDR_NUM_DIST_VECTS (ddr) == 0))
+ eliminate_store_p = false;
+
ia = component_of (comp_father, (unsigned) (size_t) dra->aux);
ib = component_of (comp_father, (unsigned) (size_t) drb->aux);
if (ia == ib)
@@ -795,10 +851,28 @@ split_data_refs_to_components (struct loop *loop,
continue;
}
}
+ else if (DR_IS_WRITE (dra) && DR_IS_WRITE (drb)
+ && ia != bad && ib != bad
+ && !determine_offset (dra, drb, &dummy_off))
+ {
+ merge_comps (comp_father, comp_size, bad, ia);
+ merge_comps (comp_father, comp_size, bad, ib);
+ continue;
+ }
merge_comps (comp_father, comp_size, ia, ib);
}
+ if (eliminate_store_p)
+ {
+ tree niters = number_of_latch_executions (loop);
+
+ /* Don't do store elimination if niters info is unknown because stores
+ in the last iteration can't be eliminated and we need to recover it
+ after loop. */
+ eliminate_store_p = (niters != NULL_TREE && niters != chrec_dont_know);
+ }
+
comps = XCNEWVEC (struct component *, n);
bad = component_of (comp_father, n);
FOR_EACH_VEC_ELT (datarefs, i, dr)
@@ -813,6 +887,7 @@ split_data_refs_to_components (struct loop *loop,
{
comp = XCNEW (struct component);
comp->refs.create (comp_size[ca]);
+ comp->eliminate_store_p = eliminate_store_p;
comps[ca] = comp;
}
@@ -827,6 +902,8 @@ split_data_refs_to_components (struct loop *loop,
gimple_bb (dataref->stmt));
dataref->pos = comp->refs.length ();
comp->refs.quick_push (dataref);
+ if (DR_IS_READ (dr))
+ comp->eliminate_store_p = false;
}
for (i = 0; i < n; i++)
@@ -951,6 +1028,21 @@ get_chain_root (chain_p chain)
return chain->refs[0];
}
+/* Given CHAIN, returns the last ref at DISTANCE, or NULL if it doesn't
+ exist. */
+
+static inline dref
+get_chain_last_ref_at (chain_p chain, unsigned distance)
+{
+ unsigned i;
+
+ for (i = chain->refs.length (); i > 0; i--)
+ if (distance == chain->refs[i - 1]->distance)
+ break;
+
+ return (i > 0) ? chain->refs[i - 1] : NULL;
+}
+
/* Adds REF to the chain CHAIN. */
static void
@@ -977,7 +1069,9 @@ add_ref_to_chain (chain_p chain, dref ref)
chain->has_max_use_after = false;
}
- if (ref->distance == chain->length
+ /* Don't set the flag for store-store chain since there is no use. */
+ if (chain->type != CT_STORE_STORE
+ && ref->distance == chain->length
&& ref->pos > root->pos)
chain->has_max_use_after = true;
@@ -1003,23 +1097,27 @@ make_invariant_chain (struct component *comp)
chain->all_always_accessed &= ref->always_accessed;
}
+ chain->inits = vNULL;
+ chain->finis = vNULL;
+
return chain;
}
-/* Make a new chain rooted at REF. */
+/* Make a new chain of type TYPE rooted at REF. */
static chain_p
-make_rooted_chain (dref ref)
+make_rooted_chain (dref ref, enum chain_type type)
{
chain_p chain = XCNEW (struct chain);
- chain->type = DR_IS_READ (ref->ref) ? CT_LOAD : CT_STORE_LOAD;
-
+ chain->type = type;
chain->refs.safe_push (ref);
chain->all_always_accessed = ref->always_accessed;
-
ref->distance = 0;
+ chain->inits = vNULL;
+ chain->finis = vNULL;
+
return chain;
}
@@ -1194,6 +1292,9 @@ add_looparound_copies (struct loop *loop, chain_p chain)
dref ref, root = get_chain_root (chain);
gphi *phi;
+ if (chain->type == CT_STORE_STORE)
+ return;
+
FOR_EACH_VEC_ELT (chain->refs, i, ref)
{
phi = find_looparound_phi (loop, ref, root);
@@ -1218,6 +1319,7 @@ determine_roots_comp (struct loop *loop,
dref a;
chain_p chain = NULL;
widest_int last_ofs = 0;
+ enum chain_type type;
/* Invariants are handled specially. */
if (comp->comp_step == RS_INVARIANT)
@@ -1227,11 +1329,15 @@ determine_roots_comp (struct loop *loop,
return;
}
- comp->refs.qsort (order_drefs);
+ /* Trivial component. */
+ if (comp->refs.length () <= 1)
+ return;
+ comp->refs.qsort (order_drefs);
FOR_EACH_VEC_ELT (comp->refs, i, a)
{
- if (!chain || DR_IS_WRITE (a->ref)
+ if (!chain
+ || (!comp->eliminate_store_p && DR_IS_WRITE (a->ref))
|| wi::leu_p (MAX_DISTANCE, a->offset - last_ofs))
{
if (nontrivial_chain_p (chain))
@@ -1241,7 +1347,13 @@ determine_roots_comp (struct loop *loop,
}
else
release_chain (chain);
- chain = make_rooted_chain (a);
+
+ if (DR_IS_READ (a->ref))
+ type = CT_LOAD;
+ else
+ type = comp->eliminate_store_p ? CT_STORE_STORE : CT_STORE_LOAD;
+
+ chain = make_rooted_chain (a, type);
last_ofs = a->offset;
continue;
}
@@ -1362,11 +1474,12 @@ replace_ref_with (gimple *stmt, tree new_tree, bool set, bool in_lhs)
gsi_insert_after (&bsi, new_stmt, GSI_NEW_STMT);
}
-/* Returns a memory reference to DR in the ITER-th iteration of
- the loop it was analyzed in. Append init stmts to STMTS. */
+/* Returns a memory reference to DR in the (NITERS + ITER)-th iteration
+ of the loop it was analyzed in. Append init stmts to STMTS. */
static tree
-ref_at_iteration (data_reference_p dr, int iter, gimple_seq *stmts)
+ref_at_iteration (data_reference_p dr, int iter,
+ gimple_seq *stmts, tree niters = NULL_TREE)
{
tree off = DR_OFFSET (dr);
tree coff = DR_INIT (dr);
@@ -1375,14 +1488,27 @@ ref_at_iteration (data_reference_p dr, int iter, gimple_seq *stmts)
tree ref_type = NULL_TREE;
tree ref_op1 = NULL_TREE;
tree ref_op2 = NULL_TREE;
- if (iter == 0)
- ;
- else if (TREE_CODE (DR_STEP (dr)) == INTEGER_CST)
- coff = size_binop (PLUS_EXPR, coff,
- size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter)));
- else
- off = size_binop (PLUS_EXPR, off,
- size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter)));
+ tree new_offset;
+
+ if (iter != 0)
+ {
+ new_offset = size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter));
+ if (TREE_CODE (new_offset) == INTEGER_CST)
+ coff = size_binop (PLUS_EXPR, coff, new_offset);
+ else
+ off = size_binop (PLUS_EXPR, off, new_offset);
+ }
+
+ if (niters != NULL_TREE)
+ {
+ niters = fold_convert (ssizetype, niters);
+ new_offset = size_binop (MULT_EXPR, DR_STEP (dr), niters);
+ if (TREE_CODE (niters) == INTEGER_CST)
+ coff = size_binop (PLUS_EXPR, coff, new_offset);
+ else
+ off = size_binop (PLUS_EXPR, off, new_offset);
+ }
+
/* While data-ref analysis punts on bit offsets it still handles
bitfield accesses at byte boundaries. Cope with that. Note that
if the bitfield object also starts at a byte-boundary we can simply
@@ -1514,21 +1640,204 @@ initialize_root_vars (struct loop *loop, chain_p chain, bitmap tmp_vars)
}
}
-/* Create the variables and initialization statement for root of chain
- CHAIN. Uids of the newly created temporary variables are marked
- in TMP_VARS. */
+/* For inter-iteration store elimination CHAIN in LOOP, returns true if
+ all stores to be eliminated store loop invariant values into memory.
+ In this case, we can use these invariant values directly after LOOP. */
+
+static bool
+is_inv_store_elimination_chain (struct loop *loop, chain_p chain)
+{
+ if (chain->length == 0 || chain->type != CT_STORE_STORE)
+ return false;
+
+ gcc_assert (!chain->has_max_use_after);
+
+ /* If loop iterates for unknown times or fewer times than chain->lenght,
+ we still need to setup root variable and propagate it with PHI node. */
+ tree niters = number_of_latch_executions (loop);
+ if (TREE_CODE (niters) != INTEGER_CST || wi::leu_p (niters, chain->length))
+ return false;
+
+ /* Check stores in chain for elimination if they only store loop invariant
+ values. */
+ for (unsigned i = 0; i < chain->length; i++)
+ {
+ dref a = get_chain_last_ref_at (chain, i);
+ if (a == NULL)
+ continue;
+
+ gimple *def_stmt, *stmt = a->stmt;
+ if (!gimple_assign_single_p (stmt))
+ return false;
+
+ tree val = gimple_assign_rhs1 (stmt);
+ if (TREE_CLOBBER_P (val))
+ return false;
+
+ if (CONSTANT_CLASS_P (val))
+ continue;
+
+ if (TREE_CODE (val) != SSA_NAME)
+ return false;
+
+ def_stmt = SSA_NAME_DEF_STMT (val);
+ if (gimple_nop_p (def_stmt))
+ continue;
+
+ if (flow_bb_inside_loop_p (loop, gimple_bb (def_stmt)))
+ return false;
+ }
+ return true;
+}
+
+/* Creates root variables for store elimination CHAIN in which stores for
+ elimination only store loop invariant values. In this case, we neither
+ need to load root variables before loop nor propagate it with PHI nodes. */
static void
-initialize_root (struct loop *loop, chain_p chain, bitmap tmp_vars)
+initialize_root_vars_store_elim_1 (chain_p chain)
{
- dref root = get_chain_root (chain);
- bool in_lhs = (chain->type == CT_STORE_LOAD
- || chain->type == CT_COMBINATION);
+ tree var;
+ unsigned i, n = chain->length;
+
+ chain->vars.create (n);
+ chain->vars.safe_grow_cleared (n);
+
+ /* Initialize root value for eliminated stores at each distance. */
+ for (i = 0; i < n; i++)
+ {
+ dref a = get_chain_last_ref_at (chain, i);
+ if (a == NULL)
+ continue;
+
+ var = gimple_assign_rhs1 (a->stmt);
+ chain->vars[a->distance] = var;
+ }
+
+ /* We don't propagate values with PHI nodes, so manually propagate value
+ to bubble positions. */
+ var = chain->vars[0];
+ for (i = 1; i < n; i++)
+ {
+ if (chain->vars[i] != NULL_TREE)
+ {
+ var = chain->vars[i];
+ continue;
+ }
+ chain->vars[i] = var;
+ }
+
+ /* Revert the vector. */
+ for (i = 0; i < n / 2; i++)
+ std::swap (chain->vars[i], chain->vars[n - i - 1]);
+}
+
+/* Creates root variables for store elimination CHAIN in which stores for
+ elimination store loop variant values. In this case, we may need to
+ load root variables before LOOP and propagate it with PHI nodes. Uids
+ of the newly created root variables are marked in TMP_VARS. */
+
+static void
+initialize_root_vars_store_elim_2 (struct loop *loop,
+ chain_p chain, bitmap tmp_vars)
+{
+ unsigned i, n = chain->length;
+ tree ref, init, var, next, val, phi_result;
+ gimple *stmt;
+ gimple_seq stmts;
+
+ chain->vars.create (n);
+
+ ref = DR_REF (get_chain_root (chain)->ref);
+ for (i = 0; i < n; i++)
+ {
+ var = predcom_tmp_var (ref, i, tmp_vars);
+ chain->vars.quick_push (var);
+ }
+
+ FOR_EACH_VEC_ELT (chain->vars, i, var)
+ chain->vars[i] = make_ssa_name (var);
+
+ /* Root values are either rhs operand of stores to be eliminated, or
+ loaded from memory before loop. */
+ auto_vec<tree> vtemps;
+ vtemps.safe_grow_cleared (n);
+ for (i = 0; i < n; i++)
+ {
+ init = get_init_expr (chain, i);
+ if (init == NULL_TREE)
+ {
+ /* Root value is rhs operand of the store to be eliminated if
+ it isn't loaded from memory before loop. */
+ dref a = get_chain_last_ref_at (chain, i);
+ val = gimple_assign_rhs1 (a->stmt);
+ if (TREE_CLOBBER_P (val))
+ val = get_or_create_ssa_default_def (cfun, SSA_NAME_VAR (var));
+
+ vtemps[n - i - 1] = val;
+ }
+ else
+ {
+ edge latch = loop_latch_edge (loop);
+ edge entry = loop_preheader_edge (loop);
+
+ /* Root value is loaded from memory before loop, we also need
+ to add PHI nodes to propagate the value across iterations. */
+ init = force_gimple_operand (init, &stmts, true, NULL_TREE);
+ if (stmts)
+ gsi_insert_seq_on_edge_immediate (entry, stmts);
+
+ next = chain->vars[n - i];
+ phi_result = copy_ssa_name (next);
+ gphi *phi = create_phi_node (phi_result, loop->header);
+ add_phi_arg (phi, init, entry, UNKNOWN_LOCATION);
+ add_phi_arg (phi, next, latch, UNKNOWN_LOCATION);
+ vtemps[n - i - 1] = phi_result;
+ }
+ }
+
+ /* Find the insertion position. */
+ dref last = get_chain_root (chain);
+ for (i = 0; i < chain->refs.length (); i++)
+ {
+ if (chain->refs[i]->pos > last->pos)
+ last = chain->refs[i];
+ }
+
+ gimple_stmt_iterator gsi = gsi_for_stmt (last->stmt);
- initialize_root_vars (loop, chain, tmp_vars);
- replace_ref_with (root->stmt,
- chain->vars[chain->length],
- true, in_lhs);
+ /* Insert statements copying root value to root variable. */
+ for (i = 0; i < n; i++)
+ {
+ var = chain->vars[i];
+ val = vtemps[i];
+ stmt = gimple_build_assign (var, val);
+ gsi_insert_after (&gsi, stmt, GSI_NEW_STMT);
+ }
+}
+
+/* Generates stores for CHAIN's eliminated stores in LOOP's last
+ (CHAIN->length - 1) iterations. */
+
+static void
+finalize_eliminated_stores (struct loop *loop, chain_p chain)
+{
+ unsigned i, n = chain->length;
+
+ for (i = 0; i < n; i++)
+ {
+ tree var = chain->vars[i];
+ tree fini = chain->finis[n - i - 1];
+ gimple *stmt = gimple_build_assign (fini, var);
+
+ gimple_seq_add_stmt_without_update (&chain->fini_seq, stmt);
+ }
+
+ if (chain->fini_seq)
+ {
+ gsi_insert_seq_on_edge_immediate (single_exit (loop), chain->fini_seq);
+ chain->fini_seq = NULL;
+ }
}
/* Initializes a variable for load motion for ROOT and prepares phi nodes and
@@ -1699,10 +2008,17 @@ remove_stmt (gimple *stmt)
bsi = gsi_for_stmt (stmt);
name = gimple_assign_lhs (stmt);
- gcc_assert (TREE_CODE (name) == SSA_NAME);
-
- next = single_nonlooparound_use (name);
- reset_debug_uses (stmt);
+ if (TREE_CODE (name) == SSA_NAME)
+ {
+ next = single_nonlooparound_use (name);
+ reset_debug_uses (stmt);
+ }
+ else
+ {
+ /* This is a store to be eliminated. */
+ gcc_assert (gimple_vdef (stmt) != NULL);
+ next = NULL;
+ }
unlink_stmt_vdef (stmt);
gsi_remove (&bsi, true);
@@ -1722,11 +2038,12 @@ remove_stmt (gimple *stmt)
static void
execute_pred_commoning_chain (struct loop *loop, chain_p chain,
- bitmap tmp_vars)
+ bitmap tmp_vars)
{
- unsigned i;
+ unsigned i, n;
dref a;
tree var;
+ bool in_lhs;
if (chain->combined)
{
@@ -1734,12 +2051,47 @@ execute_pred_commoning_chain (struct loop *loop, chain_p chain,
compute the values of the expression (except for the root one).
We delay this until after all chains are processed. */
}
+ else if (chain->type == CT_STORE_STORE)
+ {
+ if (chain->length > 0)
+ {
+ if (chain->inv_store_elimination)
+ {
+ /* If dead stores in this chain only store loop invariant
+ values, we can simply record the invariant value and use
+ it directly after loop. */
+ initialize_root_vars_store_elim_1 (chain);
+ }
+ else
+ {
+ /* If dead stores in this chain store loop variant values,
+ we need to set up the variables by loading from memory
+ before loop and propagating it with PHI nodes. */
+ initialize_root_vars_store_elim_2 (loop, chain, tmp_vars);
+ }
+
+ /* For inter-iteration store elimination chain, stores at each
+ distance in loop's last (chain->length - 1) iterations can't
+ be eliminated, because there is no following killing store.
+ We need to generate these stores after loop. */
+ finalize_eliminated_stores (loop, chain);
+ }
+
+ /* Eliminate the stores killed by following store. */
+ n = chain->refs.length ();
+ for (i = 0; i < n - 1; i++)
+ remove_stmt (chain->refs[i]->stmt);
+ }
else
{
- /* For non-combined chains, set up the variables that hold its value,
- and replace the uses of the original references by these
- variables. */
- initialize_root (loop, chain, tmp_vars);
+ /* For non-combined chains, set up the variables that hold its value. */
+ initialize_root_vars (loop, chain, tmp_vars);
+ a = get_chain_root (chain);
+ in_lhs = (chain->type == CT_STORE_LOAD
+ || chain->type == CT_COMBINATION);
+ replace_ref_with (a->stmt, chain->vars[chain->length], true, in_lhs);
+
+ /* Replace the uses of the original references by these variables. */
for (i = 1; chain->refs.iterate (i, &a); i++)
{
var = chain->vars[chain->length - a->distance];
@@ -1763,6 +2115,9 @@ determine_unroll_factor (vec<chain_p> chains)
{
if (chain->type == CT_INVARIANT)
continue;
+ /* For now we can't handle unrolling when eliminating stores. */
+ else if (chain->type == CT_STORE_STORE)
+ return 1;
if (chain->combined)
{
@@ -2409,6 +2764,74 @@ try_combine_chains (vec<chain_p> *chains)
}
}
+/* Prepare initializers for store elimination CHAIN in LOOP. Returns false
+ if this is impossible because one of these initializers may trap, true
+ otherwise. */
+
+static bool
+prepare_initializers_chain_store_elim (struct loop *loop, chain_p chain)
+{
+ unsigned i, n = chain->length;
+
+ /* For now we can't eliminate stores if some of them are conditional
+ executed. */
+ if (!chain->all_always_accessed)
+ return false;
+
+ /* Nothing to intialize for intra-iteration store elimination. */
+ if (n == 0 && chain->type == CT_STORE_STORE)
+ return true;
+
+ /* For store elimination chain, there is nothing to initialize if stores
+ to be eliminated only store loop invariant values into memory. */
+ if (chain->type == CT_STORE_STORE
+ && is_inv_store_elimination_chain (loop, chain))
+ {
+ chain->inv_store_elimination = true;
+ return true;
+ }
+
+ chain->inits.create (n);
+ chain->inits.safe_grow_cleared (n);
+
+ /* For store eliminatin chain like below:
+
+ for (i = 0; i < len; i++)
+ {
+ a[i] = 1;
+ // a[i + 1] = ...
+ a[i + 2] = 3;
+ }
+
+ store to a[i + 1] is missed in loop body, it acts like bubbles. The
+ content of a[i + 1] remain the same if the loop iterates fewer times
+ than chain->length. We need to set up root variables for such stores
+ by loading from memory before loop. Note we only need to load bubble
+ elements because loop body is guaranteed to be executed at least once
+ after loop's preheader edge. */
+ auto_vec<bool> bubbles;
+ bubbles.safe_grow_cleared (n + 1);
+ for (i = 0; i < chain->refs.length (); i++)
+ bubbles[chain->refs[i]->distance] = true;
+
+ struct data_reference *dr = get_chain_root (chain)->ref;
+ for (i = 0; i < n; i++)
+ {
+ if (bubbles[i])
+ continue;
+
+ gimple_seq stmts = NULL;
+
+ tree init = ref_at_iteration (dr, (int) 0 - i, &stmts);
+ if (stmts)
+ gimple_seq_add_seq_without_update (&chain->init_seq, stmts);
+
+ chain->inits[i] = init;
+ }
+
+ return true;
+}
+
/* Prepare initializers for CHAIN in LOOP. Returns false if this is
impossible because one of these initializers may trap, true otherwise. */
@@ -2421,6 +2844,9 @@ prepare_initializers_chain (struct loop *loop, chain_p chain)
dref laref;
edge entry = loop_preheader_edge (loop);
+ if (chain->type == CT_STORE_STORE)
+ return prepare_initializers_chain_store_elim (loop, chain);
+
/* Find the initializers for the variables, and check that they cannot
trap. */
chain->inits.create (n);
@@ -2454,7 +2880,7 @@ prepare_initializers_chain (struct loop *loop, chain_p chain)
}
if (stmts)
- gsi_insert_seq_on_edge_immediate (entry, stmts);
+ gimple_seq_add_seq_without_update (&chain->init_seq, stmts);
chain->inits[i] = init;
}
@@ -2484,10 +2910,115 @@ prepare_initializers (struct loop *loop, vec<chain_p> chains)
}
}
-/* Performs predictive commoning for LOOP. Returns true if LOOP was
- unrolled. */
+/* Generates finalizer memory references for CHAIN in LOOP. Returns true
+ if finalizer code for CHAIN can be generated, otherwise false. */
+
+static bool
+prepare_finalizers_chain (struct loop *loop, chain_p chain)
+{
+ unsigned i, n = chain->length;
+ struct data_reference *dr = get_chain_root (chain)->ref;
+ tree fini, niters = number_of_latch_executions (loop);
+
+ /* For now we can't eliminate stores if some of them are conditional
+ executed. */
+ if (!chain->all_always_accessed)
+ return false;
+
+ chain->finis.create (n);
+ for (i = 0; i < n; i++)
+ chain->finis.quick_push (NULL_TREE);
+
+ /* We never use looparound phi node for store elimination chains. */
+
+ /* Find the finalizers for the variables, and check that they cannot
+ trap. */
+ for (i = 0; i < n; i++)
+ {
+ gimple_seq stmts = NULL;
+ gcc_assert (chain->finis[i] == NULL_TREE);
+
+ if (TREE_CODE (niters) != INTEGER_CST && TREE_CODE (niters) != SSA_NAME)
+ {
+ niters = unshare_expr (niters);
+ niters = force_gimple_operand (niters, &stmts, true, NULL);
+ if (stmts)
+ {
+ gimple_seq_add_seq_without_update (&chain->fini_seq, stmts);
+ stmts = NULL;
+ }
+ }
+ fini = ref_at_iteration (dr, (int) 0 - i, &stmts, niters);
+ if (stmts)
+ gimple_seq_add_seq_without_update (&chain->fini_seq, stmts);
+
+ chain->finis[i] = fini;
+ }
+
+ return true;
+}
+
+/* Generates finalizer memory reference for CHAINS in LOOP. Returns true
+ if finalizer code generation for CHAINS breaks loop closed ssa form. */
static bool
+prepare_finalizers (struct loop *loop, vec<chain_p> chains)
+{
+ chain_p chain;
+ unsigned i;
+ bool loop_closed_ssa = false;
+
+ for (i = 0; i < chains.length ();)
+ {
+ chain = chains[i];
+
+ /* Finalizer is only necessary for inter-iteration store elimination
+ chains. */
+ if (chain->length == 0 || chain->type != CT_STORE_STORE)
+ {
+ i++;
+ continue;
+ }
+
+ if (prepare_finalizers_chain (loop, chain))
+ {
+ i++;
+ /* Be conservative, assume loop closed ssa form is corrupted
+ by store-store chain. Though it's not always the case if
+ eliminated stores only store loop invariant values into
+ memory. */
+ loop_closed_ssa = true;
+ }
+ else
+ {
+ release_chain (chain);
+ chains.unordered_remove (i);
+ }
+ }
+ return loop_closed_ssa;
+}
+
+/* Insert all initializing gimple stmts into loop's entry edge. */
+
+static void
+insert_init_seqs (struct loop *loop, vec<chain_p> chains)
+{
+ unsigned i;
+ edge entry = loop_preheader_edge (loop);
+
+ for (i = 0; i < chains.length (); ++i)
+ if (chains[i]->init_seq)
+ {
+ gsi_insert_seq_on_edge_immediate (entry, chains[i]->init_seq);
+ chains[i]->init_seq = NULL;
+ }
+}
+
+/* Performs predictive commoning for LOOP. Sets bit 1<<0 of return value
+ if LOOP was unrolled; Sets bit 1<<1 of return value if loop closed ssa
+ form was corrupted. */
+
+static unsigned
tree_predictive_commoning_loop (struct loop *loop)
{
vec<data_reference_p> datarefs;
@@ -2496,7 +3027,7 @@ tree_predictive_commoning_loop (struct loop *loop)
vec<chain_p> chains = vNULL;
unsigned unroll_factor;
struct tree_niter_desc desc;
- bool unroll = false;
+ bool unroll = false, loop_closed_ssa = false;
edge exit;
if (dump_file && (dump_flags & TDF_DETAILS))
@@ -2508,7 +3039,7 @@ tree_predictive_commoning_loop (struct loop *loop)
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "Loop iterates only 1 time, nothing to do.\n");
- return false;
+ return 0;
}
/* Find the data references and split them into components according to their
@@ -2523,7 +3054,7 @@ tree_predictive_commoning_loop (struct loop *loop)
fprintf (dump_file, "Cannot analyze data dependencies\n");
free_data_refs (datarefs);
free_dependence_relations (dependences);
- return false;
+ return 0;
}
if (dump_file && (dump_flags & TDF_DETAILS))
@@ -2536,7 +3067,7 @@ tree_predictive_commoning_loop (struct loop *loop)
{
free_data_refs (datarefs);
free_affine_expand_cache (&name_expansions);
- return false;
+ return 0;
}
if (dump_file && (dump_flags & TDF_DETAILS))
@@ -2561,10 +3092,13 @@ tree_predictive_commoning_loop (struct loop *loop)
goto end;
}
prepare_initializers (loop, chains);
+ loop_closed_ssa = prepare_finalizers (loop, chains);
/* Try to combine the chains that are always worked with together. */
try_combine_chains (&chains);
+ insert_init_seqs (loop, chains);
+
if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, "Before commoning:\n\n");
@@ -2620,7 +3154,7 @@ end: ;
free_affine_expand_cache (&name_expansions);
- return unroll;
+ return (unroll ? 1 : 0) | (loop_closed_ssa ? 2 : 0);
}
/* Runs predictive commoning. */
@@ -2628,23 +3162,26 @@ end: ;
unsigned
tree_predictive_commoning (void)
{
- bool unrolled = false;
struct loop *loop;
- unsigned ret = 0;
+ unsigned ret = 0, changed = 0;
initialize_original_copy_tables ();
FOR_EACH_LOOP (loop, LI_ONLY_INNERMOST)
if (optimize_loop_for_speed_p (loop))
{
- unrolled |= tree_predictive_commoning_loop (loop);
+ changed |= tree_predictive_commoning_loop (loop);
}
+ free_original_copy_tables ();
- if (unrolled)
+ if (changed > 0)
{
scev_reset ();
+
+ if (changed > 1)
+ rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa);
+
ret = TODO_cleanup_cfg;
}
- free_original_copy_tables ();
return ret;
}
diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c
index b70e32573ee..4d8177c4a62 100644
--- a/gcc/tree-pretty-print.c
+++ b/gcc/tree-pretty-print.c
@@ -1860,22 +1860,9 @@ dump_generic_node (pretty_printer *pp, tree node, int spc, dump_flags_t flags,
dump_decl_name (pp, node, flags);
else if (TYPE_NAME (TREE_TYPE (node)) != node)
{
- if ((TREE_CODE (TREE_TYPE (node)) == RECORD_TYPE
- || TREE_CODE (TREE_TYPE (node)) == UNION_TYPE)
- && TYPE_METHODS (TREE_TYPE (node)))
- {
- /* The type is a c++ class: all structures have at least
- 4 methods. */
- pp_string (pp, "class ");
- dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
- }
- else
- {
- pp_string (pp,
- (TREE_CODE (TREE_TYPE (node)) == UNION_TYPE
+ pp_string (pp, (TREE_CODE (TREE_TYPE (node)) == UNION_TYPE
? "union" : "struct "));
- dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
- }
+ dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
}
else
pp_string (pp, "<anon>");
diff --git a/gcc/tree-profile.c b/gcc/tree-profile.c
index b1ee7f2b3f5..4b73255018c 100644
--- a/gcc/tree-profile.c
+++ b/gcc/tree-profile.c
@@ -50,6 +50,8 @@ along with GCC; see the file COPYING3. If not see
#include "profile.h"
#include "tree-cfgcleanup.h"
#include "params.h"
+#include "stringpool.h"
+#include "attribs.h"
static GTY(()) tree gcov_type_node;
static GTY(()) tree tree_interval_profiler_fn;
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index c9865c6eb31..68edbce21b3 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -1175,11 +1175,17 @@ build_access_from_expr_1 (tree expr, gimple *stmt, bool write)
else
partial_ref = false;
+ if (storage_order_barrier_p (expr))
+ {
+ disqualify_base_of_expr (expr, "storage order barrier.");
+ return NULL;
+ }
+
/* We need to dive through V_C_Es in order to get the size of its parameter
and not the result type. Ada produces such statements. We are also
capable of handling the topmost V_C_E but not any of those buried in other
handled components. */
- if (TREE_CODE (expr) == VIEW_CONVERT_EXPR && !storage_order_barrier_p (expr))
+ if (TREE_CODE (expr) == VIEW_CONVERT_EXPR)
expr = TREE_OPERAND (expr, 0);
if (contains_view_convert_expr_p (expr))
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index 74ee2b0a0cc..5794d227fe5 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -1991,6 +1991,7 @@ call_may_clobber_ref_p_1 (gcall *call, ao_ref *ref)
case IFN_UBSAN_BOUNDS:
case IFN_UBSAN_VPTR:
case IFN_UBSAN_OBJECT_SIZE:
+ case IFN_UBSAN_PTR:
case IFN_ASAN_CHECK:
return false;
default:
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c
index f18f2e0c2a4..3940d538ca7 100644
--- a/gcc/tree-ssa-ccp.c
+++ b/gcc/tree-ssa-ccp.c
@@ -145,6 +145,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa-ccp.h"
#include "tree-dfa.h"
#include "diagnostic-core.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Possible lattice values. */
typedef enum
diff --git a/gcc/tree-ssa-live.c b/gcc/tree-ssa-live.c
index c77075e4ac6..8738fe21a6e 100644
--- a/gcc/tree-ssa-live.c
+++ b/gcc/tree-ssa-live.c
@@ -38,6 +38,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa.h"
#include "ipa-utils.h"
#include "cfgloop.h"
+#include "stringpool.h"
+#include "attribs.h"
static void verify_live_on_entry (tree_live_info_p);
diff --git a/gcc/tree-ssa-loop-ch.c b/gcc/tree-ssa-loop-ch.c
index 86be34a1ac7..14cc6d8d721 100644
--- a/gcc/tree-ssa-loop-ch.c
+++ b/gcc/tree-ssa-loop-ch.c
@@ -436,7 +436,7 @@ pass_ch::process_loop_p (struct loop *loop)
bool
pass_ch_vect::process_loop_p (struct loop *loop)
{
- if (!flag_tree_vectorize && !loop->force_vectorize)
+ if (!flag_tree_loop_vectorize && !loop->force_vectorize)
return false;
if (loop->dont_vectorize)
diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c
index 1cbff04d1e5..b65cd96f4ed 100644
--- a/gcc/tree-ssa-loop-ivopts.c
+++ b/gcc/tree-ssa-loop-ivopts.c
@@ -5284,13 +5284,13 @@ set_autoinc_for_original_candidates (struct ivopts_data *data)
static void
relate_compare_use_with_all_cands (struct ivopts_data *data)
{
- unsigned i, max_id = data->vcands.length () - 1;
+ unsigned i, count = data->vcands.length ();
for (i = 0; i < data->vgroups.length (); i++)
{
struct iv_group *group = data->vgroups[i];
if (group->type == USE_COMPARE)
- bitmap_set_range (group->related_cands, 0, max_id);
+ bitmap_set_range (group->related_cands, 0, count);
}
}
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index e0107c28dfb..0d6d1019ac6 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -42,6 +42,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-chrec.h"
#include "tree-scalar-evolution.h"
#include "params.h"
+#include "tree-dfa.h"
/* The maximum number of dominator BBs we search for conditions
@@ -1980,6 +1981,21 @@ expand_simple_operations (tree expr, tree stop)
if (code == SSA_NAME)
return expand_simple_operations (e, stop);
+ else if (code == ADDR_EXPR)
+ {
+ HOST_WIDE_INT offset;
+ tree base = get_addr_base_and_unit_offset (TREE_OPERAND (e, 0),
+ &offset);
+ if (base
+ && TREE_CODE (base) == MEM_REF)
+ {
+ ee = expand_simple_operations (TREE_OPERAND (base, 0), stop);
+ return fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (expr), ee,
+ wide_int_to_tree (sizetype,
+ mem_ref_offset (base)
+ + offset));
+ }
+ }
return expr;
}
diff --git a/gcc/tree-ssa-loop-prefetch.c b/gcc/tree-ssa-loop-prefetch.c
index 8b5e4d139bb..ecf14d108fe 100644
--- a/gcc/tree-ssa-loop-prefetch.c
+++ b/gcc/tree-ssa-loop-prefetch.c
@@ -1633,7 +1633,7 @@ determine_loop_nest_reuse (struct loop *loop, struct mem_ref_group *refs,
for (ref = gr->refs; ref; ref = ref->next)
{
dr = create_data_ref (nest, loop_containing_stmt (ref->stmt),
- ref->mem, ref->stmt, !ref->write_p);
+ ref->mem, ref->stmt, !ref->write_p, false);
if (dr)
{
@@ -1668,6 +1668,7 @@ determine_loop_nest_reuse (struct loop *loop, struct mem_ref_group *refs,
refb = (struct mem_ref *) DDR_B (dep)->aux;
if (DDR_ARE_DEPENDENT (dep) == chrec_dont_know
+ || DDR_COULD_BE_INDEPENDENT_P (dep)
|| DDR_NUM_DIST_VECTS (dep) == 0)
{
/* If the dependence cannot be analyzed, assume that there might be
diff --git a/gcc/tree-ssa-loop-unswitch.c b/gcc/tree-ssa-loop-unswitch.c
index 204cd0d0645..57aba4f1dd0 100644
--- a/gcc/tree-ssa-loop-unswitch.c
+++ b/gcc/tree-ssa-loop-unswitch.c
@@ -582,8 +582,9 @@ find_loop_guard (struct loop *loop)
gcond *cond;
do
{
+ basic_block next = NULL;
if (single_succ_p (header))
- header = single_succ (header);
+ next = single_succ (header);
else
{
cond = dyn_cast <gcond *> (last_stmt (header));
@@ -593,12 +594,16 @@ find_loop_guard (struct loop *loop)
/* Make sure to skip earlier hoisted guards that are left
in place as if (true). */
if (gimple_cond_true_p (cond))
- header = te->dest;
+ next = te->dest;
else if (gimple_cond_false_p (cond))
- header = fe->dest;
+ next = fe->dest;
else
break;
}
+ /* Never traverse a backedge. */
+ if (header->loop_father->header == next)
+ return NULL;
+ header = next;
}
while (1);
if (!flow_bb_inside_loop_p (loop, te->dest)
diff --git a/gcc/tree-ssa-loop.c b/gcc/tree-ssa-loop.c
index 19a0f30c525..1e8491757a6 100644
--- a/gcc/tree-ssa-loop.c
+++ b/gcc/tree-ssa-loop.c
@@ -38,6 +38,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-vectorizer.h"
#include "omp-general.h"
#include "diagnostic-core.h"
+#include "stringpool.h"
+#include "attribs.h"
/* A pass making sure loops are fixed up. */
diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c
index 7ac1659fa06..87940b6e00d 100644
--- a/gcc/tree-ssa-math-opts.c
+++ b/gcc/tree-ssa-math-opts.c
@@ -3145,6 +3145,93 @@ is_widening_mult_p (gimple *stmt,
return true;
}
+/* Check to see if the CALL statement is an invocation of copysign
+ with 1. being the first argument. */
+static bool
+is_copysign_call_with_1 (gimple *call)
+{
+ gcall *c = dyn_cast <gcall *> (call);
+ if (! c)
+ return false;
+
+ enum combined_fn code = gimple_call_combined_fn (c);
+
+ if (code == CFN_LAST)
+ return false;
+
+ if (builtin_fn_p (code))
+ {
+ switch (as_builtin_fn (code))
+ {
+ CASE_FLT_FN (BUILT_IN_COPYSIGN):
+ CASE_FLT_FN_FLOATN_NX (BUILT_IN_COPYSIGN):
+ return real_onep (gimple_call_arg (c, 0));
+ default:
+ return false;
+ }
+ }
+
+ if (internal_fn_p (code))
+ {
+ switch (as_internal_fn (code))
+ {
+ case IFN_COPYSIGN:
+ return real_onep (gimple_call_arg (c, 0));
+ default:
+ return false;
+ }
+ }
+
+ return false;
+}
+
+/* Try to expand the pattern x * copysign (1, y) into xorsign (x, y).
+ This only happens when the the xorsign optab is defined, if the
+ pattern is not a xorsign pattern or if expansion fails FALSE is
+ returned, otherwise TRUE is returned. */
+static bool
+convert_expand_mult_copysign (gimple *stmt, gimple_stmt_iterator *gsi)
+{
+ tree treeop0, treeop1, lhs, type;
+ location_t loc = gimple_location (stmt);
+ lhs = gimple_assign_lhs (stmt);
+ treeop0 = gimple_assign_rhs1 (stmt);
+ treeop1 = gimple_assign_rhs2 (stmt);
+ type = TREE_TYPE (lhs);
+ machine_mode mode = TYPE_MODE (type);
+
+ if (HONOR_SNANS (type) || !has_single_use (lhs))
+ return false;
+
+ if (TREE_CODE (treeop0) == SSA_NAME && TREE_CODE (treeop1) == SSA_NAME)
+ {
+ gimple *call0 = SSA_NAME_DEF_STMT (treeop0);
+ if (!is_copysign_call_with_1 (call0))
+ {
+ call0 = SSA_NAME_DEF_STMT (treeop1);
+ if (!is_copysign_call_with_1 (call0))
+ return false;
+
+ treeop1 = treeop0;
+ }
+
+ if (optab_handler (xorsign_optab, mode) == CODE_FOR_nothing)
+ return false;
+
+ gcall *c = as_a<gcall*> (call0);
+ treeop0 = gimple_call_arg (c, 1);
+
+ gcall *call_stmt
+ = gimple_build_call_internal (IFN_XORSIGN, 2, treeop1, treeop0);
+ gimple_set_lhs (call_stmt, lhs);
+ gimple_set_location (call_stmt, loc);
+ gsi_replace (gsi, call_stmt, true);
+ return true;
+ }
+
+ return false;
+}
+
/* Process a single gimple statement STMT, which has a MULT_EXPR as
its rhs, and try to convert it into a WIDEN_MULT_EXPR. The return
value is true iff we converted the statement. */
@@ -4114,6 +4201,7 @@ pass_optimize_widening_mul::execute (function *fun)
{
case MULT_EXPR:
if (!convert_mult_to_widen (stmt, &gsi)
+ && !convert_expand_mult_copysign (stmt, &gsi)
&& convert_mult_to_fma (stmt,
gimple_assign_rhs1 (stmt),
gimple_assign_rhs2 (stmt)))
diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c
index fb843afcec0..ed80442031e 100644
--- a/gcc/tree-ssa-operands.c
+++ b/gcc/tree-ssa-operands.c
@@ -1139,7 +1139,7 @@ DEBUG_FUNCTION bool
verify_imm_links (FILE *f, tree var)
{
use_operand_p ptr, prev, list;
- int count;
+ unsigned int count;
gcc_assert (TREE_CODE (var) == SSA_NAME);
@@ -1157,20 +1157,31 @@ verify_imm_links (FILE *f, tree var)
for (ptr = list->next; ptr != list; )
{
if (prev != ptr->prev)
- goto error;
+ {
+ fprintf (f, "prev != ptr->prev\n");
+ goto error;
+ }
if (ptr->use == NULL)
- goto error; /* 2 roots, or SAFE guard node. */
+ {
+ fprintf (f, "ptr->use == NULL\n");
+ goto error; /* 2 roots, or SAFE guard node. */
+ }
else if (*(ptr->use) != var)
- goto error;
+ {
+ fprintf (f, "*(ptr->use) != var\n");
+ goto error;
+ }
prev = ptr;
ptr = ptr->next;
- /* Avoid infinite loops. 50,000,000 uses probably indicates a
- problem. */
- if (count++ > 50000000)
- goto error;
+ count++;
+ if (count == 0)
+ {
+ fprintf (f, "number of immediate uses doesn't fit unsigned int\n");
+ goto error;
+ }
}
/* Verify list in the other direction. */
@@ -1178,15 +1189,25 @@ verify_imm_links (FILE *f, tree var)
for (ptr = list->prev; ptr != list; )
{
if (prev != ptr->next)
- goto error;
+ {
+ fprintf (f, "prev != ptr->next\n");
+ goto error;
+ }
prev = ptr;
ptr = ptr->prev;
- if (count-- < 0)
- goto error;
+ if (count == 0)
+ {
+ fprintf (f, "count-- < 0\n");
+ goto error;
+ }
+ count--;
}
if (count != 0)
- goto error;
+ {
+ fprintf (f, "count != 0\n");
+ goto error;
+ }
return false;
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index 0ec3d3c7f7e..a6a68cf8372 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -540,8 +540,6 @@ static void bitmap_set_copy (bitmap_set_t, bitmap_set_t);
static void bitmap_set_and (bitmap_set_t, bitmap_set_t);
static bool bitmap_set_contains_value (bitmap_set_t, unsigned int);
static void bitmap_insert_into_set (bitmap_set_t, pre_expr);
-static void bitmap_insert_into_set_1 (bitmap_set_t, pre_expr,
- unsigned int, bool);
static bitmap_set_t bitmap_set_new (void);
static tree create_expression_by_pieces (basic_block, pre_expr, gimple_seq *,
tree);
@@ -732,27 +730,22 @@ bitmap_remove_from_set (bitmap_set_t set, pre_expr expr)
}
}
+/* Insert an expression EXPR into a bitmapped set. */
+
static void
-bitmap_insert_into_set_1 (bitmap_set_t set, pre_expr expr,
- unsigned int val, bool allow_constants)
+bitmap_insert_into_set (bitmap_set_t set, pre_expr expr)
{
- if (allow_constants || !value_id_constant_p (val))
+ unsigned int val = get_expr_value_id (expr);
+ if (! value_id_constant_p (val))
{
- /* We specifically expect this and only this function to be able to
- insert constants into a set. */
+ /* Note this is the only function causing multiple expressions
+ for the same value to appear in a set. This is needed for
+ TMP_GEN, PHI_GEN and NEW_SETs. */
bitmap_set_bit (&set->values, val);
bitmap_set_bit (&set->expressions, get_or_alloc_expression_id (expr));
}
}
-/* Insert an expression EXPR into a bitmapped set. */
-
-static void
-bitmap_insert_into_set (bitmap_set_t set, pre_expr expr)
-{
- bitmap_insert_into_set_1 (set, expr, get_expr_value_id (expr), false);
-}
-
/* Copy a bitmapped set ORIG, into bitmapped set DEST. */
static void
@@ -837,7 +830,7 @@ bitmap_set_and (bitmap_set_t dest, bitmap_set_t orig)
}
}
-/* Subtract all values and expressions contained in ORIG from DEST. */
+/* Subtract all expressions contained in ORIG from DEST. */
static bitmap_set_t
bitmap_set_subtract (bitmap_set_t dest, bitmap_set_t orig)
@@ -859,7 +852,7 @@ bitmap_set_subtract (bitmap_set_t dest, bitmap_set_t orig)
return result;
}
-/* Subtract all the values in bitmap set B from bitmap set A. */
+/* Subtract all values in bitmap set B from bitmap set A. */
static void
bitmap_set_subtract_values (bitmap_set_t a, bitmap_set_t b)
@@ -987,6 +980,11 @@ bitmap_value_insert_into_set (bitmap_set_t set, pre_expr expr)
static void
print_pre_expr (FILE *outfile, const pre_expr expr)
{
+ if (! expr)
+ {
+ fprintf (outfile, "NULL");
+ return;
+ }
switch (expr->kind)
{
case CONSTANT:
@@ -2115,7 +2113,8 @@ static sbitmap has_abnormal_preds;
ANTIC_OUT[BLOCK] = phi_translate (ANTIC_IN[succ(BLOCK)])
ANTIC_IN[BLOCK] = clean(ANTIC_OUT[BLOCK] U EXP_GEN[BLOCK] - TMP_GEN[BLOCK])
-*/
+
+ Note that clean() is deferred until after the iteration. */
static bool
compute_antic_aux (basic_block block, bool block_has_abnormal_pred_edge)
@@ -2215,7 +2214,8 @@ compute_antic_aux (basic_block block, bool block_has_abnormal_pred_edge)
bitmap_value_insert_into_set (ANTIC_IN (block),
expression_for_id (bii));
- clean (ANTIC_IN (block));
+ /* clean (ANTIC_IN (block)) is defered to after the iteration converged
+ because it can cause non-convergence, see for example PR81181. */
if (!was_visited || !bitmap_set_equal (old, ANTIC_IN (block)))
changed = true;
@@ -2418,7 +2418,9 @@ compute_antic (void)
inverted_post_order_compute (&postorder);
auto_sbitmap worklist (last_basic_block_for_fn (cfun) + 1);
- bitmap_ones (worklist);
+ bitmap_clear (worklist);
+ FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR_FOR_FN (cfun)->preds)
+ bitmap_set_bit (worklist, e->src->index);
while (changed)
{
if (dump_file && (dump_flags & TDF_DETAILS))
@@ -2449,6 +2451,12 @@ compute_antic (void)
gcc_checking_assert (num_iterations < 500);
}
+ /* We have to clean after the dataflow problem converged as cleaning
+ can cause non-convergence because it is based on expressions
+ rather than values. */
+ FOR_EACH_BB_FN (block, cfun)
+ clean (ANTIC_IN (block));
+
statistics_histogram_event (cfun, "compute_antic iterations",
num_iterations);
@@ -2456,7 +2464,8 @@ compute_antic (void)
{
/* For partial antic we ignore backedges and thus we do not need
to perform any iteration when we process blocks in postorder. */
- int postorder_num = pre_and_rev_post_order_compute (NULL, postorder.address (), false);
+ int postorder_num
+ = pre_and_rev_post_order_compute (NULL, postorder.address (), false);
for (i = postorder_num - 1 ; i >= 0; i--)
{
basic_block block = BASIC_BLOCK_FOR_FN (cfun, postorder[i]);
diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c
index 2f49ba13553..561acea4dcc 100644
--- a/gcc/tree-ssa-reassoc.c
+++ b/gcc/tree-ssa-reassoc.c
@@ -2918,11 +2918,22 @@ optimize_range_tests_var_bound (enum tree_code opcode, int first, int length,
for (i = 0; i < length; i++)
{
+ bool in_p = ranges[i].in_p;
if (ranges[i].low == NULL_TREE
- || ranges[i].high == NULL_TREE
- || !integer_zerop (ranges[i].low)
- || !integer_zerop (ranges[i].high))
+ || ranges[i].high == NULL_TREE)
continue;
+ if (!integer_zerop (ranges[i].low)
+ || !integer_zerop (ranges[i].high))
+ {
+ if (ranges[i].exp
+ && TYPE_PRECISION (TREE_TYPE (ranges[i].exp)) == 1
+ && TYPE_UNSIGNED (TREE_TYPE (ranges[i].exp))
+ && integer_onep (ranges[i].low)
+ && integer_onep (ranges[i].high))
+ in_p = !in_p;
+ else
+ continue;
+ }
gimple *stmt;
tree_code ccode;
@@ -2958,17 +2969,26 @@ optimize_range_tests_var_bound (enum tree_code opcode, int first, int length,
{
case GT_EXPR:
case GE_EXPR:
- if (!ranges[i].in_p)
- std::swap (rhs1, rhs2);
+ case LT_EXPR:
+ case LE_EXPR:
+ break;
+ default:
+ continue;
+ }
+ if (in_p)
+ ccode = invert_tree_comparison (ccode, false);
+ switch (ccode)
+ {
+ case GT_EXPR:
+ case GE_EXPR:
+ std::swap (rhs1, rhs2);
ccode = swap_tree_comparison (ccode);
break;
case LT_EXPR:
case LE_EXPR:
- if (ranges[i].in_p)
- std::swap (rhs1, rhs2);
break;
default:
- continue;
+ gcc_unreachable ();
}
int *idx = map->get (rhs1);
@@ -3015,8 +3035,14 @@ optimize_range_tests_var_bound (enum tree_code opcode, int first, int length,
fprintf (dump_file, "\n");
}
- if (ranges[i].in_p)
- std::swap (rhs1, rhs2);
+ operand_entry *oe = (*ops)[ranges[i].idx];
+ ranges[i].in_p = 0;
+ if (opcode == BIT_IOR_EXPR
+ || (opcode == ERROR_MARK && oe->rank == BIT_IOR_EXPR))
+ {
+ ranges[i].in_p = 1;
+ ccode = invert_tree_comparison (ccode, false);
+ }
unsigned int uid = gimple_uid (stmt);
gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
@@ -3043,7 +3069,6 @@ optimize_range_tests_var_bound (enum tree_code opcode, int first, int length,
}
else
{
- operand_entry *oe = (*ops)[ranges[i].idx];
tree ctype = oe->op ? TREE_TYPE (oe->op) : boolean_type_node;
if (!INTEGRAL_TYPE_P (ctype)
|| (TREE_CODE (ctype) != BOOLEAN_TYPE
@@ -3065,7 +3090,7 @@ optimize_range_tests_var_bound (enum tree_code opcode, int first, int length,
ranges[i].high = ranges[i].low;
}
ranges[i].strict_overflow_p = false;
- operand_entry *oe = (*ops)[ranges[*idx].idx];
+ oe = (*ops)[ranges[*idx].idx];
/* Now change all the other range test immediate uses, so that
those tests will be optimized away. */
if (opcode == ERROR_MARK)
@@ -4205,11 +4230,15 @@ insert_stmt_before_use (gimple *stmt, gimple *stmt_to_insert)
/* Recursively rewrite our linearized statements so that the operators
match those in OPS[OPINDEX], putting the computation in rank
- order. Return new lhs. */
+ order. Return new lhs.
+ CHANGED is true if we shouldn't reuse the lhs SSA_NAME both in
+ the current stmt and during recursive invocations.
+ NEXT_CHANGED is true if we shouldn't reuse the lhs SSA_NAME in
+ recursive invocations. */
static tree
rewrite_expr_tree (gimple *stmt, unsigned int opindex,
- vec<operand_entry *> ops, bool changed)
+ vec<operand_entry *> ops, bool changed, bool next_changed)
{
tree rhs1 = gimple_assign_rhs1 (stmt);
tree rhs2 = gimple_assign_rhs2 (stmt);
@@ -4300,7 +4329,8 @@ rewrite_expr_tree (gimple *stmt, unsigned int opindex,
be the non-leaf side. */
tree new_rhs1
= rewrite_expr_tree (SSA_NAME_DEF_STMT (rhs1), opindex + 1, ops,
- changed || oe->op != rhs2);
+ changed || oe->op != rhs2 || next_changed,
+ false);
if (oe->op != rhs2 || new_rhs1 != rhs1)
{
@@ -4699,7 +4729,9 @@ should_break_up_subtract (gimple *stmt)
&& (immusestmt = get_single_immediate_use (lhs))
&& is_gimple_assign (immusestmt)
&& (gimple_assign_rhs_code (immusestmt) == PLUS_EXPR
- || gimple_assign_rhs_code (immusestmt) == MULT_EXPR))
+ || (gimple_assign_rhs_code (immusestmt) == MINUS_EXPR
+ && gimple_assign_rhs1 (immusestmt) == lhs)
+ || gimple_assign_rhs_code (immusestmt) == MULT_EXPR))
return true;
return false;
}
@@ -5654,6 +5686,7 @@ reassociate_bb (basic_block bb)
gimple_set_visited (stmt, true);
linearize_expr_tree (&ops, stmt, true, true);
ops.qsort (sort_by_operand_rank);
+ int orig_len = ops.length ();
optimize_ops_list (rhs_code, &ops);
if (undistribute_ops_list (rhs_code, &ops,
loop_containing_stmt (stmt)))
@@ -5744,7 +5777,8 @@ reassociate_bb (basic_block bb)
new_lhs = rewrite_expr_tree (stmt, 0, ops,
powi_result != NULL
- || negate_result);
+ || negate_result,
+ len != orig_len);
}
/* If we combined some repeated factors into a
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index 324cd73f513..d62a49d2d1e 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -60,6 +60,8 @@ along with GCC; see the file COPYING3. If not see
#include "domwalk.h"
#include "gimple-iterator.h"
#include "gimple-match.h"
+#include "stringpool.h"
+#include "attribs.h"
/* This algorithm is based on the SCC algorithm presented by Keith
Cooper and L. Taylor Simpson in "SCC-Based Value numbering"
@@ -2636,6 +2638,14 @@ vn_nary_op_eq (const_vn_nary_op_t const vno1, const_vn_nary_op_t const vno2)
if (!expressions_equal_p (vno1->op[i], vno2->op[i]))
return false;
+ /* BIT_INSERT_EXPR has an implict operand as the type precision
+ of op1. Need to check to make sure they are the same. */
+ if (vno1->opcode == BIT_INSERT_EXPR
+ && TREE_CODE (vno1->op[1]) == INTEGER_CST
+ && TYPE_PRECISION (TREE_TYPE (vno1->op[1]))
+ != TYPE_PRECISION (TREE_TYPE (vno2->op[1])))
+ return false;
+
return true;
}
diff --git a/gcc/tree-ssa-scopedtables.c b/gcc/tree-ssa-scopedtables.c
index 814f1c7b05b..7b9ca78a878 100644
--- a/gcc/tree-ssa-scopedtables.c
+++ b/gcc/tree-ssa-scopedtables.c
@@ -502,6 +502,15 @@ hashable_expr_equal_p (const struct hashable_expr *expr0,
expr1->ops.ternary.opnd2, 0))
return false;
+ /* BIT_INSERT_EXPR has an implict operand as the type precision
+ of op1. Need to check to make sure they are the same. */
+ if (expr0->ops.ternary.op == BIT_INSERT_EXPR
+ && TREE_CODE (expr0->ops.ternary.opnd1) == INTEGER_CST
+ && TREE_CODE (expr1->ops.ternary.opnd1) == INTEGER_CST
+ && TYPE_PRECISION (TREE_TYPE (expr0->ops.ternary.opnd1))
+ != TYPE_PRECISION (TREE_TYPE (expr1->ops.ternary.opnd1)))
+ return false;
+
if (operand_equal_p (expr0->ops.ternary.opnd0,
expr1->ops.ternary.opnd0, 0)
&& operand_equal_p (expr0->ops.ternary.opnd1,
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index e563e9dee72..c120ce40303 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -40,7 +40,8 @@
#include "params.h"
#include "gimple-walk.h"
#include "varasm.h"
-
+#include "stringpool.h"
+#include "attribs.h"
/* The idea behind this analyzer is to generate set constraints from the
program, then solve the resulting constraints in order to generate the
@@ -2827,7 +2828,6 @@ alias_get_name (tree decl)
{
const char *res = NULL;
char *temp;
- int num_printed = 0;
if (!dump_file)
return "NULL";
@@ -2836,14 +2836,11 @@ alias_get_name (tree decl)
{
res = get_name (decl);
if (res)
- num_printed = asprintf (&temp, "%s_%u", res, SSA_NAME_VERSION (decl));
+ temp = xasprintf ("%s_%u", res, SSA_NAME_VERSION (decl));
else
- num_printed = asprintf (&temp, "_%u", SSA_NAME_VERSION (decl));
- if (num_printed > 0)
- {
- res = ggc_strdup (temp);
- free (temp);
- }
+ temp = xasprintf ("_%u", SSA_NAME_VERSION (decl));
+ res = ggc_strdup (temp);
+ free (temp);
}
else if (DECL_P (decl))
{
@@ -2854,12 +2851,9 @@ alias_get_name (tree decl)
res = get_name (decl);
if (!res)
{
- num_printed = asprintf (&temp, "D.%u", DECL_UID (decl));
- if (num_printed > 0)
- {
- res = ggc_strdup (temp);
- free (temp);
- }
+ temp = xasprintf ("D.%u", DECL_UID (decl));
+ res = ggc_strdup (temp);
+ free (temp);
}
}
}
@@ -7771,7 +7765,8 @@ refered_from_nonlocal_fn (struct cgraph_node *node, void *data)
bool *nonlocal_p = (bool *)data;
*nonlocal_p |= (node->used_from_other_partition
|| node->externally_visible
- || node->force_output);
+ || node->force_output
+ || lookup_attribute ("noipa", DECL_ATTRIBUTES (node->decl)));
return false;
}
@@ -7831,7 +7826,9 @@ ipa_pta_execute (void)
constraints for parameters. */
bool nonlocal_p = (node->used_from_other_partition
|| node->externally_visible
- || node->force_output);
+ || node->force_output
+ || lookup_attribute ("noipa",
+ DECL_ATTRIBUTES (node->decl)));
node->call_for_symbol_thunks_and_aliases (refered_from_nonlocal_fn,
&nonlocal_p, true);
diff --git a/gcc/tree-ssa-tail-merge.c b/gcc/tree-ssa-tail-merge.c
index b11911b7f1e..a65ff31d900 100644
--- a/gcc/tree-ssa-tail-merge.c
+++ b/gcc/tree-ssa-tail-merge.c
@@ -1241,6 +1241,7 @@ merge_stmts_p (gimple *stmt1, gimple *stmt2)
case IFN_UBSAN_CHECK_SUB:
case IFN_UBSAN_CHECK_MUL:
case IFN_UBSAN_OBJECT_SIZE:
+ case IFN_UBSAN_PTR:
case IFN_ASAN_CHECK:
/* For these internal functions, gimple_location is an implicit
parameter, which will be used explicitly after expansion.
diff --git a/gcc/tree-ssa-uninit.c b/gcc/tree-ssa-uninit.c
index b587599f8f8..67f0d840bf5 100644
--- a/gcc/tree-ssa-uninit.c
+++ b/gcc/tree-ssa-uninit.c
@@ -273,6 +273,11 @@ warn_uninitialized_vars (bool warn_possibly_uninitialized)
&& gimple_has_location (stmt))
{
tree rhs = gimple_assign_rhs1 (stmt);
+ tree lhs = gimple_assign_lhs (stmt);
+ bool has_bit_insert = false;
+ use_operand_p luse_p;
+ imm_use_iterator liter;
+
if (TREE_NO_WARNING (rhs))
continue;
@@ -300,6 +305,26 @@ warn_uninitialized_vars (bool warn_possibly_uninitialized)
ref.offset) <= 0)))
continue;
+ /* Do not warn if the access is then used for a BIT_INSERT_EXPR. */
+ if (TREE_CODE (lhs) == SSA_NAME)
+ FOR_EACH_IMM_USE_FAST (luse_p, liter, lhs)
+ {
+ gimple *use_stmt = USE_STMT (luse_p);
+ /* BIT_INSERT_EXPR first operand should not be considered
+ a use for the purpose of uninit warnings. */
+ if (gassign *ass = dyn_cast <gassign *> (use_stmt))
+ {
+ if (gimple_assign_rhs_code (ass) == BIT_INSERT_EXPR
+ && luse_p->use == gimple_assign_rhs1_ptr (ass))
+ {
+ has_bit_insert = true;
+ break;
+ }
+ }
+ }
+ if (has_bit_insert)
+ continue;
+
/* Limit the walking to a constant number of stmts after
we overcommit quadratic behavior for small functions
and O(n) behavior. */
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c
index fa8f81e9a1a..8b6da9645ce 100644
--- a/gcc/tree-ssa.c
+++ b/gcc/tree-ssa.c
@@ -41,6 +41,8 @@ along with GCC; see the file COPYING3. If not see
#include "cfgexpand.h"
#include "tree-cfg.h"
#include "tree-dfa.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
/* Pointer map of variable mappings, keyed by edge. */
@@ -1513,8 +1515,8 @@ non_rewritable_lvalue_p (tree lhs)
if (DECL_P (decl)
&& VECTOR_TYPE_P (TREE_TYPE (decl))
&& TYPE_MODE (TREE_TYPE (decl)) != BLKmode
- && types_compatible_p (TREE_TYPE (lhs),
- TREE_TYPE (TREE_TYPE (decl)))
+ && operand_equal_p (TYPE_SIZE_UNIT (TREE_TYPE (lhs)),
+ TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (decl))), 0)
&& tree_fits_uhwi_p (TREE_OPERAND (lhs, 1))
&& tree_int_cst_lt (TREE_OPERAND (lhs, 1),
TYPE_SIZE_UNIT (TREE_TYPE (decl)))
@@ -1529,8 +1531,9 @@ non_rewritable_lvalue_p (tree lhs)
&& DECL_P (TREE_OPERAND (lhs, 0))
&& VECTOR_TYPE_P (TREE_TYPE (TREE_OPERAND (lhs, 0)))
&& TYPE_MODE (TREE_TYPE (TREE_OPERAND (lhs, 0))) != BLKmode
- && types_compatible_p (TREE_TYPE (lhs),
- TREE_TYPE (TREE_TYPE (TREE_OPERAND (lhs, 0))))
+ && operand_equal_p (TYPE_SIZE_UNIT (TREE_TYPE (lhs)),
+ TYPE_SIZE_UNIT
+ (TREE_TYPE (TREE_TYPE (TREE_OPERAND (lhs, 0)))), 0)
&& (tree_to_uhwi (TREE_OPERAND (lhs, 2))
% tree_to_uhwi (TYPE_SIZE (TREE_TYPE (lhs)))) == 0)
return false;
@@ -1812,14 +1815,26 @@ execute_update_addresses_taken (void)
DECL_UID (TREE_OPERAND (lhs, 0)))
&& VECTOR_TYPE_P (TREE_TYPE (TREE_OPERAND (lhs, 0)))
&& TYPE_MODE (TREE_TYPE (TREE_OPERAND (lhs, 0))) != BLKmode
- && types_compatible_p (TREE_TYPE (lhs),
- TREE_TYPE (TREE_TYPE
- (TREE_OPERAND (lhs, 0))))
+ && operand_equal_p (TYPE_SIZE_UNIT (TREE_TYPE (lhs)),
+ TYPE_SIZE_UNIT (TREE_TYPE
+ (TREE_TYPE (TREE_OPERAND (lhs, 0)))),
+ 0)
&& (tree_to_uhwi (TREE_OPERAND (lhs, 2))
% tree_to_uhwi (TYPE_SIZE (TREE_TYPE (lhs))) == 0))
{
tree var = TREE_OPERAND (lhs, 0);
tree val = gimple_assign_rhs1 (stmt);
+ if (! types_compatible_p (TREE_TYPE (TREE_TYPE (var)),
+ TREE_TYPE (val)))
+ {
+ tree tem = make_ssa_name (TREE_TYPE (TREE_TYPE (var)));
+ gimple *pun
+ = gimple_build_assign (tem,
+ build1 (VIEW_CONVERT_EXPR,
+ TREE_TYPE (tem), val));
+ gsi_insert_before (&gsi, pun, GSI_SAME_STMT);
+ val = tem;
+ }
tree bitpos = TREE_OPERAND (lhs, 2);
gimple_assign_set_lhs (stmt, var);
gimple_assign_set_rhs_with_ops
@@ -1839,8 +1854,9 @@ execute_update_addresses_taken (void)
&& bitmap_bit_p (suitable_for_renaming, DECL_UID (sym))
&& VECTOR_TYPE_P (TREE_TYPE (sym))
&& TYPE_MODE (TREE_TYPE (sym)) != BLKmode
- && types_compatible_p (TREE_TYPE (lhs),
- TREE_TYPE (TREE_TYPE (sym)))
+ && operand_equal_p (TYPE_SIZE_UNIT (TREE_TYPE (lhs)),
+ TYPE_SIZE_UNIT
+ (TREE_TYPE (TREE_TYPE (sym))), 0)
&& tree_fits_uhwi_p (TREE_OPERAND (lhs, 1))
&& tree_int_cst_lt (TREE_OPERAND (lhs, 1),
TYPE_SIZE_UNIT (TREE_TYPE (sym)))
@@ -1848,6 +1864,17 @@ execute_update_addresses_taken (void)
% tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (lhs)))) == 0)
{
tree val = gimple_assign_rhs1 (stmt);
+ if (! types_compatible_p (TREE_TYPE (val),
+ TREE_TYPE (TREE_TYPE (sym))))
+ {
+ tree tem = make_ssa_name (TREE_TYPE (TREE_TYPE (sym)));
+ gimple *pun
+ = gimple_build_assign (tem,
+ build1 (VIEW_CONVERT_EXPR,
+ TREE_TYPE (tem), val));
+ gsi_insert_before (&gsi, pun, GSI_SAME_STMT);
+ val = tem;
+ }
tree bitpos
= wide_int_to_tree (bitsizetype,
mem_ref_offset (lhs) * BITS_PER_UNIT);
diff --git a/gcc/tree-streamer-in.c b/gcc/tree-streamer-in.c
index d7b6d224ab5..600470080aa 100644
--- a/gcc/tree-streamer-in.c
+++ b/gcc/tree-streamer-in.c
@@ -32,7 +32,10 @@ along with GCC; see the file COPYING3. If not see
#include "builtins.h"
#include "ipa-chkp.h"
#include "gomp-constants.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
+#include "opts.h"
/* Read a STRING_CST from the string table in DATA_IN using input
@@ -769,6 +772,21 @@ lto_input_ts_function_decl_tree_pointers (struct lto_input_block *ib,
DECL_FUNCTION_SPECIFIC_TARGET (expr) = stream_read_tree (ib, data_in);
#endif
DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr) = stream_read_tree (ib, data_in);
+#ifdef ACCEL_COMPILER
+ {
+ tree opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr);
+ if (opts)
+ {
+ struct gcc_options tmp;
+ init_options_struct (&tmp, NULL);
+ cl_optimization_restore (&tmp, TREE_OPTIMIZATION (opts));
+ finish_options (&tmp, &global_options_set, UNKNOWN_LOCATION);
+ opts = build_optimization_node (&tmp);
+ finalize_options_struct (&tmp);
+ DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr) = opts;
+ }
+ }
+#endif
/* If the file contains a function with an EH personality set,
then it was compiled with -fexceptions. In that case, initialize
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
index 8b55d5948ea..60f2539b3c0 100644
--- a/gcc/tree-vect-data-refs.c
+++ b/gcc/tree-vect-data-refs.c
@@ -51,6 +51,7 @@ along with GCC; see the file COPYING3. If not see
#include "builtins.h"
#include "params.h"
#include "tree-cfg.h"
+#include "tree-hash-traits.h"
/* Return true if load- or store-lanes optab OPTAB is implemented for
COUNT vectors of type VECTYPE. NAME is the name of OPTAB. */
@@ -160,6 +161,60 @@ vect_mark_for_runtime_alias_test (ddr_p ddr, loop_vec_info loop_vinfo)
}
+/* A subroutine of vect_analyze_data_ref_dependence. Handle
+ DDR_COULD_BE_INDEPENDENT_P ddr DDR that has a known set of dependence
+ distances. These distances are conservatively correct but they don't
+ reflect a guaranteed dependence.
+
+ Return true if this function does all the work necessary to avoid
+ an alias or false if the caller should use the dependence distances
+ to limit the vectorization factor in the usual way. LOOP_DEPTH is
+ the depth of the loop described by LOOP_VINFO and the other arguments
+ are as for vect_analyze_data_ref_dependence. */
+
+static bool
+vect_analyze_possibly_independent_ddr (data_dependence_relation *ddr,
+ loop_vec_info loop_vinfo,
+ int loop_depth, int *max_vf)
+{
+ struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
+ lambda_vector dist_v;
+ unsigned int i;
+ FOR_EACH_VEC_ELT (DDR_DIST_VECTS (ddr), i, dist_v)
+ {
+ int dist = dist_v[loop_depth];
+ if (dist != 0 && !(dist > 0 && DDR_REVERSED_P (ddr)))
+ {
+ /* If the user asserted safelen >= DIST consecutive iterations
+ can be executed concurrently, assume independence.
+
+ ??? An alternative would be to add the alias check even
+ in this case, and vectorize the fallback loop with the
+ maximum VF set to safelen. However, if the user has
+ explicitly given a length, it's less likely that that
+ would be a win. */
+ if (loop->safelen >= 2 && abs_hwi (dist) <= loop->safelen)
+ {
+ if (loop->safelen < *max_vf)
+ *max_vf = loop->safelen;
+ LOOP_VINFO_NO_DATA_DEPENDENCIES (loop_vinfo) = false;
+ continue;
+ }
+
+ /* For dependence distances of 2 or more, we have the option
+ of limiting VF or checking for an alias at runtime.
+ Prefer to check at runtime if we can, to avoid limiting
+ the VF unnecessarily when the bases are in fact independent.
+
+ Note that the alias checks will be removed if the VF ends up
+ being small enough. */
+ return vect_mark_for_runtime_alias_test (ddr, loop_vinfo);
+ }
+ }
+ return true;
+}
+
+
/* Function vect_analyze_data_ref_dependence.
Return TRUE if there (might) exist a dependence between a memory-reference
@@ -305,6 +360,12 @@ vect_analyze_data_ref_dependence (struct data_dependence_relation *ddr,
}
loop_depth = index_in_loop_nest (loop->num, DDR_LOOP_NEST (ddr));
+
+ if (DDR_COULD_BE_INDEPENDENT_P (ddr)
+ && vect_analyze_possibly_independent_ddr (ddr, loop_vinfo,
+ loop_depth, max_vf))
+ return false;
+
FOR_EACH_VEC_ELT (DDR_DIST_VECTS (ddr), i, dist_v)
{
int dist = dist_v[loop_depth];
@@ -647,6 +708,69 @@ vect_slp_analyze_instance_dependence (slp_instance instance)
return res;
}
+/* Record in VINFO the base alignment guarantee given by DRB. STMT is
+ the statement that contains DRB, which is useful for recording in the
+ dump file. */
+
+static void
+vect_record_base_alignment (vec_info *vinfo, gimple *stmt,
+ innermost_loop_behavior *drb)
+{
+ bool existed;
+ innermost_loop_behavior *&entry
+ = vinfo->base_alignments.get_or_insert (drb->base_address, &existed);
+ if (!existed || entry->base_alignment < drb->base_alignment)
+ {
+ entry = drb;
+ if (dump_enabled_p ())
+ {
+ dump_printf_loc (MSG_NOTE, vect_location,
+ "recording new base alignment for ");
+ dump_generic_expr (MSG_NOTE, TDF_SLIM, drb->base_address);
+ dump_printf (MSG_NOTE, "\n");
+ dump_printf_loc (MSG_NOTE, vect_location,
+ " alignment: %d\n", drb->base_alignment);
+ dump_printf_loc (MSG_NOTE, vect_location,
+ " misalignment: %d\n", drb->base_misalignment);
+ dump_printf_loc (MSG_NOTE, vect_location,
+ " based on: ");
+ dump_gimple_stmt (MSG_NOTE, TDF_SLIM, stmt, 0);
+ }
+ }
+}
+
+/* If the region we're going to vectorize is reached, all unconditional
+ data references occur at least once. We can therefore pool the base
+ alignment guarantees from each unconditional reference. Do this by
+ going through all the data references in VINFO and checking whether
+ the containing statement makes the reference unconditionally. If so,
+ record the alignment of the base address in VINFO so that it can be
+ used for all other references with the same base. */
+
+void
+vect_record_base_alignments (vec_info *vinfo)
+{
+ loop_vec_info loop_vinfo = dyn_cast <loop_vec_info> (vinfo);
+ struct loop *loop = loop_vinfo ? LOOP_VINFO_LOOP (loop_vinfo) : NULL;
+ data_reference *dr;
+ unsigned int i;
+ FOR_EACH_VEC_ELT (vinfo->datarefs, i, dr)
+ if (!DR_IS_CONDITIONAL_IN_STMT (dr))
+ {
+ gimple *stmt = DR_STMT (dr);
+ vect_record_base_alignment (vinfo, stmt, &DR_INNERMOST (dr));
+
+ /* If DR is nested in the loop that is being vectorized, we can also
+ record the alignment of the base wrt the outer loop. */
+ if (loop && nested_in_vect_loop_p (loop, stmt))
+ {
+ stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
+ vect_record_base_alignment
+ (vinfo, stmt, &STMT_VINFO_DR_WRT_VEC_LOOP (stmt_info));
+ }
+ }
+}
+
/* Function vect_compute_data_ref_alignment
Compute the misalignment of the data reference DR.
@@ -664,6 +788,7 @@ vect_compute_data_ref_alignment (struct data_reference *dr)
{
gimple *stmt = DR_STMT (dr);
stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
+ vec_base_alignments *base_alignments = &stmt_info->vinfo->base_alignments;
loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info);
struct loop *loop = NULL;
tree ref = DR_REF (dr);
@@ -732,6 +857,15 @@ vect_compute_data_ref_alignment (struct data_reference *dr)
unsigned int base_misalignment = drb->base_misalignment;
unsigned HOST_WIDE_INT vector_alignment = TYPE_ALIGN_UNIT (vectype);
+ /* Calculate the maximum of the pooled base address alignment and the
+ alignment that we can compute for DR itself. */
+ innermost_loop_behavior **entry = base_alignments->get (drb->base_address);
+ if (entry && base_alignment < (*entry)->base_alignment)
+ {
+ base_alignment = (*entry)->base_alignment;
+ base_misalignment = (*entry)->base_misalignment;
+ }
+
if (drb->offset_alignment < vector_alignment
|| !step_preserves_misalignment_p
/* We need to know whether the step wrt the vectorized loop is
@@ -1159,25 +1293,21 @@ vect_peeling_hash_get_most_frequent (_vect_peel_info **slot,
misalignment will be zero after peeling. */
static void
-vect_get_peeling_costs_all_drs (struct data_reference *dr0,
+vect_get_peeling_costs_all_drs (vec<data_reference_p> datarefs,
+ struct data_reference *dr0,
unsigned int *inside_cost,
unsigned int *outside_cost,
stmt_vector_for_cost *body_cost_vec,
unsigned int npeel,
bool unknown_misalignment)
{
- gimple *stmt = DR_STMT (dr0);
- stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
- loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info);
- vec<data_reference_p> datarefs = LOOP_VINFO_DATAREFS (loop_vinfo);
-
unsigned i;
data_reference *dr;
FOR_EACH_VEC_ELT (datarefs, i, dr)
{
- stmt = DR_STMT (dr);
- stmt_info = vinfo_for_stmt (stmt);
+ gimple *stmt = DR_STMT (dr);
+ stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
/* For interleaving, only the alignment of the first access
matters. */
if (STMT_VINFO_GROUPED_ACCESS (stmt_info)
@@ -1192,7 +1322,9 @@ vect_get_peeling_costs_all_drs (struct data_reference *dr0,
int save_misalignment;
save_misalignment = DR_MISALIGNMENT (dr);
- if (unknown_misalignment && dr == dr0)
+ if (npeel == 0)
+ ;
+ else if (unknown_misalignment && dr == dr0)
SET_DR_MISALIGNMENT (dr, 0);
else
vect_update_misalignment_for_peel (dr, dr0, npeel);
@@ -1222,7 +1354,8 @@ vect_peeling_hash_get_lowest_cost (_vect_peel_info **slot,
body_cost_vec.create (2);
epilogue_cost_vec.create (2);
- vect_get_peeling_costs_all_drs (elem->dr, &inside_cost, &outside_cost,
+ vect_get_peeling_costs_all_drs (LOOP_VINFO_DATAREFS (loop_vinfo),
+ elem->dr, &inside_cost, &outside_cost,
&body_cost_vec, elem->npeel, false);
body_cost_vec.release ();
@@ -1651,7 +1784,7 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
stmt_vector_for_cost dummy;
dummy.create (2);
- vect_get_peeling_costs_all_drs (dr0,
+ vect_get_peeling_costs_all_drs (datarefs, dr0,
&load_inside_cost,
&load_outside_cost,
&dummy, vf / 2, true);
@@ -1660,7 +1793,7 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
if (first_store)
{
dummy.create (2);
- vect_get_peeling_costs_all_drs (first_store,
+ vect_get_peeling_costs_all_drs (datarefs, first_store,
&store_inside_cost,
&store_outside_cost,
&dummy, vf / 2, true);
@@ -1744,18 +1877,15 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
dr0 = unsupportable_dr;
else if (do_peeling)
{
- /* Calculate the penalty for no peeling, i.e. leaving everything
- unaligned.
- TODO: Adapt vect_get_peeling_costs_all_drs and use here.
+ /* Calculate the penalty for no peeling, i.e. leaving everything as-is.
TODO: Use nopeel_outside_cost or get rid of it? */
unsigned nopeel_inside_cost = 0;
unsigned nopeel_outside_cost = 0;
stmt_vector_for_cost dummy;
dummy.create (2);
- FOR_EACH_VEC_ELT (datarefs, i, dr)
- vect_get_data_access_cost (dr, &nopeel_inside_cost,
- &nopeel_outside_cost, &dummy);
+ vect_get_peeling_costs_all_drs (datarefs, NULL, &nopeel_inside_cost,
+ &nopeel_outside_cost, &dummy, 0, false);
dummy.release ();
/* Add epilogue costs. As we do not peel for alignment here, no prologue
@@ -2056,8 +2186,7 @@ vect_find_same_alignment_drs (struct data_dependence_relation *ddr)
if (dra == drb)
return;
- if (!operand_equal_p (DR_BASE_OBJECT (dra), DR_BASE_OBJECT (drb),
- OEP_ADDRESS_OF)
+ if (!operand_equal_p (DR_BASE_ADDRESS (dra), DR_BASE_ADDRESS (drb), 0)
|| !operand_equal_p (DR_OFFSET (dra), DR_OFFSET (drb), 0)
|| !operand_equal_p (DR_STEP (dra), DR_STEP (drb), 0))
return;
@@ -2115,6 +2244,7 @@ vect_analyze_data_refs_alignment (loop_vec_info vinfo)
vec<data_reference_p> datarefs = vinfo->datarefs;
struct data_reference *dr;
+ vect_record_base_alignments (vinfo);
FOR_EACH_VEC_ELT (datarefs, i, dr)
{
stmt_vec_info stmt_info = vinfo_for_stmt (DR_STMT (dr));
@@ -2882,6 +3012,44 @@ vect_no_alias_p (struct data_reference *a, struct data_reference *b,
return false;
}
+/* Return true if the minimum nonzero dependence distance for loop LOOP_DEPTH
+ in DDR is >= VF. */
+
+static bool
+dependence_distance_ge_vf (data_dependence_relation *ddr,
+ unsigned int loop_depth, unsigned HOST_WIDE_INT vf)
+{
+ if (DDR_ARE_DEPENDENT (ddr) != NULL_TREE
+ || DDR_NUM_DIST_VECTS (ddr) == 0)
+ return false;
+
+ /* If the dependence is exact, we should have limited the VF instead. */
+ gcc_checking_assert (DDR_COULD_BE_INDEPENDENT_P (ddr));
+
+ unsigned int i;
+ lambda_vector dist_v;
+ FOR_EACH_VEC_ELT (DDR_DIST_VECTS (ddr), i, dist_v)
+ {
+ HOST_WIDE_INT dist = dist_v[loop_depth];
+ if (dist != 0
+ && !(dist > 0 && DDR_REVERSED_P (ddr))
+ && (unsigned HOST_WIDE_INT) abs_hwi (dist) < vf)
+ return false;
+ }
+
+ if (dump_enabled_p ())
+ {
+ dump_printf_loc (MSG_NOTE, vect_location,
+ "dependence distance between ");
+ dump_generic_expr (MSG_NOTE, TDF_SLIM, DR_REF (DDR_A (ddr)));
+ dump_printf (MSG_NOTE, " and ");
+ dump_generic_expr (MSG_NOTE, TDF_SLIM, DR_REF (DDR_B (ddr)));
+ dump_printf (MSG_NOTE, " is >= VF\n");
+ }
+
+ return true;
+}
+
/* Function vect_prune_runtime_alias_test_list.
Prune a list of ddrs to be tested at run-time by versioning for alias.
@@ -2892,10 +3060,14 @@ vect_no_alias_p (struct data_reference *a, struct data_reference *b,
bool
vect_prune_runtime_alias_test_list (loop_vec_info loop_vinfo)
{
- vec<ddr_p> may_alias_ddrs =
- LOOP_VINFO_MAY_ALIAS_DDRS (loop_vinfo);
- vec<dr_with_seg_len_pair_t>& comp_alias_ddrs =
- LOOP_VINFO_COMP_ALIAS_DDRS (loop_vinfo);
+ typedef pair_hash <tree_operand_hash, tree_operand_hash> tree_pair_hash;
+ hash_set <tree_pair_hash> compared_objects;
+
+ vec<ddr_p> may_alias_ddrs = LOOP_VINFO_MAY_ALIAS_DDRS (loop_vinfo);
+ vec<dr_with_seg_len_pair_t> &comp_alias_ddrs
+ = LOOP_VINFO_COMP_ALIAS_DDRS (loop_vinfo);
+ vec<vec_object_pair> &check_unequal_addrs
+ = LOOP_VINFO_CHECK_UNEQUAL_ADDRS (loop_vinfo);
int vect_factor = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
tree scalar_loop_iters = LOOP_VINFO_NITERS (loop_vinfo);
@@ -2912,6 +3084,10 @@ vect_prune_runtime_alias_test_list (loop_vec_info loop_vinfo)
comp_alias_ddrs.create (may_alias_ddrs.length ());
+ unsigned int loop_depth
+ = index_in_loop_nest (LOOP_VINFO_LOOP (loop_vinfo)->num,
+ LOOP_VINFO_LOOP_NEST (loop_vinfo));
+
/* First, we collect all data ref pairs for aliasing checks. */
FOR_EACH_VEC_ELT (may_alias_ddrs, i, ddr)
{
@@ -2921,6 +3097,29 @@ vect_prune_runtime_alias_test_list (loop_vec_info loop_vinfo)
tree segment_length_a, segment_length_b;
gimple *stmt_a, *stmt_b;
+ /* Ignore the alias if the VF we chose ended up being no greater
+ than the dependence distance. */
+ if (dependence_distance_ge_vf (ddr, loop_depth, vect_factor))
+ continue;
+
+ if (DDR_OBJECT_A (ddr))
+ {
+ vec_object_pair new_pair (DDR_OBJECT_A (ddr), DDR_OBJECT_B (ddr));
+ if (!compared_objects.add (new_pair))
+ {
+ if (dump_enabled_p ())
+ {
+ dump_printf_loc (MSG_NOTE, vect_location, "checking that ");
+ dump_generic_expr (MSG_NOTE, TDF_SLIM, new_pair.first);
+ dump_printf (MSG_NOTE, " and ");
+ dump_generic_expr (MSG_NOTE, TDF_SLIM, new_pair.second);
+ dump_printf (MSG_NOTE, " have different addresses\n");
+ }
+ LOOP_VINFO_CHECK_UNEQUAL_ADDRS (loop_vinfo).safe_push (new_pair);
+ }
+ continue;
+ }
+
dr_a = DDR_A (ddr);
stmt_a = DR_STMT (DDR_A (ddr));
dr_group_first_a = GROUP_FIRST_ELEMENT (vinfo_for_stmt (stmt_a));
@@ -2982,11 +3181,13 @@ vect_prune_runtime_alias_test_list (loop_vec_info loop_vinfo)
prune_runtime_alias_test_list (&comp_alias_ddrs,
(unsigned HOST_WIDE_INT) vect_factor);
+
+ unsigned int count = (comp_alias_ddrs.length ()
+ + check_unequal_addrs.length ());
dump_printf_loc (MSG_NOTE, vect_location,
"improved number of alias checks from %d to %d\n",
- may_alias_ddrs.length (), comp_alias_ddrs.length ());
- if ((int) comp_alias_ddrs.length () >
- PARAM_VALUE (PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS))
+ may_alias_ddrs.length (), count);
+ if ((int) count > PARAM_VALUE (PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS))
{
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
@@ -2997,10 +3198,6 @@ vect_prune_runtime_alias_test_list (loop_vec_info loop_vinfo)
return false;
}
- /* All alias checks have been resolved at compilation time. */
- if (!comp_alias_ddrs.length ())
- LOOP_VINFO_MAY_ALIAS_DDRS (loop_vinfo).truncate (0);
-
return true;
}
@@ -3313,7 +3510,8 @@ again:
{
struct data_reference *newdr
= create_data_ref (NULL, loop_containing_stmt (stmt),
- DR_REF (dr), stmt, maybe_scatter ? false : true);
+ DR_REF (dr), stmt, !maybe_scatter,
+ DR_IS_CONDITIONAL_IN_STMT (dr));
gcc_assert (newdr != NULL && DR_REF (newdr));
if (DR_BASE_ADDRESS (newdr)
&& DR_OFFSET (newdr)
diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c
index b76b515a788..f78e4b420c3 100644
--- a/gcc/tree-vect-loop-manip.c
+++ b/gcc/tree-vect-loop-manip.c
@@ -1944,6 +1944,19 @@ vect_create_cond_for_niters_checks (loop_vec_info loop_vinfo, tree *cond_expr)
*cond_expr = part_cond_expr;
}
+/* Set *COND_EXPR to a tree that is true when both the original *COND_EXPR
+ and PART_COND_EXPR are true. Treat a null *COND_EXPR as "true". */
+
+static void
+chain_cond_expr (tree *cond_expr, tree part_cond_expr)
+{
+ if (*cond_expr)
+ *cond_expr = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
+ *cond_expr, part_cond_expr);
+ else
+ *cond_expr = part_cond_expr;
+}
+
/* Function vect_create_cond_for_align_checks.
Create a conditional expression that represents the alignment checks for
@@ -2054,11 +2067,28 @@ vect_create_cond_for_align_checks (loop_vec_info loop_vinfo,
ptrsize_zero = build_int_cst (int_ptrsize_type, 0);
part_cond_expr = fold_build2 (EQ_EXPR, boolean_type_node,
and_tmp_name, ptrsize_zero);
- if (*cond_expr)
- *cond_expr = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
- *cond_expr, part_cond_expr);
- else
- *cond_expr = part_cond_expr;
+ chain_cond_expr (cond_expr, part_cond_expr);
+}
+
+/* If LOOP_VINFO_CHECK_UNEQUAL_ADDRS contains <A1, B1>, ..., <An, Bn>,
+ create a tree representation of: (&A1 != &B1) && ... && (&An != &Bn).
+ Set *COND_EXPR to a tree that is true when both the original *COND_EXPR
+ and this new condition are true. Treat a null *COND_EXPR as "true". */
+
+static void
+vect_create_cond_for_unequal_addrs (loop_vec_info loop_vinfo, tree *cond_expr)
+{
+ vec<vec_object_pair> pairs = LOOP_VINFO_CHECK_UNEQUAL_ADDRS (loop_vinfo);
+ unsigned int i;
+ vec_object_pair *pair;
+ FOR_EACH_VEC_ELT (pairs, i, pair)
+ {
+ tree addr1 = build_fold_addr_expr (pair->first);
+ tree addr2 = build_fold_addr_expr (pair->second);
+ tree part_cond_expr = fold_build2 (NE_EXPR, boolean_type_node,
+ addr1, addr2);
+ chain_cond_expr (cond_expr, part_cond_expr);
+ }
}
/* Function vect_create_cond_for_alias_checks.
@@ -2136,7 +2166,7 @@ vect_loop_versioning (loop_vec_info loop_vinfo,
tree arg;
profile_probability prob = profile_probability::likely ();
gimple_seq gimplify_stmt_list = NULL;
- tree scalar_loop_iters = LOOP_VINFO_NITERS (loop_vinfo);
+ tree scalar_loop_iters = LOOP_VINFO_NITERSM1 (loop_vinfo);
bool version_align = LOOP_REQUIRES_VERSIONING_FOR_ALIGNMENT (loop_vinfo);
bool version_alias = LOOP_REQUIRES_VERSIONING_FOR_ALIAS (loop_vinfo);
bool version_niter = LOOP_REQUIRES_VERSIONING_FOR_NITERS (loop_vinfo);
@@ -2144,7 +2174,7 @@ vect_loop_versioning (loop_vec_info loop_vinfo,
if (check_profitability)
cond_expr = fold_build2 (GE_EXPR, boolean_type_node, scalar_loop_iters,
build_int_cst (TREE_TYPE (scalar_loop_iters),
- th));
+ th - 1));
if (version_niter)
vect_create_cond_for_niters_checks (loop_vinfo, &cond_expr);
@@ -2158,7 +2188,10 @@ vect_loop_versioning (loop_vec_info loop_vinfo,
&cond_expr_stmt_list);
if (version_alias)
- vect_create_cond_for_alias_checks (loop_vinfo, &cond_expr);
+ {
+ vect_create_cond_for_unequal_addrs (loop_vinfo, &cond_expr);
+ vect_create_cond_for_alias_checks (loop_vinfo, &cond_expr);
+ }
cond_expr = force_gimple_operand_1 (cond_expr, &gimplify_stmt_list,
is_gimple_condexpr, NULL_TREE);
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index 7bae41680af..8b2a61e733b 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -1098,112 +1098,77 @@ bb_in_loop_p (const_basic_block bb, const void *data)
}
-/* Function new_loop_vec_info.
-
- Create and initialize a new loop_vec_info struct for LOOP, as well as
- stmt_vec_info structs for all the stmts in LOOP. */
-
-static loop_vec_info
-new_loop_vec_info (struct loop *loop)
+/* Create and initialize a new loop_vec_info struct for LOOP_IN, as well as
+ stmt_vec_info structs for all the stmts in LOOP_IN. */
+
+_loop_vec_info::_loop_vec_info (struct loop *loop_in)
+ : vec_info (vec_info::loop, init_cost (loop_in)),
+ loop (loop_in),
+ bbs (XCNEWVEC (basic_block, loop->num_nodes)),
+ num_itersm1 (NULL_TREE),
+ num_iters (NULL_TREE),
+ num_iters_unchanged (NULL_TREE),
+ num_iters_assumptions (NULL_TREE),
+ th (0),
+ vectorization_factor (0),
+ unaligned_dr (NULL),
+ peeling_for_alignment (0),
+ ptr_mask (0),
+ slp_unrolling_factor (1),
+ single_scalar_iteration_cost (0),
+ vectorizable (false),
+ peeling_for_gaps (false),
+ peeling_for_niter (false),
+ operands_swapped (false),
+ no_data_dependencies (false),
+ has_mask_store (false),
+ scalar_loop (NULL),
+ orig_loop_info (NULL)
{
- loop_vec_info res;
- basic_block *bbs;
- gimple_stmt_iterator si;
- unsigned int i, nbbs;
-
- res = (loop_vec_info) xcalloc (1, sizeof (struct _loop_vec_info));
- res->kind = vec_info::loop;
- LOOP_VINFO_LOOP (res) = loop;
-
- bbs = get_loop_body (loop);
-
/* Create/Update stmt_info for all stmts in the loop. */
- for (i = 0; i < loop->num_nodes; i++)
+ basic_block *body = get_loop_body (loop);
+ for (unsigned int i = 0; i < loop->num_nodes; i++)
{
- basic_block bb = bbs[i];
+ basic_block bb = body[i];
+ gimple_stmt_iterator si;
for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
{
gimple *phi = gsi_stmt (si);
gimple_set_uid (phi, 0);
- set_vinfo_for_stmt (phi, new_stmt_vec_info (phi, res));
+ set_vinfo_for_stmt (phi, new_stmt_vec_info (phi, this));
}
for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
{
gimple *stmt = gsi_stmt (si);
gimple_set_uid (stmt, 0);
- set_vinfo_for_stmt (stmt, new_stmt_vec_info (stmt, res));
+ set_vinfo_for_stmt (stmt, new_stmt_vec_info (stmt, this));
}
}
+ free (body);
/* CHECKME: We want to visit all BBs before their successors (except for
latch blocks, for which this assertion wouldn't hold). In the simple
case of the loop forms we allow, a dfs order of the BBs would the same
as reversed postorder traversal, so we are safe. */
- free (bbs);
- bbs = XCNEWVEC (basic_block, loop->num_nodes);
- nbbs = dfs_enumerate_from (loop->header, 0, bb_in_loop_p,
- bbs, loop->num_nodes, loop);
- gcc_assert (nbbs == loop->num_nodes);
-
- LOOP_VINFO_BBS (res) = bbs;
- LOOP_VINFO_NITERSM1 (res) = NULL;
- LOOP_VINFO_NITERS (res) = NULL;
- LOOP_VINFO_NITERS_UNCHANGED (res) = NULL;
- LOOP_VINFO_NITERS_ASSUMPTIONS (res) = NULL;
- LOOP_VINFO_COST_MODEL_THRESHOLD (res) = 0;
- LOOP_VINFO_VECTORIZABLE_P (res) = 0;
- LOOP_VINFO_PEELING_FOR_ALIGNMENT (res) = 0;
- LOOP_VINFO_VECT_FACTOR (res) = 0;
- LOOP_VINFO_LOOP_NEST (res) = vNULL;
- LOOP_VINFO_DATAREFS (res) = vNULL;
- LOOP_VINFO_DDRS (res) = vNULL;
- LOOP_VINFO_UNALIGNED_DR (res) = NULL;
- LOOP_VINFO_MAY_MISALIGN_STMTS (res) = vNULL;
- LOOP_VINFO_MAY_ALIAS_DDRS (res) = vNULL;
- LOOP_VINFO_GROUPED_STORES (res) = vNULL;
- LOOP_VINFO_REDUCTIONS (res) = vNULL;
- LOOP_VINFO_REDUCTION_CHAINS (res) = vNULL;
- LOOP_VINFO_SLP_INSTANCES (res) = vNULL;
- LOOP_VINFO_SLP_UNROLLING_FACTOR (res) = 1;
- LOOP_VINFO_TARGET_COST_DATA (res) = init_cost (loop);
- LOOP_VINFO_PEELING_FOR_GAPS (res) = false;
- LOOP_VINFO_PEELING_FOR_NITER (res) = false;
- LOOP_VINFO_OPERANDS_SWAPPED (res) = false;
- LOOP_VINFO_ORIG_LOOP_INFO (res) = NULL;
-
- return res;
+ unsigned int nbbs = dfs_enumerate_from (loop->header, 0, bb_in_loop_p,
+ bbs, loop->num_nodes, loop);
+ gcc_assert (nbbs == loop->num_nodes);
}
-/* Function destroy_loop_vec_info.
+/* Free all memory used by the _loop_vec_info, as well as all the
+ stmt_vec_info structs of all the stmts in the loop. */
- Free LOOP_VINFO struct, as well as all the stmt_vec_info structs of all the
- stmts in the loop. */
-
-void
-destroy_loop_vec_info (loop_vec_info loop_vinfo, bool clean_stmts)
+_loop_vec_info::~_loop_vec_info ()
{
- struct loop *loop;
- basic_block *bbs;
int nbbs;
gimple_stmt_iterator si;
int j;
- vec<slp_instance> slp_instances;
- slp_instance instance;
- bool swapped;
-
- if (!loop_vinfo)
- return;
-
- loop = LOOP_VINFO_LOOP (loop_vinfo);
-
- bbs = LOOP_VINFO_BBS (loop_vinfo);
- nbbs = clean_stmts ? loop->num_nodes : 0;
- swapped = LOOP_VINFO_OPERANDS_SWAPPED (loop_vinfo);
+ nbbs = loop->num_nodes;
for (j = 0; j < nbbs; j++)
{
basic_block bb = bbs[j];
@@ -1216,7 +1181,7 @@ destroy_loop_vec_info (loop_vec_info loop_vinfo, bool clean_stmts)
/* We may have broken canonical form by moving a constant
into RHS1 of a commutative op. Fix such occurrences. */
- if (swapped && is_gimple_assign (stmt))
+ if (operands_swapped && is_gimple_assign (stmt))
{
enum tree_code code = gimple_assign_rhs_code (stmt);
@@ -1256,26 +1221,8 @@ destroy_loop_vec_info (loop_vec_info loop_vinfo, bool clean_stmts)
}
}
- free (LOOP_VINFO_BBS (loop_vinfo));
- vect_destroy_datarefs (loop_vinfo);
- free_dependence_relations (LOOP_VINFO_DDRS (loop_vinfo));
- LOOP_VINFO_LOOP_NEST (loop_vinfo).release ();
- LOOP_VINFO_MAY_MISALIGN_STMTS (loop_vinfo).release ();
- LOOP_VINFO_COMP_ALIAS_DDRS (loop_vinfo).release ();
- LOOP_VINFO_MAY_ALIAS_DDRS (loop_vinfo).release ();
- slp_instances = LOOP_VINFO_SLP_INSTANCES (loop_vinfo);
- FOR_EACH_VEC_ELT (slp_instances, j, instance)
- vect_free_slp_instance (instance);
-
- LOOP_VINFO_SLP_INSTANCES (loop_vinfo).release ();
- LOOP_VINFO_GROUPED_STORES (loop_vinfo).release ();
- LOOP_VINFO_REDUCTIONS (loop_vinfo).release ();
- LOOP_VINFO_REDUCTION_CHAINS (loop_vinfo).release ();
-
- destroy_cost_data (LOOP_VINFO_TARGET_COST_DATA (loop_vinfo));
- loop_vinfo->scalar_cost_vec.release ();
+ free (bbs);
- free (loop_vinfo);
loop->aux = NULL;
}
@@ -1562,7 +1509,7 @@ vect_analyze_loop_form (struct loop *loop)
&number_of_iterations, &inner_loop_cond))
return NULL;
- loop_vec_info loop_vinfo = new_loop_vec_info (loop);
+ loop_vec_info loop_vinfo = new _loop_vec_info (loop);
LOOP_VINFO_NITERSM1 (loop_vinfo) = number_of_iterationsm1;
LOOP_VINFO_NITERS (loop_vinfo) = number_of_iterations;
LOOP_VINFO_NITERS_UNCHANGED (loop_vinfo) = number_of_iterations;
@@ -2343,6 +2290,7 @@ again:
}
/* Free optimized alias test DDRS. */
LOOP_VINFO_COMP_ALIAS_DDRS (loop_vinfo).release ();
+ LOOP_VINFO_CHECK_UNEQUAL_ADDRS (loop_vinfo).release ();
/* Reset target cost data. */
destroy_cost_data (LOOP_VINFO_TARGET_COST_DATA (loop_vinfo));
LOOP_VINFO_TARGET_COST_DATA (loop_vinfo)
@@ -2409,7 +2357,7 @@ vect_analyze_loop (struct loop *loop, loop_vec_info orig_loop_vinfo)
return loop_vinfo;
}
- destroy_loop_vec_info (loop_vinfo, true);
+ delete loop_vinfo;
vector_sizes &= ~current_vector_size;
if (fatal
@@ -2813,27 +2761,29 @@ vect_is_simple_reduction (loop_vec_info loop_info, gimple *phi,
return NULL;
}
+ if (! flow_bb_inside_loop_p (loop, gimple_bb (def_stmt)))
+ return NULL;
+
nloop_uses = 0;
auto_vec<gphi *, 3> lcphis;
- if (flow_bb_inside_loop_p (loop, gimple_bb (def_stmt)))
- FOR_EACH_IMM_USE_FAST (use_p, imm_iter, name)
- {
- gimple *use_stmt = USE_STMT (use_p);
- if (is_gimple_debug (use_stmt))
- continue;
- if (flow_bb_inside_loop_p (loop, gimple_bb (use_stmt)))
- nloop_uses++;
- else
- /* We can have more than one loop-closed PHI. */
- lcphis.safe_push (as_a <gphi *> (use_stmt));
- if (nloop_uses > 1)
- {
- if (dump_enabled_p ())
- dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
- "reduction used in loop.\n");
- return NULL;
- }
- }
+ FOR_EACH_IMM_USE_FAST (use_p, imm_iter, name)
+ {
+ gimple *use_stmt = USE_STMT (use_p);
+ if (is_gimple_debug (use_stmt))
+ continue;
+ if (flow_bb_inside_loop_p (loop, gimple_bb (use_stmt)))
+ nloop_uses++;
+ else
+ /* We can have more than one loop-closed PHI. */
+ lcphis.safe_push (as_a <gphi *> (use_stmt));
+ if (nloop_uses > 1)
+ {
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ "reduction used in loop.\n");
+ return NULL;
+ }
+ }
/* If DEF_STMT is a phi node itself, we expect it to have a single argument
defined in the inner loop. */
@@ -3243,7 +3193,7 @@ pop:
}
/* Check whether the reduction path detected is valid. */
- bool fail = false;
+ bool fail = path.length () == 0;
bool neg = false;
for (unsigned i = 1; i < path.length (); ++i)
{
@@ -3276,9 +3226,7 @@ pop:
if (dump_enabled_p ())
{
- report_vect_op (MSG_MISSED_OPTIMIZATION,
- SSA_NAME_DEF_STMT
- (USE_FROM_PTR (path[path.length ()-1].second)),
+ report_vect_op (MSG_MISSED_OPTIMIZATION, def_stmt,
"reduction: unknown pattern: ");
}
@@ -3434,6 +3382,11 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo,
unsigned len = LOOP_VINFO_COMP_ALIAS_DDRS (loop_vinfo).length ();
(void) add_stmt_cost (target_cost_data, len, vector_stmt, NULL, 0,
vect_prologue);
+ len = LOOP_VINFO_CHECK_UNEQUAL_ADDRS (loop_vinfo).length ();
+ if (len)
+ /* Count LEN - 1 ANDs and LEN comparisons. */
+ (void) add_stmt_cost (target_cost_data, len * 2 - 1, scalar_stmt,
+ NULL, 0, vect_prologue);
dump_printf (MSG_NOTE,
"cost model: Adding cost of checks for loop "
"versioning aliasing.\n");
@@ -3702,8 +3655,9 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo,
" Calculated minimum iters for profitability: %d\n",
min_profitable_iters);
- min_profitable_iters =
- min_profitable_iters < vf ? vf : min_profitable_iters;
+ /* We want the vectorized loop to execute at least once. */
+ if (min_profitable_iters < (vf + peel_iters_prologue + peel_iters_epilogue))
+ min_profitable_iters = vf + peel_iters_prologue + peel_iters_epilogue;
if (dump_enabled_p ())
dump_printf_loc (MSG_NOTE, vect_location,
@@ -4786,20 +4740,17 @@ vect_create_epilog_for_reduction (vec<tree> vect_defs, gimple *stmt,
if (GROUP_FIRST_ELEMENT (vinfo_for_stmt (stmt)))
{
tree first_vect = PHI_RESULT (new_phis[0]);
- tree tmp;
gassign *new_vec_stmt = NULL;
-
vec_dest = vect_create_destination_var (scalar_dest, vectype);
for (k = 1; k < new_phis.length (); k++)
{
gimple *next_phi = new_phis[k];
tree second_vect = PHI_RESULT (next_phi);
-
- tmp = build2 (code, vectype, first_vect, second_vect);
- new_vec_stmt = gimple_build_assign (vec_dest, tmp);
- first_vect = make_ssa_name (vec_dest, new_vec_stmt);
- gimple_assign_set_lhs (new_vec_stmt, first_vect);
+ tree tem = make_ssa_name (vec_dest, new_vec_stmt);
+ new_vec_stmt = gimple_build_assign (tem, code,
+ first_vect, second_vect);
gsi_insert_before (&exit_gsi, new_vec_stmt, GSI_SAME_STMT);
+ first_vect = tem;
}
new_phi_result = first_vect;
@@ -4809,6 +4760,28 @@ vect_create_epilog_for_reduction (vec<tree> vect_defs, gimple *stmt,
new_phis.safe_push (new_vec_stmt);
}
}
+ /* Likewise if we couldn't use a single defuse cycle. */
+ else if (ncopies > 1)
+ {
+ gcc_assert (new_phis.length () == 1);
+ tree first_vect = PHI_RESULT (new_phis[0]);
+ gassign *new_vec_stmt = NULL;
+ vec_dest = vect_create_destination_var (scalar_dest, vectype);
+ gimple *next_phi = new_phis[0];
+ for (int k = 1; k < ncopies; ++k)
+ {
+ next_phi = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (next_phi));
+ tree second_vect = PHI_RESULT (next_phi);
+ tree tem = make_ssa_name (vec_dest, new_vec_stmt);
+ new_vec_stmt = gimple_build_assign (tem, code,
+ first_vect, second_vect);
+ gsi_insert_before (&exit_gsi, new_vec_stmt, GSI_SAME_STMT);
+ first_vect = tem;
+ }
+ new_phi_result = first_vect;
+ new_phis.truncate (0);
+ new_phis.safe_push (new_vec_stmt);
+ }
else
new_phi_result = PHI_RESULT (new_phis[0]);
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index 7cfeeb98978..04ecaab7fc3 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -908,12 +908,49 @@ vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap,
return true;
}
-/* Recursively build an SLP tree starting from NODE.
- Fail (and return a value not equal to zero) if def-stmts are not
- isomorphic, require data permutation or are of unsupported types of
- operation. Otherwise, return 0.
- The value returned is the depth in the SLP tree where a mismatch
- was found. */
+/* Traits for the hash_set to record failed SLP builds for a stmt set.
+ Note we never remove apart from at destruction time so we do not
+ need a special value for deleted that differs from empty. */
+struct bst_traits
+{
+ typedef vec <gimple *> value_type;
+ typedef vec <gimple *> compare_type;
+ static inline hashval_t hash (value_type);
+ static inline bool equal (value_type existing, value_type candidate);
+ static inline bool is_empty (value_type x) { return !x.exists (); }
+ static inline bool is_deleted (value_type x) { return !x.exists (); }
+ static inline void mark_empty (value_type &x) { x.release (); }
+ static inline void mark_deleted (value_type &x) { x.release (); }
+ static inline void remove (value_type &x) { x.release (); }
+};
+inline hashval_t
+bst_traits::hash (value_type x)
+{
+ inchash::hash h;
+ for (unsigned i = 0; i < x.length (); ++i)
+ h.add_int (gimple_uid (x[i]));
+ return h.end ();
+}
+inline bool
+bst_traits::equal (value_type existing, value_type candidate)
+{
+ if (existing.length () != candidate.length ())
+ return false;
+ for (unsigned i = 0; i < existing.length (); ++i)
+ if (existing[i] != candidate[i])
+ return false;
+ return true;
+}
+
+static hash_set <vec <gimple *>, bst_traits> *bst_fail;
+
+static slp_tree
+vect_build_slp_tree_2 (vec_info *vinfo,
+ vec<gimple *> stmts, unsigned int group_size,
+ unsigned int *max_nunits,
+ vec<slp_tree> *loads,
+ bool *matches, unsigned *npermutes, unsigned *tree_size,
+ unsigned max_tree_size);
static slp_tree
vect_build_slp_tree (vec_info *vinfo,
@@ -923,6 +960,39 @@ vect_build_slp_tree (vec_info *vinfo,
bool *matches, unsigned *npermutes, unsigned *tree_size,
unsigned max_tree_size)
{
+ if (bst_fail->contains (stmts))
+ return NULL;
+ slp_tree res = vect_build_slp_tree_2 (vinfo, stmts, group_size, max_nunits,
+ loads, matches, npermutes, tree_size,
+ max_tree_size);
+ /* When SLP build fails for stmts record this, otherwise SLP build
+ can be exponential in time when we allow to construct parts from
+ scalars, see PR81723. */
+ if (! res)
+ {
+ vec <gimple *> x;
+ x.create (stmts.length ());
+ x.splice (stmts);
+ bst_fail->add (x);
+ }
+ return res;
+}
+
+/* Recursively build an SLP tree starting from NODE.
+ Fail (and return a value not equal to zero) if def-stmts are not
+ isomorphic, require data permutation or are of unsupported types of
+ operation. Otherwise, return 0.
+ The value returned is the depth in the SLP tree where a mismatch
+ was found. */
+
+static slp_tree
+vect_build_slp_tree_2 (vec_info *vinfo,
+ vec<gimple *> stmts, unsigned int group_size,
+ unsigned int *max_nunits,
+ vec<slp_tree> *loads,
+ bool *matches, unsigned *npermutes, unsigned *tree_size,
+ unsigned max_tree_size)
+{
unsigned nops, i, this_tree_size = 0, this_max_nunits = *max_nunits;
gimple *stmt;
slp_tree node;
@@ -947,11 +1017,27 @@ vect_build_slp_tree (vec_info *vinfo,
the recursion. */
if (gimple_code (stmt) == GIMPLE_PHI)
{
+ vect_def_type def_type = STMT_VINFO_DEF_TYPE (vinfo_for_stmt (stmt));
/* Induction from different IVs is not supported. */
- if (STMT_VINFO_DEF_TYPE (vinfo_for_stmt (stmt)) == vect_induction_def)
- FOR_EACH_VEC_ELT (stmts, i, stmt)
- if (stmt != stmts[0])
- return NULL;
+ if (def_type == vect_induction_def)
+ {
+ FOR_EACH_VEC_ELT (stmts, i, stmt)
+ if (stmt != stmts[0])
+ return NULL;
+ }
+ else
+ {
+ /* Else def types have to match. */
+ FOR_EACH_VEC_ELT (stmts, i, stmt)
+ {
+ /* But for reduction chains only check on the first stmt. */
+ if (GROUP_FIRST_ELEMENT (vinfo_for_stmt (stmt))
+ && GROUP_FIRST_ELEMENT (vinfo_for_stmt (stmt)) != stmt)
+ continue;
+ if (STMT_VINFO_DEF_TYPE (vinfo_for_stmt (stmt)) != def_type)
+ return NULL;
+ }
+ }
node = vect_create_new_slp_node (stmts);
return node;
}
@@ -998,6 +1084,9 @@ vect_build_slp_tree (vec_info *vinfo,
stmt = stmts[0];
+ if (tree_size)
+ max_tree_size -= *tree_size;
+
/* Create SLP_TREE nodes for the definition node/s. */
FOR_EACH_VEC_ELT (oprnds_info, i, oprnd_info)
{
@@ -1917,9 +2006,11 @@ vect_analyze_slp_instance (vec_info *vinfo,
/* Build the tree for the SLP instance. */
bool *matches = XALLOCAVEC (bool, group_size);
unsigned npermutes = 0;
+ bst_fail = new hash_set <vec <gimple *>, bst_traits> ();
node = vect_build_slp_tree (vinfo, scalar_stmts, group_size,
&max_nunits, &loads, matches, &npermutes,
NULL, max_tree_size);
+ delete bst_fail;
if (node != NULL)
{
/* Calculate the unrolling factor based on the smallest type. */
@@ -2362,62 +2453,37 @@ vect_detect_hybrid_slp (loop_vec_info loop_vinfo)
}
-/* Create and initialize a new bb_vec_info struct for BB, as well as
- stmt_vec_info structs for all the stmts in it. */
+/* Initialize a bb_vec_info struct for the statements between
+ REGION_BEGIN_IN (inclusive) and REGION_END_IN (exclusive). */
-static bb_vec_info
-new_bb_vec_info (gimple_stmt_iterator region_begin,
- gimple_stmt_iterator region_end)
+_bb_vec_info::_bb_vec_info (gimple_stmt_iterator region_begin_in,
+ gimple_stmt_iterator region_end_in)
+ : vec_info (vec_info::bb, init_cost (NULL)),
+ bb (gsi_bb (region_begin_in)),
+ region_begin (region_begin_in),
+ region_end (region_end_in)
{
- basic_block bb = gsi_bb (region_begin);
- bb_vec_info res = NULL;
gimple_stmt_iterator gsi;
- res = (bb_vec_info) xcalloc (1, sizeof (struct _bb_vec_info));
- res->kind = vec_info::bb;
- BB_VINFO_BB (res) = bb;
- res->region_begin = region_begin;
- res->region_end = region_end;
-
for (gsi = region_begin; gsi_stmt (gsi) != gsi_stmt (region_end);
gsi_next (&gsi))
{
gimple *stmt = gsi_stmt (gsi);
gimple_set_uid (stmt, 0);
- set_vinfo_for_stmt (stmt, new_stmt_vec_info (stmt, res));
+ set_vinfo_for_stmt (stmt, new_stmt_vec_info (stmt, this));
}
- BB_VINFO_GROUPED_STORES (res).create (10);
- BB_VINFO_SLP_INSTANCES (res).create (2);
- BB_VINFO_TARGET_COST_DATA (res) = init_cost (NULL);
-
- bb->aux = res;
- return res;
+ bb->aux = this;
}
/* Free BB_VINFO struct, as well as all the stmt_vec_info structs of all the
stmts in the basic block. */
-static void
-destroy_bb_vec_info (bb_vec_info bb_vinfo)
+_bb_vec_info::~_bb_vec_info ()
{
- slp_instance instance;
- unsigned i;
-
- if (!bb_vinfo)
- return;
-
- vect_destroy_datarefs (bb_vinfo);
- free_dependence_relations (BB_VINFO_DDRS (bb_vinfo));
- BB_VINFO_GROUPED_STORES (bb_vinfo).release ();
- FOR_EACH_VEC_ELT (BB_VINFO_SLP_INSTANCES (bb_vinfo), i, instance)
- vect_free_slp_instance (instance);
- BB_VINFO_SLP_INSTANCES (bb_vinfo).release ();
- destroy_cost_data (BB_VINFO_TARGET_COST_DATA (bb_vinfo));
-
- for (gimple_stmt_iterator si = bb_vinfo->region_begin;
- gsi_stmt (si) != gsi_stmt (bb_vinfo->region_end); gsi_next (&si))
+ for (gimple_stmt_iterator si = region_begin;
+ gsi_stmt (si) != gsi_stmt (region_end); gsi_next (&si))
{
gimple *stmt = gsi_stmt (si);
stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
@@ -2430,8 +2496,7 @@ destroy_bb_vec_info (bb_vec_info bb_vinfo)
gimple_set_uid (stmt, -1);
}
- BB_VINFO_BB (bb_vinfo)->aux = NULL;
- free (bb_vinfo);
+ bb->aux = NULL;
}
@@ -2713,7 +2778,7 @@ vect_slp_analyze_bb_1 (gimple_stmt_iterator region_begin,
return NULL;
}
- bb_vinfo = new_bb_vec_info (region_begin, region_end);
+ bb_vinfo = new _bb_vec_info (region_begin, region_end);
if (!bb_vinfo)
return NULL;
@@ -2728,7 +2793,7 @@ vect_slp_analyze_bb_1 (gimple_stmt_iterator region_begin,
"not vectorized: unhandled data-ref in basic "
"block.\n");
- destroy_bb_vec_info (bb_vinfo);
+ delete bb_vinfo;
return NULL;
}
@@ -2739,7 +2804,7 @@ vect_slp_analyze_bb_1 (gimple_stmt_iterator region_begin,
"not vectorized: not enough data-refs in "
"basic block.\n");
- destroy_bb_vec_info (bb_vinfo);
+ delete bb_vinfo;
return NULL;
}
@@ -2750,7 +2815,7 @@ vect_slp_analyze_bb_1 (gimple_stmt_iterator region_begin,
"not vectorized: unhandled data access in "
"basic block.\n");
- destroy_bb_vec_info (bb_vinfo);
+ delete bb_vinfo;
return NULL;
}
@@ -2764,7 +2829,7 @@ vect_slp_analyze_bb_1 (gimple_stmt_iterator region_begin,
"not vectorized: no grouped stores in "
"basic block.\n");
- destroy_bb_vec_info (bb_vinfo);
+ delete bb_vinfo;
return NULL;
}
@@ -2786,10 +2851,12 @@ vect_slp_analyze_bb_1 (gimple_stmt_iterator region_begin,
"in basic block.\n");
}
- destroy_bb_vec_info (bb_vinfo);
+ delete bb_vinfo;
return NULL;
}
+ vect_record_base_alignments (bb_vinfo);
+
/* Analyze and verify the alignment of data references and the
dependence in the SLP instances. */
for (i = 0; BB_VINFO_SLP_INSTANCES (bb_vinfo).iterate (i, &instance); )
@@ -2816,7 +2883,7 @@ vect_slp_analyze_bb_1 (gimple_stmt_iterator region_begin,
}
if (! BB_VINFO_SLP_INSTANCES (bb_vinfo).length ())
{
- destroy_bb_vec_info (bb_vinfo);
+ delete bb_vinfo;
return NULL;
}
@@ -2827,7 +2894,7 @@ vect_slp_analyze_bb_1 (gimple_stmt_iterator region_begin,
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: bad operation in basic block.\n");
- destroy_bb_vec_info (bb_vinfo);
+ delete bb_vinfo;
return NULL;
}
@@ -2840,7 +2907,7 @@ vect_slp_analyze_bb_1 (gimple_stmt_iterator region_begin,
"not vectorized: vectorization is not "
"profitable.\n");
- destroy_bb_vec_info (bb_vinfo);
+ delete bb_vinfo;
return NULL;
}
@@ -2920,12 +2987,9 @@ vect_slp_bb (basic_block bb)
dump_printf_loc (MSG_NOTE, vect_location,
"basic block part vectorized\n");
- destroy_bb_vec_info (bb_vinfo);
-
vectorized = true;
}
- else
- destroy_bb_vec_info (bb_vinfo);
+ delete bb_vinfo;
any_vectorized |= vectorized;
@@ -3309,32 +3373,24 @@ vect_get_slp_defs (vec<tree> ops, slp_tree slp_node,
{
gimple *first_stmt;
int number_of_vects = 0, i;
+ unsigned int child_index = 0;
HOST_WIDE_INT lhs_size_unit, rhs_size_unit;
slp_tree child = NULL;
vec<tree> vec_defs;
tree oprnd;
- bool first_iteration = true;
+ bool vectorized_defs;
first_stmt = SLP_TREE_SCALAR_STMTS (slp_node)[0];
FOR_EACH_VEC_ELT (ops, i, oprnd)
{
- bool vectorized_defs = false;
-
- if (oprnd == NULL)
- {
- vec_defs = vNULL;
- vec_defs.create (0);
- vec_oprnds->quick_push (vec_defs);
- continue;
- }
-
/* For each operand we check if it has vectorized definitions in a child
node or we need to create them (for invariants and constants). We
check if the LHS of the first stmt of the next child matches OPRND.
If it does, we found the correct child. Otherwise, we call
- vect_get_constant_vectors (). */
- for (unsigned int child_index = 0;
- child_index < SLP_TREE_CHILDREN (slp_node).length (); child_index++)
+ vect_get_constant_vectors (), and not advance CHILD_INDEX in order
+ to check this child node for the next operand. */
+ vectorized_defs = false;
+ if (SLP_TREE_CHILDREN (slp_node).length () > child_index)
{
child = SLP_TREE_CHILDREN (slp_node)[child_index];
@@ -3359,25 +3415,30 @@ vect_get_slp_defs (vec<tree> ops, slp_tree slp_node,
statements. */
number_of_vects = SLP_TREE_NUMBER_OF_VEC_STMTS (child);
vectorized_defs = true;
- break;
+ child_index++;
}
}
+ else
+ child_index++;
}
- if (!vectorized_defs && first_iteration)
- {
- number_of_vects = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
- /* Number of vector stmts was calculated according to LHS in
- vect_schedule_slp_instance (), fix it by replacing LHS with
- RHS, if necessary. See vect_get_smallest_scalar_type () for
- details. */
- vect_get_smallest_scalar_type (first_stmt, &lhs_size_unit,
- &rhs_size_unit);
- if (rhs_size_unit != lhs_size_unit)
- {
- number_of_vects *= rhs_size_unit;
- number_of_vects /= lhs_size_unit;
- }
+ if (!vectorized_defs)
+ {
+ if (i == 0)
+ {
+ number_of_vects = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
+ /* Number of vector stmts was calculated according to LHS in
+ vect_schedule_slp_instance (), fix it by replacing LHS with
+ RHS, if necessary. See vect_get_smallest_scalar_type () for
+ details. */
+ vect_get_smallest_scalar_type (first_stmt, &lhs_size_unit,
+ &rhs_size_unit);
+ if (rhs_size_unit != lhs_size_unit)
+ {
+ number_of_vects *= rhs_size_unit;
+ number_of_vects /= lhs_size_unit;
+ }
+ }
}
/* Allocate memory for vectorized defs. */
@@ -3395,8 +3456,6 @@ vect_get_slp_defs (vec<tree> ops, slp_tree slp_node,
number_of_vects);
vec_oprnds->quick_push (vec_defs);
-
- first_iteration = false;
}
}
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index a22947d02ac..ee32c5671e2 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -581,9 +581,11 @@ process_use (gimple *stmt, tree use, loop_vec_info loop_vinfo,
}
/* We are also not interested in uses on loop PHI backedges that are
inductions. Otherwise we'll needlessly vectorize the IV increment
- and cause hybrid SLP for SLP inductions. */
+ and cause hybrid SLP for SLP inductions. Unless the PHI is live
+ of course. */
else if (gimple_code (stmt) == GIMPLE_PHI
&& STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_induction_def
+ && ! STMT_VINFO_LIVE_P (stmt_vinfo)
&& (PHI_ARG_DEF_FROM_EDGE (stmt, loop_latch_edge (bb->loop_father))
== use))
{
@@ -3529,7 +3531,7 @@ vectorizable_simd_clone_call (gimple *stmt, gimple_stmt_iterator *gsi,
arginfo[i].op = vec_oprnd0;
vec_oprnd0
= build3 (BIT_FIELD_REF, atype, vec_oprnd0,
- size_int (prec),
+ bitsize_int (prec),
bitsize_int ((m & (k - 1)) * prec));
new_stmt
= gimple_build_assign (make_ssa_name (atype),
@@ -3690,7 +3692,7 @@ vectorizable_simd_clone_call (gimple *stmt, gimple_stmt_iterator *gsi,
}
else
t = build3 (BIT_FIELD_REF, vectype, new_temp,
- size_int (prec), bitsize_int (l * prec));
+ bitsize_int (prec), bitsize_int (l * prec));
new_stmt
= gimple_build_assign (make_ssa_name (vectype), t);
vect_finish_stmt_generation (stmt, new_stmt, gsi);
@@ -6000,6 +6002,7 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
unsigned nstores = nunits;
unsigned lnel = 1;
tree ltype = elem_type;
+ tree lvectype = vectype;
if (slp)
{
if (group_size < nunits
@@ -6008,6 +6011,45 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
nstores = nunits / group_size;
lnel = group_size;
ltype = build_vector_type (elem_type, group_size);
+ lvectype = vectype;
+
+ /* First check if vec_extract optab doesn't support extraction
+ of vector elts directly. */
+ machine_mode elmode = TYPE_MODE (elem_type);
+ machine_mode vmode = mode_for_vector (elmode, group_size);
+ if (! VECTOR_MODE_P (vmode)
+ || (convert_optab_handler (vec_extract_optab,
+ TYPE_MODE (vectype), vmode)
+ == CODE_FOR_nothing))
+ {
+ /* Try to avoid emitting an extract of vector elements
+ by performing the extracts using an integer type of the
+ same size, extracting from a vector of those and then
+ re-interpreting it as the original vector type if
+ supported. */
+ unsigned lsize
+ = group_size * GET_MODE_BITSIZE (elmode);
+ elmode = mode_for_size (lsize, MODE_INT, 0);
+ vmode = mode_for_vector (elmode, nunits / group_size);
+ /* If we can't construct such a vector fall back to
+ element extracts from the original vector type and
+ element size stores. */
+ if (VECTOR_MODE_P (vmode)
+ && (convert_optab_handler (vec_extract_optab,
+ vmode, elmode)
+ != CODE_FOR_nothing))
+ {
+ nstores = nunits / group_size;
+ lnel = group_size;
+ ltype = build_nonstandard_integer_type (lsize, 1);
+ lvectype = build_vector_type (ltype, nstores);
+ }
+ /* Else fall back to vector extraction anyway.
+ Fewer stores are more important than avoiding spilling
+ of the vector we extract from. Compared to the
+ construction case in vectorizable_load no store-forwarding
+ issue exists here for reasonable archs. */
+ }
}
else if (group_size >= nunits
&& group_size % nunits == 0)
@@ -6015,6 +6057,7 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
nstores = 1;
lnel = nunits;
ltype = vectype;
+ lvectype = vectype;
}
ltype = build_aligned_type (ltype, TYPE_ALIGN (elem_type));
ncopies = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
@@ -6085,7 +6128,16 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
vec_oprnd = vect_get_vec_def_for_stmt_copy (dt, vec_oprnd);
}
}
-
+ /* Pun the vector to extract from if necessary. */
+ if (lvectype != vectype)
+ {
+ tree tem = make_ssa_name (lvectype);
+ gimple *pun
+ = gimple_build_assign (tem, build1 (VIEW_CONVERT_EXPR,
+ lvectype, vec_oprnd));
+ vect_finish_stmt_generation (stmt, pun, gsi);
+ vec_oprnd = tem;
+ }
for (i = 0; i < nstores; i++)
{
tree newref, newoff;
@@ -6996,29 +7048,43 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
{
if (group_size < nunits)
{
- /* Avoid emitting a constructor of vector elements by performing
- the loads using an integer type of the same size,
- constructing a vector of those and then re-interpreting it
- as the original vector type. This works around the fact
- that the vec_init optab was only designed for scalar
- element modes and thus expansion goes through memory.
- This avoids a huge runtime penalty due to the general
- inability to perform store forwarding from smaller stores
- to a larger load. */
- unsigned lsize
- = group_size * TYPE_PRECISION (TREE_TYPE (vectype));
- machine_mode elmode = mode_for_size (lsize, MODE_INT, 0);
- machine_mode vmode = mode_for_vector (elmode,
- nunits / group_size);
- /* If we can't construct such a vector fall back to
- element loads of the original vector type. */
+ /* First check if vec_init optab supports construction from
+ vector elts directly. */
+ machine_mode elmode = TYPE_MODE (TREE_TYPE (vectype));
+ machine_mode vmode = mode_for_vector (elmode, group_size);
if (VECTOR_MODE_P (vmode)
- && optab_handler (vec_init_optab, vmode) != CODE_FOR_nothing)
+ && (convert_optab_handler (vec_init_optab,
+ TYPE_MODE (vectype), vmode)
+ != CODE_FOR_nothing))
{
nloads = nunits / group_size;
lnel = group_size;
- ltype = build_nonstandard_integer_type (lsize, 1);
- lvectype = build_vector_type (ltype, nloads);
+ ltype = build_vector_type (TREE_TYPE (vectype), group_size);
+ }
+ else
+ {
+ /* Otherwise avoid emitting a constructor of vector elements
+ by performing the loads using an integer type of the same
+ size, constructing a vector of those and then
+ re-interpreting it as the original vector type.
+ This avoids a huge runtime penalty due to the general
+ inability to perform store forwarding from smaller stores
+ to a larger load. */
+ unsigned lsize
+ = group_size * TYPE_PRECISION (TREE_TYPE (vectype));
+ elmode = mode_for_size (lsize, MODE_INT, 0);
+ vmode = mode_for_vector (elmode, nunits / group_size);
+ /* If we can't construct such a vector fall back to
+ element loads of the original vector type. */
+ if (VECTOR_MODE_P (vmode)
+ && (convert_optab_handler (vec_init_optab, vmode, elmode)
+ != CODE_FOR_nothing))
+ {
+ nloads = nunits / group_size;
+ lnel = group_size;
+ ltype = build_nonstandard_integer_type (lsize, 1);
+ lvectype = build_vector_type (ltype, nloads);
+ }
}
}
else
diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c
index 33a1f580474..feddfa2287c 100644
--- a/gcc/tree-vectorizer.c
+++ b/gcc/tree-vectorizer.c
@@ -76,6 +76,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa-propagate.h"
#include "dbgcnt.h"
#include "tree-scalar-evolution.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Loop or bb location. */
@@ -354,22 +356,36 @@ shrink_simd_arrays
delete simd_array_to_simduid_htab;
}
-/* A helper function to free data refs. */
+/* Initialize the vec_info with kind KIND_IN and target cost data
+ TARGET_COST_DATA_IN. */
+
+vec_info::vec_info (vec_info::vec_kind kind_in, void *target_cost_data_in)
+ : kind (kind_in),
+ datarefs (vNULL),
+ ddrs (vNULL),
+ target_cost_data (target_cost_data_in)
+{
+}
-void
-vect_destroy_datarefs (vec_info *vinfo)
+vec_info::~vec_info ()
{
+ slp_instance instance;
struct data_reference *dr;
unsigned int i;
- FOR_EACH_VEC_ELT (vinfo->datarefs, i, dr)
+ FOR_EACH_VEC_ELT (datarefs, i, dr)
if (dr->aux)
{
free (dr->aux);
dr->aux = NULL;
}
- free_data_refs (vinfo->datarefs);
+ FOR_EACH_VEC_ELT (slp_instances, i, instance)
+ vect_free_slp_instance (instance);
+
+ free_data_refs (datarefs);
+ free_dependence_relations (ddrs);
+ destroy_cost_data (target_cost_data);
}
/* A helper function to free scev and LOOP niter information, as well as
@@ -830,7 +846,7 @@ vectorize_loops (void)
has_mask_store = false;
if (loop_vinfo)
has_mask_store = LOOP_VINFO_HAS_MASK_STORE (loop_vinfo);
- destroy_loop_vec_info (loop_vinfo, true);
+ delete loop_vinfo;
if (has_mask_store)
optimize_mask_stores (loop);
loop->aux = NULL;
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h
index accac72324f..4ee3c3fbcd7 100644
--- a/gcc/tree-vectorizer.h
+++ b/gcc/tree-vectorizer.h
@@ -22,6 +22,7 @@ along with GCC; see the file COPYING3. If not see
#define GCC_TREE_VECTORIZER_H
#include "tree-data-ref.h"
+#include "tree-hash-traits.h"
#include "target.h"
/* Used for naming of new temporaries. */
@@ -84,6 +85,11 @@ struct stmt_info_for_cost {
typedef vec<stmt_info_for_cost> stmt_vector_for_cost;
+/* Maps base addresses to an innermost_loop_behavior that gives the maximum
+ known alignment for that base. */
+typedef hash_map<tree_operand_hash,
+ innermost_loop_behavior *> vec_base_alignments;
+
/************************************************************************
SLP
************************************************************************/
@@ -149,22 +155,37 @@ typedef struct _slp_instance {
+/* Describes two objects whose addresses must be unequal for the vectorized
+ loop to be valid. */
+typedef std::pair<tree, tree> vec_object_pair;
+
/* Vectorizer state common between loop and basic-block vectorization. */
struct vec_info {
- enum { bb, loop } kind;
+ enum vec_kind { bb, loop };
+
+ vec_info (vec_kind, void *);
+ ~vec_info ();
+
+ /* The type of vectorization. */
+ vec_kind kind;
/* All SLP instances. */
- vec<slp_instance> slp_instances;
+ auto_vec<slp_instance> slp_instances;
- /* All data references. */
+ /* All data references. Freed by free_data_refs, so not an auto_vec. */
vec<data_reference_p> datarefs;
- /* All data dependences. */
+ /* Maps base addresses to an innermost_loop_behavior that gives the maximum
+ known alignment for that base. */
+ vec_base_alignments base_alignments;
+
+ /* All data dependences. Freed by free_dependence_relations, so not
+ an auto_vec. */
vec<ddr_p> ddrs;
/* All interleaving chains of stores, represented by the first
stmt in the chain. */
- vec<gimple *> grouped_stores;
+ auto_vec<gimple *> grouped_stores;
/* Cost data used by the target cost model. */
void *target_cost_data;
@@ -194,6 +215,8 @@ is_a_helper <_bb_vec_info *>::test (vec_info *i)
/* Info on vectorized loops. */
/*-----------------------------------------------------------------*/
typedef struct _loop_vec_info : public vec_info {
+ _loop_vec_info (struct loop *);
+ ~_loop_vec_info ();
/* The loop to which this info struct refers to. */
struct loop *loop;
@@ -235,29 +258,32 @@ typedef struct _loop_vec_info : public vec_info {
int ptr_mask;
/* The loop nest in which the data dependences are computed. */
- vec<loop_p> loop_nest;
+ auto_vec<loop_p> loop_nest;
/* Data Dependence Relations defining address ranges that are candidates
for a run-time aliasing check. */
- vec<ddr_p> may_alias_ddrs;
+ auto_vec<ddr_p> may_alias_ddrs;
/* Data Dependence Relations defining address ranges together with segment
lengths from which the run-time aliasing check is built. */
- vec<dr_with_seg_len_pair_t> comp_alias_ddrs;
+ auto_vec<dr_with_seg_len_pair_t> comp_alias_ddrs;
+
+ /* Check that the addresses of each pair of objects is unequal. */
+ auto_vec<vec_object_pair> check_unequal_addrs;
/* Statements in the loop that have data references that are candidates for a
runtime (loop versioning) misalignment check. */
- vec<gimple *> may_misalign_stmts;
+ auto_vec<gimple *> may_misalign_stmts;
/* Reduction cycles detected in the loop. Used in loop-aware SLP. */
- vec<gimple *> reductions;
+ auto_vec<gimple *> reductions;
/* All reduction chains in the loop, represented by the first
stmt in the chain. */
- vec<gimple *> reduction_chains;
+ auto_vec<gimple *> reduction_chains;
/* Cost vector for a single scalar iteration. */
- vec<stmt_info_for_cost> scalar_cost_vec;
+ auto_vec<stmt_info_for_cost> scalar_cost_vec;
/* The unrolling factor needed to SLP the loop. In case of that pure SLP is
applied to the loop, i.e., no unrolling is needed, this is 1. */
@@ -339,6 +365,7 @@ typedef struct _loop_vec_info : public vec_info {
#define LOOP_VINFO_MAY_MISALIGN_STMTS(L) (L)->may_misalign_stmts
#define LOOP_VINFO_MAY_ALIAS_DDRS(L) (L)->may_alias_ddrs
#define LOOP_VINFO_COMP_ALIAS_DDRS(L) (L)->comp_alias_ddrs
+#define LOOP_VINFO_CHECK_UNEQUAL_ADDRS(L) (L)->check_unequal_addrs
#define LOOP_VINFO_GROUPED_STORES(L) (L)->grouped_stores
#define LOOP_VINFO_SLP_INSTANCES(L) (L)->slp_instances
#define LOOP_VINFO_SLP_UNROLLING_FACTOR(L) (L)->slp_unrolling_factor
@@ -358,7 +385,8 @@ typedef struct _loop_vec_info : public vec_info {
#define LOOP_REQUIRES_VERSIONING_FOR_ALIGNMENT(L) \
((L)->may_misalign_stmts.length () > 0)
#define LOOP_REQUIRES_VERSIONING_FOR_ALIAS(L) \
- ((L)->may_alias_ddrs.length () > 0)
+ ((L)->comp_alias_ddrs.length () > 0 \
+ || (L)->check_unequal_addrs.length () > 0)
#define LOOP_REQUIRES_VERSIONING_FOR_NITERS(L) \
(LOOP_VINFO_NITERS_ASSUMPTIONS (L))
#define LOOP_REQUIRES_VERSIONING(L) \
@@ -390,6 +418,9 @@ nested_in_vect_loop_p (struct loop *loop, gimple *stmt)
typedef struct _bb_vec_info : public vec_info
{
+ _bb_vec_info (gimple_stmt_iterator, gimple_stmt_iterator);
+ ~_bb_vec_info ();
+
basic_block bb;
gimple_stmt_iterator region_begin;
gimple_stmt_iterator region_end;
@@ -793,8 +824,8 @@ void free_stmt_vec_info_vec (void);
static inline stmt_vec_info
vinfo_for_stmt (gimple *stmt)
{
- unsigned int uid = gimple_uid (stmt);
- if (uid == 0)
+ int uid = gimple_uid (stmt);
+ if (uid <= 0)
return NULL;
return stmt_vec_info_vec[uid - 1];
@@ -1141,6 +1172,7 @@ extern bool vect_prune_runtime_alias_test_list (loop_vec_info);
extern bool vect_check_gather_scatter (gimple *, loop_vec_info,
gather_scatter_info *);
extern bool vect_analyze_data_refs (vec_info *, int *);
+extern void vect_record_base_alignments (vec_info *);
extern tree vect_create_data_ref_ptr (gimple *, tree, struct loop *, tree,
tree *, gimple_stmt_iterator *,
gimple **, bool, bool *,
@@ -1168,7 +1200,6 @@ extern tree vect_create_addr_base_for_vector_ref (gimple *, gimple_seq *,
/* In tree-vect-loop.c. */
/* FORNOW: Used in tree-parloops.c. */
-extern void destroy_loop_vec_info (loop_vec_info, bool);
extern gimple *vect_force_simple_reduction (loop_vec_info, gimple *,
bool *, bool);
/* Drive for loop analysis stage. */
@@ -1217,7 +1248,6 @@ void vect_pattern_recog (vec_info *);
/* In tree-vectorizer.c. */
unsigned vectorize_loops (void);
-void vect_destroy_datarefs (vec_info *);
bool vect_stmt_in_region_p (vec_info *, gimple *);
void vect_free_loop_info_assumptions (struct loop *);
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 1f0b6880c45..657a8d186c8 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -62,6 +62,8 @@ along with GCC; see the file COPYING3. If not see
#include "alloc-pool.h"
#include "domwalk.h"
#include "tree-cfgcleanup.h"
+#include "stringpool.h"
+#include "attribs.h"
#define VR_INITIALIZER { VR_UNDEFINED, NULL_TREE, NULL_TREE, NULL }
@@ -796,7 +798,8 @@ get_single_symbol (tree t, bool *neg, tree *inv)
if (TREE_CODE (t) != SSA_NAME)
return NULL_TREE;
- gcc_assert (! inv_ || ! TREE_OVERFLOW_P (inv_));
+ if (inv_ && TREE_OVERFLOW_P (inv_))
+ inv_ = drop_tree_overflow (inv_);
*neg = neg_;
*inv = inv_;
diff --git a/gcc/tree-vrp.h b/gcc/tree-vrp.h
index ef2c68a752b..f84403a0f83 100644
--- a/gcc/tree-vrp.h
+++ b/gcc/tree-vrp.h
@@ -17,6 +17,9 @@ You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
+#ifndef GCC_TREE_VRP_H
+#define GCC_TREE_VRP_H
+
/* Type of value ranges. See value_range_d In tree-vrp.c for a
description of these types. */
enum value_range_type { VR_UNDEFINED, VR_RANGE,
@@ -57,3 +60,4 @@ extern void extract_range_from_unary_expr (value_range *vr,
value_range *vr0_,
tree op0_type);
+#endif /* GCC_TREE_VRP_H */
diff --git a/gcc/tree.c b/gcc/tree.c
index 70da8d2ee2d..c493edd561d 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -62,6 +62,8 @@ along with GCC; see the file COPYING3. If not see
#include "print-tree.h"
#include "ipa-utils.h"
#include "selftest.h"
+#include "stringpool.h"
+#include "attribs.h"
/* Tree code classes. */
@@ -997,7 +999,7 @@ allocate_decl_uid (void)
Achoo! I got a code in the node. */
tree
-make_node_stat (enum tree_code code MEM_STAT_DECL)
+make_node (enum tree_code code MEM_STAT_DECL)
{
tree t;
enum tree_code_class type = TREE_CODE_CLASS (code);
@@ -1128,7 +1130,7 @@ free_node (tree node)
TREE_CHAIN, if it has one, is zero and it has a fresh uid. */
tree
-copy_node_stat (tree node MEM_STAT_DECL)
+copy_node (tree node MEM_STAT_DECL)
{
tree t;
enum tree_code code = TREE_CODE (node);
@@ -1681,7 +1683,7 @@ cst_and_fits_in_hwi (const_tree x)
/* Build a newly constructed VECTOR_CST node of length LEN. */
tree
-make_vector_stat (unsigned len MEM_STAT_DECL)
+make_vector (unsigned len MEM_STAT_DECL)
{
tree t;
unsigned length = (len - 1) * sizeof (tree) + sizeof (struct tree_vector);
@@ -1700,7 +1702,7 @@ make_vector_stat (unsigned len MEM_STAT_DECL)
are in a list pointed to by VALS. */
tree
-build_vector_stat (tree type, tree *vals MEM_STAT_DECL)
+build_vector (tree type, tree *vals MEM_STAT_DECL)
{
int over = 0;
unsigned cnt = 0;
@@ -2193,7 +2195,7 @@ build_zero_cst (tree type)
/* Build a BINFO with LEN language slots. */
tree
-make_tree_binfo_stat (unsigned base_binfos MEM_STAT_DECL)
+make_tree_binfo (unsigned base_binfos MEM_STAT_DECL)
{
tree t;
size_t length = (offsetof (struct tree_binfo, base_binfos)
@@ -2235,7 +2237,7 @@ build_case_label (tree low_value, tree high_value, tree label_decl)
The latter determines the length of the HOST_WIDE_INT vector. */
tree
-make_int_cst_stat (int len, int ext_len MEM_STAT_DECL)
+make_int_cst (int len, int ext_len MEM_STAT_DECL)
{
tree t;
int length = ((ext_len - 1) * sizeof (HOST_WIDE_INT)
@@ -2265,7 +2267,7 @@ make_int_cst_stat (int len, int ext_len MEM_STAT_DECL)
/* Build a newly constructed TREE_VEC node of length LEN. */
tree
-make_tree_vec_stat (int len MEM_STAT_DECL)
+make_tree_vec (int len MEM_STAT_DECL)
{
tree t;
size_t length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
@@ -2283,7 +2285,7 @@ make_tree_vec_stat (int len MEM_STAT_DECL)
/* Grow a TREE_VEC node to new length LEN. */
tree
-grow_tree_vec_stat (tree v, int len MEM_STAT_DECL)
+grow_tree_vec (tree v, int len MEM_STAT_DECL)
{
gcc_assert (TREE_CODE (v) == TREE_VEC);
@@ -2868,9 +2870,9 @@ nreverse (tree t)
purpose and value fields are PARM and VALUE. */
tree
-build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
+build_tree_list (tree parm, tree value MEM_STAT_DECL)
{
- tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
+ tree t = make_node (TREE_LIST PASS_MEM_STAT);
TREE_PURPOSE (t) = parm;
TREE_VALUE (t) = value;
return t;
@@ -2879,7 +2881,7 @@ build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
/* Build a chain of TREE_LIST nodes from a vector. */
tree
-build_tree_list_vec_stat (const vec<tree, va_gc> *vec MEM_STAT_DECL)
+build_tree_list_vec (const vec<tree, va_gc> *vec MEM_STAT_DECL)
{
tree ret = NULL_TREE;
tree *pp = &ret;
@@ -2887,7 +2889,7 @@ build_tree_list_vec_stat (const vec<tree, va_gc> *vec MEM_STAT_DECL)
tree t;
FOR_EACH_VEC_SAFE_ELT (vec, i, t)
{
- *pp = build_tree_list_stat (NULL, t PASS_MEM_STAT);
+ *pp = build_tree_list (NULL, t PASS_MEM_STAT);
pp = &TREE_CHAIN (*pp);
}
return ret;
@@ -2898,7 +2900,7 @@ build_tree_list_vec_stat (const vec<tree, va_gc> *vec MEM_STAT_DECL)
and whose TREE_CHAIN is CHAIN. */
tree
-tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
+tree_cons (tree purpose, tree value, tree chain MEM_STAT_DECL)
{
tree node;
@@ -4365,20 +4367,20 @@ do { tree _node = (NODE); \
enough for all extant tree codes. */
tree
-build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
+build0 (enum tree_code code, tree tt MEM_STAT_DECL)
{
tree t;
gcc_assert (TREE_CODE_LENGTH (code) == 0);
- t = make_node_stat (code PASS_MEM_STAT);
+ t = make_node (code PASS_MEM_STAT);
TREE_TYPE (t) = tt;
return t;
}
tree
-build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
+build1 (enum tree_code code, tree type, tree node MEM_STAT_DECL)
{
int length = sizeof (struct tree_exp);
tree t;
@@ -4454,9 +4456,9 @@ build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
} while (0)
tree
-build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
+build2 (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
{
- bool constant, read_only, side_effects;
+ bool constant, read_only, side_effects, div_by_zero;
tree t;
gcc_assert (TREE_CODE_LENGTH (code) == 2);
@@ -4474,7 +4476,7 @@ build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
gcc_assert (POINTER_TYPE_P (tt) && POINTER_TYPE_P (TREE_TYPE (arg0))
&& ptrofftype_p (TREE_TYPE (arg1)));
- t = make_node_stat (code PASS_MEM_STAT);
+ t = make_node (code PASS_MEM_STAT);
TREE_TYPE (t) = tt;
/* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
@@ -4489,6 +4491,23 @@ build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
read_only = 1;
side_effects = TREE_SIDE_EFFECTS (t);
+ switch (code)
+ {
+ case TRUNC_DIV_EXPR:
+ case CEIL_DIV_EXPR:
+ case FLOOR_DIV_EXPR:
+ case ROUND_DIV_EXPR:
+ case EXACT_DIV_EXPR:
+ case CEIL_MOD_EXPR:
+ case FLOOR_MOD_EXPR:
+ case ROUND_MOD_EXPR:
+ case TRUNC_MOD_EXPR:
+ div_by_zero = integer_zerop (arg1);
+ break;
+ default:
+ div_by_zero = false;
+ }
+
PROCESS_ARG (0);
PROCESS_ARG (1);
@@ -4505,7 +4524,8 @@ build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
else
{
TREE_READONLY (t) = read_only;
- TREE_CONSTANT (t) = constant;
+ /* Don't mark X / 0 as constant. */
+ TREE_CONSTANT (t) = constant && !div_by_zero;
TREE_THIS_VOLATILE (t)
= (TREE_CODE_CLASS (code) == tcc_reference
&& arg0 && TREE_THIS_VOLATILE (arg0));
@@ -4516,8 +4536,8 @@ build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
tree
-build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
- tree arg2 MEM_STAT_DECL)
+build3 (enum tree_code code, tree tt, tree arg0, tree arg1,
+ tree arg2 MEM_STAT_DECL)
{
bool constant, read_only, side_effects;
tree t;
@@ -4525,7 +4545,7 @@ build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
gcc_assert (TREE_CODE_LENGTH (code) == 3);
gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
- t = make_node_stat (code PASS_MEM_STAT);
+ t = make_node (code PASS_MEM_STAT);
TREE_TYPE (t) = tt;
read_only = 1;
@@ -4557,15 +4577,15 @@ build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
}
tree
-build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
- tree arg2, tree arg3 MEM_STAT_DECL)
+build4 (enum tree_code code, tree tt, tree arg0, tree arg1,
+ tree arg2, tree arg3 MEM_STAT_DECL)
{
bool constant, read_only, side_effects;
tree t;
gcc_assert (TREE_CODE_LENGTH (code) == 4);
- t = make_node_stat (code PASS_MEM_STAT);
+ t = make_node (code PASS_MEM_STAT);
TREE_TYPE (t) = tt;
side_effects = TREE_SIDE_EFFECTS (t);
@@ -4584,15 +4604,15 @@ build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
}
tree
-build5_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
- tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
+build5 (enum tree_code code, tree tt, tree arg0, tree arg1,
+ tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
{
bool constant, read_only, side_effects;
tree t;
gcc_assert (TREE_CODE_LENGTH (code) == 5);
- t = make_node_stat (code PASS_MEM_STAT);
+ t = make_node (code PASS_MEM_STAT);
TREE_TYPE (t) = tt;
side_effects = TREE_SIDE_EFFECTS (t);
@@ -4722,12 +4742,12 @@ build_nt_call_vec (tree fn, vec<tree, va_gc> *args)
Other slots are initialized to 0 or null pointers. */
tree
-build_decl_stat (location_t loc, enum tree_code code, tree name,
+build_decl (location_t loc, enum tree_code code, tree name,
tree type MEM_STAT_DECL)
{
tree t;
- t = make_node_stat (code PASS_MEM_STAT);
+ t = make_node (code PASS_MEM_STAT);
DECL_SOURCE_LOCATION (t) = loc;
/* if (type == error_mark_node)
@@ -4804,281 +4824,6 @@ protected_set_expr_location (tree t, location_t loc)
SET_EXPR_LOCATION (t, loc);
}
-/* Return a declaration like DDECL except that its DECL_ATTRIBUTES
- is ATTRIBUTE. */
-
-tree
-build_decl_attribute_variant (tree ddecl, tree attribute)
-{
- DECL_ATTRIBUTES (ddecl) = attribute;
- return ddecl;
-}
-
-/* Return a type like TTYPE except that its TYPE_ATTRIBUTE
- is ATTRIBUTE and its qualifiers are QUALS.
-
- Record such modified types already made so we don't make duplicates. */
-
-tree
-build_type_attribute_qual_variant (tree ttype, tree attribute, int quals)
-{
- if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
- {
- tree ntype;
-
- /* Building a distinct copy of a tagged type is inappropriate; it
- causes breakage in code that expects there to be a one-to-one
- relationship between a struct and its fields.
- build_duplicate_type is another solution (as used in
- handle_transparent_union_attribute), but that doesn't play well
- with the stronger C++ type identity model. */
- if (TREE_CODE (ttype) == RECORD_TYPE
- || TREE_CODE (ttype) == UNION_TYPE
- || TREE_CODE (ttype) == QUAL_UNION_TYPE
- || TREE_CODE (ttype) == ENUMERAL_TYPE)
- {
- warning (OPT_Wattributes,
- "ignoring attributes applied to %qT after definition",
- TYPE_MAIN_VARIANT (ttype));
- return build_qualified_type (ttype, quals);
- }
-
- ttype = build_qualified_type (ttype, TYPE_UNQUALIFIED);
- ntype = build_distinct_type_copy (ttype);
-
- TYPE_ATTRIBUTES (ntype) = attribute;
-
- hashval_t hash = type_hash_canon_hash (ntype);
- ntype = type_hash_canon (hash, ntype);
-
- /* If the target-dependent attributes make NTYPE different from
- its canonical type, we will need to use structural equality
- checks for this type. */
- if (TYPE_STRUCTURAL_EQUALITY_P (ttype)
- || !comp_type_attributes (ntype, ttype))
- SET_TYPE_STRUCTURAL_EQUALITY (ntype);
- else if (TYPE_CANONICAL (ntype) == ntype)
- TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype);
-
- ttype = build_qualified_type (ntype, quals);
- }
- else if (TYPE_QUALS (ttype) != quals)
- ttype = build_qualified_type (ttype, quals);
-
- return ttype;
-}
-
-/* Check if "omp declare simd" attribute arguments, CLAUSES1 and CLAUSES2, are
- the same. */
-
-static bool
-omp_declare_simd_clauses_equal (tree clauses1, tree clauses2)
-{
- tree cl1, cl2;
- for (cl1 = clauses1, cl2 = clauses2;
- cl1 && cl2;
- cl1 = OMP_CLAUSE_CHAIN (cl1), cl2 = OMP_CLAUSE_CHAIN (cl2))
- {
- if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_CODE (cl2))
- return false;
- if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_SIMDLEN)
- {
- if (simple_cst_equal (OMP_CLAUSE_DECL (cl1),
- OMP_CLAUSE_DECL (cl2)) != 1)
- return false;
- }
- switch (OMP_CLAUSE_CODE (cl1))
- {
- case OMP_CLAUSE_ALIGNED:
- if (simple_cst_equal (OMP_CLAUSE_ALIGNED_ALIGNMENT (cl1),
- OMP_CLAUSE_ALIGNED_ALIGNMENT (cl2)) != 1)
- return false;
- break;
- case OMP_CLAUSE_LINEAR:
- if (simple_cst_equal (OMP_CLAUSE_LINEAR_STEP (cl1),
- OMP_CLAUSE_LINEAR_STEP (cl2)) != 1)
- return false;
- break;
- case OMP_CLAUSE_SIMDLEN:
- if (simple_cst_equal (OMP_CLAUSE_SIMDLEN_EXPR (cl1),
- OMP_CLAUSE_SIMDLEN_EXPR (cl2)) != 1)
- return false;
- default:
- break;
- }
- }
- return true;
-}
-
-/* Compare two constructor-element-type constants. Return 1 if the lists
- are known to be equal; otherwise return 0. */
-
-static bool
-simple_cst_list_equal (const_tree l1, const_tree l2)
-{
- while (l1 != NULL_TREE && l2 != NULL_TREE)
- {
- if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
- return false;
-
- l1 = TREE_CHAIN (l1);
- l2 = TREE_CHAIN (l2);
- }
-
- return l1 == l2;
-}
-
-/* Compare two identifier nodes representing attributes. Either one may
- be in wrapped __ATTR__ form. Return true if they are the same, false
- otherwise. */
-
-static bool
-cmp_attrib_identifiers (const_tree attr1, const_tree attr2)
-{
- /* Make sure we're dealing with IDENTIFIER_NODEs. */
- gcc_checking_assert (TREE_CODE (attr1) == IDENTIFIER_NODE
- && TREE_CODE (attr2) == IDENTIFIER_NODE);
-
- /* Identifiers can be compared directly for equality. */
- if (attr1 == attr2)
- return true;
-
- /* If they are not equal, they may still be one in the form
- 'text' while the other one is in the form '__text__'. TODO:
- If we were storing attributes in normalized 'text' form, then
- this could all go away and we could take full advantage of
- the fact that we're comparing identifiers. :-) */
- const size_t attr1_len = IDENTIFIER_LENGTH (attr1);
- const size_t attr2_len = IDENTIFIER_LENGTH (attr2);
-
- if (attr2_len == attr1_len + 4)
- {
- const char *p = IDENTIFIER_POINTER (attr2);
- const char *q = IDENTIFIER_POINTER (attr1);
- if (p[0] == '_' && p[1] == '_'
- && p[attr2_len - 2] == '_' && p[attr2_len - 1] == '_'
- && strncmp (q, p + 2, attr1_len) == 0)
- return true;;
- }
- else if (attr2_len + 4 == attr1_len)
- {
- const char *p = IDENTIFIER_POINTER (attr2);
- const char *q = IDENTIFIER_POINTER (attr1);
- if (q[0] == '_' && q[1] == '_'
- && q[attr1_len - 2] == '_' && q[attr1_len - 1] == '_'
- && strncmp (q + 2, p, attr2_len) == 0)
- return true;
- }
-
- return false;
-}
-
-/* Compare two attributes for their value identity. Return true if the
- attribute values are known to be equal; otherwise return false. */
-
-bool
-attribute_value_equal (const_tree attr1, const_tree attr2)
-{
- if (TREE_VALUE (attr1) == TREE_VALUE (attr2))
- return true;
-
- if (TREE_VALUE (attr1) != NULL_TREE
- && TREE_CODE (TREE_VALUE (attr1)) == TREE_LIST
- && TREE_VALUE (attr2) != NULL_TREE
- && TREE_CODE (TREE_VALUE (attr2)) == TREE_LIST)
- {
- /* Handle attribute format. */
- if (is_attribute_p ("format", get_attribute_name (attr1)))
- {
- attr1 = TREE_VALUE (attr1);
- attr2 = TREE_VALUE (attr2);
- /* Compare the archetypes (printf/scanf/strftime/...). */
- if (!cmp_attrib_identifiers (TREE_VALUE (attr1),
- TREE_VALUE (attr2)))
- return false;
- /* Archetypes are the same. Compare the rest. */
- return (simple_cst_list_equal (TREE_CHAIN (attr1),
- TREE_CHAIN (attr2)) == 1);
- }
- return (simple_cst_list_equal (TREE_VALUE (attr1),
- TREE_VALUE (attr2)) == 1);
- }
-
- if ((flag_openmp || flag_openmp_simd)
- && TREE_VALUE (attr1) && TREE_VALUE (attr2)
- && TREE_CODE (TREE_VALUE (attr1)) == OMP_CLAUSE
- && TREE_CODE (TREE_VALUE (attr2)) == OMP_CLAUSE)
- return omp_declare_simd_clauses_equal (TREE_VALUE (attr1),
- TREE_VALUE (attr2));
-
- return (simple_cst_equal (TREE_VALUE (attr1), TREE_VALUE (attr2)) == 1);
-}
-
-/* Return 0 if the attributes for two types are incompatible, 1 if they
- are compatible, and 2 if they are nearly compatible (which causes a
- warning to be generated). */
-int
-comp_type_attributes (const_tree type1, const_tree type2)
-{
- const_tree a1 = TYPE_ATTRIBUTES (type1);
- const_tree a2 = TYPE_ATTRIBUTES (type2);
- const_tree a;
-
- if (a1 == a2)
- return 1;
- for (a = a1; a != NULL_TREE; a = TREE_CHAIN (a))
- {
- const struct attribute_spec *as;
- const_tree attr;
-
- as = lookup_attribute_spec (get_attribute_name (a));
- if (!as || as->affects_type_identity == false)
- continue;
-
- attr = lookup_attribute (as->name, CONST_CAST_TREE (a2));
- if (!attr || !attribute_value_equal (a, attr))
- break;
- }
- if (!a)
- {
- for (a = a2; a != NULL_TREE; a = TREE_CHAIN (a))
- {
- const struct attribute_spec *as;
-
- as = lookup_attribute_spec (get_attribute_name (a));
- if (!as || as->affects_type_identity == false)
- continue;
-
- if (!lookup_attribute (as->name, CONST_CAST_TREE (a1)))
- break;
- /* We don't need to compare trees again, as we did this
- already in first loop. */
- }
- /* All types - affecting identity - are equal, so
- there is no need to call target hook for comparison. */
- if (!a)
- return 1;
- }
- if (lookup_attribute ("transaction_safe", CONST_CAST_TREE (a)))
- return 0;
- /* As some type combinations - like default calling-convention - might
- be compatible, we have to call the target hook to get the final result. */
- return targetm.comp_type_attributes (type1, type2);
-}
-
-/* Return a type like TTYPE except that its TYPE_ATTRIBUTE
- is ATTRIBUTE.
-
- Record such modified types already made so we don't make duplicates. */
-
-tree
-build_type_attribute_variant (tree ttype, tree attribute)
-{
- return build_type_attribute_qual_variant (ttype, attribute,
- TYPE_QUALS (ttype));
-}
-
-
/* Reset the expression *EXPR_P, a size or position.
??? We could reset all non-constant sizes or positions. But it's cheap
@@ -5217,13 +4962,15 @@ free_lang_data_in_type (tree type)
if (TYPE_VFIELD (type) && TREE_CODE (TYPE_VFIELD (type)) != FIELD_DECL)
TYPE_VFIELD (type) = NULL_TREE;
- /* Remove TYPE_METHODS list. While it would be nice to keep it
- to enable ODR warnings about different method lists, doing so
- seems to impractically increase size of LTO data streamed.
- Keep the information if TYPE_METHODS was non-NULL. This is used
- by function.c and pretty printers. */
- if (TYPE_METHODS (type))
- TYPE_METHODS (type) = error_mark_node;
+ /* Splice out FUNCTION_DECLS and TEMPLATE_DECLS from
+ TYPE_FIELDS. So LTO doesn't grow. */
+ for (tree probe, *prev= &TYPE_FIELDS (type); (probe = *prev); )
+ if (TREE_CODE (probe) == FUNCTION_DECL
+ || TREE_CODE (probe) == TEMPLATE_DECL)
+ *prev = probe;
+ else
+ prev = &DECL_CHAIN (probe);
+
if (TYPE_BINFO (type))
{
free_lang_data_in_binfo (TYPE_BINFO (type));
@@ -5418,9 +5165,10 @@ free_lang_data_in_decl (tree decl)
At this point, it is not needed anymore. */
DECL_SAVED_TREE (decl) = NULL_TREE;
- /* Clear the abstract origin if it refers to a method. Otherwise
- dwarf2out.c will ICE as we clear TYPE_METHODS and thus the
- origin will not be output correctly. */
+ /* Clear the abstract origin if it refers to a method.
+ Otherwise dwarf2out.c will ICE as we splice functions out of
+ TYPE_FIELDS and thus the origin will not be output
+ correctly. */
if (DECL_ABSTRACT_ORIGIN (decl)
&& DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))
&& RECORD_OR_UNION_TYPE_P
@@ -6029,428 +5777,6 @@ make_pass_ipa_free_lang_data (gcc::context *ctxt)
{
return new pass_ipa_free_lang_data (ctxt);
}
-
-/* The backbone of is_attribute_p(). ATTR_LEN is the string length of
- ATTR_NAME. Also used internally by remove_attribute(). */
-bool
-private_is_attribute_p (const char *attr_name, size_t attr_len, const_tree ident)
-{
- size_t ident_len = IDENTIFIER_LENGTH (ident);
-
- if (ident_len == attr_len)
- {
- if (id_equal (ident, attr_name))
- return true;
- }
- else if (ident_len == attr_len + 4)
- {
- /* There is the possibility that ATTR is 'text' and IDENT is
- '__text__'. */
- const char *p = IDENTIFIER_POINTER (ident);
- if (p[0] == '_' && p[1] == '_'
- && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
- && strncmp (attr_name, p + 2, attr_len) == 0)
- return true;
- }
-
- return false;
-}
-
-/* The backbone of lookup_attribute(). ATTR_LEN is the string length
- of ATTR_NAME, and LIST is not NULL_TREE. */
-tree
-private_lookup_attribute (const char *attr_name, size_t attr_len, tree list)
-{
- while (list)
- {
- size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
-
- if (ident_len == attr_len)
- {
- if (!strcmp (attr_name,
- IDENTIFIER_POINTER (get_attribute_name (list))))
- break;
- }
- /* TODO: If we made sure that attributes were stored in the
- canonical form without '__...__' (ie, as in 'text' as opposed
- to '__text__') then we could avoid the following case. */
- else if (ident_len == attr_len + 4)
- {
- const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
- if (p[0] == '_' && p[1] == '_'
- && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
- && strncmp (attr_name, p + 2, attr_len) == 0)
- break;
- }
- list = TREE_CHAIN (list);
- }
-
- return list;
-}
-
-/* Given an attribute name ATTR_NAME and a list of attributes LIST,
- return a pointer to the attribute's list first element if the attribute
- starts with ATTR_NAME. ATTR_NAME must be in the form 'text' (not
- '__text__'). */
-
-tree
-private_lookup_attribute_by_prefix (const char *attr_name, size_t attr_len,
- tree list)
-{
- while (list)
- {
- size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
-
- if (attr_len > ident_len)
- {
- list = TREE_CHAIN (list);
- continue;
- }
-
- const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
-
- if (strncmp (attr_name, p, attr_len) == 0)
- break;
-
- /* TODO: If we made sure that attributes were stored in the
- canonical form without '__...__' (ie, as in 'text' as opposed
- to '__text__') then we could avoid the following case. */
- if (p[0] == '_' && p[1] == '_' &&
- strncmp (attr_name, p + 2, attr_len) == 0)
- break;
-
- list = TREE_CHAIN (list);
- }
-
- return list;
-}
-
-
-/* A variant of lookup_attribute() that can be used with an identifier
- as the first argument, and where the identifier can be either
- 'text' or '__text__'.
-
- Given an attribute ATTR_IDENTIFIER, and a list of attributes LIST,
- return a pointer to the attribute's list element if the attribute
- is part of the list, or NULL_TREE if not found. If the attribute
- appears more than once, this only returns the first occurrence; the
- TREE_CHAIN of the return value should be passed back in if further
- occurrences are wanted. ATTR_IDENTIFIER must be an identifier but
- can be in the form 'text' or '__text__'. */
-static tree
-lookup_ident_attribute (tree attr_identifier, tree list)
-{
- gcc_checking_assert (TREE_CODE (attr_identifier) == IDENTIFIER_NODE);
-
- while (list)
- {
- gcc_checking_assert (TREE_CODE (get_attribute_name (list))
- == IDENTIFIER_NODE);
-
- if (cmp_attrib_identifiers (attr_identifier,
- get_attribute_name (list)))
- /* Found it. */
- break;
- list = TREE_CHAIN (list);
- }
-
- return list;
-}
-
-/* Remove any instances of attribute ATTR_NAME in LIST and return the
- modified list. */
-
-tree
-remove_attribute (const char *attr_name, tree list)
-{
- tree *p;
- size_t attr_len = strlen (attr_name);
-
- gcc_checking_assert (attr_name[0] != '_');
-
- for (p = &list; *p; )
- {
- tree l = *p;
- /* TODO: If we were storing attributes in normalized form, here
- we could use a simple strcmp(). */
- if (private_is_attribute_p (attr_name, attr_len, get_attribute_name (l)))
- *p = TREE_CHAIN (l);
- else
- p = &TREE_CHAIN (l);
- }
-
- return list;
-}
-
-/* Return an attribute list that is the union of a1 and a2. */
-
-tree
-merge_attributes (tree a1, tree a2)
-{
- tree attributes;
-
- /* Either one unset? Take the set one. */
-
- if ((attributes = a1) == 0)
- attributes = a2;
-
- /* One that completely contains the other? Take it. */
-
- else if (a2 != 0 && ! attribute_list_contained (a1, a2))
- {
- if (attribute_list_contained (a2, a1))
- attributes = a2;
- else
- {
- /* Pick the longest list, and hang on the other list. */
-
- if (list_length (a1) < list_length (a2))
- attributes = a2, a2 = a1;
-
- for (; a2 != 0; a2 = TREE_CHAIN (a2))
- {
- tree a;
- for (a = lookup_ident_attribute (get_attribute_name (a2),
- attributes);
- a != NULL_TREE && !attribute_value_equal (a, a2);
- a = lookup_ident_attribute (get_attribute_name (a2),
- TREE_CHAIN (a)))
- ;
- if (a == NULL_TREE)
- {
- a1 = copy_node (a2);
- TREE_CHAIN (a1) = attributes;
- attributes = a1;
- }
- }
- }
- }
- return attributes;
-}
-
-/* Given types T1 and T2, merge their attributes and return
- the result. */
-
-tree
-merge_type_attributes (tree t1, tree t2)
-{
- return merge_attributes (TYPE_ATTRIBUTES (t1),
- TYPE_ATTRIBUTES (t2));
-}
-
-/* Given decls OLDDECL and NEWDECL, merge their attributes and return
- the result. */
-
-tree
-merge_decl_attributes (tree olddecl, tree newdecl)
-{
- return merge_attributes (DECL_ATTRIBUTES (olddecl),
- DECL_ATTRIBUTES (newdecl));
-}
-
-#if TARGET_DLLIMPORT_DECL_ATTRIBUTES
-
-/* Specialization of merge_decl_attributes for various Windows targets.
-
- This handles the following situation:
-
- __declspec (dllimport) int foo;
- int foo;
-
- The second instance of `foo' nullifies the dllimport. */
-
-tree
-merge_dllimport_decl_attributes (tree old, tree new_tree)
-{
- tree a;
- int delete_dllimport_p = 1;
-
- /* What we need to do here is remove from `old' dllimport if it doesn't
- appear in `new'. dllimport behaves like extern: if a declaration is
- marked dllimport and a definition appears later, then the object
- is not dllimport'd. We also remove a `new' dllimport if the old list
- contains dllexport: dllexport always overrides dllimport, regardless
- of the order of declaration. */
- if (!VAR_OR_FUNCTION_DECL_P (new_tree))
- delete_dllimport_p = 0;
- else if (DECL_DLLIMPORT_P (new_tree)
- && lookup_attribute ("dllexport", DECL_ATTRIBUTES (old)))
- {
- DECL_DLLIMPORT_P (new_tree) = 0;
- warning (OPT_Wattributes, "%q+D already declared with dllexport attribute: "
- "dllimport ignored", new_tree);
- }
- else if (DECL_DLLIMPORT_P (old) && !DECL_DLLIMPORT_P (new_tree))
- {
- /* Warn about overriding a symbol that has already been used, e.g.:
- extern int __attribute__ ((dllimport)) foo;
- int* bar () {return &foo;}
- int foo;
- */
- if (TREE_USED (old))
- {
- warning (0, "%q+D redeclared without dllimport attribute "
- "after being referenced with dll linkage", new_tree);
- /* If we have used a variable's address with dllimport linkage,
- keep the old DECL_DLLIMPORT_P flag: the ADDR_EXPR using the
- decl may already have had TREE_CONSTANT computed.
- We still remove the attribute so that assembler code refers
- to '&foo rather than '_imp__foo'. */
- if (VAR_P (old) && TREE_ADDRESSABLE (old))
- DECL_DLLIMPORT_P (new_tree) = 1;
- }
-
- /* Let an inline definition silently override the external reference,
- but otherwise warn about attribute inconsistency. */
- else if (VAR_P (new_tree) || !DECL_DECLARED_INLINE_P (new_tree))
- warning (OPT_Wattributes, "%q+D redeclared without dllimport attribute: "
- "previous dllimport ignored", new_tree);
- }
- else
- delete_dllimport_p = 0;
-
- a = merge_attributes (DECL_ATTRIBUTES (old), DECL_ATTRIBUTES (new_tree));
-
- if (delete_dllimport_p)
- a = remove_attribute ("dllimport", a);
-
- return a;
-}
-
-/* Handle a "dllimport" or "dllexport" attribute; arguments as in
- struct attribute_spec.handler. */
-
-tree
-handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
- bool *no_add_attrs)
-{
- tree node = *pnode;
- bool is_dllimport;
-
- /* These attributes may apply to structure and union types being created,
- but otherwise should pass to the declaration involved. */
- if (!DECL_P (node))
- {
- if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
- | (int) ATTR_FLAG_ARRAY_NEXT))
- {
- *no_add_attrs = true;
- return tree_cons (name, args, NULL_TREE);
- }
- if (TREE_CODE (node) == RECORD_TYPE
- || TREE_CODE (node) == UNION_TYPE)
- {
- node = TYPE_NAME (node);
- if (!node)
- return NULL_TREE;
- }
- else
- {
- warning (OPT_Wattributes, "%qE attribute ignored",
- name);
- *no_add_attrs = true;
- return NULL_TREE;
- }
- }
-
- if (!VAR_OR_FUNCTION_DECL_P (node) && TREE_CODE (node) != TYPE_DECL)
- {
- *no_add_attrs = true;
- warning (OPT_Wattributes, "%qE attribute ignored",
- name);
- return NULL_TREE;
- }
-
- if (TREE_CODE (node) == TYPE_DECL
- && TREE_CODE (TREE_TYPE (node)) != RECORD_TYPE
- && TREE_CODE (TREE_TYPE (node)) != UNION_TYPE)
- {
- *no_add_attrs = true;
- warning (OPT_Wattributes, "%qE attribute ignored",
- name);
- return NULL_TREE;
- }
-
- is_dllimport = is_attribute_p ("dllimport", name);
-
- /* Report error on dllimport ambiguities seen now before they cause
- any damage. */
- if (is_dllimport)
- {
- /* Honor any target-specific overrides. */
- if (!targetm.valid_dllimport_attribute_p (node))
- *no_add_attrs = true;
-
- else if (TREE_CODE (node) == FUNCTION_DECL
- && DECL_DECLARED_INLINE_P (node))
- {
- warning (OPT_Wattributes, "inline function %q+D declared as "
- " dllimport: attribute ignored", node);
- *no_add_attrs = true;
- }
- /* Like MS, treat definition of dllimported variables and
- non-inlined functions on declaration as syntax errors. */
- else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node))
- {
- error ("function %q+D definition is marked dllimport", node);
- *no_add_attrs = true;
- }
-
- else if (VAR_P (node))
- {
- if (DECL_INITIAL (node))
- {
- error ("variable %q+D definition is marked dllimport",
- node);
- *no_add_attrs = true;
- }
-
- /* `extern' needn't be specified with dllimport.
- Specify `extern' now and hope for the best. Sigh. */
- DECL_EXTERNAL (node) = 1;
- /* Also, implicitly give dllimport'd variables declared within
- a function global scope, unless declared static. */
- if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
- TREE_PUBLIC (node) = 1;
- }
-
- if (*no_add_attrs == false)
- DECL_DLLIMPORT_P (node) = 1;
- }
- else if (TREE_CODE (node) == FUNCTION_DECL
- && DECL_DECLARED_INLINE_P (node)
- && flag_keep_inline_dllexport)
- /* An exported function, even if inline, must be emitted. */
- DECL_EXTERNAL (node) = 0;
-
- /* Report error if symbol is not accessible at global scope. */
- if (!TREE_PUBLIC (node) && VAR_OR_FUNCTION_DECL_P (node))
- {
- error ("external linkage required for symbol %q+D because of "
- "%qE attribute", node, name);
- *no_add_attrs = true;
- }
-
- /* A dllexport'd entity must have default visibility so that other
- program units (shared libraries or the main executable) can see
- it. A dllimport'd entity must have default visibility so that
- the linker knows that undefined references within this program
- unit can be resolved by the dynamic linker. */
- if (!*no_add_attrs)
- {
- if (DECL_VISIBILITY_SPECIFIED (node)
- && DECL_VISIBILITY (node) != VISIBILITY_DEFAULT)
- error ("%qE implies default visibility, but %qD has already "
- "been declared with a different visibility",
- name, node);
- DECL_VISIBILITY (node) = VISIBILITY_DEFAULT;
- DECL_VISIBILITY_SPECIFIED (node) = 1;
- }
-
- return NULL_TREE;
-}
-
-#endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */
/* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
of the various TYPE_QUAL values. */
@@ -6663,7 +5989,7 @@ build_aligned_type (tree type, unsigned int align)
tree
build_distinct_type_copy (tree type MEM_STAT_DECL)
{
- tree t = copy_node_stat (type PASS_MEM_STAT);
+ tree t = copy_node (type PASS_MEM_STAT);
TYPE_POINTER_TO (t) = 0;
TYPE_REFERENCE_TO (t) = 0;
@@ -6679,12 +6005,6 @@ build_distinct_type_copy (tree type MEM_STAT_DECL)
TYPE_MAIN_VARIANT (t) = t;
TYPE_NEXT_VARIANT (t) = 0;
- /* We do not record methods in type copies nor variants
- so we do not need to keep them up to date when new method
- is inserted. */
- if (RECORD_OR_UNION_TYPE_P (t))
- TYPE_METHODS (t) = NULL_TREE;
-
/* Note that it is now possible for TYPE_MIN_VALUE to be a value
whose TREE_TYPE is not t. This can also happen in the Ada
frontend when using subtypes. */
@@ -7216,68 +6536,6 @@ print_type_hash_statistics (void)
type_hash_table->collisions ());
}
-/* Given two lists of attributes, return true if list l2 is
- equivalent to l1. */
-
-int
-attribute_list_equal (const_tree l1, const_tree l2)
-{
- if (l1 == l2)
- return 1;
-
- return attribute_list_contained (l1, l2)
- && attribute_list_contained (l2, l1);
-}
-
-/* Given two lists of attributes, return true if list L2 is
- completely contained within L1. */
-/* ??? This would be faster if attribute names were stored in a canonicalized
- form. Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
- must be used to show these elements are equivalent (which they are). */
-/* ??? It's not clear that attributes with arguments will always be handled
- correctly. */
-
-int
-attribute_list_contained (const_tree l1, const_tree l2)
-{
- const_tree t1, t2;
-
- /* First check the obvious, maybe the lists are identical. */
- if (l1 == l2)
- return 1;
-
- /* Maybe the lists are similar. */
- for (t1 = l1, t2 = l2;
- t1 != 0 && t2 != 0
- && get_attribute_name (t1) == get_attribute_name (t2)
- && TREE_VALUE (t1) == TREE_VALUE (t2);
- t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
- ;
-
- /* Maybe the lists are equal. */
- if (t1 == 0 && t2 == 0)
- return 1;
-
- for (; t2 != 0; t2 = TREE_CHAIN (t2))
- {
- const_tree attr;
- /* This CONST_CAST is okay because lookup_attribute does not
- modify its argument and the return value is assigned to a
- const_tree. */
- for (attr = lookup_ident_attribute (get_attribute_name (t2),
- CONST_CAST_TREE (l1));
- attr != NULL_TREE && !attribute_value_equal (t2, attr);
- attr = lookup_ident_attribute (get_attribute_name (t2),
- TREE_CHAIN (attr)))
- ;
-
- if (attr == NULL_TREE)
- return 0;
- }
-
- return 1;
-}
-
/* Given two lists of types
(chains of TREE_LIST nodes with types in the TREE_VALUE slots)
return 1 if the lists contain the same types in the same order.
@@ -11233,7 +10491,7 @@ build_omp_clause (location_t loc, enum omp_clause_code code)
object is initialized to zeros. */
tree
-build_vl_exp_stat (enum tree_code code, int len MEM_STAT_DECL)
+build_vl_exp (enum tree_code code, int len MEM_STAT_DECL)
{
tree t;
int length = (len - 1) * sizeof (tree) + sizeof (struct tree_exp);
@@ -13410,8 +12668,6 @@ verify_type_variant (const_tree t, tree tv)
- aggregates may have new TYPE_FIELDS list that list variants of
the main variant TYPE_FIELDS.
- vector types may differ by TYPE_VECTOR_OPAQUE
- - TYPE_METHODS is always NULL for variant types and maintained for
- main variant only.
*/
/* Convenience macro for matching individual fields. */
@@ -13512,12 +12768,6 @@ verify_type_variant (const_tree t, tree tv)
}
if (TREE_CODE (t) == METHOD_TYPE)
verify_variant_match (TYPE_METHOD_BASETYPE);
- if (RECORD_OR_UNION_TYPE_P (t) && TYPE_METHODS (t))
- {
- error ("type variant has TYPE_METHODS");
- debug_tree (tv);
- return false;
- }
if (TREE_CODE (t) == OFFSET_TYPE)
verify_variant_match (TYPE_OFFSET_BASETYPE);
if (TREE_CODE (t) == ARRAY_TYPE)
@@ -14020,14 +13270,6 @@ verify_type (const_tree t)
/* Check various uses of TYPE_MAXVAL. */
if (RECORD_OR_UNION_TYPE_P (t))
{
- if (TYPE_METHODS (t) && TREE_CODE (TYPE_METHODS (t)) != FUNCTION_DECL
- && TREE_CODE (TYPE_METHODS (t)) != TEMPLATE_DECL
- && TYPE_METHODS (t) != error_mark_node)
- {
- error ("TYPE_METHODS is not FUNCTION_DECL, TEMPLATE_DECL nor error_mark_node");
- debug_tree (TYPE_METHODS (t));
- error_found = true;
- }
}
else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
{
@@ -14158,6 +13400,8 @@ verify_type (const_tree t)
;
else if (TREE_CODE (fld) == USING_DECL)
;
+ else if (TREE_CODE (fld) == FUNCTION_DECL)
+ ;
else
{
error ("Wrong tree in TYPE_FIELDS list");
diff --git a/gcc/tree.def b/gcc/tree.def
index 0ec805903a9..9f80c4d41f5 100644
--- a/gcc/tree.def
+++ b/gcc/tree.def
@@ -112,10 +112,7 @@ DEFTREECODE (BLOCK, "block", tcc_exceptional, 0)
itself or have named members doesn't really have a "scope" per se.
The TYPE_STUB_DECL field is used as a forward-references to names for
ENUMERAL_TYPE, RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE nodes;
- see below.
- The TYPE_METHODS points to list of all methods associated with the type.
- It is non-NULL only at main variant of the type and after free_lang_data
- it may be set to error_mark_node instead of actual list to save memory. */
+ see below. */
/* The ordering of the following codes is optimized for the checking
macros in tree.h. Changing the order will degrade the speed of the
@@ -213,8 +210,9 @@ DEFTREECODE (ARRAY_TYPE, "array_type", tcc_type, 0)
/* Struct in C, or record in Pascal. */
/* Special fields:
TYPE_FIELDS chain of FIELD_DECLs for the fields of the struct,
- and VAR_DECLs, TYPE_DECLs and CONST_DECLs for record-scope variables,
- types and enumerators.
+ VAR_DECLs, TYPE_DECLs and CONST_DECLs for record-scope variables,
+ types and enumerators and FUNCTION_DECLs for methods associated
+ with the type.
A few may need to be added for Pascal. */
/* See the comment above, before ENUMERAL_TYPE, for how
forward references to struct tags are handled in C. */
diff --git a/gcc/tree.h b/gcc/tree.h
index 6ab42244df5..46debc12a84 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -859,9 +859,6 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int,
&& !TYPE_OVERFLOW_WRAPS (TYPE) \
&& (flag_sanitize & SANITIZE_SI_OVERFLOW))
-/* True if pointer types have undefined overflow. */
-#define POINTER_TYPE_OVERFLOW_UNDEFINED (!flag_wrapv)
-
/* Nonzero in a VAR_DECL or STRING_CST means assembler code has been written.
Nonzero in a FUNCTION_DECL means that the function has been compiled.
This is interesting in an inline function, since it might not need
@@ -2122,8 +2119,6 @@ extern machine_mode element_mode (const_tree t);
#define TYPE_MAX_VALUE(NODE) \
(NUMERICAL_TYPE_CHECK (NODE)->type_non_common.maxval)
-#define TYPE_METHODS(NODE) \
- (RECORD_OR_UNION_CHECK (NODE)->type_non_common.maxval)
#define TYPE_METHOD_BASETYPE(NODE) \
(FUNC_OR_METHOD_CHECK (NODE)->type_non_common.maxval)
#define TYPE_OFFSET_BASETYPE(NODE) \
@@ -3891,8 +3886,7 @@ extern int allocate_decl_uid (void);
The TREE_CODE is the only argument. Contents are initialized
to zero except for a few of the common fields. */
-extern tree make_node_stat (enum tree_code MEM_STAT_DECL);
-#define make_node(t) make_node_stat (t MEM_STAT_INFO)
+extern tree make_node (enum tree_code CXX_MEM_STAT_INFO);
/* Free tree node. */
@@ -3900,8 +3894,7 @@ extern void free_node (tree);
/* Make a copy of a node, with all the same contents. */
-extern tree copy_node_stat (tree MEM_STAT_DECL);
-#define copy_node(t) copy_node_stat (t MEM_STAT_INFO)
+extern tree copy_node (tree CXX_MEM_STAT_INFO);
/* Make a copy of a chain of TREE_LIST nodes. */
@@ -3912,109 +3905,86 @@ extern tree copy_list (tree);
extern tree build_case_label (tree, tree, tree);
/* Make a BINFO. */
-extern tree make_tree_binfo_stat (unsigned MEM_STAT_DECL);
-#define make_tree_binfo(t) make_tree_binfo_stat (t MEM_STAT_INFO)
+extern tree make_tree_binfo (unsigned CXX_MEM_STAT_INFO);
/* Make an INTEGER_CST. */
-extern tree make_int_cst_stat (int, int MEM_STAT_DECL);
-#define make_int_cst(LEN, EXT_LEN) \
- make_int_cst_stat (LEN, EXT_LEN MEM_STAT_INFO)
+extern tree make_int_cst (int, int CXX_MEM_STAT_INFO);
/* Make a TREE_VEC. */
-extern tree make_tree_vec_stat (int MEM_STAT_DECL);
-#define make_tree_vec(t) make_tree_vec_stat (t MEM_STAT_INFO)
+extern tree make_tree_vec (int CXX_MEM_STAT_INFO);
/* Grow a TREE_VEC. */
-extern tree grow_tree_vec_stat (tree v, int MEM_STAT_DECL);
-#define grow_tree_vec(v, t) grow_tree_vec_stat (v, t MEM_STAT_INFO)
+extern tree grow_tree_vec (tree v, int CXX_MEM_STAT_INFO);
/* Construct various types of nodes. */
extern tree build_nt (enum tree_code, ...);
extern tree build_nt_call_vec (tree, vec<tree, va_gc> *);
-extern tree build0_stat (enum tree_code, tree MEM_STAT_DECL);
-#define build0(c,t) build0_stat (c,t MEM_STAT_INFO)
-extern tree build1_stat (enum tree_code, tree, tree MEM_STAT_DECL);
-#define build1(c,t1,t2) build1_stat (c,t1,t2 MEM_STAT_INFO)
-extern tree build2_stat (enum tree_code, tree, tree, tree MEM_STAT_DECL);
-#define build2(c,t1,t2,t3) build2_stat (c,t1,t2,t3 MEM_STAT_INFO)
-extern tree build3_stat (enum tree_code, tree, tree, tree, tree MEM_STAT_DECL);
-#define build3(c,t1,t2,t3,t4) build3_stat (c,t1,t2,t3,t4 MEM_STAT_INFO)
-extern tree build4_stat (enum tree_code, tree, tree, tree, tree,
- tree MEM_STAT_DECL);
-#define build4(c,t1,t2,t3,t4,t5) build4_stat (c,t1,t2,t3,t4,t5 MEM_STAT_INFO)
-extern tree build5_stat (enum tree_code, tree, tree, tree, tree, tree,
- tree MEM_STAT_DECL);
-#define build5(c,t1,t2,t3,t4,t5,t6) build5_stat (c,t1,t2,t3,t4,t5,t6 MEM_STAT_INFO)
+extern tree build0 (enum tree_code, tree CXX_MEM_STAT_INFO);
+extern tree build1 (enum tree_code, tree, tree CXX_MEM_STAT_INFO);
+extern tree build2 (enum tree_code, tree, tree, tree CXX_MEM_STAT_INFO);
+extern tree build3 (enum tree_code, tree, tree, tree, tree CXX_MEM_STAT_INFO);
+extern tree build4 (enum tree_code, tree, tree, tree, tree,
+ tree CXX_MEM_STAT_INFO);
+extern tree build5 (enum tree_code, tree, tree, tree, tree, tree,
+ tree CXX_MEM_STAT_INFO);
/* _loc versions of build[1-5]. */
static inline tree
-build1_stat_loc (location_t loc, enum tree_code code, tree type,
- tree arg1 MEM_STAT_DECL)
+build1_loc (location_t loc, enum tree_code code, tree type,
+ tree arg1 CXX_MEM_STAT_INFO)
{
- tree t = build1_stat (code, type, arg1 PASS_MEM_STAT);
+ tree t = build1 (code, type, arg1 PASS_MEM_STAT);
if (CAN_HAVE_LOCATION_P (t))
SET_EXPR_LOCATION (t, loc);
return t;
}
-#define build1_loc(l,c,t1,t2) build1_stat_loc (l,c,t1,t2 MEM_STAT_INFO)
static inline tree
-build2_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0,
- tree arg1 MEM_STAT_DECL)
+build2_loc (location_t loc, enum tree_code code, tree type, tree arg0,
+ tree arg1 CXX_MEM_STAT_INFO)
{
- tree t = build2_stat (code, type, arg0, arg1 PASS_MEM_STAT);
+ tree t = build2 (code, type, arg0, arg1 PASS_MEM_STAT);
if (CAN_HAVE_LOCATION_P (t))
SET_EXPR_LOCATION (t, loc);
return t;
}
-#define build2_loc(l,c,t1,t2,t3) build2_stat_loc (l,c,t1,t2,t3 MEM_STAT_INFO)
static inline tree
-build3_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0,
- tree arg1, tree arg2 MEM_STAT_DECL)
+build3_loc (location_t loc, enum tree_code code, tree type, tree arg0,
+ tree arg1, tree arg2 CXX_MEM_STAT_INFO)
{
- tree t = build3_stat (code, type, arg0, arg1, arg2 PASS_MEM_STAT);
+ tree t = build3 (code, type, arg0, arg1, arg2 PASS_MEM_STAT);
if (CAN_HAVE_LOCATION_P (t))
SET_EXPR_LOCATION (t, loc);
return t;
}
-#define build3_loc(l,c,t1,t2,t3,t4) \
- build3_stat_loc (l,c,t1,t2,t3,t4 MEM_STAT_INFO)
static inline tree
-build4_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0,
- tree arg1, tree arg2, tree arg3 MEM_STAT_DECL)
+build4_loc (location_t loc, enum tree_code code, tree type, tree arg0,
+ tree arg1, tree arg2, tree arg3 CXX_MEM_STAT_INFO)
{
- tree t = build4_stat (code, type, arg0, arg1, arg2, arg3 PASS_MEM_STAT);
+ tree t = build4 (code, type, arg0, arg1, arg2, arg3 PASS_MEM_STAT);
if (CAN_HAVE_LOCATION_P (t))
SET_EXPR_LOCATION (t, loc);
return t;
}
-#define build4_loc(l,c,t1,t2,t3,t4,t5) \
- build4_stat_loc (l,c,t1,t2,t3,t4,t5 MEM_STAT_INFO)
static inline tree
-build5_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0,
- tree arg1, tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
+build5_loc (location_t loc, enum tree_code code, tree type, tree arg0,
+ tree arg1, tree arg2, tree arg3, tree arg4 CXX_MEM_STAT_INFO)
{
- tree t = build5_stat (code, type, arg0, arg1, arg2, arg3,
+ tree t = build5 (code, type, arg0, arg1, arg2, arg3,
arg4 PASS_MEM_STAT);
if (CAN_HAVE_LOCATION_P (t))
SET_EXPR_LOCATION (t, loc);
return t;
}
-#define build5_loc(l,c,t1,t2,t3,t4,t5,t6) \
- build5_stat_loc (l,c,t1,t2,t3,t4,t5,t6 MEM_STAT_INFO)
-
-extern tree build_var_debug_value_stat (tree, tree MEM_STAT_DECL);
-#define build_var_debug_value(t1,t2) \
- build_var_debug_value_stat (t1,t2 MEM_STAT_INFO)
/* Constructs double_int from tree CST. */
@@ -4029,10 +3999,8 @@ extern tree force_fit_type (tree, const wide_int_ref &, int, bool);
extern tree build_int_cst (tree, HOST_WIDE_INT);
extern tree build_int_cstu (tree type, unsigned HOST_WIDE_INT cst);
extern tree build_int_cst_type (tree, HOST_WIDE_INT);
-extern tree make_vector_stat (unsigned MEM_STAT_DECL);
-#define make_vector(n) make_vector_stat (n MEM_STAT_INFO)
-extern tree build_vector_stat (tree, tree * MEM_STAT_DECL);
-#define build_vector(t,v) build_vector_stat (t, v MEM_STAT_INFO)
+extern tree make_vector (unsigned CXX_MEM_STAT_INFO);
+extern tree build_vector (tree, tree * CXX_MEM_STAT_INFO);
extern tree build_vector_from_ctor (tree, vec<constructor_elt, va_gc> *);
extern tree build_vector_from_val (tree, tree);
extern void recompute_constructor_flags (tree);
@@ -4050,21 +4018,17 @@ extern tree build_minus_one_cst (tree);
extern tree build_all_ones_cst (tree);
extern tree build_zero_cst (tree);
extern tree build_string (int, const char *);
-extern tree build_tree_list_stat (tree, tree MEM_STAT_DECL);
-#define build_tree_list(t, q) build_tree_list_stat (t, q MEM_STAT_INFO)
-extern tree build_tree_list_vec_stat (const vec<tree, va_gc> *MEM_STAT_DECL);
-#define build_tree_list_vec(v) build_tree_list_vec_stat (v MEM_STAT_INFO)
-extern tree build_decl_stat (location_t, enum tree_code,
- tree, tree MEM_STAT_DECL);
+extern tree build_tree_list (tree, tree CXX_MEM_STAT_INFO);
+extern tree build_tree_list_vec (const vec<tree, va_gc> * CXX_MEM_STAT_INFO);
+extern tree build_decl (location_t, enum tree_code,
+ tree, tree CXX_MEM_STAT_INFO);
extern tree build_fn_decl (const char *, tree);
-#define build_decl(l,c,t,q) build_decl_stat (l, c, t, q MEM_STAT_INFO)
extern tree build_translation_unit_decl (tree);
extern tree build_block (tree, tree, tree, tree);
extern tree build_empty_stmt (location_t);
extern tree build_omp_clause (location_t, enum omp_clause_code);
-extern tree build_vl_exp_stat (enum tree_code, int MEM_STAT_DECL);
-#define build_vl_exp(c, n) build_vl_exp_stat (c, n MEM_STAT_INFO)
+extern tree build_vl_exp (enum tree_code, int CXX_MEM_STAT_INFO);
extern tree build_call_nary (tree, tree, int, ...);
extern tree build_call_valist (tree, tree, int, va_list);
@@ -4124,8 +4088,6 @@ extern tree purpose_member (const_tree, tree);
extern bool vec_member (const_tree, vec<tree, va_gc> *);
extern tree chain_index (int, tree);
-extern int attribute_list_equal (const_tree, const_tree);
-extern int attribute_list_contained (const_tree, const_tree);
extern int tree_int_cst_equal (const_tree, const_tree);
extern bool tree_fits_shwi_p (const_tree)
@@ -4163,111 +4125,6 @@ extern bool valid_constant_size_p (const_tree);
extern tree make_tree (tree, rtx);
-/* Return a type like TTYPE except that its TYPE_ATTRIBUTES
- is ATTRIBUTE.
-
- Such modified types already made are recorded so that duplicates
- are not made. */
-
-extern tree build_type_attribute_variant (tree, tree);
-extern tree build_decl_attribute_variant (tree, tree);
-extern tree build_type_attribute_qual_variant (tree, tree, int);
-
-extern bool attribute_value_equal (const_tree, const_tree);
-
-/* Return 0 if the attributes for two types are incompatible, 1 if they
- are compatible, and 2 if they are nearly compatible (which causes a
- warning to be generated). */
-extern int comp_type_attributes (const_tree, const_tree);
-
-/* Default versions of target-overridable functions. */
-extern tree merge_decl_attributes (tree, tree);
-extern tree merge_type_attributes (tree, tree);
-
-/* This function is a private implementation detail of lookup_attribute()
- and you should never call it directly. */
-extern tree private_lookup_attribute (const char *, size_t, tree);
-
-/* This function is a private implementation detail
- of lookup_attribute_by_prefix() and you should never call it directly. */
-extern tree private_lookup_attribute_by_prefix (const char *, size_t, tree);
-
-/* Given an attribute name ATTR_NAME and a list of attributes LIST,
- return a pointer to the attribute's list element if the attribute
- is part of the list, or NULL_TREE if not found. If the attribute
- appears more than once, this only returns the first occurrence; the
- TREE_CHAIN of the return value should be passed back in if further
- occurrences are wanted. ATTR_NAME must be in the form 'text' (not
- '__text__'). */
-
-static inline tree
-lookup_attribute (const char *attr_name, tree list)
-{
- gcc_checking_assert (attr_name[0] != '_');
- /* In most cases, list is NULL_TREE. */
- if (list == NULL_TREE)
- return NULL_TREE;
- else
- /* Do the strlen() before calling the out-of-line implementation.
- In most cases attr_name is a string constant, and the compiler
- will optimize the strlen() away. */
- return private_lookup_attribute (attr_name, strlen (attr_name), list);
-}
-
-/* Given an attribute name ATTR_NAME and a list of attributes LIST,
- return a pointer to the attribute's list first element if the attribute
- starts with ATTR_NAME. ATTR_NAME must be in the form 'text' (not
- '__text__'). */
-
-static inline tree
-lookup_attribute_by_prefix (const char *attr_name, tree list)
-{
- gcc_checking_assert (attr_name[0] != '_');
- /* In most cases, list is NULL_TREE. */
- if (list == NULL_TREE)
- return NULL_TREE;
- else
- return private_lookup_attribute_by_prefix (attr_name, strlen (attr_name),
- list);
-}
-
-
-/* This function is a private implementation detail of
- is_attribute_p() and you should never call it directly. */
-extern bool private_is_attribute_p (const char *, size_t, const_tree);
-
-/* Given an identifier node IDENT and a string ATTR_NAME, return true
- if the identifier node is a valid attribute name for the string.
- ATTR_NAME must be in the form 'text' (not '__text__'). IDENT could
- be the identifier for 'text' or for '__text__'. */
-
-static inline bool
-is_attribute_p (const char *attr_name, const_tree ident)
-{
- gcc_checking_assert (attr_name[0] != '_');
- /* Do the strlen() before calling the out-of-line implementation.
- In most cases attr_name is a string constant, and the compiler
- will optimize the strlen() away. */
- return private_is_attribute_p (attr_name, strlen (attr_name), ident);
-}
-
-/* Remove any instances of attribute ATTR_NAME in LIST and return the
- modified list. ATTR_NAME must be in the form 'text' (not
- '__text__'). */
-
-extern tree remove_attribute (const char *, tree);
-
-/* Given two attributes lists, return a list of their union. */
-
-extern tree merge_attributes (tree, tree);
-
-/* Given two Windows decl attributes lists, possibly including
- dllimport, return a list of their union . */
-extern tree merge_dllimport_decl_attributes (tree, tree);
-
-/* Handle a "dllimport" or "dllexport" attribute. */
-extern tree handle_dll_attribute (tree *, tree, tree, int, bool *);
-
/* Returns true iff CAND and BASE have equivalent language-specific
qualifiers. */
@@ -4364,8 +4221,7 @@ extern tree chainon (tree, tree);
/* Make a new TREE_LIST node from specified PURPOSE, VALUE and CHAIN. */
-extern tree tree_cons_stat (tree, tree, tree MEM_STAT_DECL);
-#define tree_cons(t,q,w) tree_cons_stat (t,q,w MEM_STAT_INFO)
+extern tree tree_cons (tree, tree, tree CXX_MEM_STAT_INFO);
/* Return the last tree node in a chain. */
diff --git a/gcc/tsan.c b/gcc/tsan.c
index 2f98b936c03..51b5821deb3 100644
--- a/gcc/tsan.c
+++ b/gcc/tsan.c
@@ -40,6 +40,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa-loop-ivopts.h"
#include "tree-eh.h"
#include "tsan.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
#include "builtins.h"
#include "target.h"
diff --git a/gcc/ubsan.c b/gcc/ubsan.c
index 8ea352a69d4..49e38fa6c09 100644
--- a/gcc/ubsan.c
+++ b/gcc/ubsan.c
@@ -39,12 +39,16 @@ along with GCC; see the file COPYING3. If not see
#include "cfgloop.h"
#include "ubsan.h"
#include "expr.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
#include "gimplify-me.h"
#include "dfp.h"
#include "builtins.h"
#include "tree-object-size.h"
#include "tree-cfg.h"
+#include "gimple-fold.h"
+#include "varasm.h"
/* Map from a tree to a VAR_DECL tree. */
@@ -400,6 +404,7 @@ ubsan_type_descriptor (tree type, enum ubsan_print_style pstyle)
/* We weren't able to determine the type name. */
tname = "<unknown>";
+ tree eltype = type;
if (pstyle == UBSAN_PRINT_POINTER)
{
pp_printf (&pretty_name, "'%s%s%s%s%s%s%s",
@@ -450,12 +455,12 @@ ubsan_type_descriptor (tree type, enum ubsan_print_style pstyle)
pp_quote (&pretty_name);
/* Save the tree with stripped types. */
- type = t;
+ eltype = t;
}
else
pp_printf (&pretty_name, "'%s'", tname);
- switch (TREE_CODE (type))
+ switch (TREE_CODE (eltype))
{
case BOOLEAN_TYPE:
case ENUMERAL_TYPE:
@@ -465,9 +470,9 @@ ubsan_type_descriptor (tree type, enum ubsan_print_style pstyle)
case REAL_TYPE:
/* FIXME: libubsan right now only supports float, double and
long double type formats. */
- if (TYPE_MODE (type) == TYPE_MODE (float_type_node)
- || TYPE_MODE (type) == TYPE_MODE (double_type_node)
- || TYPE_MODE (type) == TYPE_MODE (long_double_type_node))
+ if (TYPE_MODE (eltype) == TYPE_MODE (float_type_node)
+ || TYPE_MODE (eltype) == TYPE_MODE (double_type_node)
+ || TYPE_MODE (eltype) == TYPE_MODE (long_double_type_node))
tkind = 0x0001;
else
tkind = 0xffff;
@@ -476,7 +481,7 @@ ubsan_type_descriptor (tree type, enum ubsan_print_style pstyle)
tkind = 0xffff;
break;
}
- tinfo = get_ubsan_type_info_for_type (type);
+ tinfo = get_ubsan_type_info_for_type (eltype);
/* Create a new VAR_DECL of type descriptor. */
const char *tmp = pp_formatted_text (&pretty_name);
@@ -1029,6 +1034,170 @@ ubsan_expand_objsize_ifn (gimple_stmt_iterator *gsi)
return true;
}
+/* Expand UBSAN_PTR internal call. */
+
+bool
+ubsan_expand_ptr_ifn (gimple_stmt_iterator *gsip)
+{
+ gimple_stmt_iterator gsi = *gsip;
+ gimple *stmt = gsi_stmt (gsi);
+ location_t loc = gimple_location (stmt);
+ gcc_assert (gimple_call_num_args (stmt) == 2);
+ tree ptr = gimple_call_arg (stmt, 0);
+ tree off = gimple_call_arg (stmt, 1);
+
+ if (integer_zerop (off))
+ {
+ gsi_remove (gsip, true);
+ unlink_stmt_vdef (stmt);
+ return true;
+ }
+
+ basic_block cur_bb = gsi_bb (gsi);
+ tree ptrplusoff = make_ssa_name (pointer_sized_int_node);
+ tree ptri = make_ssa_name (pointer_sized_int_node);
+ int pos_neg = get_range_pos_neg (off);
+
+ /* Split the original block holding the pointer dereference. */
+ edge e = split_block (cur_bb, stmt);
+
+ /* Get a hold on the 'condition block', the 'then block' and the
+ 'else block'. */
+ basic_block cond_bb = e->src;
+ basic_block fallthru_bb = e->dest;
+ basic_block then_bb = create_empty_bb (cond_bb);
+ basic_block cond_pos_bb = NULL, cond_neg_bb = NULL;
+ add_bb_to_loop (then_bb, cond_bb->loop_father);
+ loops_state_set (LOOPS_NEED_FIXUP);
+
+ /* Set up the fallthrough basic block. */
+ e->flags = EDGE_FALSE_VALUE;
+ if (pos_neg != 3)
+ {
+ e->count = cond_bb->count;
+ e->probability = profile_probability::very_likely ();
+
+ /* Connect 'then block' with the 'else block'. This is needed
+ as the ubsan routines we call in the 'then block' are not noreturn.
+ The 'then block' only has one outcoming edge. */
+ make_single_succ_edge (then_bb, fallthru_bb, EDGE_FALLTHRU);
+
+ /* Make an edge coming from the 'cond block' into the 'then block';
+ this edge is unlikely taken, so set up the probability
+ accordingly. */
+ e = make_edge (cond_bb, then_bb, EDGE_TRUE_VALUE);
+ e->probability = profile_probability::very_unlikely ();
+ }
+ else
+ {
+ profile_count count = cond_bb->count.apply_probability (PROB_EVEN);
+ e->count = count;
+ e->probability = profile_probability::even ();
+
+ e = split_block (fallthru_bb, (gimple *) NULL);
+ cond_neg_bb = e->src;
+ fallthru_bb = e->dest;
+ e->count = count;
+ e->probability = profile_probability::very_likely ();
+ e->flags = EDGE_FALSE_VALUE;
+
+ e = make_edge (cond_neg_bb, then_bb, EDGE_TRUE_VALUE);
+ e->probability = profile_probability::very_unlikely ();
+
+ cond_pos_bb = create_empty_bb (cond_bb);
+ add_bb_to_loop (cond_pos_bb, cond_bb->loop_father);
+
+ e = make_edge (cond_bb, cond_pos_bb, EDGE_TRUE_VALUE);
+ e->count = count;
+ e->probability = profile_probability::even ();
+
+ e = make_edge (cond_pos_bb, then_bb, EDGE_TRUE_VALUE);
+ e->probability = profile_probability::very_unlikely ();
+
+ e = make_edge (cond_pos_bb, fallthru_bb, EDGE_FALSE_VALUE);
+ e->count = count;
+ e->probability = profile_probability::very_likely ();
+
+ make_single_succ_edge (then_bb, fallthru_bb, EDGE_FALLTHRU);
+ }
+
+ gimple *g = gimple_build_assign (ptri, NOP_EXPR, ptr);
+ gimple_set_location (g, loc);
+ gsi_insert_before (&gsi, g, GSI_SAME_STMT);
+ g = gimple_build_assign (ptrplusoff, PLUS_EXPR, ptri, off);
+ gimple_set_location (g, loc);
+ gsi_insert_before (&gsi, g, GSI_SAME_STMT);
+
+ /* Update dominance info for the newly created then_bb; note that
+ fallthru_bb's dominance info has already been updated by
+ split_block. */
+ if (dom_info_available_p (CDI_DOMINATORS))
+ {
+ set_immediate_dominator (CDI_DOMINATORS, then_bb, cond_bb);
+ if (pos_neg == 3)
+ {
+ set_immediate_dominator (CDI_DOMINATORS, cond_pos_bb, cond_bb);
+ set_immediate_dominator (CDI_DOMINATORS, fallthru_bb, cond_bb);
+ }
+ }
+
+ /* Put the ubsan builtin call into the newly created BB. */
+ if (flag_sanitize_undefined_trap_on_error)
+ g = gimple_build_call (builtin_decl_implicit (BUILT_IN_TRAP), 0);
+ else
+ {
+ enum built_in_function bcode
+ = (flag_sanitize_recover & SANITIZE_POINTER_OVERFLOW)
+ ? BUILT_IN_UBSAN_HANDLE_POINTER_OVERFLOW
+ : BUILT_IN_UBSAN_HANDLE_POINTER_OVERFLOW_ABORT;
+ tree fn = builtin_decl_implicit (bcode);
+ tree data
+ = ubsan_create_data ("__ubsan_ptrovf_data", 1, &loc,
+ NULL_TREE, NULL_TREE);
+ data = build_fold_addr_expr_loc (loc, data);
+ g = gimple_build_call (fn, 3, data, ptr, ptrplusoff);
+ }
+ gimple_stmt_iterator gsi2 = gsi_start_bb (then_bb);
+ gimple_set_location (g, loc);
+ gsi_insert_after (&gsi2, g, GSI_NEW_STMT);
+
+ /* Unlink the UBSAN_PTRs vops before replacing it. */
+ unlink_stmt_vdef (stmt);
+
+ if (TREE_CODE (off) == INTEGER_CST)
+ g = gimple_build_cond (wi::neg_p (off) ? LT_EXPR : GE_EXPR, ptri,
+ fold_build1 (NEGATE_EXPR, sizetype, off),
+ NULL_TREE, NULL_TREE);
+ else if (pos_neg != 3)
+ g = gimple_build_cond (pos_neg == 1 ? LT_EXPR : GT_EXPR,
+ ptrplusoff, ptri, NULL_TREE, NULL_TREE);
+ else
+ {
+ gsi2 = gsi_start_bb (cond_pos_bb);
+ g = gimple_build_cond (LT_EXPR, ptrplusoff, ptri, NULL_TREE, NULL_TREE);
+ gimple_set_location (g, loc);
+ gsi_insert_after (&gsi2, g, GSI_NEW_STMT);
+
+ gsi2 = gsi_start_bb (cond_neg_bb);
+ g = gimple_build_cond (GT_EXPR, ptrplusoff, ptri, NULL_TREE, NULL_TREE);
+ gimple_set_location (g, loc);
+ gsi_insert_after (&gsi2, g, GSI_NEW_STMT);
+
+ gimple_seq seq = NULL;
+ tree t = gimple_build (&seq, loc, NOP_EXPR, ssizetype, off);
+ t = gimple_build (&seq, loc, GE_EXPR, boolean_type_node,
+ t, ssize_int (0));
+ gsi_insert_seq_before (&gsi, seq, GSI_SAME_STMT);
+ g = gimple_build_cond (NE_EXPR, t, boolean_false_node,
+ NULL_TREE, NULL_TREE);
+ }
+ gimple_set_location (g, loc);
+ /* Replace the UBSAN_PTR with a GIMPLE_COND stmt. */
+ gsi_replace (&gsi, g, false);
+ return false;
+}
+
+
/* Cached __ubsan_vptr_type_cache decl. */
static GTY(()) tree ubsan_vptr_type_cache_decl;
@@ -1234,6 +1403,111 @@ instrument_null (gimple_stmt_iterator gsi, tree t, bool is_lhs)
instrument_mem_ref (t, base, &gsi, is_lhs);
}
+/* Instrument pointer arithmetics PTR p+ OFF. */
+
+static void
+instrument_pointer_overflow (gimple_stmt_iterator *gsi, tree ptr, tree off)
+{
+ if (TYPE_PRECISION (sizetype) != POINTER_SIZE)
+ return;
+ gcall *g = gimple_build_call_internal (IFN_UBSAN_PTR, 2, ptr, off);
+ gimple_set_location (g, gimple_location (gsi_stmt (*gsi)));
+ gsi_insert_before (gsi, g, GSI_SAME_STMT);
+}
+
+/* Instrument pointer arithmetics if any. */
+
+static void
+maybe_instrument_pointer_overflow (gimple_stmt_iterator *gsi, tree t)
+{
+ if (TYPE_PRECISION (sizetype) != POINTER_SIZE)
+ return;
+
+ /* Handle also e.g. &s->i. */
+ if (TREE_CODE (t) == ADDR_EXPR)
+ t = TREE_OPERAND (t, 0);
+
+ if (!handled_component_p (t) && TREE_CODE (t) != MEM_REF)
+ return;
+
+ HOST_WIDE_INT bitsize, bitpos, bytepos;
+ tree offset;
+ machine_mode mode;
+ int volatilep = 0, reversep, unsignedp = 0;
+ tree inner = get_inner_reference (t, &bitsize, &bitpos, &offset, &mode,
+ &unsignedp, &reversep, &volatilep);
+ tree moff = NULL_TREE;
+
+ bool decl_p = DECL_P (inner);
+ tree base;
+ if (decl_p)
+ {
+ if (DECL_REGISTER (inner))
+ return;
+ base = inner;
+ /* If BASE is a fixed size automatic variable or
+ global variable defined in the current TU and bitpos
+ fits, don't instrument anything. */
+ if (offset == NULL_TREE
+ && bitpos > 0
+ && (VAR_P (base)
+ || TREE_CODE (base) == PARM_DECL
+ || TREE_CODE (base) == RESULT_DECL)
+ && DECL_SIZE (base)
+ && TREE_CODE (DECL_SIZE (base)) == INTEGER_CST
+ && compare_tree_int (DECL_SIZE (base), bitpos) >= 0
+ && (!is_global_var (base) || decl_binds_to_current_def_p (base)))
+ return;
+ }
+ else if (TREE_CODE (inner) == MEM_REF)
+ {
+ base = TREE_OPERAND (inner, 0);
+ if (TREE_CODE (base) == ADDR_EXPR
+ && DECL_P (TREE_OPERAND (base, 0))
+ && !TREE_ADDRESSABLE (TREE_OPERAND (base, 0))
+ && !is_global_var (TREE_OPERAND (base, 0)))
+ return;
+ moff = TREE_OPERAND (inner, 1);
+ if (integer_zerop (moff))
+ moff = NULL_TREE;
+ }
+ else
+ return;
+
+ if (!POINTER_TYPE_P (TREE_TYPE (base)) && !DECL_P (base))
+ return;
+ bytepos = bitpos / BITS_PER_UNIT;
+ if (offset == NULL_TREE && bytepos == 0 && moff == NULL_TREE)
+ return;
+
+ tree base_addr = base;
+ if (decl_p)
+ base_addr = build1 (ADDR_EXPR,
+ build_pointer_type (TREE_TYPE (base)), base);
+ t = offset;
+ if (bytepos)
+ {
+ if (t)
+ t = fold_build2 (PLUS_EXPR, TREE_TYPE (t), t,
+ build_int_cst (TREE_TYPE (t), bytepos));
+ else
+ t = size_int (bytepos);
+ }
+ if (moff)
+ {
+ if (t)
+ t = fold_build2 (PLUS_EXPR, TREE_TYPE (t), t,
+ fold_convert (TREE_TYPE (t), moff));
+ else
+ t = fold_convert (sizetype, moff);
+ }
+ t = force_gimple_operand_gsi (gsi, t, true, NULL_TREE, true,
+ GSI_SAME_STMT);
+ base_addr = force_gimple_operand_gsi (gsi, base_addr, true, NULL_TREE, true,
+ GSI_SAME_STMT);
+ instrument_pointer_overflow (gsi, base_addr, t);
+}
+
/* Build an ubsan builtin call for the signed-integer-overflow
sanitization. CODE says what kind of builtin are we building,
LOC is a location, LHSTYPE is the type of LHS, OP0 and OP1
@@ -1849,7 +2123,7 @@ instrument_object_size (gimple_stmt_iterator *gsi, tree t, bool is_lhs)
{
tree rhs1 = gimple_assign_rhs1 (def_stmt);
if (TREE_CODE (rhs1) == SSA_NAME
- && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rhs1))
+ && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rhs1))
break;
else
base = rhs1;
@@ -1973,7 +2247,8 @@ public:
| SANITIZE_ALIGNMENT
| SANITIZE_NONNULL_ATTRIBUTE
| SANITIZE_RETURNS_NONNULL_ATTRIBUTE
- | SANITIZE_OBJECT_SIZE));
+ | SANITIZE_OBJECT_SIZE
+ | SANITIZE_POINTER_OVERFLOW));
}
virtual unsigned int execute (function *);
@@ -2065,6 +2340,32 @@ pass_ubsan::execute (function *fun)
}
}
+ if (sanitize_flags_p (SANITIZE_POINTER_OVERFLOW, fun->decl))
+ {
+ if (is_gimple_assign (stmt)
+ && gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR)
+ instrument_pointer_overflow (&gsi,
+ gimple_assign_rhs1 (stmt),
+ gimple_assign_rhs2 (stmt));
+ if (gimple_store_p (stmt))
+ maybe_instrument_pointer_overflow (&gsi,
+ gimple_get_lhs (stmt));
+ if (gimple_assign_single_p (stmt))
+ maybe_instrument_pointer_overflow (&gsi,
+ gimple_assign_rhs1 (stmt));
+ if (is_gimple_call (stmt))
+ {
+ unsigned args_num = gimple_call_num_args (stmt);
+ for (unsigned i = 0; i < args_num; ++i)
+ {
+ tree arg = gimple_call_arg (stmt, i);
+ if (is_gimple_reg (arg))
+ continue;
+ maybe_instrument_pointer_overflow (&gsi, arg);
+ }
+ }
+ }
+
gsi_next (&gsi);
}
if (gimple_purge_dead_eh_edges (bb))
diff --git a/gcc/ubsan.h b/gcc/ubsan.h
index 8d990b6a4b3..20a33473689 100644
--- a/gcc/ubsan.h
+++ b/gcc/ubsan.h
@@ -52,6 +52,7 @@ enum ubsan_encode_value_phase {
extern bool ubsan_expand_bounds_ifn (gimple_stmt_iterator *);
extern bool ubsan_expand_null_ifn (gimple_stmt_iterator *);
extern bool ubsan_expand_objsize_ifn (gimple_stmt_iterator *);
+extern bool ubsan_expand_ptr_ifn (gimple_stmt_iterator *);
extern bool ubsan_expand_vptr_ifn (gimple_stmt_iterator *);
extern bool ubsan_instrument_unreachable (gimple_stmt_iterator *);
extern tree ubsan_create_data (const char *, int, const location_t *, ...);
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 45611a9a858..e0834a1ff3b 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -51,6 +51,8 @@ along with GCC; see the file COPYING3. If not see
#include "langhooks.h"
#include "debug.h"
#include "common/common-target.h"
+#include "stringpool.h"
+#include "attribs.h"
#include "asan.h"
#include "rtl-iter.h"
@@ -1825,6 +1827,46 @@ assemble_start_function (tree decl, const char *fnname)
if (DECL_PRESERVE_P (decl))
targetm.asm_out.mark_decl_preserved (fnname);
+ unsigned HOST_WIDE_INT patch_area_size = function_entry_patch_area_size;
+ unsigned HOST_WIDE_INT patch_area_entry = function_entry_patch_area_start;
+
+ tree patchable_function_entry_attr
+ = lookup_attribute ("patchable_function_entry", DECL_ATTRIBUTES (decl));
+ if (patchable_function_entry_attr)
+ {
+ tree pp_val = TREE_VALUE (patchable_function_entry_attr);
+ tree patchable_function_entry_value1 = TREE_VALUE (pp_val);
+
+ if (tree_fits_uhwi_p (patchable_function_entry_value1))
+ patch_area_size = tree_to_uhwi (patchable_function_entry_value1);
+ else
+ gcc_unreachable ();
+
+ patch_area_entry = 0;
+ if (list_length (pp_val) > 1)
+ {
+ tree patchable_function_entry_value2 =
+ TREE_VALUE (TREE_CHAIN (pp_val));
+
+ if (tree_fits_uhwi_p (patchable_function_entry_value2))
+ patch_area_entry = tree_to_uhwi (patchable_function_entry_value2);
+ else
+ gcc_unreachable ();
+ }
+ }
+
+ if (patch_area_entry > patch_area_size)
+ {
+ if (patch_area_size > 0)
+ warning (OPT_Wattributes, "Patchable function entry > size");
+ patch_area_entry = 0;
+ }
+
+ /* Emit the patching area before the entry label, if any. */
+ if (patch_area_entry > 0)
+ targetm.asm_out.print_patchable_function_entry (asm_out_file,
+ patch_area_entry, true);
+
/* Do any machine/system dependent processing of the function name. */
#ifdef ASM_DECLARE_FUNCTION_NAME
ASM_DECLARE_FUNCTION_NAME (asm_out_file, fnname, current_function_decl);
@@ -1833,6 +1875,12 @@ assemble_start_function (tree decl, const char *fnname)
ASM_OUTPUT_FUNCTION_LABEL (asm_out_file, fnname, current_function_decl);
#endif /* ASM_DECLARE_FUNCTION_NAME */
+ /* And the area after the label. Record it if we haven't done so yet. */
+ if (patch_area_size > patch_area_entry)
+ targetm.asm_out.print_patchable_function_entry (asm_out_file,
+ patch_area_size-patch_area_entry,
+ patch_area_entry == 0);
+
if (lookup_attribute ("no_split_stack", DECL_ATTRIBUTES (decl)))
saw_no_split_stack = true;
}
diff --git a/gcc/varpool.c b/gcc/varpool.c
index ab59c80406b..d849fe8a7da 100644
--- a/gcc/varpool.c
+++ b/gcc/varpool.c
@@ -33,6 +33,8 @@ along with GCC; see the file COPYING3. If not see
#include "output.h"
#include "omp-offload.h"
#include "context.h"
+#include "stringpool.h"
+#include "attribs.h"
const char * const tls_model_names[]={"none", "emulated",
"global-dynamic", "local-dynamic",
@@ -786,10 +788,10 @@ varpool_node::create_extra_name_alias (tree alias, tree decl)
{
varpool_node *alias_node;
-#ifndef ASM_OUTPUT_DEF
/* If aliases aren't supported by the assembler, fail. */
- return NULL;
-#endif
+ if (!TARGET_SUPPORTS_ALIASES)
+ return NULL;
+
alias_node = varpool_node::create_alias (alias, decl);
alias_node->cpp_implicit_alias = true;
diff --git a/gcc/vmsdbgout.c b/gcc/vmsdbgout.c
index 41928a400a9..42300e2d538 100644
--- a/gcc/vmsdbgout.c
+++ b/gcc/vmsdbgout.c
@@ -197,7 +197,7 @@ const struct gcc_debug_hooks vmsdbg_debug_hooks
vmsdbgout_early_global_decl,
vmsdbgout_late_global_decl,
vmsdbgout_type_decl, /* type_decl */
- debug_nothing_tree_tree_tree_bool, /* imported_module_or_decl */
+ debug_nothing_tree_tree_tree_bool_bool, /* imported_module_or_decl */
debug_nothing_tree, /* deferred_inline_function */
vmsdbgout_abstract_function,
debug_nothing_rtx_code_label, /* label */
diff --git a/gotools/ChangeLog b/gotools/ChangeLog
index 2d33c70dc30..18cbf119933 100644
--- a/gotools/ChangeLog
+++ b/gotools/ChangeLog
@@ -1,3 +1,9 @@
+2017-07-26 Ian Lance Taylor <iant@golang.org>
+
+ PR go/81548
+ * Makefile.am (MOSTLYCLEANFILES): Add *.sent.
+ * Makefile.in: Rebuild.
+
2017-07-15 Ian Lance Taylor <iant@golang.org>
* Makefile.am (CHECK_ENV): Set GOROOT.
diff --git a/gotools/Makefile.am b/gotools/Makefile.am
index 68a7003f8f5..b9dced4a5d7 100644
--- a/gotools/Makefile.am
+++ b/gotools/Makefile.am
@@ -109,7 +109,7 @@ s-zdefaultcc: Makefile
MOSTLYCLEANFILES = \
zdefaultcc.go s-zdefaultcc \
- check-gccgo gotools.head *-testlog gotools.sum gotools.log
+ check-gccgo gotools.head *-testlog gotools.sum gotools.log *.sent
mostlyclean-local:
rm -rf check-go-dir check-runtime-dir cgo-test-dir carchive-test-dir
diff --git a/gotools/Makefile.in b/gotools/Makefile.in
index e083bb473ad..9c0084e2e18 100644
--- a/gotools/Makefile.in
+++ b/gotools/Makefile.in
@@ -316,7 +316,7 @@ GCC_INSTALL_NAME := $(shell echo gcc|sed '$(program_transform_name)')
GXX_INSTALL_NAME := $(shell echo g++|sed '$(program_transform_name)')
MOSTLYCLEANFILES = \
zdefaultcc.go s-zdefaultcc \
- check-gccgo gotools.head *-testlog gotools.sum gotools.log
+ check-gccgo gotools.head *-testlog gotools.sum gotools.log *.sent
# For a native build we build the programs using the newly built libgo
diff --git a/libbacktrace/ChangeLog b/libbacktrace/ChangeLog
index eb9bb6ab889..3a2255679c0 100644
--- a/libbacktrace/ChangeLog
+++ b/libbacktrace/ChangeLog
@@ -1,3 +1,33 @@
+2017-08-02 David Edelsohn <dje.gcc@gmail.com>
+
+ PR bootstrap/81638
+ * xcoff.c (xcoff_process_linenos): Initialize incl to NULL.
+
+2017-07-28 Tony Reix <tony.reix@atos.net>
+
+ * xcoff.c: Don't leak a file descriptor if an archive is malformed.
+
+2017-07-28 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * fileline.c (fileline_initialize): Print pid_t as long.
+
+2017-07-26 Tony Reix <tony.reix@atos.net>
+
+ * configure.ac: Check for XCOFF32/XCOFF64. Check for loadquery.
+ * filetype.awk: Separate AIX XCOFF32 and XCOFF64.
+ * xcoff.c: Add support for AIX XCOFF32 and XCOFF64 formats.
+ * configure, config.h.in: Regenerate.
+
+2017-07-21 Tony Reix <tony.reix@atos.net>
+
+ * filetype.awk: Add AIX XCOFF type detection.
+ * configure.ac: Recognize xcoff format.
+ * Makefile.am (FORMAT_FILES): Add xcoff.c.
+ * fileline.c: Include <unistd.h>.
+ (fileline_initialize): Add case for AIX procfs.
+ * xcoff.c: New file.
+ * configure, Makefile.in: Rebuild.
+
2017-06-21 Richard Biener <rguenther@suse.de>
* configure.ac: Add AC_SYS_LARGEFILE.
diff --git a/libbacktrace/Makefile.am b/libbacktrace/Makefile.am
index 640eeec5e22..b91d6bca2d6 100644
--- a/libbacktrace/Makefile.am
+++ b/libbacktrace/Makefile.am
@@ -57,7 +57,8 @@ BACKTRACE_FILES = \
FORMAT_FILES = \
elf.c \
pecoff.c \
- unknown.c
+ unknown.c \
+ xcoff.c
VIEW_FILES = \
read.c \
@@ -155,3 +156,5 @@ sort.lo: config.h backtrace.h internal.h
stest.lo: config.h backtrace.h internal.h
state.lo: config.h backtrace.h backtrace-supported.h internal.h
unknown.lo: config.h backtrace.h internal.h
+xcoff.lo: config.h backtrace.h internal.h
+
diff --git a/libbacktrace/Makefile.in b/libbacktrace/Makefile.in
index a57dc235b33..5b2159d77ba 100644
--- a/libbacktrace/Makefile.in
+++ b/libbacktrace/Makefile.in
@@ -319,7 +319,8 @@ BACKTRACE_FILES = \
FORMAT_FILES = \
elf.c \
pecoff.c \
- unknown.c
+ unknown.c \
+ xcoff.c
VIEW_FILES = \
read.c \
@@ -817,6 +818,7 @@ sort.lo: config.h backtrace.h internal.h
stest.lo: config.h backtrace.h internal.h
state.lo: config.h backtrace.h backtrace-supported.h internal.h
unknown.lo: config.h backtrace.h internal.h
+xcoff.lo: config.h backtrace.h internal.h
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libbacktrace/config.h.in b/libbacktrace/config.h.in
index 06f91f2e29f..9fc771564ba 100644
--- a/libbacktrace/config.h.in
+++ b/libbacktrace/config.h.in
@@ -3,6 +3,9 @@
/* ELF size: 32 or 64 */
#undef BACKTRACE_ELF_SIZE
+/* XCOFF size: 32 or 64 */
+#undef BACKTRACE_XCOFF_SIZE
+
/* Define to 1 if you have the __atomic functions */
#undef HAVE_ATOMIC_FUNCTIONS
@@ -31,6 +34,9 @@
/* Define to 1 if you have the <link.h> header file. */
#undef HAVE_LINK_H
+/* Define if AIX loadquery is available. */
+#undef HAVE_LOADQUERY
+
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
@@ -49,6 +55,9 @@
/* Define to 1 if you have the __sync functions */
#undef HAVE_SYNC_FUNCTIONS
+/* Define to 1 if you have the <sys/ldr.h> header file. */
+#undef HAVE_SYS_LDR_H
+
/* Define to 1 if you have the <sys/mman.h> header file. */
#undef HAVE_SYS_MMAN_H
diff --git a/libbacktrace/configure b/libbacktrace/configure
index e6420ea94da..35767344f25 100755
--- a/libbacktrace/configure
+++ b/libbacktrace/configure
@@ -12048,6 +12048,9 @@ elf*) FORMAT_FILE="elf.lo" ;;
pecoff) FORMAT_FILE="pecoff.lo"
backtrace_supports_data=no
;;
+xcoff*) FORMAT_FILE="xcoff.lo"
+ backtrace_supports_data=no
+ ;;
*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not determine output file type" >&5
$as_echo "$as_me: WARNING: could not determine output file type" >&2;}
FORMAT_FILE="unknown.lo"
@@ -12069,6 +12072,19 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
+# XCOFF defines.
+xcoffsize=
+case "$libbacktrace_cv_sys_filetype" in
+xcoff32) xcoffsize=32 ;;
+xcoff64) xcoffsize=64 ;;
+*) xcoffsize=unused
+esac
+
+cat >>confdefs.h <<_ACEOF
+#define BACKTRACE_XCOFF_SIZE $xcoffsize
+_ACEOF
+
+
BACKTRACE_SUPPORTED=0
if test "$backtrace_supported" = "yes"; then
BACKTRACE_SUPPORTED=1
@@ -12607,6 +12623,53 @@ $as_echo "#define HAVE_DL_ITERATE_PHDR 1" >>confdefs.h
fi
+# Check for loadquery.
+for ac_header in sys/ldr.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "sys/ldr.h" "ac_cv_header_sys_ldr_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_ldr_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_LDR_H 1
+_ACEOF
+
+fi
+
+done
+
+if test "$ac_cv_header_sys_ldr_h" = "no"; then
+ have_loadquery=no
+else
+ if test -n "${with_target_subdir}"; then
+ # When built as a GCC target library, we can't do a link test.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/ldr.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "loadquery" >/dev/null 2>&1; then :
+ have_loadquery=yes
+else
+ have_loadquery=no
+fi
+rm -f conftest*
+
+ else
+ ac_fn_c_check_func "$LINENO" "loadquery" "ac_cv_func_loadquery"
+if test "x$ac_cv_func_loadquery" = x""yes; then :
+ have_loadquery=yes
+else
+ have_loadquery=no
+fi
+
+ fi
+fi
+if test "$have_loadquery" = "yes"; then
+
+$as_echo "#define HAVE_LOADQUERY 1" >>confdefs.h
+
+fi
+
# Check for the fcntl function.
if test -n "${with_target_subdir}"; then
case "${host}" in
diff --git a/libbacktrace/configure.ac b/libbacktrace/configure.ac
index 47ebdc18af2..e644c7da796 100644
--- a/libbacktrace/configure.ac
+++ b/libbacktrace/configure.ac
@@ -233,6 +233,9 @@ elf*) FORMAT_FILE="elf.lo" ;;
pecoff) FORMAT_FILE="pecoff.lo"
backtrace_supports_data=no
;;
+xcoff*) FORMAT_FILE="xcoff.lo"
+ backtrace_supports_data=no
+ ;;
*) AC_MSG_WARN([could not determine output file type])
FORMAT_FILE="unknown.lo"
backtrace_supported=no
@@ -249,6 +252,15 @@ elf64) elfsize=64 ;;
esac
AC_DEFINE_UNQUOTED([BACKTRACE_ELF_SIZE], [$elfsize], [ELF size: 32 or 64])
+# XCOFF defines.
+xcoffsize=
+case "$libbacktrace_cv_sys_filetype" in
+xcoff32) xcoffsize=32 ;;
+xcoff64) xcoffsize=64 ;;
+*) xcoffsize=unused
+esac
+AC_DEFINE_UNQUOTED([BACKTRACE_XCOFF_SIZE], [$xcoffsize], [XCOFF size: 32 or 64])
+
BACKTRACE_SUPPORTED=0
if test "$backtrace_supported" = "yes"; then
BACKTRACE_SUPPORTED=1
@@ -327,6 +339,24 @@ if test "$have_dl_iterate_phdr" = "yes"; then
AC_DEFINE(HAVE_DL_ITERATE_PHDR, 1, [Define if dl_iterate_phdr is available.])
fi
+# Check for loadquery.
+AC_CHECK_HEADERS(sys/ldr.h)
+if test "$ac_cv_header_sys_ldr_h" = "no"; then
+ have_loadquery=no
+else
+ if test -n "${with_target_subdir}"; then
+ # When built as a GCC target library, we can't do a link test.
+ AC_EGREP_HEADER([loadquery], [sys/ldr.h], [have_loadquery=yes],
+ [have_loadquery=no])
+ else
+ AC_CHECK_FUNC([loadquery], [have_loadquery=yes],
+ [have_loadquery=no])
+ fi
+fi
+if test "$have_loadquery" = "yes"; then
+ AC_DEFINE(HAVE_LOADQUERY, 1, [Define if AIX loadquery is available.])
+fi
+
# Check for the fcntl function.
if test -n "${with_target_subdir}"; then
case "${host}" in
diff --git a/libbacktrace/elf.c b/libbacktrace/elf.c
index 8e169715d32..1471007d4ea 100644
--- a/libbacktrace/elf.c
+++ b/libbacktrace/elf.c
@@ -70,7 +70,7 @@ dl_iterate_phdr (int (*callback) (struct dl_phdr_info *,
ELF. We could make this code test and support either possibility,
but there is no point. This code only works for the currently
running executable, which means that we know the ELF mode at
- configure mode. */
+ configure time. */
#if BACKTRACE_ELF_SIZE != 32 && BACKTRACE_ELF_SIZE != 64
#error "Unknown BACKTRACE_ELF_SIZE"
diff --git a/libbacktrace/fileline.c b/libbacktrace/fileline.c
index 0fd350a30c9..68120583d7b 100644
--- a/libbacktrace/fileline.c
+++ b/libbacktrace/fileline.c
@@ -37,6 +37,7 @@ POSSIBILITY OF SUCH DAMAGE. */
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
+#include <unistd.h>
#include "backtrace.h"
#include "internal.h"
@@ -57,6 +58,7 @@ fileline_initialize (struct backtrace_state *state,
int pass;
int called_error_callback;
int descriptor;
+ char buf[64];
if (!state->threaded)
failed = state->fileline_initialization_failed;
@@ -80,7 +82,7 @@ fileline_initialize (struct backtrace_state *state,
descriptor = -1;
called_error_callback = 0;
- for (pass = 0; pass < 4; ++pass)
+ for (pass = 0; pass < 5; ++pass)
{
const char *filename;
int does_not_exist;
@@ -99,6 +101,11 @@ fileline_initialize (struct backtrace_state *state,
case 3:
filename = "/proc/curproc/file";
break;
+ case 4:
+ snprintf (buf, sizeof (buf), "/proc/%ld/object/a.out",
+ (long) getpid ());
+ filename = buf;
+ break;
default:
abort ();
}
diff --git a/libbacktrace/filetype.awk b/libbacktrace/filetype.awk
index 57bab797a9a..cf6e1b695d2 100644
--- a/libbacktrace/filetype.awk
+++ b/libbacktrace/filetype.awk
@@ -3,3 +3,6 @@
/\177ELF\002/ { if (NR == 1) { print "elf64"; exit } }
/\114\001/ { if (NR == 1) { print "pecoff"; exit } }
/\144\206/ { if (NR == 1) { print "pecoff"; exit } }
+/\001\337/ { if (NR == 1) { print "xcoff32"; exit } }
+/\001\367/ { if (NR == 1) { print "xcoff64"; exit } }
+
diff --git a/libbacktrace/xcoff.c b/libbacktrace/xcoff.c
new file mode 100644
index 00000000000..b3d7e24256b
--- /dev/null
+++ b/libbacktrace/xcoff.c
@@ -0,0 +1,1485 @@
+/* xcoff.c -- Get debug data from an XCOFF file for backtraces.
+ Copyright (C) 2012-2017 Free Software Foundation, Inc.
+ Adapted from elf.c.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#ifdef HAVE_LOADQUERY
+#include <sys/ldr.h>
+#endif
+
+#include "backtrace.h"
+#include "internal.h"
+
+/* The configure script must tell us whether we are 32-bit or 64-bit
+ XCOFF. We could make this code test and support either possibility,
+ but there is no point. This code only works for the currently
+ running executable, which means that we know the XCOFF mode at
+ configure time. */
+
+#if BACKTRACE_XCOFF_SIZE != 32 && BACKTRACE_XCOFF_SIZE != 64
+#error "Unknown BACKTRACE_XCOFF_SIZE"
+#endif
+
+/* XCOFF file header. */
+
+#if BACKTRACE_XCOFF_SIZE == 32
+
+typedef struct {
+ uint16_t f_magic;
+ uint16_t f_nscns;
+ uint32_t f_timdat;
+ uint32_t f_symptr;
+ uint32_t f_nsyms;
+ uint16_t f_opthdr;
+ uint16_t f_flags;
+} b_xcoff_filhdr;
+
+#define XCOFF_MAGIC 0737
+
+#else /* BACKTRACE_XCOFF_SIZE != 32 */
+
+typedef struct {
+ uint16_t f_magic;
+ uint16_t f_nscns;
+ uint32_t f_timdat;
+ uint64_t f_symptr;
+ uint16_t f_opthdr;
+ uint16_t f_flags;
+ uint32_t f_nsyms;
+} b_xcoff_filhdr;
+
+#define XCOFF_MAGIC 0767
+
+#endif /* BACKTRACE_XCOFF_SIZE != 32 */
+
+#define F_SHROBJ 0x2000 /* File is a shared object. */
+
+/* XCOFF section header. */
+
+#if BACKTRACE_XCOFF_SIZE == 32
+
+typedef struct {
+ char s_name[8];
+ uint32_t s_paddr;
+ uint32_t s_vaddr;
+ uint32_t s_size;
+ uint32_t s_scnptr;
+ uint32_t s_relptr;
+ uint32_t s_lnnoptr;
+ uint16_t s_nreloc;
+ uint16_t s_nlnno;
+ uint32_t s_flags;
+} b_xcoff_scnhdr;
+
+#define _OVERFLOW_MARKER 65535
+
+#else /* BACKTRACE_XCOFF_SIZE != 32 */
+
+typedef struct {
+ char name[8];
+ uint64_t s_paddr;
+ uint64_t s_vaddr;
+ uint64_t s_size;
+ uint64_t s_scnptr;
+ uint64_t s_relptr;
+ uint64_t s_lnnoptr;
+ uint32_t s_nreloc;
+ uint32_t s_nlnno;
+ uint32_t s_flags;
+} b_xcoff_scnhdr;
+
+#endif /* BACKTRACE_XCOFF_SIZE != 32 */
+
+#define STYP_TEXT 0x20 /* Executable text (code) section. */
+#define STYP_OVRFLO 0x8000 /* Line-number field overflow section. */
+
+/* XCOFF symbol. */
+
+#define SYMNMLEN 8
+
+#if BACKTRACE_XCOFF_SIZE == 32
+
+typedef struct {
+ union {
+ char _name[SYMNMLEN];
+ struct {
+ uint32_t _zeroes;
+ uint32_t _offset;
+ } _s;
+ } _u;
+#define n_name _u._name
+#define n_zeroes _u._s._zeroes
+#define n_offset_ _u._s._offset
+
+ uint32_t n_value;
+ int16_t n_scnum;
+ uint16_t n_type;
+ uint8_t n_sclass;
+ uint8_t n_numaux;
+} __attribute__ ((packed)) b_xcoff_syment;
+
+#else /* BACKTRACE_XCOFF_SIZE != 32 */
+
+typedef struct {
+ uint64_t n_value;
+ uint32_t n_offset_;
+ int16_t n_scnum;
+ uint16_t n_type;
+ uint8_t n_sclass;
+ uint8_t n_numaux;
+} __attribute__ ((packed)) b_xcoff_syment;
+
+#endif /* BACKTRACE_XCOFF_SIZE != 32 */
+
+#define SYMESZ 18
+
+#define C_EXT 2 /* External symbol. */
+#define C_FCN 101 /* Beginning or end of function. */
+#define C_FILE 103 /* Source file name. */
+#define C_HIDEXT 107 /* Unnamed external symbol. */
+#define C_BINCL 108 /* Beginning of include file. */
+#define C_EINCL 109 /* End of include file. */
+#define C_WEAKEXT 111 /* Weak external symbol. */
+
+#define ISFCN(x) ((x) & 0x0020)
+
+/* XCOFF AUX entry. */
+
+#define AUXESZ 18
+#define FILNMLEN 14
+
+typedef union {
+#if BACKTRACE_XCOFF_SIZE == 32
+ struct {
+ uint16_t pad;
+ uint16_t x_lnnohi;
+ uint16_t x_lnno;
+ } x_block;
+#else
+ struct {
+ uint32_t x_lnno;
+ } x_block;
+#endif
+ union {
+ char x_fname[FILNMLEN];
+ struct {
+ uint32_t x_zeroes;
+ uint32_t x_offset;
+ char pad[FILNMLEN-8];
+ uint8_t x_ftype;
+ } _x;
+ } x_file;
+#if BACKTRACE_XCOFF_SIZE == 32
+ struct {
+ uint32_t x_exptr;
+ uint32_t x_fsize;
+ uint32_t x_lnnoptr;
+ uint32_t x_endndx;
+ } x_fcn;
+#else
+ struct {
+ uint64_t x_lnnoptr;
+ uint32_t x_fsize;
+ uint32_t x_endndx;
+ } x_fcn;
+#endif
+ struct {
+ uint8_t pad[AUXESZ-1];
+ uint8_t x_auxtype;
+ } x_auxtype;
+} __attribute__ ((packed)) b_xcoff_auxent;
+
+/* XCOFF line number entry. */
+
+#if BACKTRACE_XCOFF_SIZE == 32
+
+typedef struct {
+ union {
+ uint32_t l_symndx;
+ uint32_t l_paddr;
+ } l_addr;
+ uint16_t l_lnno;
+} b_xcoff_lineno;
+
+#define LINESZ 6
+
+#else /* BACKTRACE_XCOFF_SIZE != 32 */
+
+typedef struct {
+ union {
+ uint32_t l_symndx;
+ uint64_t l_paddr;
+ } l_addr;
+ uint32_t l_lnno;
+} b_xcoff_lineno;
+
+#define LINESZ 12
+
+#endif /* BACKTRACE_XCOFF_SIZE != 32 */
+
+#if BACKTRACE_XCOFF_SIZE == 32
+#define XCOFF_AIX_TEXTBASE 0x10000000u
+#else
+#define XCOFF_AIX_TEXTBASE 0x100000000ul
+#endif
+
+/* AIX big archive fixed-length header. */
+
+#define AIAMAGBIG "<bigaf>\n"
+
+typedef struct {
+ char fl_magic[8]; /* Archive magic string. */
+ char fl_memoff[20]; /* Offset to member table. */
+ char fl_gstoff[20]; /* Offset to global symbol table. */
+ char fl_gst64off[20]; /* Offset to global symbol table for 64-bit objects. */
+ char fl_fstmoff[20]; /* Offset to first archive member. */
+ char fl_freeoff[20]; /* Offset to first member on free list. */
+} b_ar_fl_hdr;
+
+/* AIX big archive file member header. */
+
+typedef struct {
+ char ar_size[20]; /* File member size - decimal. */
+ char ar_nxtmem[20]; /* Next member offset - decimal. */
+ char ar_prvmem[20]; /* Previous member offset - decimal. */
+ char ar_date[12]; /* File member date - decimal. */
+ char ar_uid[12]; /* File member userid - decimal. */
+ char ar_gid[12]; /* File member group id - decimal. */
+ char ar_mode[12]; /* File member mode - octal. */
+ char ar_namlen[4]; /* File member name length - decimal. */
+ char ar_name[2]; /* Start of member name. */
+} b_ar_hdr;
+
+
+/* Information we keep for an XCOFF symbol. */
+
+struct xcoff_symbol
+{
+ /* The name of the symbol. */
+ const char *name;
+ /* The address of the symbol. */
+ uintptr_t address;
+ /* The size of the symbol. */
+ size_t size;
+};
+
+/* Information to pass to xcoff_syminfo. */
+
+struct xcoff_syminfo_data
+{
+ /* Symbols for the next module. */
+ struct xcoff_syminfo_data *next;
+ /* The XCOFF symbols, sorted by address. */
+ struct xcoff_symbol *symbols;
+ /* The number of symbols. */
+ size_t count;
+};
+
+/* Information about an include file. */
+
+struct xcoff_incl
+{
+ /* File name. */
+ const char *filename;
+ /* Offset to first line number from the include file. */
+ uintptr_t begin;
+ /* Offset to last line number from the include file. */
+ uintptr_t end;
+};
+
+/* A growable vector of include files information. */
+
+struct xcoff_incl_vector
+{
+ /* Memory. This is an array of struct xcoff_incl. */
+ struct backtrace_vector vec;
+ /* Number of include files. */
+ size_t count;
+};
+
+/* Map a single PC value to a file/function/line. */
+
+struct xcoff_line
+{
+ /* PC. */
+ uintptr_t pc;
+ /* File name. Many entries in the array are expected to point to
+ the same file name. */
+ const char *filename;
+ /* Function name. */
+ const char *function;
+ /* Line number. */
+ int lineno;
+};
+
+/* A growable vector of line number information. This is used while
+ reading the line numbers. */
+
+struct xcoff_line_vector
+{
+ /* Memory. This is an array of struct xcoff_line. */
+ struct backtrace_vector vec;
+ /* Number of valid mappings. */
+ size_t count;
+};
+
+/* The information we need to map a PC to a file and line. */
+
+struct xcoff_fileline_data
+{
+ /* The data for the next file we know about. */
+ struct xcoff_fileline_data *next;
+ /* Line number information. */
+ struct xcoff_line_vector vec;
+};
+
+
+/* A dummy callback function used when we can't find any debug info. */
+
+static int
+xcoff_nodebug (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ uintptr_t pc ATTRIBUTE_UNUSED,
+ backtrace_full_callback callback ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback, void *data)
+{
+ error_callback (data, "no debug info in XCOFF executable", -1);
+ return 0;
+}
+
+/* A dummy callback function used when we can't find a symbol
+ table. */
+
+static void
+xcoff_nosyms (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ uintptr_t addr ATTRIBUTE_UNUSED,
+ backtrace_syminfo_callback callback ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback, void *data)
+{
+ error_callback (data, "no symbol table in XCOFF executable", -1);
+}
+
+/* Compare struct xcoff_symbol for qsort. */
+
+static int
+xcoff_symbol_compare (const void *v1, const void *v2)
+{
+ const struct xcoff_symbol *e1 = (const struct xcoff_symbol *) v1;
+ const struct xcoff_symbol *e2 = (const struct xcoff_symbol *) v2;
+
+ if (e1->address < e2->address)
+ return -1;
+ else if (e1->address > e2->address)
+ return 1;
+ else
+ return 0;
+}
+
+/* Compare an ADDR against an xcoff_symbol for bsearch. */
+
+static int
+xcoff_symbol_search (const void *vkey, const void *ventry)
+{
+ const uintptr_t *key = (const uintptr_t *) vkey;
+ const struct xcoff_symbol *entry = (const struct xcoff_symbol *) ventry;
+ uintptr_t addr;
+
+ addr = *key;
+ if (addr < entry->address)
+ return -1;
+ else if ((entry->size == 0 && addr > entry->address)
+ || (entry->size > 0 && addr >= entry->address + entry->size))
+ return 1;
+ else
+ return 0;
+}
+
+/* Add XDATA to the list in STATE. */
+
+static void
+xcoff_add_syminfo_data (struct backtrace_state *state,
+ struct xcoff_syminfo_data *xdata)
+{
+ if (!state->threaded)
+ {
+ struct xcoff_syminfo_data **pp;
+
+ for (pp = (struct xcoff_syminfo_data **) (void *) &state->syminfo_data;
+ *pp != NULL;
+ pp = &(*pp)->next)
+ ;
+ *pp = xdata;
+ }
+ else
+ {
+ while (1)
+ {
+ struct xcoff_syminfo_data **pp;
+
+ pp = (struct xcoff_syminfo_data **) (void *) &state->syminfo_data;
+
+ while (1)
+ {
+ struct xcoff_syminfo_data *p;
+
+ p = backtrace_atomic_load_pointer (pp);
+
+ if (p == NULL)
+ break;
+
+ pp = &p->next;
+ }
+
+ if (__sync_bool_compare_and_swap (pp, NULL, xdata))
+ break;
+ }
+ }
+}
+
+/* Return the symbol name and value for an ADDR. */
+
+static void
+xcoff_syminfo (struct backtrace_state *state ATTRIBUTE_UNUSED, uintptr_t addr,
+ backtrace_syminfo_callback callback,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data)
+{
+ struct xcoff_syminfo_data *edata;
+ struct xcoff_symbol *sym = NULL;
+
+ if (!state->threaded)
+ {
+ for (edata = (struct xcoff_syminfo_data *) state->syminfo_data;
+ edata != NULL;
+ edata = edata->next)
+ {
+ sym = ((struct xcoff_symbol *)
+ bsearch (&addr, edata->symbols, edata->count,
+ sizeof (struct xcoff_symbol), xcoff_symbol_search));
+ if (sym != NULL)
+ break;
+ }
+ }
+ else
+ {
+ struct xcoff_syminfo_data **pp;
+
+ pp = (struct xcoff_syminfo_data **) (void *) &state->syminfo_data;
+ while (1)
+ {
+ edata = backtrace_atomic_load_pointer (pp);
+ if (edata == NULL)
+ break;
+
+ sym = ((struct xcoff_symbol *)
+ bsearch (&addr, edata->symbols, edata->count,
+ sizeof (struct xcoff_symbol), xcoff_symbol_search));
+ if (sym != NULL)
+ break;
+
+ pp = &edata->next;
+ }
+ }
+
+ if (sym == NULL)
+ callback (data, addr, NULL, 0, 0);
+ else
+ callback (data, addr, sym->name, sym->address, sym->size);
+}
+
+/* Return the name of an XCOFF symbol. */
+
+static const char *
+xcoff_symname (const b_xcoff_syment *asym,
+ const unsigned char *strtab, size_t strtab_size)
+{
+#if BACKTRACE_XCOFF_SIZE == 32
+ if (asym->n_zeroes != 0)
+ {
+ /* Make a copy as we will release the symtab view. */
+ char name[SYMNMLEN+1];
+ strncpy (name, asym->n_name, SYMNMLEN);
+ name[SYMNMLEN] = '\0';
+ return strdup (name);
+ }
+#endif
+ if (asym->n_sclass & 0x80)
+ return NULL; /* .debug */
+ if (asym->n_offset_ >= strtab_size)
+ return NULL;
+ return (const char *) strtab + asym->n_offset_;
+}
+
+/* Initialize the symbol table info for xcoff_syminfo. */
+
+static int
+xcoff_initialize_syminfo (struct backtrace_state *state,
+ uintptr_t base_address,
+ const b_xcoff_scnhdr *sects,
+ const b_xcoff_syment *syms, size_t nsyms,
+ const unsigned char *strtab, size_t strtab_size,
+ backtrace_error_callback error_callback, void *data,
+ struct xcoff_syminfo_data *sdata)
+{
+ size_t xcoff_symbol_count;
+ size_t xcoff_symbol_size;
+ struct xcoff_symbol *xcoff_symbols;
+ size_t i;
+ unsigned int j;
+
+ /* We only care about function symbols. Count them. */
+ xcoff_symbol_count = 0;
+ for (i = 0; i < nsyms; ++i)
+ {
+ const b_xcoff_syment *asym = &syms[i];
+ if ((asym->n_sclass == C_EXT || asym->n_sclass == C_HIDEXT
+ || asym->n_sclass == C_WEAKEXT)
+ && ISFCN (asym->n_type) && asym->n_numaux > 0 && asym->n_scnum > 0)
+ ++xcoff_symbol_count;
+
+ i += asym->n_numaux;
+ }
+
+ xcoff_symbol_size = xcoff_symbol_count * sizeof (struct xcoff_symbol);
+ xcoff_symbols = ((struct xcoff_symbol *)
+ backtrace_alloc (state, xcoff_symbol_size, error_callback,
+ data));
+ if (xcoff_symbols == NULL)
+ return 0;
+
+ j = 0;
+ for (i = 0; i < nsyms; ++i)
+ {
+ const b_xcoff_syment *asym = &syms[i];
+ if ((asym->n_sclass == C_EXT || asym->n_sclass == C_HIDEXT
+ || asym->n_sclass == C_WEAKEXT)
+ && ISFCN (asym->n_type) && asym->n_numaux > 0 && asym->n_scnum > 0)
+ {
+ const b_xcoff_auxent *aux = (const b_xcoff_auxent *) (asym + 1);
+ xcoff_symbols[j].name = xcoff_symname (asym, strtab, strtab_size);
+ xcoff_symbols[j].address = base_address + asym->n_value
+ - sects[asym->n_scnum - 1].s_paddr;
+ /* x_fsize will be 0 if there is no debug information. */
+ xcoff_symbols[j].size = aux->x_fcn.x_fsize;
+ ++j;
+ }
+
+ i += asym->n_numaux;
+ }
+
+ backtrace_qsort (xcoff_symbols, xcoff_symbol_count,
+ sizeof (struct xcoff_symbol), xcoff_symbol_compare);
+
+ sdata->next = NULL;
+ sdata->symbols = xcoff_symbols;
+ sdata->count = xcoff_symbol_count;
+
+ return 1;
+}
+
+/* Compare struct xcoff_line for qsort. */
+
+static int
+xcoff_line_compare (const void *v1, const void *v2)
+{
+ const struct xcoff_line *ln1 = (const struct xcoff_line *) v1;
+ const struct xcoff_line *ln2 = (const struct xcoff_line *) v2;
+
+ if (ln1->pc < ln2->pc)
+ return -1;
+ else if (ln1->pc > ln2->pc)
+ return 1;
+ else
+ return 0;
+}
+
+/* Find a PC in a line vector. We always allocate an extra entry at
+ the end of the lines vector, so that this routine can safely look
+ at the next entry. */
+
+static int
+xcoff_line_search (const void *vkey, const void *ventry)
+{
+ const uintptr_t *key = (const uintptr_t *) vkey;
+ const struct xcoff_line *entry = (const struct xcoff_line *) ventry;
+ uintptr_t pc;
+
+ pc = *key;
+ if (pc < entry->pc)
+ return -1;
+ else if ((entry + 1)->pc == (uintptr_t) -1 || pc >= (entry + 1)->pc)
+ return 1;
+ else
+ return 0;
+}
+
+/* Look for a PC in the line vector for one module. On success,
+ call CALLBACK and return whatever it returns. On error, call
+ ERROR_CALLBACK and return 0. Sets *FOUND to 1 if the PC is found,
+ 0 if not. */
+
+static int
+xcoff_lookup_pc (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ struct xcoff_fileline_data *fdata, uintptr_t pc,
+ backtrace_full_callback callback,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data, int *found)
+{
+ const struct xcoff_line *ln;
+ const char *function;
+
+ *found = 1;
+
+ ln = (struct xcoff_line *) bsearch (&pc, fdata->vec.vec.base,
+ fdata->vec.count,
+ sizeof (struct xcoff_line),
+ xcoff_line_search);
+ if (ln == NULL)
+ {
+ *found = 0;
+ return 0;
+ }
+
+ function = ln->function;
+ /* AIX prepends a '.' to function entry points, remove it. */
+ if (*function == '.')
+ ++function;
+ return callback (data, pc, ln->filename, ln->lineno, function);
+}
+
+/* Return the file/line information for a PC using the XCOFF lineno
+ mapping we built earlier. */
+
+static int
+xcoff_fileline (struct backtrace_state *state, uintptr_t pc,
+ backtrace_full_callback callback,
+ backtrace_error_callback error_callback, void *data)
+
+{
+ struct xcoff_fileline_data *fdata;
+ int found;
+ int ret;
+
+ if (!state->threaded)
+ {
+ for (fdata = (struct xcoff_fileline_data *) state->fileline_data;
+ fdata != NULL;
+ fdata = fdata->next)
+ {
+ ret = xcoff_lookup_pc (state, fdata, pc, callback, error_callback,
+ data, &found);
+ if (ret != 0 || found)
+ return ret;
+ }
+ }
+ else
+ {
+ struct xcoff_fileline_data **pp;
+
+ pp = (struct xcoff_fileline_data **) (void *) &state->fileline_data;
+ while (1)
+ {
+ fdata = backtrace_atomic_load_pointer (pp);
+ if (fdata == NULL)
+ break;
+
+ ret = xcoff_lookup_pc (state, fdata, pc, callback, error_callback,
+ data, &found);
+ if (ret != 0 || found)
+ return ret;
+
+ pp = &fdata->next;
+ }
+ }
+
+ /* FIXME: See if any libraries have been dlopen'ed. */
+
+ return callback (data, pc, NULL, 0, NULL);
+}
+
+/* Add a new mapping to the vector of line mappings that we are
+ building. Returns 1 on success, 0 on failure. */
+
+static int
+xcoff_add_line (struct backtrace_state *state, uintptr_t pc,
+ const char *filename, const char *function, uint32_t lnno,
+ backtrace_error_callback error_callback, void *data,
+ struct xcoff_line_vector *vec)
+{
+ struct xcoff_line *ln;
+
+ ln = ((struct xcoff_line *)
+ backtrace_vector_grow (state, sizeof (struct xcoff_line),
+ error_callback, data, &vec->vec));
+ if (ln == NULL)
+ return 0;
+
+ ln->pc = pc;
+ ln->filename = filename;
+ ln->function = function;
+ ln->lineno = lnno;
+
+ ++vec->count;
+
+ return 1;
+}
+
+/* Add the line number entries for a function to the line vector. */
+
+static int
+xcoff_process_linenos (struct backtrace_state *state, uintptr_t base_address,
+ const b_xcoff_syment *fsym, const char *filename,
+ const b_xcoff_scnhdr *sects,
+ const unsigned char *strtab, size_t strtab_size,
+ uint32_t fcn_lnno, struct xcoff_incl_vector *vec,
+ struct xcoff_line_vector *lvec,
+ const unsigned char *linenos, size_t linenos_size,
+ uintptr_t lnnoptr0,
+ backtrace_error_callback error_callback, void *data)
+{
+ const b_xcoff_auxent *aux;
+ const b_xcoff_lineno *lineno;
+ const unsigned char *lineptr;
+ const char *function;
+ struct xcoff_incl *incl = NULL;
+ uintptr_t lnnoptr;
+ uintptr_t pc;
+ uint32_t lnno;
+ int begincl;
+ size_t i;
+
+ aux = (const b_xcoff_auxent *) (fsym + 1);
+ lnnoptr = aux->x_fcn.x_lnnoptr;
+
+ if (lnnoptr < lnnoptr0 || lnnoptr + LINESZ > lnnoptr0 + linenos_size)
+ return 0;
+
+ function = xcoff_symname (fsym, strtab, strtab_size);
+ if (function == NULL)
+ return 0;
+
+ /* Skip first entry that points to symtab. */
+
+ lnnoptr += LINESZ;
+
+ lineptr = linenos + (lnnoptr - lnnoptr0);
+
+ begincl = -1;
+ while (lineptr + LINESZ <= linenos + linenos_size)
+ {
+ lineno = (const b_xcoff_lineno *) lineptr;
+
+ lnno = lineno->l_lnno;
+ if (lnno == 0)
+ break;
+
+ /* If part of a function other than the beginning comes from an
+ include file, the line numbers are absolute, rather than
+ relative to the beginning of the function. */
+ for (i = 0; i < vec->count; ++i)
+ {
+ incl = (struct xcoff_incl *) vec->vec.base + i;
+ if (incl->begin <= lnnoptr && lnnoptr <= incl->end)
+ break;
+ }
+ if (begincl == -1)
+ begincl = (i < vec->count);
+ if (i < vec->count)
+ {
+ filename = incl->filename;
+ if (begincl == 1)
+ lnno += fcn_lnno - 1;
+ }
+ else
+ lnno += fcn_lnno - 1;
+
+ pc = base_address + lineno->l_addr.l_paddr
+ - sects[fsym->n_scnum - 1].s_paddr;
+ xcoff_add_line (state, pc, filename, function, lnno, error_callback,
+ data, lvec);
+
+ lnnoptr += LINESZ;
+ lineptr += LINESZ;
+ }
+
+ return 1;
+}
+
+/* Initialize the line vector info for xcoff_fileline. */
+
+static int
+xcoff_initialize_fileline (struct backtrace_state *state,
+ uintptr_t base_address,
+ const b_xcoff_scnhdr *sects,
+ const b_xcoff_syment *syms, size_t nsyms,
+ const unsigned char *strtab, size_t strtab_size,
+ const unsigned char *linenos, size_t linenos_size,
+ uint64_t lnnoptr0,
+ backtrace_error_callback error_callback, void *data)
+{
+ struct xcoff_fileline_data *fdata;
+ struct xcoff_incl_vector vec;
+ struct xcoff_line *ln;
+ const b_xcoff_syment *fsym;
+ const b_xcoff_auxent *aux;
+ const char *filename;
+ const char *name;
+ struct xcoff_incl *incl;
+ uintptr_t begin, end;
+ uintptr_t lnno;
+ size_t i;
+
+ fdata = ((struct xcoff_fileline_data *)
+ backtrace_alloc (state, sizeof (struct xcoff_fileline_data),
+ error_callback, data));
+ if (fdata == NULL)
+ return 0;
+
+ memset (fdata, 0, sizeof *fdata);
+ memset (&vec, 0, sizeof vec);
+
+ /* Process include files first. */
+
+ begin = 0;
+ for (i = 0; i < nsyms; ++i)
+ {
+ const b_xcoff_syment *asym = &syms[i];
+
+ switch (asym->n_sclass)
+ {
+ case C_BINCL:
+ begin = asym->n_value;
+ break;
+
+ case C_EINCL:
+ if (begin == 0)
+ break;
+ end = asym->n_value;
+ incl = ((struct xcoff_incl *)
+ backtrace_vector_grow (state, sizeof (struct xcoff_incl),
+ error_callback, data, &vec.vec));
+ if (incl != NULL)
+ {
+ incl->filename = xcoff_symname (asym, strtab, strtab_size);
+ incl->begin = begin;
+ incl->end = end;
+ ++vec.count;
+ }
+ begin = 0;
+ break;
+ }
+
+ i += asym->n_numaux;
+ }
+
+ filename = NULL;
+ fsym = NULL;
+ for (i = 0; i < nsyms; ++i)
+ {
+ const b_xcoff_syment *asym = &syms[i];
+
+ switch (asym->n_sclass)
+ {
+ case C_FILE:
+ filename = xcoff_symname (asym, strtab, strtab_size);
+ if (filename == NULL)
+ break;
+
+ /* If the file auxiliary entry is not used, the symbol name is
+ the name of the source file. If the file auxiliary entry is
+ used, then the symbol name should be .file, and the first
+ file auxiliary entry (by convention) contains the source
+ file name. */
+
+ if (asym->n_numaux > 0 && !strcmp (filename, ".file"))
+ {
+ aux = (const b_xcoff_auxent *) (asym + 1);
+ if (aux->x_file._x.x_zeroes != 0)
+ {
+ /* Make a copy as we will release the symtab view. */
+ char name[FILNMLEN+1];
+ strncpy (name, aux->x_file.x_fname, FILNMLEN);
+ name[FILNMLEN] = '\0';
+ filename = strdup (name);
+ }
+ else if (aux->x_file._x.x_offset < strtab_size)
+ filename = (const char *) strtab + aux->x_file._x.x_offset;
+ else
+ filename = NULL;
+ }
+ break;
+
+ case C_EXT:
+ case C_HIDEXT:
+ case C_WEAKEXT:
+ fsym = NULL;
+ if (!ISFCN (asym->n_type) || asym->n_numaux == 0)
+ break;
+ if (filename == NULL)
+ break;
+ fsym = asym;
+ break;
+
+ case C_FCN:
+ if (asym->n_numaux == 0)
+ break;
+ if (fsym == NULL)
+ break;
+ name = xcoff_symname (asym, strtab, strtab_size);
+ if (name == NULL)
+ break;
+ aux = (const b_xcoff_auxent *) (asym + 1);
+#if BACKTRACE_XCOFF_SIZE == 32
+ lnno = (uint32_t) aux->x_block.x_lnnohi << 16
+ | aux->x_block.x_lnno;
+#else
+ lnno = aux->x_block.x_lnno;
+#endif
+ if (!strcmp (name, ".bf"))
+ {
+ xcoff_process_linenos (state, base_address, fsym, filename,
+ sects, strtab, strtab_size, lnno, &vec,
+ &fdata->vec, linenos, linenos_size,
+ lnnoptr0, error_callback, data);
+ }
+ else if (!strcmp (name, ".ef"))
+ {
+ fsym = NULL;
+ }
+ break;
+ }
+
+ i += asym->n_numaux;
+ }
+
+ /* Allocate one extra entry at the end. */
+ ln = ((struct xcoff_line *)
+ backtrace_vector_grow (state, sizeof (struct xcoff_line),
+ error_callback, data, &fdata->vec.vec));
+ if (ln == NULL)
+ goto fail;
+ ln->pc = (uintptr_t) -1;
+ ln->filename = NULL;
+ ln->function = NULL;
+ ln->lineno = 0;
+
+ if (!backtrace_vector_release (state, &fdata->vec.vec, error_callback, data))
+ goto fail;
+
+ backtrace_qsort (fdata->vec.vec.base, fdata->vec.count,
+ sizeof (struct xcoff_line), xcoff_line_compare);
+
+ if (!state->threaded)
+ {
+ struct xcoff_fileline_data **pp;
+
+ for (pp = (struct xcoff_fileline_data **) (void *) &state->fileline_data;
+ *pp != NULL;
+ pp = &(*pp)->next)
+ ;
+ *pp = fdata;
+ }
+ else
+ {
+ while (1)
+ {
+ struct xcoff_fileline_data **pp;
+
+ pp = (struct xcoff_fileline_data **) (void *) &state->fileline_data;
+
+ while (1)
+ {
+ struct xcoff_fileline_data *p;
+
+ p = backtrace_atomic_load_pointer (pp);
+
+ if (p == NULL)
+ break;
+
+ pp = &p->next;
+ }
+
+ if (__sync_bool_compare_and_swap (pp, NULL, fdata))
+ break;
+ }
+ }
+
+ return 1;
+
+fail:
+ return 0;
+}
+
+/* Add the backtrace data for one XCOFF file. Returns 1 on success,
+ 0 on failure (in both cases descriptor is closed). */
+
+static int
+xcoff_add (struct backtrace_state *state, int descriptor, off_t offset,
+ uintptr_t base_address, backtrace_error_callback error_callback,
+ void *data, fileline *fileline_fn, int *found_sym, int exe)
+{
+ struct backtrace_view fhdr_view;
+ struct backtrace_view sects_view;
+ struct backtrace_view linenos_view;
+ struct backtrace_view syms_view;
+ struct backtrace_view str_view;
+ b_xcoff_filhdr fhdr;
+ const b_xcoff_scnhdr *sects;
+ const b_xcoff_scnhdr *stext;
+ uint64_t lnnoptr;
+ uint32_t nlnno;
+ off_t str_off;
+ size_t sects_size;
+ size_t syms_size;
+ int32_t str_size;
+ int sects_view_valid;
+ int linenos_view_valid;
+ int syms_view_valid;
+ int str_view_valid;
+ int magic_ok;
+ int i;
+
+ *found_sym = 0;
+
+ sects_view_valid = 0;
+ linenos_view_valid = 0;
+ syms_view_valid = 0;
+ str_view_valid = 0;
+
+ /* Map the XCOFF file header. */
+ if (!backtrace_get_view (state, descriptor, offset, sizeof (b_xcoff_filhdr),
+ error_callback, data, &fhdr_view))
+ goto fail;
+
+ memcpy (&fhdr, fhdr_view.data, sizeof fhdr);
+ magic_ok = (fhdr.f_magic == XCOFF_MAGIC);
+
+ backtrace_release_view (state, &fhdr_view, error_callback, data);
+
+ if (!magic_ok)
+ {
+ if (exe)
+ error_callback (data, "executable file is not XCOFF", 0);
+ goto fail;
+ }
+
+ /* Verify object is of expected type. */
+ if ((exe && (fhdr.f_flags & F_SHROBJ))
+ || (!exe && !(fhdr.f_flags & F_SHROBJ)))
+ goto fail;
+
+ /* Read the section headers. */
+
+ sects_size = fhdr.f_nscns * sizeof (b_xcoff_scnhdr);
+
+ if (!backtrace_get_view (state, descriptor,
+ offset + sizeof (fhdr) + fhdr.f_opthdr,
+ sects_size, error_callback, data, &sects_view))
+ goto fail;
+ sects_view_valid = 1;
+ sects = (const b_xcoff_scnhdr *) sects_view.data;
+
+ /* FIXME: assumes only one .text section. */
+ for (i = 0; i < fhdr.f_nscns; ++i)
+ if ((sects[i].s_flags & 0xffff) == STYP_TEXT)
+ break;
+ if (i == fhdr.f_nscns)
+ goto fail;
+
+ stext = &sects[i];
+
+ /* AIX ldinfo_textorg includes the XCOFF headers. */
+ base_address = (exe ? XCOFF_AIX_TEXTBASE : base_address) + stext->s_scnptr;
+
+ lnnoptr = stext->s_lnnoptr;
+ nlnno = stext->s_nlnno;
+
+#if BACKTRACE_XCOFF_SIZE == 32
+ if (nlnno == _OVERFLOW_MARKER)
+ {
+ int sntext = i + 1;
+ /* Find the matching .ovrflo section. */
+ for (i = 0; i < fhdr.f_nscns; ++i)
+ {
+ if (((sects[i].s_flags & 0xffff) == STYP_OVRFLO)
+ && sects[i].s_nlnno == sntext)
+ {
+ nlnno = sects[i].s_vaddr;
+ break;
+ }
+ }
+ }
+#endif
+
+ /* Read the symbol table and the string table. */
+
+ if (fhdr.f_symptr != 0)
+ {
+ struct xcoff_syminfo_data *sdata;
+
+ /* Symbol table is followed by the string table. The string table
+ starts with its length (on 4 bytes).
+ Map the symbol table and the length of the string table. */
+ syms_size = fhdr.f_nsyms * sizeof (b_xcoff_syment);
+
+ if (!backtrace_get_view (state, descriptor, offset + fhdr.f_symptr,
+ syms_size + 4, error_callback, data,
+ &syms_view))
+ goto fail;
+ syms_view_valid = 1;
+
+ memcpy (&str_size, syms_view.data + syms_size, 4);
+
+ str_off = fhdr.f_symptr + syms_size;
+
+ if (str_size > 4)
+ {
+ /* Map string table (including the length word). */
+
+ if (!backtrace_get_view (state, descriptor, offset + str_off,
+ str_size, error_callback, data, &str_view))
+ goto fail;
+ str_view_valid = 1;
+ }
+
+ sdata = ((struct xcoff_syminfo_data *)
+ backtrace_alloc (state, sizeof *sdata, error_callback, data));
+ if (sdata == NULL)
+ goto fail;
+
+ if (!xcoff_initialize_syminfo (state, base_address, sects,
+ syms_view.data, fhdr.f_nsyms,
+ str_view.data, str_size,
+ error_callback, data, sdata))
+ {
+ backtrace_free (state, sdata, sizeof *sdata, error_callback, data);
+ goto fail;
+ }
+
+ *found_sym = 1;
+
+ xcoff_add_syminfo_data (state, sdata);
+ }
+
+ /* Read the line number entries. */
+
+ if (fhdr.f_symptr != 0 && lnnoptr != 0)
+ {
+ size_t linenos_size = (size_t) nlnno * LINESZ;
+
+ if (!backtrace_get_view (state, descriptor, offset + lnnoptr,
+ linenos_size,
+ error_callback, data, &linenos_view))
+ goto fail;
+ linenos_view_valid = 1;
+
+ if (xcoff_initialize_fileline (state, base_address, sects,
+ syms_view.data, fhdr.f_nsyms,
+ str_view.data, str_size,
+ linenos_view.data, linenos_size,
+ lnnoptr, error_callback, data))
+ *fileline_fn = xcoff_fileline;
+
+ backtrace_release_view (state, &linenos_view, error_callback, data);
+ linenos_view_valid = 0;
+ }
+
+ backtrace_release_view (state, &sects_view, error_callback, data);
+ sects_view_valid = 0;
+ if (syms_view_valid)
+ backtrace_release_view (state, &syms_view, error_callback, data);
+ syms_view_valid = 0;
+
+ /* We've read all we need from the executable. */
+ if (!backtrace_close (descriptor, error_callback, data))
+ goto fail;
+ descriptor = -1;
+
+ return 1;
+
+ fail:
+ if (sects_view_valid)
+ backtrace_release_view (state, &sects_view, error_callback, data);
+ if (str_view_valid)
+ backtrace_release_view (state, &str_view, error_callback, data);
+ if (syms_view_valid)
+ backtrace_release_view (state, &syms_view, error_callback, data);
+ if (linenos_view_valid)
+ backtrace_release_view (state, &linenos_view, error_callback, data);
+ if (descriptor != -1 && offset == 0)
+ backtrace_close (descriptor, error_callback, data);
+ return 0;
+}
+
+#ifdef HAVE_LOADQUERY
+
+/* Read an integer value in human-readable format from an AIX
+ big archive fixed-length or member header. */
+
+static int
+xcoff_parse_decimal (const char *buf, size_t size, off_t *off)
+{
+ char str[32];
+ char *end;
+
+ if (size >= sizeof str)
+ return 0;
+ memcpy (str, buf, size);
+ str[size] = '\0';
+ *off = strtol (str, &end, 10);
+ if (*end != '\0' && *end != ' ')
+ return 0;
+
+ return 1;
+}
+
+/* Add the backtrace data for a member of an AIX big archive.
+ Returns 1 on success, 0 on failure. */
+
+static int
+xcoff_armem_add (struct backtrace_state *state, int descriptor,
+ uintptr_t base_address, const char *member,
+ backtrace_error_callback error_callback, void *data,
+ fileline *fileline_fn, int *found_sym)
+{
+ struct backtrace_view view;
+ b_ar_fl_hdr fl_hdr;
+ const b_ar_hdr *ar_hdr;
+ off_t off;
+ off_t len;
+ int memlen;
+
+ *found_sym = 0;
+
+ /* Map archive fixed-length header. */
+
+ if (!backtrace_get_view (state, descriptor, 0, sizeof (b_ar_fl_hdr),
+ error_callback, data, &view))
+ goto fail;
+
+ memcpy (&fl_hdr, view.data, sizeof (b_ar_fl_hdr));
+
+ backtrace_release_view (state, &view, error_callback, data);
+
+ if (memcmp (fl_hdr.fl_magic, AIAMAGBIG, 8) != 0)
+ goto fail;
+
+ memlen = strlen (member);
+
+ /* Read offset of first archive member. */
+ if (!xcoff_parse_decimal (fl_hdr.fl_fstmoff, sizeof fl_hdr.fl_fstmoff, &off))
+ goto fail;
+ while (off != 0)
+ {
+ /* Map archive member header and member name. */
+
+ if (!backtrace_get_view (state, descriptor, off,
+ sizeof (b_ar_hdr) + memlen,
+ error_callback, data, &view))
+ break;
+
+ ar_hdr = (const b_ar_hdr *) view.data;
+
+ /* Read archive member name length. */
+ if (!xcoff_parse_decimal (ar_hdr->ar_namlen, sizeof ar_hdr->ar_namlen,
+ &len))
+ {
+ backtrace_release_view (state, &view, error_callback, data);
+ break;
+ }
+ if (len == memlen && !memcmp (ar_hdr->ar_name, member, memlen))
+ {
+ off = (off + sizeof (b_ar_hdr) + memlen + 1) & ~1;
+
+ /* The archive can contain several members with the same name
+ (e.g. 32-bit and 64-bit), so continue if not ok. */
+
+ if (xcoff_add (state, descriptor, off, base_address, error_callback,
+ data, fileline_fn, found_sym, 0))
+ {
+ backtrace_release_view (state, &view, error_callback, data);
+ return 1;
+ }
+ }
+
+ /* Read offset of next archive member. */
+ if (!xcoff_parse_decimal (ar_hdr->ar_nxtmem, sizeof ar_hdr->ar_nxtmem,
+ &off))
+ {
+ backtrace_release_view (state, &view, error_callback, data);
+ break;
+ }
+ backtrace_release_view (state, &view, error_callback, data);
+ }
+
+ fail:
+ /* No matching member found. */
+ backtrace_close (descriptor, error_callback, data);
+ return 0;
+}
+
+/* Add the backtrace data for dynamically loaded libraries. */
+
+static void
+xcoff_add_shared_libs (struct backtrace_state *state,
+ backtrace_error_callback error_callback,
+ void *data, fileline *fileline_fn, int *found_sym)
+{
+ const struct ld_info *ldinfo;
+ void *buf;
+ unsigned int buflen;
+ const char *member;
+ int descriptor;
+ int does_not_exist;
+ int lib_found_sym;
+ int ret;
+
+ /* Retrieve the list of loaded libraries. */
+
+ buf = NULL;
+ buflen = 512;
+ do
+ {
+ buf = realloc (buf, buflen);
+ if (buf == NULL)
+ {
+ ret = -1;
+ break;
+ }
+ ret = loadquery (L_GETINFO, buf, buflen);
+ if (ret == 0)
+ break;
+ buflen *= 2;
+ }
+ while (ret == -1 && errno == ENOMEM);
+ if (ret != 0)
+ {
+ free (buf);
+ return;
+ }
+
+ ldinfo = (const struct ld_info *) buf;
+ while ((const char *) ldinfo < (const char *) buf + buflen)
+ {
+ if (*ldinfo->ldinfo_filename != '/')
+ goto next;
+
+ descriptor = backtrace_open (ldinfo->ldinfo_filename, error_callback,
+ data, &does_not_exist);
+ if (descriptor < 0)
+ goto next;
+
+ /* Check if it is an archive (member name not empty). */
+
+ member = ldinfo->ldinfo_filename + strlen (ldinfo->ldinfo_filename) + 1;
+ if (*member)
+ {
+ xcoff_armem_add (state, descriptor,
+ (uintptr_t) ldinfo->ldinfo_textorg, member,
+ error_callback, data, fileline_fn, &lib_found_sym);
+ }
+ else
+ {
+ xcoff_add (state, descriptor, 0, (uintptr_t) ldinfo->ldinfo_textorg,
+ error_callback, data, fileline_fn, &lib_found_sym, 0);
+ }
+ if (lib_found_sym)
+ *found_sym = 1;
+
+ next:
+ if (ldinfo->ldinfo_next == 0)
+ break;
+ ldinfo = (const struct ld_info *) ((const char *) ldinfo
+ + ldinfo->ldinfo_next);
+ }
+
+ free (buf);
+}
+#endif /* HAVE_LOADQUERY */
+
+/* Initialize the backtrace data we need from an XCOFF executable.
+ Returns 1 on success, 0 on failure. */
+
+int
+backtrace_initialize (struct backtrace_state *state, int descriptor,
+ backtrace_error_callback error_callback,
+ void *data, fileline *fileline_fn)
+{
+ int ret;
+ int found_sym;
+ fileline xcoff_fileline_fn = xcoff_nodebug;
+
+ ret = xcoff_add (state, descriptor, 0, 0, error_callback, data,
+ &xcoff_fileline_fn, &found_sym, 1);
+ if (!ret)
+ return 0;
+
+#ifdef HAVE_LOADQUERY
+ xcoff_add_shared_libs (state, error_callback, data, &xcoff_fileline_fn,
+ &found_sym);
+#endif
+
+ if (!state->threaded)
+ {
+ if (found_sym)
+ state->syminfo_fn = xcoff_syminfo;
+ else if (state->syminfo_fn == NULL)
+ state->syminfo_fn = xcoff_nosyms;
+ }
+ else
+ {
+ if (found_sym)
+ backtrace_atomic_store_pointer (&state->syminfo_fn, xcoff_syminfo);
+ else
+ __sync_bool_compare_and_swap (&state->syminfo_fn, NULL, xcoff_nosyms);
+ }
+
+ if (!state->threaded)
+ {
+ if (state->fileline_fn == NULL || state->fileline_fn == xcoff_nodebug)
+ *fileline_fn = xcoff_fileline_fn;
+ }
+ else
+ {
+ fileline current_fn;
+
+ current_fn = backtrace_atomic_load_pointer (&state->fileline_fn);
+ if (current_fn == NULL || current_fn == xcoff_nodebug)
+ *fileline_fn = xcoff_fileline_fn;
+ }
+
+ return 1;
+}
diff --git a/libcc1/ChangeLog b/libcc1/ChangeLog
index a5acf0df000..4d8f40c8312 100644
--- a/libcc1/ChangeLog
+++ b/libcc1/ChangeLog
@@ -1,3 +1,8 @@
+2017-07-20 Nathan Sidwell <nathan@acm.org>
+
+ Remove TYPE_METHODS.
+ * libcp1plugin.cc (plugin_build_decl): Member fns are on TYPE_FIELDS.
+
2017-07-12 Nathan Sidwell <nathan@acm.org>
* libcp1plugin.cc (plugin_build_decl): Use
diff --git a/libcc1/libcp1plugin.cc b/libcc1/libcp1plugin.cc
index 8dd5e673838..d7bf5a29d6d 100644
--- a/libcc1/libcp1plugin.cc
+++ b/libcc1/libcp1plugin.cc
@@ -1556,7 +1556,7 @@ plugin_build_decl (cc1_plugin::connection *self,
if ((ctor || dtor)
/* Don't crash after a duplicate declaration of a cdtor. */
- && TYPE_METHODS (current_class_type) == decl)
+ && TYPE_FIELDS (current_class_type) == decl)
{
/* ctors and dtors clones are chained after DECL.
However, we create the clones before TYPE_METHODS is
@@ -1568,9 +1568,9 @@ plugin_build_decl (cc1_plugin::connection *self,
tree save = DECL_CHAIN (decl);
DECL_CHAIN (decl) = NULL_TREE;
clone_function_decl (decl, /*update_methods=*/true);
- gcc_assert (TYPE_METHODS (current_class_type) == decl);
- TYPE_METHODS (current_class_type)
- = nreverse (TYPE_METHODS (current_class_type));
+ gcc_assert (TYPE_FIELDS (current_class_type) == decl);
+ TYPE_FIELDS (current_class_type)
+ = nreverse (TYPE_FIELDS (current_class_type));
DECL_CHAIN (decl) = save;
}
diff --git a/libcpp/po/ChangeLog b/libcpp/po/ChangeLog
index 1aa4fc5879a..9dea13a5557 100644
--- a/libcpp/po/ChangeLog
+++ b/libcpp/po/ChangeLog
@@ -1,3 +1,7 @@
+2017-08-04 Joseph Myers <joseph@codesourcery.com>
+
+ * cpplib.pot: Regenerate.
+
2017-05-01 Joseph Myers <joseph@codesourcery.com>
* cpplib.pot: Regenerate.
diff --git a/libcpp/po/cpplib.pot b/libcpp/po/cpplib.pot
index 565ad71aed5..c65e14175f3 100644
--- a/libcpp/po/cpplib.pot
+++ b/libcpp/po/cpplib.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n"
-"POT-Creation-Date: 2017-05-01 22:24+0000\n"
+"POT-Creation-Date: 2017-08-04 22:19+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"
@@ -789,7 +789,7 @@ msgstr ""
msgid "multi-line comment"
msgstr ""
-#: lex.c:3248
+#: lex.c:3255
#, c-format
msgid "unspellable token %s"
msgstr ""
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index db33eea1378..14d20fbfac8 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,54 @@
+2017-08-07 Jonathan Yong <10walls@gmail.com>
+
+ * config.host (*-cygwin): Include file from mingw
+ config/i386/enable-execute-stack-mingw32.c
+
+2017-08-01 Jerome Lambourg <lambourg@adacore.com>
+ Doug Rupp <rupp@adacore.com>
+ Olivier Hainque <hainque@adacore.com>
+
+ * config.host (arm-wrs-vxworks*): Rework to handle arm-wrs-vxworks7
+ as well as arm-wrs-vxworks.
+ * config/arm/t-vxworks7: New file. Add unwind-arm-vxworks.c to
+ LIB2ADDEH.
+ * config/arm/unwind-arm-vxworks.c: New file. Provide dummy
+ __exidx_start and __exidx_end for downloadable modules.
+
+2017-08-01 Olivier Hainque <hainque@adacore.com>
+
+ * config/t-vxworks (LIBGCC2_INCLUDES): Start with -I. after -nostdinc.
+ * config/t-vxworks7: Likewise.
+
+2017-08-01 Olivier Hainque <hainque@adacore.com>
+
+ * config/t-vxworks: Instead of redefining LIB2ADD,
+ augment LIB2ADDEH with vxlib.c and vxlib-tls.c.
+
+2017-07-28 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * config/rs6000/ibm-ldouble.c: Disable if defined __rtems__.
+
+2017-07-24 Daniel Santos <daniel.santos@pobox.com>
+
+ PR testsuite/80759
+ * config.host: include i386/t-msabi for darwin and solaris.
+ * config/i386/i386-asm.h
+ (ELFFN): Rename to FN_TYPE.
+ (FN_SIZE): New macro.
+ (FN_HIDDEN): Likewise.
+ (ASMNAME): Likewise.
+ (FUNC_START): Rename to FUNC_BEGIN, use ASMNAME, replace .global with
+ .globl.
+ (HIDDEN_FUNC): Use ASMNAME and .globl instead of .global.
+ (SSE_SAVE): Convert to cpp macro, hard-code offset (always 0x60).
+ * config/i386/resms64.S: Use SSE_SAVE as cpp macro instead of gas
+ .macro.
+ * config/i386/resms64f.S: Likewise.
+ * config/i386/resms64fx.S: Likewise.
+ * config/i386/resms64x.S: Likewise.
+ * config/i386/savms64.S: Likewise.
+ * config/i386/savms64f.S: Likewise.
+
2017-07-19 John Marino <gnugcc@marino.st>
* config/i386/dragonfly-unwind.h: Handle sigtramp relocation.
diff --git a/libgcc/config.host b/libgcc/config.host
index a5ab4536321..546b12b5971 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -324,6 +324,9 @@ case ${host} in
i[34567]86-*-mingw* | x86_64-*-mingw*)
enable_execute_stack=config/i386/enable-execute-stack-mingw32.c
;;
+i[34567]86-*-cygwin* | x86_64-*-cygwin*)
+ enable_execute_stack=config/i386/enable-execute-stack-mingw32.c
+ ;;
*)
enable_execute_stack=enable-execute-stack-empty.c;
;;
@@ -388,9 +391,18 @@ arc*-*-linux*)
extra_parts="$extra_parts crti.o crtn.o"
extra_parts="$extra_parts crttls.o"
;;
-arm-wrs-vxworks)
+arm-wrs-vxworks|arm-wrs-vxworks7)
tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
extra_parts="$extra_parts crti.o crtn.o"
+ case ${host} in
+ *-*-vxworks7)
+ # Note that arm/t-bpabi will reset the LIB2ADDEH macro.
+ # This is intentional.
+ tmake_file="$tmake_file arm/t-bpabi arm/t-vxworks7"
+ tm_file="$tm_file arm/bpabi-lib.h"
+ unwind_header=config/arm/unwind-arm.h
+ ;;
+ esac
;;
arm*-*-freebsd*) # ARM FreeBSD EABI
tmake_file="${tmake_file} arm/t-arm t-fixedpoint-gnu-prefix arm/t-elf"
@@ -581,12 +593,12 @@ hppa*-*-openbsd*)
tmake_file="$tmake_file pa/t-openbsd"
;;
i[34567]86-*-darwin*)
- tmake_file="$tmake_file i386/t-crtpc t-crtfm"
+ tmake_file="$tmake_file i386/t-crtpc t-crtfm i386/t-msabi"
tm_file="$tm_file i386/darwin-lib.h"
extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
;;
x86_64-*-darwin*)
- tmake_file="$tmake_file i386/t-crtpc t-crtfm"
+ tmake_file="$tmake_file i386/t-crtpc t-crtfm i386/t-msabi"
tm_file="$tm_file i386/darwin-lib.h"
extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
;;
@@ -663,7 +675,7 @@ i[34567]86-*-rtems*)
extra_parts="$extra_parts crti.o crtn.o"
;;
i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]*)
- tmake_file="$tmake_file i386/t-crtpc t-crtfm"
+ tmake_file="$tmake_file i386/t-crtpc t-crtfm i386/t-msabi"
extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
tm_file="${tm_file} i386/elf-lib.h"
md_unwind_header=i386/sol2-unwind.h
diff --git a/libgcc/config/arm/t-vxworks7 b/libgcc/config/arm/t-vxworks7
new file mode 100644
index 00000000000..bead3369a59
--- /dev/null
+++ b/libgcc/config/arm/t-vxworks7
@@ -0,0 +1 @@
+LIB2ADDEH += $(srcdir)/config/arm/unwind-arm-vxworks.c
diff --git a/libgcc/config/arm/unwind-arm-vxworks.c b/libgcc/config/arm/unwind-arm-vxworks.c
new file mode 100644
index 00000000000..ed23ab9fc3c
--- /dev/null
+++ b/libgcc/config/arm/unwind-arm-vxworks.c
@@ -0,0 +1,33 @@
+/* Support for ARM EABI unwinding in VxWorks Downloadable Kernel Modules.
+ Copyright (C) 2017 Free Software Foundation, Inc.
+
+ This file 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 file 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/>. */
+
+#if defined(__vxworks) && !defined (__RTP__)
+/* Vxworks for ARM uses __gnu_Unwind_Find_exidx to retrieve the exception
+ table for downloadable kernel modules. As those modules are only partially
+ linked, the linker won't generate __exidx_start|end, but the two symbols
+ are still used in alternate paths from unwind-arm-common.inc.
+
+ As we don't rely on them, but still need the symbols, we define dummy
+ values here. */
+void *__exidx_start __attribute__((__visibility__ ("hidden")));
+void *__exidx_end __attribute__((__visibility__ ("hidden")));
+#endif
diff --git a/libgcc/config/i386/i386-asm.h b/libgcc/config/i386/i386-asm.h
index c613e9fd83d..1387fd24b4f 100644
--- a/libgcc/config/i386/i386-asm.h
+++ b/libgcc/config/i386/i386-asm.h
@@ -26,22 +26,45 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#ifndef I386_ASM_H
#define I386_ASM_H
+#include "auto-host.h"
+
+/* These macros currently support GNU/Linux, Solaris and Darwin. */
+
#ifdef __ELF__
-# define ELFFN(fn) .type fn,@function
+# define FN_TYPE(fn) .type fn,@function
+# define FN_SIZE(fn) .size fn,.-fn
+# ifdef HAVE_GAS_HIDDEN
+# define FN_HIDDEN(fn) .hidden fn
+# endif
+#else
+# define FN_TYPE(fn)
+# define FN_SIZE(fn)
+#endif
+
+#ifndef FN_HIDDEN
+# define FN_HIDDEN(fn)
+#endif
+
+#ifdef __USER_LABEL_PREFIX__
+# define ASMNAME2(prefix, name) prefix ## name
+# define ASMNAME1(prefix, name) ASMNAME2(prefix, name)
+# define ASMNAME(name) ASMNAME1(__USER_LABEL_PREFIX__, name)
#else
-# define ELFFN(fn)
+# define ASMNAME(name) name
#endif
-#define FUNC_START(fn) \
- .global fn; \
- ELFFN (fn); \
-fn:
+#define FUNC_BEGIN(fn) \
+ .globl ASMNAME(fn); \
+ FN_TYPE (ASMNAME(fn)); \
+ASMNAME(fn):
-#define HIDDEN_FUNC(fn)\
- FUNC_START (fn) \
- .hidden fn; \
+#define HIDDEN_FUNC(fn) \
+ .globl ASMNAME(fn); \
+ FN_TYPE(ASMNAME(fn)); \
+ FN_HIDDEN(ASMNAME(fn)); \
+ASMNAME(fn):
-#define FUNC_END(fn) .size fn,.-fn
+#define FUNC_END(fn) FN_SIZE(ASMNAME(fn))
#ifdef __SSE2__
# ifdef __AVX__
@@ -51,32 +74,30 @@ fn:
# endif
/* Save SSE registers 6-15. off is the offset of rax to get to xmm6. */
-.macro SSE_SAVE off=0
- MOVAPS %xmm15,(\off - 0x90)(%rax)
- MOVAPS %xmm14,(\off - 0x80)(%rax)
- MOVAPS %xmm13,(\off - 0x70)(%rax)
- MOVAPS %xmm12,(\off - 0x60)(%rax)
- MOVAPS %xmm11,(\off - 0x50)(%rax)
- MOVAPS %xmm10,(\off - 0x40)(%rax)
- MOVAPS %xmm9, (\off - 0x30)(%rax)
- MOVAPS %xmm8, (\off - 0x20)(%rax)
- MOVAPS %xmm7, (\off - 0x10)(%rax)
- MOVAPS %xmm6, \off(%rax)
-.endm
+#define SSE_SAVE \
+ MOVAPS %xmm15,-0x30(%rax); \
+ MOVAPS %xmm14,-0x20(%rax); \
+ MOVAPS %xmm13,-0x10(%rax); \
+ MOVAPS %xmm12, (%rax); \
+ MOVAPS %xmm11, 0x10(%rax); \
+ MOVAPS %xmm10, 0x20(%rax); \
+ MOVAPS %xmm9, 0x30(%rax); \
+ MOVAPS %xmm8, 0x40(%rax); \
+ MOVAPS %xmm7, 0x50(%rax); \
+ MOVAPS %xmm6, 0x60(%rax)
/* Restore SSE registers 6-15. off is the offset of rsi to get to xmm6. */
-.macro SSE_RESTORE off=0
- MOVAPS (\off - 0x90)(%rsi), %xmm15
- MOVAPS (\off - 0x80)(%rsi), %xmm14
- MOVAPS (\off - 0x70)(%rsi), %xmm13
- MOVAPS (\off - 0x60)(%rsi), %xmm12
- MOVAPS (\off - 0x50)(%rsi), %xmm11
- MOVAPS (\off - 0x40)(%rsi), %xmm10
- MOVAPS (\off - 0x30)(%rsi), %xmm9
- MOVAPS (\off - 0x20)(%rsi), %xmm8
- MOVAPS (\off - 0x10)(%rsi), %xmm7
- MOVAPS \off(%rsi), %xmm6
-.endm
+#define SSE_RESTORE \
+ MOVAPS -0x30(%rsi), %xmm15; \
+ MOVAPS -0x20(%rsi), %xmm14; \
+ MOVAPS -0x10(%rsi), %xmm13; \
+ MOVAPS (%rsi), %xmm12; \
+ MOVAPS 0x10(%rsi), %xmm11; \
+ MOVAPS 0x20(%rsi), %xmm10; \
+ MOVAPS 0x30(%rsi), %xmm9 ; \
+ MOVAPS 0x40(%rsi), %xmm8 ; \
+ MOVAPS 0x50(%rsi), %xmm7 ; \
+ MOVAPS 0x60(%rsi), %xmm6
#endif /* __SSE2__ */
#endif /* I386_ASM_H */
diff --git a/libgcc/config/i386/resms64.S b/libgcc/config/i386/resms64.S
index f47e2f066fb..f842c20a77a 100644
--- a/libgcc/config/i386/resms64.S
+++ b/libgcc/config/i386/resms64.S
@@ -43,7 +43,7 @@ HIDDEN_FUNC(__resms64_13)
mov -0x48(%rsi),%rbx
HIDDEN_FUNC(__resms64_12)
mov -0x40(%rsi),%rdi
- SSE_RESTORE off=0x60
+ SSE_RESTORE
mov -0x38(%rsi),%rsi
ret
FUNC_END(__resms64_12)
diff --git a/libgcc/config/i386/resms64f.S b/libgcc/config/i386/resms64f.S
index 817da60cf15..81946cda944 100644
--- a/libgcc/config/i386/resms64f.S
+++ b/libgcc/config/i386/resms64f.S
@@ -42,7 +42,7 @@ HIDDEN_FUNC(__resms64f_13)
mov -0x48(%rsi),%rbx
HIDDEN_FUNC(__resms64f_12)
mov -0x40(%rsi),%rdi
- SSE_RESTORE off=0x60
+ SSE_RESTORE
mov -0x38(%rsi),%rsi
ret
FUNC_END(__resms64f_12)
diff --git a/libgcc/config/i386/resms64fx.S b/libgcc/config/i386/resms64fx.S
index 5dba5848dee..acf34fa0837 100644
--- a/libgcc/config/i386/resms64fx.S
+++ b/libgcc/config/i386/resms64fx.S
@@ -43,7 +43,7 @@ HIDDEN_FUNC(__resms64fx_13)
mov -0x48(%rsi),%rbx
HIDDEN_FUNC(__resms64fx_12)
mov -0x40(%rsi),%rdi
- SSE_RESTORE off=0x60
+ SSE_RESTORE
mov -0x38(%rsi),%rsi
leaveq
ret
diff --git a/libgcc/config/i386/resms64x.S b/libgcc/config/i386/resms64x.S
index 7770447cf38..e27aab7d881 100644
--- a/libgcc/config/i386/resms64x.S
+++ b/libgcc/config/i386/resms64x.S
@@ -44,7 +44,7 @@ HIDDEN_FUNC(__resms64x_13)
mov -0x48(%rsi),%rbx
HIDDEN_FUNC(__resms64x_12)
mov -0x40(%rsi),%rdi
- SSE_RESTORE off=0x60
+ SSE_RESTORE
mov -0x38(%rsi),%rsi
mov %r10,%rsp
ret
diff --git a/libgcc/config/i386/savms64.S b/libgcc/config/i386/savms64.S
index 2067dd8614f..44dda46ec54 100644
--- a/libgcc/config/i386/savms64.S
+++ b/libgcc/config/i386/savms64.S
@@ -44,7 +44,7 @@ HIDDEN_FUNC(__savms64_13)
HIDDEN_FUNC(__savms64_12)
mov %rdi,-0x40(%rax)
mov %rsi,-0x38(%rax)
- SSE_SAVE off=0x60
+ SSE_SAVE
ret
FUNC_END(__savms64_12)
FUNC_END(__savms64_13)
diff --git a/libgcc/config/i386/savms64f.S b/libgcc/config/i386/savms64f.S
index 81583b6eb68..64e91ac0394 100644
--- a/libgcc/config/i386/savms64f.S
+++ b/libgcc/config/i386/savms64f.S
@@ -43,7 +43,7 @@ HIDDEN_FUNC(__savms64f_13)
HIDDEN_FUNC(__savms64f_12)
mov %rdi,-0x40(%rax)
mov %rsi,-0x38(%rax)
- SSE_SAVE off=0x60
+ SSE_SAVE
ret
FUNC_END(__savms64f_12)
FUNC_END(__savms64f_13)
diff --git a/libgcc/config/rs6000/ibm-ldouble.c b/libgcc/config/rs6000/ibm-ldouble.c
index 949b50c98ca..e99652e523f 100644
--- a/libgcc/config/rs6000/ibm-ldouble.c
+++ b/libgcc/config/rs6000/ibm-ldouble.c
@@ -45,7 +45,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
This code currently assumes the most significant double is in
the lower numbered register or lower addressed memory. */
-#if defined (__MACH__) || defined (__powerpc__) || defined (_AIX)
+#if (defined (__MACH__) || defined (__powerpc__) || defined (_AIX)) \
+ && !defined (__rtems__)
#define fabs(x) __builtin_fabs(x)
#define isless(x, y) __builtin_isless (x, y)
diff --git a/libgcc/config/t-vxworks b/libgcc/config/t-vxworks
index d67e446b46d..bbbb16deede 100644
--- a/libgcc/config/t-vxworks
+++ b/libgcc/config/t-vxworks
@@ -2,12 +2,13 @@
LIBGCC2_DEBUG_CFLAGS =
# Extra libgcc2 modules used by gthr-vxworks.h functions
-LIB2ADD = $(srcdir)/config/vxlib.c $(srcdir)/config/vxlib-tls.c
+LIB2ADDEH += $(srcdir)/config/vxlib.c $(srcdir)/config/vxlib-tls.c
-# This ensures that the correct target headers are used; some
-# VxWorks system headers have names that collide with GCC's
-# internal (host) headers, e.g. regs.h.
-LIBGCC2_INCLUDES = -nostdinc \
+# This ensures that the correct target headers are used; some VxWorks
+# system headers have names that collide with GCC's internal (host)
+# headers, e.g. regs.h. Make sure the local libgcc headers still
+# prevail (e.g. unwind.h).
+LIBGCC2_INCLUDES = -nostdinc -I. \
`case "/$(MULTIDIR)" in \
*/mrtp*) echo -I$(WIND_USR)/h -I$(WIND_USR)/h/wrn/coreip ;; \
*) echo -I$(WIND_BASE)/target/h -I$(WIND_BASE)/target/h/wrn/coreip ;; \
diff --git a/libgcc/config/t-vxworks7 b/libgcc/config/t-vxworks7
index 77591cd642c..ae1dff9ccbd 100644
--- a/libgcc/config/t-vxworks7
+++ b/libgcc/config/t-vxworks7
@@ -4,11 +4,12 @@ LIBGCC2_DEBUG_CFLAGS =
# Extra libgcc2 modules used by gthr-vxworks.h functions
LIB2ADDEH += $(srcdir)/config/vxlib.c $(srcdir)/config/vxlib-tls.c
-# This ensures that the correct target headers are used; some
-# VxWorks system headers have names that collide with GCC's
-# internal (host) headers, e.g. regs.h.
+# This ensures that the correct target headers are used; some VxWorks
+# system headers have names that collide with GCC's internal (host)
+# headers, e.g. regs.h. Make sure the local libgcc headers still
+# prevail (e.g. unwind.h).
LIBGCC2_INCLUDES = -nostdinc \
- -I$(VSB_DIR)/h -I$(VSB_DIR)/share/h \
+ -I. -I$(VSB_DIR)/h -I$(VSB_DIR)/share/h \
`case "/$(MULTIDIR)" in \
*/mrtp*) echo -I$(VSB_DIR)/usr/h/public -I$(VSB_DIR)/usr/h ;; \
*) echo -I$(VSB_DIR)/krnl/h/system -I$(VSB_DIR)/krnl/h/public ;; \
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index f34b4df785a..3b3cf7f86f9 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,4 +1,141 @@
-2017-06-09 Thomas Koenig <tkoenig@gcc.gnu.org>
+2017-07-31 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/81581
+ * m4/ifuntion.m4 (name`'rtype_qual`_'atype_code): Perform check
+ for dim.
+ (`m'name`'rtype_qual`_'atype_code): Likewise. Change type of rank
+ and tim to index_type.
+ (`s'name`'rtype_qual`_'atype_code): Perform check for dim.
+ * generated/iall_i16.c: Regenerated.
+ * generated/iall_i1.c: Regenerated.
+ * generated/iall_i2.c: Regenerated.
+ * generated/iall_i4.c: Regenerated.
+ * generated/iall_i8.c: Regenerated.
+ * generated/iany_i16.c: Regenerated.
+ * generated/iany_i1.c: Regenerated.
+ * generated/iany_i2.c: Regenerated.
+ * generated/iany_i4.c: Regenerated.
+ * generated/iany_i8.c: Regenerated.
+ * generated/iparity_i16.c: Regenerated.
+ * generated/iparity_i1.c: Regenerated.
+ * generated/iparity_i2.c: Regenerated.
+ * generated/iparity_i4.c: Regenerated.
+ * generated/iparity_i8.c: Regenerated.
+ * generated/maxloc1_16_i16.c: Regenerated.
+ * generated/maxloc1_16_i1.c: Regenerated.
+ * generated/maxloc1_16_i2.c: Regenerated.
+ * generated/maxloc1_16_i4.c: Regenerated.
+ * generated/maxloc1_16_i8.c: Regenerated.
+ * generated/maxloc1_16_r10.c: Regenerated.
+ * generated/maxloc1_16_r16.c: Regenerated.
+ * generated/maxloc1_16_r4.c: Regenerated.
+ * generated/maxloc1_16_r8.c: Regenerated.
+ * generated/maxloc1_4_i16.c: Regenerated.
+ * generated/maxloc1_4_i1.c: Regenerated.
+ * generated/maxloc1_4_i2.c: Regenerated.
+ * generated/maxloc1_4_i4.c: Regenerated.
+ * generated/maxloc1_4_i8.c: Regenerated.
+ * generated/maxloc1_4_r10.c: Regenerated.
+ * generated/maxloc1_4_r16.c: Regenerated.
+ * generated/maxloc1_4_r4.c: Regenerated.
+ * generated/maxloc1_4_r8.c: Regenerated.
+ * generated/maxloc1_8_i16.c: Regenerated.
+ * generated/maxloc1_8_i1.c: Regenerated.
+ * generated/maxloc1_8_i2.c: Regenerated.
+ * generated/maxloc1_8_i4.c: Regenerated.
+ * generated/maxloc1_8_i8.c: Regenerated.
+ * generated/maxloc1_8_r10.c: Regenerated.
+ * generated/maxloc1_8_r16.c: Regenerated.
+ * generated/maxloc1_8_r4.c: Regenerated.
+ * generated/maxloc1_8_r8.c: Regenerated.
+ * generated/maxval_i16.c: Regenerated.
+ * generated/maxval_i1.c: Regenerated.
+ * generated/maxval_i2.c: Regenerated.
+ * generated/maxval_i4.c: Regenerated.
+ * generated/maxval_i8.c: Regenerated.
+ * generated/maxval_r10.c: Regenerated.
+ * generated/maxval_r16.c: Regenerated.
+ * generated/maxval_r4.c: Regenerated.
+ * generated/maxval_r8.c: Regenerated.
+ * generated/minloc1_16_i16.c: Regenerated.
+ * generated/minloc1_16_i1.c: Regenerated.
+ * generated/minloc1_16_i2.c: Regenerated.
+ * generated/minloc1_16_i4.c: Regenerated.
+ * generated/minloc1_16_i8.c: Regenerated.
+ * generated/minloc1_16_r10.c: Regenerated.
+ * generated/minloc1_16_r16.c: Regenerated.
+ * generated/minloc1_16_r4.c: Regenerated.
+ * generated/minloc1_16_r8.c: Regenerated.
+ * generated/minloc1_4_i16.c: Regenerated.
+ * generated/minloc1_4_i1.c: Regenerated.
+ * generated/minloc1_4_i2.c: Regenerated.
+ * generated/minloc1_4_i4.c: Regenerated.
+ * generated/minloc1_4_i8.c: Regenerated.
+ * generated/minloc1_4_r10.c: Regenerated.
+ * generated/minloc1_4_r16.c: Regenerated.
+ * generated/minloc1_4_r4.c: Regenerated.
+ * generated/minloc1_4_r8.c: Regenerated.
+ * generated/minloc1_8_i16.c: Regenerated.
+ * generated/minloc1_8_i1.c: Regenerated.
+ * generated/minloc1_8_i2.c: Regenerated.
+ * generated/minloc1_8_i4.c: Regenerated.
+ * generated/minloc1_8_i8.c: Regenerated.
+ * generated/minloc1_8_r10.c: Regenerated.
+ * generated/minloc1_8_r16.c: Regenerated.
+ * generated/minloc1_8_r4.c: Regenerated.
+ * generated/minloc1_8_r8.c: Regenerated.
+ * generated/minval_i16.c: Regenerated.
+ * generated/minval_i1.c: Regenerated.
+ * generated/minval_i2.c: Regenerated.
+ * generated/minval_i4.c: Regenerated.
+ * generated/minval_i8.c: Regenerated.
+ * generated/minval_r10.c: Regenerated.
+ * generated/minval_r16.c: Regenerated.
+ * generated/minval_r4.c: Regenerated.
+ * generated/minval_r8.c: Regenerated.
+ * generated/norm2_r10.c: Regenerated.
+ * generated/norm2_r16.c: Regenerated.
+ * generated/norm2_r4.c: Regenerated.
+ * generated/norm2_r8.c: Regenerated.
+ * generated/parity_l16.c: Regenerated.
+ * generated/parity_l1.c: Regenerated.
+ * generated/parity_l2.c: Regenerated.
+ * generated/parity_l4.c: Regenerated.
+ * generated/parity_l8.c: Regenerated.
+ * generated/product_c10.c: Regenerated.
+ * generated/product_c16.c: Regenerated.
+ * generated/product_c4.c: Regenerated.
+ * generated/product_c8.c: Regenerated.
+ * generated/product_i16.c: Regenerated.
+ * generated/product_i1.c: Regenerated.
+ * generated/product_i2.c: Regenerated.
+ * generated/product_i4.c: Regenerated.
+ * generated/product_i8.c: Regenerated.
+ * generated/product_r10.c: Regenerated.
+ * generated/product_r16.c: Regenerated.
+ * generated/product_r4.c: Regenerated.
+ * generated/product_r8.c: Regenerated.
+ * generated/sum_c10.c: Regenerated.
+ * generated/sum_c16.c: Regenerated.
+ * generated/sum_c4.c: Regenerated.
+ * generated/sum_c8.c: Regenerated.
+ * generated/sum_i16.c: Regenerated.
+ * generated/sum_i1.c: Regenerated.
+ * generated/sum_i2.c: Regenerated.
+ * generated/sum_i4.c: Regenerated.
+ * generated/sum_i8.c: Regenerated.
+ * generated/sum_r10.c: Regenerated.
+ * generated/sum_r16.c: Regenerated.
+ * generated/sum_r4.c: Regenerated.
+ * generated/sum_r8.c: Regenerated.
+
+2017-07-24 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/80365
+ * io/unix.c (buf_write): Return early if there is
+ nothing to write.
+
+2017-07-09 Thomas Koenig <tkoenig@gcc.gnu.org>
* intrinsics/eoshift2.c (eoshift2): Use memcpy
for innermost copy where possible.
diff --git a/libgfortran/generated/iall_i1.c b/libgfortran/generated/iall_i1.c
index 619c833c33b..3453fd20c0f 100644
--- a/libgfortran/generated/iall_i1.c
+++ b/libgfortran/generated/iall_i1.c
@@ -52,8 +52,15 @@ iall_i1 (gfc_array_i1 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IALL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ miall_i1 (gfc_array_i1 * const restrict retarray,
GFC_INTEGER_1 * restrict dest;
const GFC_INTEGER_1 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ miall_i1 (gfc_array_i1 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IALL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ siall_i1 (gfc_array_i1 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IALL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/iall_i16.c b/libgfortran/generated/iall_i16.c
index 4d37d9c80bf..9f6747aa99d 100644
--- a/libgfortran/generated/iall_i16.c
+++ b/libgfortran/generated/iall_i16.c
@@ -52,8 +52,15 @@ iall_i16 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IALL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ miall_i16 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ miall_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IALL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ siall_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IALL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/iall_i2.c b/libgfortran/generated/iall_i2.c
index 283ceffb2c9..5ac86ab9cea 100644
--- a/libgfortran/generated/iall_i2.c
+++ b/libgfortran/generated/iall_i2.c
@@ -52,8 +52,15 @@ iall_i2 (gfc_array_i2 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IALL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ miall_i2 (gfc_array_i2 * const restrict retarray,
GFC_INTEGER_2 * restrict dest;
const GFC_INTEGER_2 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ miall_i2 (gfc_array_i2 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IALL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ siall_i2 (gfc_array_i2 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IALL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/iall_i4.c b/libgfortran/generated/iall_i4.c
index ef0ac58d3b9..0d3ba8aebca 100644
--- a/libgfortran/generated/iall_i4.c
+++ b/libgfortran/generated/iall_i4.c
@@ -52,8 +52,15 @@ iall_i4 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IALL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ miall_i4 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ miall_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IALL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ siall_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IALL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/iall_i8.c b/libgfortran/generated/iall_i8.c
index ef780b01c71..d3424a07df7 100644
--- a/libgfortran/generated/iall_i8.c
+++ b/libgfortran/generated/iall_i8.c
@@ -52,8 +52,15 @@ iall_i8 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IALL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ miall_i8 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ miall_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IALL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ siall_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IALL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/iany_i1.c b/libgfortran/generated/iany_i1.c
index b60d4f2d383..1009c1803e2 100644
--- a/libgfortran/generated/iany_i1.c
+++ b/libgfortran/generated/iany_i1.c
@@ -52,8 +52,15 @@ iany_i1 (gfc_array_i1 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IANY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ miany_i1 (gfc_array_i1 * const restrict retarray,
GFC_INTEGER_1 * restrict dest;
const GFC_INTEGER_1 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ miany_i1 (gfc_array_i1 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IANY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ siany_i1 (gfc_array_i1 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IANY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/iany_i16.c b/libgfortran/generated/iany_i16.c
index f8fb40acd1c..6910040aa02 100644
--- a/libgfortran/generated/iany_i16.c
+++ b/libgfortran/generated/iany_i16.c
@@ -52,8 +52,15 @@ iany_i16 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IANY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ miany_i16 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ miany_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IANY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ siany_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IANY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/iany_i2.c b/libgfortran/generated/iany_i2.c
index ef931b35a57..09d8cc4a5a5 100644
--- a/libgfortran/generated/iany_i2.c
+++ b/libgfortran/generated/iany_i2.c
@@ -52,8 +52,15 @@ iany_i2 (gfc_array_i2 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IANY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ miany_i2 (gfc_array_i2 * const restrict retarray,
GFC_INTEGER_2 * restrict dest;
const GFC_INTEGER_2 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ miany_i2 (gfc_array_i2 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IANY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ siany_i2 (gfc_array_i2 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IANY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/iany_i4.c b/libgfortran/generated/iany_i4.c
index d0ecaef23d0..4d18e791835 100644
--- a/libgfortran/generated/iany_i4.c
+++ b/libgfortran/generated/iany_i4.c
@@ -52,8 +52,15 @@ iany_i4 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IANY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ miany_i4 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ miany_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IANY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ siany_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IANY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/iany_i8.c b/libgfortran/generated/iany_i8.c
index c963165cf18..e857424d750 100644
--- a/libgfortran/generated/iany_i8.c
+++ b/libgfortran/generated/iany_i8.c
@@ -52,8 +52,15 @@ iany_i8 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IANY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ miany_i8 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ miany_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IANY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ siany_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IANY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/iparity_i1.c b/libgfortran/generated/iparity_i1.c
index 18e9fc24be1..ff5fbeb496b 100644
--- a/libgfortran/generated/iparity_i1.c
+++ b/libgfortran/generated/iparity_i1.c
@@ -52,8 +52,15 @@ iparity_i1 (gfc_array_i1 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IPARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ miparity_i1 (gfc_array_i1 * const restrict retarray,
GFC_INTEGER_1 * restrict dest;
const GFC_INTEGER_1 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ miparity_i1 (gfc_array_i1 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IPARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ siparity_i1 (gfc_array_i1 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IPARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/iparity_i16.c b/libgfortran/generated/iparity_i16.c
index 5b8ea697483..fcd7bef68a1 100644
--- a/libgfortran/generated/iparity_i16.c
+++ b/libgfortran/generated/iparity_i16.c
@@ -52,8 +52,15 @@ iparity_i16 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IPARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ miparity_i16 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ miparity_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IPARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ siparity_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IPARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/iparity_i2.c b/libgfortran/generated/iparity_i2.c
index 0076667caba..9aa34e07780 100644
--- a/libgfortran/generated/iparity_i2.c
+++ b/libgfortran/generated/iparity_i2.c
@@ -52,8 +52,15 @@ iparity_i2 (gfc_array_i2 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IPARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ miparity_i2 (gfc_array_i2 * const restrict retarray,
GFC_INTEGER_2 * restrict dest;
const GFC_INTEGER_2 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ miparity_i2 (gfc_array_i2 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IPARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ siparity_i2 (gfc_array_i2 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IPARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/iparity_i4.c b/libgfortran/generated/iparity_i4.c
index 20798423f5c..71835df9f3e 100644
--- a/libgfortran/generated/iparity_i4.c
+++ b/libgfortran/generated/iparity_i4.c
@@ -52,8 +52,15 @@ iparity_i4 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IPARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ miparity_i4 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ miparity_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IPARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ siparity_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IPARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/iparity_i8.c b/libgfortran/generated/iparity_i8.c
index 60e390e99b7..e04360c0f54 100644
--- a/libgfortran/generated/iparity_i8.c
+++ b/libgfortran/generated/iparity_i8.c
@@ -52,8 +52,15 @@ iparity_i8 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IPARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ miparity_i8 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ miparity_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IPARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ siparity_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in IPARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_16_i1.c b/libgfortran/generated/maxloc1_16_i1.c
index 48f2fc01e59..f6bab618c7a 100644
--- a/libgfortran/generated/maxloc1_16_i1.c
+++ b/libgfortran/generated/maxloc1_16_i1.c
@@ -52,8 +52,15 @@ maxloc1_16_i1 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_16_i1 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_1 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_16_i1 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_16_i1 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_16_i16.c b/libgfortran/generated/maxloc1_16_i16.c
index 6c154fb84e7..b3b8b36826f 100644
--- a/libgfortran/generated/maxloc1_16_i16.c
+++ b/libgfortran/generated/maxloc1_16_i16.c
@@ -52,8 +52,15 @@ maxloc1_16_i16 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_16_i16 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_16_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_16_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_16_i2.c b/libgfortran/generated/maxloc1_16_i2.c
index 029e061e43c..fb38b2b43aa 100644
--- a/libgfortran/generated/maxloc1_16_i2.c
+++ b/libgfortran/generated/maxloc1_16_i2.c
@@ -52,8 +52,15 @@ maxloc1_16_i2 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_16_i2 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_2 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_16_i2 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_16_i2 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_16_i4.c b/libgfortran/generated/maxloc1_16_i4.c
index aceb7aeb69b..d17f4eb5d2a 100644
--- a/libgfortran/generated/maxloc1_16_i4.c
+++ b/libgfortran/generated/maxloc1_16_i4.c
@@ -52,8 +52,15 @@ maxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_16_i8.c b/libgfortran/generated/maxloc1_16_i8.c
index 000a0cf599c..f0bd1ace0f3 100644
--- a/libgfortran/generated/maxloc1_16_i8.c
+++ b/libgfortran/generated/maxloc1_16_i8.c
@@ -52,8 +52,15 @@ maxloc1_16_i8 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_16_i8 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_16_i8 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_16_i8 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_16_r10.c b/libgfortran/generated/maxloc1_16_r10.c
index 53378d958e2..db8ff10eb2f 100644
--- a/libgfortran/generated/maxloc1_16_r10.c
+++ b/libgfortran/generated/maxloc1_16_r10.c
@@ -52,8 +52,15 @@ maxloc1_16_r10 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_16_r10 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_REAL_10 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_16_r10 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_16_r10 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_16_r16.c b/libgfortran/generated/maxloc1_16_r16.c
index 4bdc4d66b89..1f48631547d 100644
--- a/libgfortran/generated/maxloc1_16_r16.c
+++ b/libgfortran/generated/maxloc1_16_r16.c
@@ -52,8 +52,15 @@ maxloc1_16_r16 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_16_r16 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_REAL_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_16_r16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_16_r16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_16_r4.c b/libgfortran/generated/maxloc1_16_r4.c
index 36d79e23ce3..c444f6b20c2 100644
--- a/libgfortran/generated/maxloc1_16_r4.c
+++ b/libgfortran/generated/maxloc1_16_r4.c
@@ -52,8 +52,15 @@ maxloc1_16_r4 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_16_r4 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_REAL_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_16_r4 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_16_r4 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_16_r8.c b/libgfortran/generated/maxloc1_16_r8.c
index 3993f77619b..33205ff21a0 100644
--- a/libgfortran/generated/maxloc1_16_r8.c
+++ b/libgfortran/generated/maxloc1_16_r8.c
@@ -52,8 +52,15 @@ maxloc1_16_r8 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_16_r8 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_REAL_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_16_r8 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_16_r8 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_4_i1.c b/libgfortran/generated/maxloc1_4_i1.c
index 05d2af4be3e..6e466e68fa1 100644
--- a/libgfortran/generated/maxloc1_4_i1.c
+++ b/libgfortran/generated/maxloc1_4_i1.c
@@ -52,8 +52,15 @@ maxloc1_4_i1 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_4_i1 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_1 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_4_i1 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_4_i1 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_4_i16.c b/libgfortran/generated/maxloc1_4_i16.c
index 67e8a9ca2c7..dfff85b1151 100644
--- a/libgfortran/generated/maxloc1_4_i16.c
+++ b/libgfortran/generated/maxloc1_4_i16.c
@@ -52,8 +52,15 @@ maxloc1_4_i16 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_4_i16 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_4_i16 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_4_i16 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_4_i2.c b/libgfortran/generated/maxloc1_4_i2.c
index 60ceaa698f4..1006c0046f1 100644
--- a/libgfortran/generated/maxloc1_4_i2.c
+++ b/libgfortran/generated/maxloc1_4_i2.c
@@ -52,8 +52,15 @@ maxloc1_4_i2 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_4_i2 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_2 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_4_i2 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_4_i2 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_4_i4.c b/libgfortran/generated/maxloc1_4_i4.c
index d2f30b7246a..4186654e169 100644
--- a/libgfortran/generated/maxloc1_4_i4.c
+++ b/libgfortran/generated/maxloc1_4_i4.c
@@ -52,8 +52,15 @@ maxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_4_i8.c b/libgfortran/generated/maxloc1_4_i8.c
index 13a7dc6d34c..01cfa7336b8 100644
--- a/libgfortran/generated/maxloc1_4_i8.c
+++ b/libgfortran/generated/maxloc1_4_i8.c
@@ -52,8 +52,15 @@ maxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_4_r10.c b/libgfortran/generated/maxloc1_4_r10.c
index 204229293c4..2992e2bd99a 100644
--- a/libgfortran/generated/maxloc1_4_r10.c
+++ b/libgfortran/generated/maxloc1_4_r10.c
@@ -52,8 +52,15 @@ maxloc1_4_r10 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_4_r10 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_REAL_10 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_4_r10 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_4_r10 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_4_r16.c b/libgfortran/generated/maxloc1_4_r16.c
index 95076481c10..325211a2ccf 100644
--- a/libgfortran/generated/maxloc1_4_r16.c
+++ b/libgfortran/generated/maxloc1_4_r16.c
@@ -52,8 +52,15 @@ maxloc1_4_r16 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_4_r16 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_REAL_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_4_r16 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_4_r16 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_4_r4.c b/libgfortran/generated/maxloc1_4_r4.c
index 87c6ca5eb40..9f48540eca5 100644
--- a/libgfortran/generated/maxloc1_4_r4.c
+++ b/libgfortran/generated/maxloc1_4_r4.c
@@ -52,8 +52,15 @@ maxloc1_4_r4 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_4_r4 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_REAL_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_4_r4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_4_r4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_4_r8.c b/libgfortran/generated/maxloc1_4_r8.c
index a13986a1fa8..f5f4145a3c4 100644
--- a/libgfortran/generated/maxloc1_4_r8.c
+++ b/libgfortran/generated/maxloc1_4_r8.c
@@ -52,8 +52,15 @@ maxloc1_4_r8 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_4_r8 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_REAL_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_4_r8 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_4_r8 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_8_i1.c b/libgfortran/generated/maxloc1_8_i1.c
index 71a5d97efe4..297a19b5775 100644
--- a/libgfortran/generated/maxloc1_8_i1.c
+++ b/libgfortran/generated/maxloc1_8_i1.c
@@ -52,8 +52,15 @@ maxloc1_8_i1 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_8_i1 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_1 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_8_i1 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_8_i1 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_8_i16.c b/libgfortran/generated/maxloc1_8_i16.c
index 92cf55c4e2c..773e3df1636 100644
--- a/libgfortran/generated/maxloc1_8_i16.c
+++ b/libgfortran/generated/maxloc1_8_i16.c
@@ -52,8 +52,15 @@ maxloc1_8_i16 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_8_i16 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_8_i16 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_8_i16 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_8_i2.c b/libgfortran/generated/maxloc1_8_i2.c
index fd1063c5df1..204d01044cd 100644
--- a/libgfortran/generated/maxloc1_8_i2.c
+++ b/libgfortran/generated/maxloc1_8_i2.c
@@ -52,8 +52,15 @@ maxloc1_8_i2 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_8_i2 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_2 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_8_i2 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_8_i2 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_8_i4.c b/libgfortran/generated/maxloc1_8_i4.c
index db82ae894ae..7c73244d39d 100644
--- a/libgfortran/generated/maxloc1_8_i4.c
+++ b/libgfortran/generated/maxloc1_8_i4.c
@@ -52,8 +52,15 @@ maxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_8_i8.c b/libgfortran/generated/maxloc1_8_i8.c
index 43b4af14792..a8965871a50 100644
--- a/libgfortran/generated/maxloc1_8_i8.c
+++ b/libgfortran/generated/maxloc1_8_i8.c
@@ -52,8 +52,15 @@ maxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_8_r10.c b/libgfortran/generated/maxloc1_8_r10.c
index 9ba6cb950e4..4bc66cdd121 100644
--- a/libgfortran/generated/maxloc1_8_r10.c
+++ b/libgfortran/generated/maxloc1_8_r10.c
@@ -52,8 +52,15 @@ maxloc1_8_r10 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_8_r10 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_REAL_10 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_8_r10 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_8_r10 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_8_r16.c b/libgfortran/generated/maxloc1_8_r16.c
index f7eb1ebf9be..959e3f98554 100644
--- a/libgfortran/generated/maxloc1_8_r16.c
+++ b/libgfortran/generated/maxloc1_8_r16.c
@@ -52,8 +52,15 @@ maxloc1_8_r16 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_8_r16 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_REAL_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_8_r16 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_8_r16 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_8_r4.c b/libgfortran/generated/maxloc1_8_r4.c
index 67b455bb735..06849640a77 100644
--- a/libgfortran/generated/maxloc1_8_r4.c
+++ b/libgfortran/generated/maxloc1_8_r4.c
@@ -52,8 +52,15 @@ maxloc1_8_r4 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_8_r4 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_REAL_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_8_r4 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_8_r4 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxloc1_8_r8.c b/libgfortran/generated/maxloc1_8_r8.c
index bd0913f4fea..ae40ff65ff9 100644
--- a/libgfortran/generated/maxloc1_8_r8.c
+++ b/libgfortran/generated/maxloc1_8_r8.c
@@ -52,8 +52,15 @@ maxloc1_8_r8 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mmaxloc1_8_r8 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_REAL_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mmaxloc1_8_r8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ smaxloc1_8_r8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxval_i1.c b/libgfortran/generated/maxval_i1.c
index 90ddf350378..fe4733518e6 100644
--- a/libgfortran/generated/maxval_i1.c
+++ b/libgfortran/generated/maxval_i1.c
@@ -52,8 +52,15 @@ maxval_i1 (gfc_array_i1 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mmaxval_i1 (gfc_array_i1 * const restrict retarray,
GFC_INTEGER_1 * restrict dest;
const GFC_INTEGER_1 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mmaxval_i1 (gfc_array_i1 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ smaxval_i1 (gfc_array_i1 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxval_i16.c b/libgfortran/generated/maxval_i16.c
index 6a54739e290..21174935b25 100644
--- a/libgfortran/generated/maxval_i16.c
+++ b/libgfortran/generated/maxval_i16.c
@@ -52,8 +52,15 @@ maxval_i16 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mmaxval_i16 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mmaxval_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ smaxval_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxval_i2.c b/libgfortran/generated/maxval_i2.c
index 3cdb5b9d3ed..9a5a6b876a4 100644
--- a/libgfortran/generated/maxval_i2.c
+++ b/libgfortran/generated/maxval_i2.c
@@ -52,8 +52,15 @@ maxval_i2 (gfc_array_i2 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mmaxval_i2 (gfc_array_i2 * const restrict retarray,
GFC_INTEGER_2 * restrict dest;
const GFC_INTEGER_2 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mmaxval_i2 (gfc_array_i2 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ smaxval_i2 (gfc_array_i2 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxval_i4.c b/libgfortran/generated/maxval_i4.c
index d7ae9951a4a..5451a4e565b 100644
--- a/libgfortran/generated/maxval_i4.c
+++ b/libgfortran/generated/maxval_i4.c
@@ -52,8 +52,15 @@ maxval_i4 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mmaxval_i4 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mmaxval_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ smaxval_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxval_i8.c b/libgfortran/generated/maxval_i8.c
index d622da09b27..93d81249d7b 100644
--- a/libgfortran/generated/maxval_i8.c
+++ b/libgfortran/generated/maxval_i8.c
@@ -52,8 +52,15 @@ maxval_i8 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mmaxval_i8 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mmaxval_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ smaxval_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxval_r10.c b/libgfortran/generated/maxval_r10.c
index 9c4c6fbb26c..d3b10d123c8 100644
--- a/libgfortran/generated/maxval_r10.c
+++ b/libgfortran/generated/maxval_r10.c
@@ -52,8 +52,15 @@ maxval_r10 (gfc_array_r10 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mmaxval_r10 (gfc_array_r10 * const restrict retarray,
GFC_REAL_10 * restrict dest;
const GFC_REAL_10 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mmaxval_r10 (gfc_array_r10 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ smaxval_r10 (gfc_array_r10 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxval_r16.c b/libgfortran/generated/maxval_r16.c
index f10573233e3..32e935a2d09 100644
--- a/libgfortran/generated/maxval_r16.c
+++ b/libgfortran/generated/maxval_r16.c
@@ -52,8 +52,15 @@ maxval_r16 (gfc_array_r16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mmaxval_r16 (gfc_array_r16 * const restrict retarray,
GFC_REAL_16 * restrict dest;
const GFC_REAL_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mmaxval_r16 (gfc_array_r16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ smaxval_r16 (gfc_array_r16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxval_r4.c b/libgfortran/generated/maxval_r4.c
index 94d4f335a19..92627190558 100644
--- a/libgfortran/generated/maxval_r4.c
+++ b/libgfortran/generated/maxval_r4.c
@@ -52,8 +52,15 @@ maxval_r4 (gfc_array_r4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mmaxval_r4 (gfc_array_r4 * const restrict retarray,
GFC_REAL_4 * restrict dest;
const GFC_REAL_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mmaxval_r4 (gfc_array_r4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ smaxval_r4 (gfc_array_r4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/maxval_r8.c b/libgfortran/generated/maxval_r8.c
index 5ba70b62edb..b12f34dd68a 100644
--- a/libgfortran/generated/maxval_r8.c
+++ b/libgfortran/generated/maxval_r8.c
@@ -52,8 +52,15 @@ maxval_r8 (gfc_array_r8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mmaxval_r8 (gfc_array_r8 * const restrict retarray,
GFC_REAL_8 * restrict dest;
const GFC_REAL_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mmaxval_r8 (gfc_array_r8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ smaxval_r8 (gfc_array_r8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MAXVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_16_i1.c b/libgfortran/generated/minloc1_16_i1.c
index bf6be092e85..b27e146c45f 100644
--- a/libgfortran/generated/minloc1_16_i1.c
+++ b/libgfortran/generated/minloc1_16_i1.c
@@ -52,8 +52,15 @@ minloc1_16_i1 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_16_i1 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_1 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_16_i1 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_16_i1 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_16_i16.c b/libgfortran/generated/minloc1_16_i16.c
index e4d9dab0b7f..be0cd693f14 100644
--- a/libgfortran/generated/minloc1_16_i16.c
+++ b/libgfortran/generated/minloc1_16_i16.c
@@ -52,8 +52,15 @@ minloc1_16_i16 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_16_i16 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_16_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_16_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_16_i2.c b/libgfortran/generated/minloc1_16_i2.c
index 450142f7a82..4b9dcac503f 100644
--- a/libgfortran/generated/minloc1_16_i2.c
+++ b/libgfortran/generated/minloc1_16_i2.c
@@ -52,8 +52,15 @@ minloc1_16_i2 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_16_i2 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_2 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_16_i2 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_16_i2 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_16_i4.c b/libgfortran/generated/minloc1_16_i4.c
index e1ca90f803b..b305ac8ad47 100644
--- a/libgfortran/generated/minloc1_16_i4.c
+++ b/libgfortran/generated/minloc1_16_i4.c
@@ -52,8 +52,15 @@ minloc1_16_i4 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_16_i4 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_16_i4 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_16_i4 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_16_i8.c b/libgfortran/generated/minloc1_16_i8.c
index b5212041d73..6a60af9f845 100644
--- a/libgfortran/generated/minloc1_16_i8.c
+++ b/libgfortran/generated/minloc1_16_i8.c
@@ -52,8 +52,15 @@ minloc1_16_i8 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_16_i8 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_16_i8 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_16_i8 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_16_r10.c b/libgfortran/generated/minloc1_16_r10.c
index 880bb7e2986..bb5546f45c8 100644
--- a/libgfortran/generated/minloc1_16_r10.c
+++ b/libgfortran/generated/minloc1_16_r10.c
@@ -52,8 +52,15 @@ minloc1_16_r10 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_16_r10 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_REAL_10 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_16_r10 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_16_r10 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_16_r16.c b/libgfortran/generated/minloc1_16_r16.c
index 4343508d4a0..636195e80ed 100644
--- a/libgfortran/generated/minloc1_16_r16.c
+++ b/libgfortran/generated/minloc1_16_r16.c
@@ -52,8 +52,15 @@ minloc1_16_r16 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_16_r16 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_REAL_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_16_r16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_16_r16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_16_r4.c b/libgfortran/generated/minloc1_16_r4.c
index b2fb09c92e9..89f453fa0fa 100644
--- a/libgfortran/generated/minloc1_16_r4.c
+++ b/libgfortran/generated/minloc1_16_r4.c
@@ -52,8 +52,15 @@ minloc1_16_r4 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_16_r4 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_REAL_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_16_r4 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_16_r4 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_16_r8.c b/libgfortran/generated/minloc1_16_r8.c
index f62cf337153..42ca7da88b2 100644
--- a/libgfortran/generated/minloc1_16_r8.c
+++ b/libgfortran/generated/minloc1_16_r8.c
@@ -52,8 +52,15 @@ minloc1_16_r8 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_16_r8 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_REAL_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_16_r8 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_16_r8 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_4_i1.c b/libgfortran/generated/minloc1_4_i1.c
index 5bf2dbacdc4..3ff1eb16109 100644
--- a/libgfortran/generated/minloc1_4_i1.c
+++ b/libgfortran/generated/minloc1_4_i1.c
@@ -52,8 +52,15 @@ minloc1_4_i1 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_4_i1 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_1 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_4_i1 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_4_i1 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_4_i16.c b/libgfortran/generated/minloc1_4_i16.c
index c8925879e9c..10f07a136e1 100644
--- a/libgfortran/generated/minloc1_4_i16.c
+++ b/libgfortran/generated/minloc1_4_i16.c
@@ -52,8 +52,15 @@ minloc1_4_i16 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_4_i16 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_4_i16 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_4_i16 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_4_i2.c b/libgfortran/generated/minloc1_4_i2.c
index 42d5afaf3d2..344202db39e 100644
--- a/libgfortran/generated/minloc1_4_i2.c
+++ b/libgfortran/generated/minloc1_4_i2.c
@@ -52,8 +52,15 @@ minloc1_4_i2 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_4_i2 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_2 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_4_i2 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_4_i2 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_4_i4.c b/libgfortran/generated/minloc1_4_i4.c
index 456ea792b3f..ac9d44c8ecf 100644
--- a/libgfortran/generated/minloc1_4_i4.c
+++ b/libgfortran/generated/minloc1_4_i4.c
@@ -52,8 +52,15 @@ minloc1_4_i4 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_4_i4 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_4_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_4_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_4_i8.c b/libgfortran/generated/minloc1_4_i8.c
index a65195dcc3f..11d212062f9 100644
--- a/libgfortran/generated/minloc1_4_i8.c
+++ b/libgfortran/generated/minloc1_4_i8.c
@@ -52,8 +52,15 @@ minloc1_4_i8 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_4_i8 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_4_i8 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_4_i8 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_4_r10.c b/libgfortran/generated/minloc1_4_r10.c
index b106e97dde8..3365e7ada6a 100644
--- a/libgfortran/generated/minloc1_4_r10.c
+++ b/libgfortran/generated/minloc1_4_r10.c
@@ -52,8 +52,15 @@ minloc1_4_r10 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_4_r10 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_REAL_10 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_4_r10 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_4_r10 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_4_r16.c b/libgfortran/generated/minloc1_4_r16.c
index b1ef3b3ee62..3b5989cce8f 100644
--- a/libgfortran/generated/minloc1_4_r16.c
+++ b/libgfortran/generated/minloc1_4_r16.c
@@ -52,8 +52,15 @@ minloc1_4_r16 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_4_r16 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_REAL_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_4_r16 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_4_r16 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_4_r4.c b/libgfortran/generated/minloc1_4_r4.c
index 9ddf490d68b..d79f905a659 100644
--- a/libgfortran/generated/minloc1_4_r4.c
+++ b/libgfortran/generated/minloc1_4_r4.c
@@ -52,8 +52,15 @@ minloc1_4_r4 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_4_r4 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_REAL_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_4_r4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_4_r4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_4_r8.c b/libgfortran/generated/minloc1_4_r8.c
index 0619ac6f0a7..3175f331494 100644
--- a/libgfortran/generated/minloc1_4_r8.c
+++ b/libgfortran/generated/minloc1_4_r8.c
@@ -52,8 +52,15 @@ minloc1_4_r8 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_4_r8 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_REAL_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_4_r8 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_4_r8 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_8_i1.c b/libgfortran/generated/minloc1_8_i1.c
index 27c7fa9e350..bfd935444e6 100644
--- a/libgfortran/generated/minloc1_8_i1.c
+++ b/libgfortran/generated/minloc1_8_i1.c
@@ -52,8 +52,15 @@ minloc1_8_i1 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_8_i1 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_1 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_8_i1 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_8_i1 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_8_i16.c b/libgfortran/generated/minloc1_8_i16.c
index 274b17e45f9..1fc912928f3 100644
--- a/libgfortran/generated/minloc1_8_i16.c
+++ b/libgfortran/generated/minloc1_8_i16.c
@@ -52,8 +52,15 @@ minloc1_8_i16 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_8_i16 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_8_i16 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_8_i16 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_8_i2.c b/libgfortran/generated/minloc1_8_i2.c
index 416622c36e7..5cf6eed7e69 100644
--- a/libgfortran/generated/minloc1_8_i2.c
+++ b/libgfortran/generated/minloc1_8_i2.c
@@ -52,8 +52,15 @@ minloc1_8_i2 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_8_i2 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_2 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_8_i2 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_8_i2 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_8_i4.c b/libgfortran/generated/minloc1_8_i4.c
index ff67899917c..8d7a8f3f8ec 100644
--- a/libgfortran/generated/minloc1_8_i4.c
+++ b/libgfortran/generated/minloc1_8_i4.c
@@ -52,8 +52,15 @@ minloc1_8_i4 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_8_i4 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_8_i4 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_8_i4 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_8_i8.c b/libgfortran/generated/minloc1_8_i8.c
index c4247ac7f17..00352634052 100644
--- a/libgfortran/generated/minloc1_8_i8.c
+++ b/libgfortran/generated/minloc1_8_i8.c
@@ -52,8 +52,15 @@ minloc1_8_i8 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_8_i8 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_8_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_8_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_8_r10.c b/libgfortran/generated/minloc1_8_r10.c
index c57f72aabe6..918c0b17388 100644
--- a/libgfortran/generated/minloc1_8_r10.c
+++ b/libgfortran/generated/minloc1_8_r10.c
@@ -52,8 +52,15 @@ minloc1_8_r10 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_8_r10 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_REAL_10 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_8_r10 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_8_r10 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_8_r16.c b/libgfortran/generated/minloc1_8_r16.c
index c1d2cd2a88e..c5b35955ac8 100644
--- a/libgfortran/generated/minloc1_8_r16.c
+++ b/libgfortran/generated/minloc1_8_r16.c
@@ -52,8 +52,15 @@ minloc1_8_r16 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_8_r16 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_REAL_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_8_r16 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_8_r16 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_8_r4.c b/libgfortran/generated/minloc1_8_r4.c
index c1faa797d4c..2112352aa59 100644
--- a/libgfortran/generated/minloc1_8_r4.c
+++ b/libgfortran/generated/minloc1_8_r4.c
@@ -52,8 +52,15 @@ minloc1_8_r4 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_8_r4 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_REAL_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_8_r4 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_8_r4 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minloc1_8_r8.c b/libgfortran/generated/minloc1_8_r8.c
index e7c5ee19ad1..d3d303ed082 100644
--- a/libgfortran/generated/minloc1_8_r8.c
+++ b/libgfortran/generated/minloc1_8_r8.c
@@ -52,8 +52,15 @@ minloc1_8_r8 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -224,8 +231,8 @@ mminloc1_8_r8 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_REAL_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -235,6 +242,14 @@ mminloc1_8_r8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -445,6 +460,13 @@ sminloc1_8_r8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINLOC intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minval_i1.c b/libgfortran/generated/minval_i1.c
index ccfdfa7670b..9c899bab4f6 100644
--- a/libgfortran/generated/minval_i1.c
+++ b/libgfortran/generated/minval_i1.c
@@ -52,8 +52,15 @@ minval_i1 (gfc_array_i1 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mminval_i1 (gfc_array_i1 * const restrict retarray,
GFC_INTEGER_1 * restrict dest;
const GFC_INTEGER_1 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mminval_i1 (gfc_array_i1 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ sminval_i1 (gfc_array_i1 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minval_i16.c b/libgfortran/generated/minval_i16.c
index 9d3a1502e98..8b427f92004 100644
--- a/libgfortran/generated/minval_i16.c
+++ b/libgfortran/generated/minval_i16.c
@@ -52,8 +52,15 @@ minval_i16 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mminval_i16 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mminval_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ sminval_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minval_i2.c b/libgfortran/generated/minval_i2.c
index 0c335a06894..79f3c9b3086 100644
--- a/libgfortran/generated/minval_i2.c
+++ b/libgfortran/generated/minval_i2.c
@@ -52,8 +52,15 @@ minval_i2 (gfc_array_i2 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mminval_i2 (gfc_array_i2 * const restrict retarray,
GFC_INTEGER_2 * restrict dest;
const GFC_INTEGER_2 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mminval_i2 (gfc_array_i2 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ sminval_i2 (gfc_array_i2 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minval_i4.c b/libgfortran/generated/minval_i4.c
index 73de782ef09..3b1830668d1 100644
--- a/libgfortran/generated/minval_i4.c
+++ b/libgfortran/generated/minval_i4.c
@@ -52,8 +52,15 @@ minval_i4 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mminval_i4 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mminval_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ sminval_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minval_i8.c b/libgfortran/generated/minval_i8.c
index 4a2a7150084..5d415f3a7f7 100644
--- a/libgfortran/generated/minval_i8.c
+++ b/libgfortran/generated/minval_i8.c
@@ -52,8 +52,15 @@ minval_i8 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mminval_i8 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mminval_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ sminval_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minval_r10.c b/libgfortran/generated/minval_r10.c
index 27966136955..c86d8c6c7bb 100644
--- a/libgfortran/generated/minval_r10.c
+++ b/libgfortran/generated/minval_r10.c
@@ -52,8 +52,15 @@ minval_r10 (gfc_array_r10 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mminval_r10 (gfc_array_r10 * const restrict retarray,
GFC_REAL_10 * restrict dest;
const GFC_REAL_10 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mminval_r10 (gfc_array_r10 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ sminval_r10 (gfc_array_r10 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minval_r16.c b/libgfortran/generated/minval_r16.c
index 8bc429b8d92..421026d7bd4 100644
--- a/libgfortran/generated/minval_r16.c
+++ b/libgfortran/generated/minval_r16.c
@@ -52,8 +52,15 @@ minval_r16 (gfc_array_r16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mminval_r16 (gfc_array_r16 * const restrict retarray,
GFC_REAL_16 * restrict dest;
const GFC_REAL_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mminval_r16 (gfc_array_r16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ sminval_r16 (gfc_array_r16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minval_r4.c b/libgfortran/generated/minval_r4.c
index a5ecce21dd9..ff3d919a69b 100644
--- a/libgfortran/generated/minval_r4.c
+++ b/libgfortran/generated/minval_r4.c
@@ -52,8 +52,15 @@ minval_r4 (gfc_array_r4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mminval_r4 (gfc_array_r4 * const restrict retarray,
GFC_REAL_4 * restrict dest;
const GFC_REAL_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mminval_r4 (gfc_array_r4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ sminval_r4 (gfc_array_r4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/minval_r8.c b/libgfortran/generated/minval_r8.c
index 78c751ef699..0970c31ba9a 100644
--- a/libgfortran/generated/minval_r8.c
+++ b/libgfortran/generated/minval_r8.c
@@ -52,8 +52,15 @@ minval_r8 (gfc_array_r8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -217,8 +224,8 @@ mminval_r8 (gfc_array_r8 * const restrict retarray,
GFC_REAL_8 * restrict dest;
const GFC_REAL_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -228,6 +235,14 @@ mminval_r8 (gfc_array_r8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -433,6 +448,13 @@ sminval_r8 (gfc_array_r8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in MINVAL intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/norm2_r10.c b/libgfortran/generated/norm2_r10.c
index 4c5a2306285..4f6eceefe24 100644
--- a/libgfortran/generated/norm2_r10.c
+++ b/libgfortran/generated/norm2_r10.c
@@ -55,8 +55,15 @@ norm2_r10 (gfc_array_r10 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in NORM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
diff --git a/libgfortran/generated/norm2_r16.c b/libgfortran/generated/norm2_r16.c
index 5eaefb8a92d..596195fb85b 100644
--- a/libgfortran/generated/norm2_r16.c
+++ b/libgfortran/generated/norm2_r16.c
@@ -59,8 +59,15 @@ norm2_r16 (gfc_array_r16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in NORM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
diff --git a/libgfortran/generated/norm2_r4.c b/libgfortran/generated/norm2_r4.c
index 0482b16ca2d..4f61ea33b01 100644
--- a/libgfortran/generated/norm2_r4.c
+++ b/libgfortran/generated/norm2_r4.c
@@ -55,8 +55,15 @@ norm2_r4 (gfc_array_r4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in NORM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
diff --git a/libgfortran/generated/norm2_r8.c b/libgfortran/generated/norm2_r8.c
index 173faa63eb2..d325236b50b 100644
--- a/libgfortran/generated/norm2_r8.c
+++ b/libgfortran/generated/norm2_r8.c
@@ -55,8 +55,15 @@ norm2_r8 (gfc_array_r8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in NORM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
diff --git a/libgfortran/generated/parity_l1.c b/libgfortran/generated/parity_l1.c
index 4fe64dec7db..34cac760a3d 100644
--- a/libgfortran/generated/parity_l1.c
+++ b/libgfortran/generated/parity_l1.c
@@ -52,8 +52,15 @@ parity_l1 (gfc_array_l1 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
diff --git a/libgfortran/generated/parity_l16.c b/libgfortran/generated/parity_l16.c
index d9e0a8efcdc..8aae3038e7b 100644
--- a/libgfortran/generated/parity_l16.c
+++ b/libgfortran/generated/parity_l16.c
@@ -52,8 +52,15 @@ parity_l16 (gfc_array_l16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
diff --git a/libgfortran/generated/parity_l2.c b/libgfortran/generated/parity_l2.c
index 3cf26312f02..0d87c525028 100644
--- a/libgfortran/generated/parity_l2.c
+++ b/libgfortran/generated/parity_l2.c
@@ -52,8 +52,15 @@ parity_l2 (gfc_array_l2 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
diff --git a/libgfortran/generated/parity_l4.c b/libgfortran/generated/parity_l4.c
index 70cdd18aef9..5c524ad13a8 100644
--- a/libgfortran/generated/parity_l4.c
+++ b/libgfortran/generated/parity_l4.c
@@ -52,8 +52,15 @@ parity_l4 (gfc_array_l4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
diff --git a/libgfortran/generated/parity_l8.c b/libgfortran/generated/parity_l8.c
index d22c9a55371..d655ebd0837 100644
--- a/libgfortran/generated/parity_l8.c
+++ b/libgfortran/generated/parity_l8.c
@@ -52,8 +52,15 @@ parity_l8 (gfc_array_l8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PARITY intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
diff --git a/libgfortran/generated/product_c10.c b/libgfortran/generated/product_c10.c
index 4e2f6f2b566..b84870cab32 100644
--- a/libgfortran/generated/product_c10.c
+++ b/libgfortran/generated/product_c10.c
@@ -52,8 +52,15 @@ product_c10 (gfc_array_c10 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ mproduct_c10 (gfc_array_c10 * const restrict retarray,
GFC_COMPLEX_10 * restrict dest;
const GFC_COMPLEX_10 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ mproduct_c10 (gfc_array_c10 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ sproduct_c10 (gfc_array_c10 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/product_c16.c b/libgfortran/generated/product_c16.c
index df73041f170..e1618c5a645 100644
--- a/libgfortran/generated/product_c16.c
+++ b/libgfortran/generated/product_c16.c
@@ -52,8 +52,15 @@ product_c16 (gfc_array_c16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ mproduct_c16 (gfc_array_c16 * const restrict retarray,
GFC_COMPLEX_16 * restrict dest;
const GFC_COMPLEX_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ mproduct_c16 (gfc_array_c16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ sproduct_c16 (gfc_array_c16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/product_c4.c b/libgfortran/generated/product_c4.c
index 3d097a9a3ec..679670c9389 100644
--- a/libgfortran/generated/product_c4.c
+++ b/libgfortran/generated/product_c4.c
@@ -52,8 +52,15 @@ product_c4 (gfc_array_c4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ mproduct_c4 (gfc_array_c4 * const restrict retarray,
GFC_COMPLEX_4 * restrict dest;
const GFC_COMPLEX_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ mproduct_c4 (gfc_array_c4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ sproduct_c4 (gfc_array_c4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/product_c8.c b/libgfortran/generated/product_c8.c
index 4bb1ddee0fe..1f4dd10796b 100644
--- a/libgfortran/generated/product_c8.c
+++ b/libgfortran/generated/product_c8.c
@@ -52,8 +52,15 @@ product_c8 (gfc_array_c8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ mproduct_c8 (gfc_array_c8 * const restrict retarray,
GFC_COMPLEX_8 * restrict dest;
const GFC_COMPLEX_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ mproduct_c8 (gfc_array_c8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ sproduct_c8 (gfc_array_c8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/product_i1.c b/libgfortran/generated/product_i1.c
index fc03a48bc05..43e20b8dcb1 100644
--- a/libgfortran/generated/product_i1.c
+++ b/libgfortran/generated/product_i1.c
@@ -52,8 +52,15 @@ product_i1 (gfc_array_i1 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ mproduct_i1 (gfc_array_i1 * const restrict retarray,
GFC_INTEGER_1 * restrict dest;
const GFC_INTEGER_1 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ mproduct_i1 (gfc_array_i1 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ sproduct_i1 (gfc_array_i1 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/product_i16.c b/libgfortran/generated/product_i16.c
index 6a4e1aa29a3..d786c950686 100644
--- a/libgfortran/generated/product_i16.c
+++ b/libgfortran/generated/product_i16.c
@@ -52,8 +52,15 @@ product_i16 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ mproduct_i16 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ mproduct_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ sproduct_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/product_i2.c b/libgfortran/generated/product_i2.c
index 82a650f6ec6..bdb875598ff 100644
--- a/libgfortran/generated/product_i2.c
+++ b/libgfortran/generated/product_i2.c
@@ -52,8 +52,15 @@ product_i2 (gfc_array_i2 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ mproduct_i2 (gfc_array_i2 * const restrict retarray,
GFC_INTEGER_2 * restrict dest;
const GFC_INTEGER_2 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ mproduct_i2 (gfc_array_i2 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ sproduct_i2 (gfc_array_i2 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/product_i4.c b/libgfortran/generated/product_i4.c
index 84f7c36e439..1328055736a 100644
--- a/libgfortran/generated/product_i4.c
+++ b/libgfortran/generated/product_i4.c
@@ -52,8 +52,15 @@ product_i4 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ mproduct_i4 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ mproduct_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ sproduct_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/product_i8.c b/libgfortran/generated/product_i8.c
index 5ace17304e4..5adf2de1453 100644
--- a/libgfortran/generated/product_i8.c
+++ b/libgfortran/generated/product_i8.c
@@ -52,8 +52,15 @@ product_i8 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ mproduct_i8 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ mproduct_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ sproduct_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/product_r10.c b/libgfortran/generated/product_r10.c
index 54e22915b88..404b1a5bf41 100644
--- a/libgfortran/generated/product_r10.c
+++ b/libgfortran/generated/product_r10.c
@@ -52,8 +52,15 @@ product_r10 (gfc_array_r10 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ mproduct_r10 (gfc_array_r10 * const restrict retarray,
GFC_REAL_10 * restrict dest;
const GFC_REAL_10 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ mproduct_r10 (gfc_array_r10 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ sproduct_r10 (gfc_array_r10 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/product_r16.c b/libgfortran/generated/product_r16.c
index d3a2afdbdad..592a9b9bf50 100644
--- a/libgfortran/generated/product_r16.c
+++ b/libgfortran/generated/product_r16.c
@@ -52,8 +52,15 @@ product_r16 (gfc_array_r16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ mproduct_r16 (gfc_array_r16 * const restrict retarray,
GFC_REAL_16 * restrict dest;
const GFC_REAL_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ mproduct_r16 (gfc_array_r16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ sproduct_r16 (gfc_array_r16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/product_r4.c b/libgfortran/generated/product_r4.c
index 94a2f106038..882c0917f9b 100644
--- a/libgfortran/generated/product_r4.c
+++ b/libgfortran/generated/product_r4.c
@@ -52,8 +52,15 @@ product_r4 (gfc_array_r4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ mproduct_r4 (gfc_array_r4 * const restrict retarray,
GFC_REAL_4 * restrict dest;
const GFC_REAL_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ mproduct_r4 (gfc_array_r4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ sproduct_r4 (gfc_array_r4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/product_r8.c b/libgfortran/generated/product_r8.c
index 2daba7587bd..cc1454963a1 100644
--- a/libgfortran/generated/product_r8.c
+++ b/libgfortran/generated/product_r8.c
@@ -52,8 +52,15 @@ product_r8 (gfc_array_r8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ mproduct_r8 (gfc_array_r8 * const restrict retarray,
GFC_REAL_8 * restrict dest;
const GFC_REAL_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ mproduct_r8 (gfc_array_r8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ sproduct_r8 (gfc_array_r8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in PRODUCT intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/sum_c10.c b/libgfortran/generated/sum_c10.c
index 9d16db231b4..d3e8550e57d 100644
--- a/libgfortran/generated/sum_c10.c
+++ b/libgfortran/generated/sum_c10.c
@@ -52,8 +52,15 @@ sum_c10 (gfc_array_c10 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ msum_c10 (gfc_array_c10 * const restrict retarray,
GFC_COMPLEX_10 * restrict dest;
const GFC_COMPLEX_10 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ msum_c10 (gfc_array_c10 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ ssum_c10 (gfc_array_c10 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/sum_c16.c b/libgfortran/generated/sum_c16.c
index 58111014100..280c2ff89c6 100644
--- a/libgfortran/generated/sum_c16.c
+++ b/libgfortran/generated/sum_c16.c
@@ -52,8 +52,15 @@ sum_c16 (gfc_array_c16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ msum_c16 (gfc_array_c16 * const restrict retarray,
GFC_COMPLEX_16 * restrict dest;
const GFC_COMPLEX_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ msum_c16 (gfc_array_c16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ ssum_c16 (gfc_array_c16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/sum_c4.c b/libgfortran/generated/sum_c4.c
index 27438bf4bac..0e3a74da851 100644
--- a/libgfortran/generated/sum_c4.c
+++ b/libgfortran/generated/sum_c4.c
@@ -52,8 +52,15 @@ sum_c4 (gfc_array_c4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ msum_c4 (gfc_array_c4 * const restrict retarray,
GFC_COMPLEX_4 * restrict dest;
const GFC_COMPLEX_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ msum_c4 (gfc_array_c4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ ssum_c4 (gfc_array_c4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/sum_c8.c b/libgfortran/generated/sum_c8.c
index cb58bbf5724..f04f374ee12 100644
--- a/libgfortran/generated/sum_c8.c
+++ b/libgfortran/generated/sum_c8.c
@@ -52,8 +52,15 @@ sum_c8 (gfc_array_c8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ msum_c8 (gfc_array_c8 * const restrict retarray,
GFC_COMPLEX_8 * restrict dest;
const GFC_COMPLEX_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ msum_c8 (gfc_array_c8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ ssum_c8 (gfc_array_c8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/sum_i1.c b/libgfortran/generated/sum_i1.c
index 1980383b5db..b7e8a981319 100644
--- a/libgfortran/generated/sum_i1.c
+++ b/libgfortran/generated/sum_i1.c
@@ -52,8 +52,15 @@ sum_i1 (gfc_array_i1 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ msum_i1 (gfc_array_i1 * const restrict retarray,
GFC_INTEGER_1 * restrict dest;
const GFC_INTEGER_1 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ msum_i1 (gfc_array_i1 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ ssum_i1 (gfc_array_i1 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/sum_i16.c b/libgfortran/generated/sum_i16.c
index 0abaff00ade..489b9bbcdf7 100644
--- a/libgfortran/generated/sum_i16.c
+++ b/libgfortran/generated/sum_i16.c
@@ -52,8 +52,15 @@ sum_i16 (gfc_array_i16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ msum_i16 (gfc_array_i16 * const restrict retarray,
GFC_INTEGER_16 * restrict dest;
const GFC_INTEGER_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ msum_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ ssum_i16 (gfc_array_i16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/sum_i2.c b/libgfortran/generated/sum_i2.c
index 6332b647743..40304c846ce 100644
--- a/libgfortran/generated/sum_i2.c
+++ b/libgfortran/generated/sum_i2.c
@@ -52,8 +52,15 @@ sum_i2 (gfc_array_i2 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ msum_i2 (gfc_array_i2 * const restrict retarray,
GFC_INTEGER_2 * restrict dest;
const GFC_INTEGER_2 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ msum_i2 (gfc_array_i2 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ ssum_i2 (gfc_array_i2 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/sum_i4.c b/libgfortran/generated/sum_i4.c
index 27dd47ee8c5..736ccd17710 100644
--- a/libgfortran/generated/sum_i4.c
+++ b/libgfortran/generated/sum_i4.c
@@ -52,8 +52,15 @@ sum_i4 (gfc_array_i4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ msum_i4 (gfc_array_i4 * const restrict retarray,
GFC_INTEGER_4 * restrict dest;
const GFC_INTEGER_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ msum_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ ssum_i4 (gfc_array_i4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/sum_i8.c b/libgfortran/generated/sum_i8.c
index f7639db0ae7..0eb9e3f92e0 100644
--- a/libgfortran/generated/sum_i8.c
+++ b/libgfortran/generated/sum_i8.c
@@ -52,8 +52,15 @@ sum_i8 (gfc_array_i8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ msum_i8 (gfc_array_i8 * const restrict retarray,
GFC_INTEGER_8 * restrict dest;
const GFC_INTEGER_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ msum_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ ssum_i8 (gfc_array_i8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/sum_r10.c b/libgfortran/generated/sum_r10.c
index 07caf236034..e37dd26a029 100644
--- a/libgfortran/generated/sum_r10.c
+++ b/libgfortran/generated/sum_r10.c
@@ -52,8 +52,15 @@ sum_r10 (gfc_array_r10 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ msum_r10 (gfc_array_r10 * const restrict retarray,
GFC_REAL_10 * restrict dest;
const GFC_REAL_10 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ msum_r10 (gfc_array_r10 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ ssum_r10 (gfc_array_r10 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/sum_r16.c b/libgfortran/generated/sum_r16.c
index 374c2b326f3..b3058035cc9 100644
--- a/libgfortran/generated/sum_r16.c
+++ b/libgfortran/generated/sum_r16.c
@@ -52,8 +52,15 @@ sum_r16 (gfc_array_r16 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ msum_r16 (gfc_array_r16 * const restrict retarray,
GFC_REAL_16 * restrict dest;
const GFC_REAL_16 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ msum_r16 (gfc_array_r16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ ssum_r16 (gfc_array_r16 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/sum_r4.c b/libgfortran/generated/sum_r4.c
index 4b5caeede98..c53dc7e198a 100644
--- a/libgfortran/generated/sum_r4.c
+++ b/libgfortran/generated/sum_r4.c
@@ -52,8 +52,15 @@ sum_r4 (gfc_array_r4 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ msum_r4 (gfc_array_r4 * const restrict retarray,
GFC_REAL_4 * restrict dest;
const GFC_REAL_4 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ msum_r4 (gfc_array_r4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ ssum_r4 (gfc_array_r4 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/generated/sum_r8.c b/libgfortran/generated/sum_r8.c
index 18872d7d535..4657def97e4 100644
--- a/libgfortran/generated/sum_r8.c
+++ b/libgfortran/generated/sum_r8.c
@@ -52,8 +52,15 @@ sum_r8 (gfc_array_r8 * const restrict retarray,
int continue_loop;
/* Make dim zero based to avoid confusion. */
- dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ dim = (*pdim) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
@@ -203,8 +210,8 @@ msum_r8 (gfc_array_r8 * const restrict retarray,
GFC_REAL_8 * restrict dest;
const GFC_REAL_8 * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -214,6 +221,14 @@ msum_r8 (gfc_array_r8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -391,6 +406,13 @@ ssum_r8 (gfc_array_r8 * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in SUM intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c
index c76b427387a..61e9f7997b2 100644
--- a/libgfortran/io/unix.c
+++ b/libgfortran/io/unix.c
@@ -582,6 +582,9 @@ buf_read (unix_stream *s, void *buf, ssize_t nbyte)
static ssize_t
buf_write (unix_stream *s, const void *buf, ssize_t nbyte)
{
+ if (nbyte == 0)
+ return 0;
+
if (s->ndirty == 0)
s->buffer_offset = s->logical_offset;
diff --git a/libgfortran/m4/ifunction.m4 b/libgfortran/m4/ifunction.m4
index 43d8775d04c..91cfd28d5d1 100644
--- a/libgfortran/m4/ifunction.m4
+++ b/libgfortran/m4/ifunction.m4
@@ -45,6 +45,13 @@ name`'rtype_qual`_'atype_code (rtype * const restrict retarray,
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in u_name intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
len = 0;
@@ -193,8 +200,8 @@ void
rtype_name * restrict dest;
const atype_name * restrict base;
const GFC_LOGICAL_1 * restrict mbase;
- int rank;
- int dim;
+ index_type rank;
+ index_type dim;
index_type n;
index_type len;
index_type delta;
@@ -204,6 +211,14 @@ void
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in u_name intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len <= 0)
return;
@@ -380,6 +395,13 @@ void
dim = (*pdim) - 1;
rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ if (unlikely (dim < 0 || dim > rank))
+ {
+ runtime_error ("Dim argument incorrect in u_name intrinsic: "
+ "is %ld, should be between 1 and %ld",
+ (long int) dim + 1, (long int) rank + 1);
+ }
+
for (n = 0; n < dim; n++)
{
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
diff --git a/libgo/go/math/ldexp.go b/libgo/go/math/ldexp.go
index 2898f5dd498..e91a090c986 100644
--- a/libgo/go/math/ldexp.go
+++ b/libgo/go/math/ldexp.go
@@ -13,10 +13,15 @@ package math
// Ldexp(NaN, exp) = NaN
//extern ldexp
-func libc_ldexp(float64, int) float64
+func libc_ldexp(float64, int32) float64
func Ldexp(frac float64, exp int) float64 {
- r := libc_ldexp(frac, exp)
+ if exp > MaxInt32 {
+ exp = MaxInt32
+ } else if exp < MinInt32 {
+ exp = MinInt32
+ }
+ r := libc_ldexp(frac, int32(exp))
return r
}
diff --git a/libgo/go/runtime/testdata/testprogcgo/callback.go b/libgo/go/runtime/testdata/testprogcgo/callback.go
index 7b58f4a207e..a49fc19b284 100644
--- a/libgo/go/runtime/testdata/testprogcgo/callback.go
+++ b/libgo/go/runtime/testdata/testprogcgo/callback.go
@@ -23,7 +23,9 @@ static void foo() {
pthread_t th;
pthread_attr_t attr;
pthread_attr_init(&attr);
- pthread_attr_setstacksize(&attr, 256 << 10);
+ // For gccgo use a stack size large enough for all the callbacks,
+ // in case we are on a platform that does not support -fsplit-stack.
+ pthread_attr_setstacksize(&attr, 512 * 10000);
pthread_create(&th, &attr, thr, 0);
pthread_join(th, 0);
}
diff --git a/libgo/go/syscall/libcall_linux.go b/libgo/go/syscall/libcall_linux.go
index b58b2ddd6ea..5f4778400b0 100644
--- a/libgo/go/syscall/libcall_linux.go
+++ b/libgo/go/syscall/libcall_linux.go
@@ -212,7 +212,7 @@ func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
//flock(fd _C_int, how _C_int) _C_int
//sys Fstatfs(fd int, buf *Statfs_t) (err error)
-//fstatfs(fd _C_int, buf *Statfs_t) _C_int
+//fstatfs64(fd _C_int, buf *Statfs_t) _C_int
func Gettid() (tid int) {
r1, _, _ := Syscall(SYS_GETTID, 0, 0, 0)
@@ -360,7 +360,7 @@ func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n i
}
//sys Statfs(path string, buf *Statfs_t) (err error)
-//statfs(path *byte, buf *Statfs_t) _C_int
+//statfs64(path *byte, buf *Statfs_t) _C_int
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
//sync_file_range(fd _C_int, off Offset_t, n Offset_t, flags _C_uint) _C_int
diff --git a/libgo/mksigtab.sh b/libgo/mksigtab.sh
index c3319705b81..2b07dd491b1 100644
--- a/libgo/mksigtab.sh
+++ b/libgo/mksigtab.sh
@@ -107,6 +107,19 @@ if test "${GOOS}" = "aix"; then
nsig=`expr $nsig + 1`
else
nsig=`grep 'const _*NSIG = [0-9]*$' gen-sysinfo.go | sed -e 's/.* = \([0-9]*\)/\1/'`
+ if test -z "$nsig"; then
+ if grep 'const _*NSIG = [ (]*_*SIGRTMAX + 1[ )]*' gen-sysinfo.go >/dev/null 2>&1; then
+ rtmax=`grep 'const _*SIGRTMAX = [0-9]*$' gen-sysinfo.go | sed -e 's/.* = \([0-9]*\)/\1/'`
+ if test -n "$rtmax"; then
+ nsig=`expr $rtmax + 1`
+ fi
+ fi
+ fi
+fi
+
+if test -z "$nsig"; then
+ echo 1>&2 "could not determine number of signals"
+ exit 1
fi
i=1
diff --git a/libgo/runtime/go-caller.c b/libgo/runtime/go-caller.c
index a35d8d73f44..360bae69594 100644
--- a/libgo/runtime/go-caller.c
+++ b/libgo/runtime/go-caller.c
@@ -74,7 +74,7 @@ static void *back_state;
/* A lock to control creating back_state. */
-static Lock back_state_lock;
+static uint32 back_state_lock;
/* The program arguments. */
@@ -85,7 +85,15 @@ extern Slice runtime_get_args(void);
struct backtrace_state *
__go_get_backtrace_state ()
{
- runtime_lock (&back_state_lock);
+ uint32 set;
+
+ /* We may not have a g here, so we can't use runtime_lock. */
+ set = 0;
+ while (!__atomic_compare_exchange_n (&back_state_lock, &set, 1, false, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED))
+ {
+ runtime_osyield ();
+ set = 0;
+ }
if (back_state == NULL)
{
Slice args;
@@ -113,7 +121,7 @@ __go_get_backtrace_state ()
back_state = backtrace_create_state (filename, 1, error_callback, NULL);
}
- runtime_unlock (&back_state_lock);
+ __atomic_store_n (&back_state_lock, 0, __ATOMIC_RELEASE);
return back_state;
}
diff --git a/libgo/runtime/go-signal.c b/libgo/runtime/go-signal.c
index ad29662d0fd..a5a7cb8080a 100644
--- a/libgo/runtime/go-signal.c
+++ b/libgo/runtime/go-signal.c
@@ -215,6 +215,16 @@ getSiginfo(siginfo_t *info, void *context __attribute__((unused)))
ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.gregs[REG_EIP];
#endif
#endif
+#ifdef __alpha__
+ #ifdef __linux__
+ ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.sc_pc;
+ #endif
+#endif
+#ifdef __PPC__
+ #ifdef __linux__
+ ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.regs->nip;
+ #endif
+#endif
if (ret.sigpc == 0) {
// Skip getSiginfo/sighandler/sigtrampgo/sigtramp/handler.
@@ -288,4 +298,45 @@ dumpregs(siginfo_t *info __attribute__((unused)), void *context __attribute__((u
}
#endif
#endif
+
+#ifdef __alpha__
+ #ifdef __linux__
+ {
+ mcontext_t *m = &((ucontext_t*)(context))->uc_mcontext;
+
+ runtime_printf("v0 %X\n", m->sc_regs[0]);
+ runtime_printf("t0 %X\n", m->sc_regs[1]);
+ runtime_printf("t1 %X\n", m->sc_regs[2]);
+ runtime_printf("t2 %X\n", m->sc_regs[3]);
+ runtime_printf("t3 %X\n", m->sc_regs[4]);
+ runtime_printf("t4 %X\n", m->sc_regs[5]);
+ runtime_printf("t5 %X\n", m->sc_regs[6]);
+ runtime_printf("t6 %X\n", m->sc_regs[7]);
+ runtime_printf("t7 %X\n", m->sc_regs[8]);
+ runtime_printf("s0 %X\n", m->sc_regs[9]);
+ runtime_printf("s1 %X\n", m->sc_regs[10]);
+ runtime_printf("s2 %X\n", m->sc_regs[11]);
+ runtime_printf("s3 %X\n", m->sc_regs[12]);
+ runtime_printf("s4 %X\n", m->sc_regs[13]);
+ runtime_printf("s5 %X\n", m->sc_regs[14]);
+ runtime_printf("fp %X\n", m->sc_regs[15]);
+ runtime_printf("a0 %X\n", m->sc_regs[16]);
+ runtime_printf("a1 %X\n", m->sc_regs[17]);
+ runtime_printf("a2 %X\n", m->sc_regs[18]);
+ runtime_printf("a3 %X\n", m->sc_regs[19]);
+ runtime_printf("a4 %X\n", m->sc_regs[20]);
+ runtime_printf("a5 %X\n", m->sc_regs[21]);
+ runtime_printf("t8 %X\n", m->sc_regs[22]);
+ runtime_printf("t9 %X\n", m->sc_regs[23]);
+ runtime_printf("t10 %X\n", m->sc_regs[24]);
+ runtime_printf("t11 %X\n", m->sc_regs[25]);
+ runtime_printf("ra %X\n", m->sc_regs[26]);
+ runtime_printf("t12 %X\n", m->sc_regs[27]);
+ runtime_printf("at %X\n", m->sc_regs[28]);
+ runtime_printf("gp %X\n", m->sc_regs[29]);
+ runtime_printf("sp %X\n", m->sc_regs[30]);
+ runtime_printf("pc %X\n", m->sc_pc);
+ }
+ #endif
+#endif
}
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 187f5a3e356..434cca71f9d 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,27 @@
+2017-08-09 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/81687
+ * testsuite/libgomp.c/pr81687-1.c: New test.
+ * testsuite/libgomp.c/pr81687-2.c: New test.
+
+2017-08-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/69389
+ * testsuite/libgomp.c/pr69389.c: New test.
+ * testsuite/libgomp.c++/pr69389.C: New test.
+
+2017-08-07 Tom de Vries <tom@codesourcery.com>
+
+ PR middle-end/78266
+ * testsuite/libgomp.oacc-c-c++-common/vprop-2.c: New test.
+ * testsuite/libgomp.oacc-c-c++-common/vprop.c: Remove xfail.
+
+2017-07-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/45784
+ * testsuite/libgomp.c/pr45784.c: New test.
+ * testsuite/libgomp.c++/pr45784.C: New test.
+
2017-07-19 Tom de Vries <tom@codesourcery.com>
* testsuite/libgomp.oacc-c/vec.c: New test.
diff --git a/libgomp/testsuite/libgomp.c++/pr45784.C b/libgomp/testsuite/libgomp.c++/pr45784.C
new file mode 100644
index 00000000000..306246c754a
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c++/pr45784.C
@@ -0,0 +1,5 @@
+// PR c/45784
+// { dg-do run }
+
+#include "../libgomp.c/pr45784.c"
+
diff --git a/libgomp/testsuite/libgomp.c++/pr69389.C b/libgomp/testsuite/libgomp.c++/pr69389.C
new file mode 100644
index 00000000000..9fcb0ffc6d0
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c++/pr69389.C
@@ -0,0 +1,3 @@
+// PR c/69389
+
+#include "../libgomp.c/pr69389.c"
diff --git a/libgomp/testsuite/libgomp.c/pr45784.c b/libgomp/testsuite/libgomp.c/pr45784.c
new file mode 100644
index 00000000000..78612108bf6
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/pr45784.c
@@ -0,0 +1,41 @@
+/* PR c/45784 */
+/* { dg-do run } */
+
+void
+foo (int n)
+{
+ char *p, vla[2 * n];
+ int i;
+ #pragma omp parallel for
+ for (p = vla; p < vla + (sizeof (vla) / sizeof (vla[0])); p++)
+ *p = ' ';
+ #pragma omp parallel for
+ for (i = 0; i < 2 * n; i++)
+ if (vla[i] != ' ')
+ __builtin_abort ();
+}
+
+void
+bar (int n)
+{
+ char *p, vla1[n], vla2[n * 2], vla3[n * 3], vla4[n * 4];
+ int i;
+ __builtin_memset (vla4, ' ', n * 4);
+ #pragma omp parallel for
+ for (p = vla4 + sizeof (vla1); p < vla4 + sizeof (vla3) - sizeof (vla2) + sizeof (vla1); p += sizeof (vla4) / sizeof (vla4))
+ p[0] = '!';
+ #pragma omp parallel for
+ for (i = 0; i < n * 4; i++)
+ if (vla4[i] != ((i >= n && i < 2 * n) ? '!' : ' '))
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ volatile int n;
+ n = 128;
+ foo (n);
+ bar (n);
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/pr69389.c b/libgomp/testsuite/libgomp.c/pr69389.c
new file mode 100644
index 00000000000..07faff46f40
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/pr69389.c
@@ -0,0 +1,124 @@
+/* PR c/69389 */
+
+struct S { unsigned int a : 10; unsigned int b : 4; unsigned int c : 18; } s = { 210, 11, 1235 };
+
+unsigned int
+f1 (void)
+{
+ unsigned int v;
+ #pragma omp atomic read
+ v = s.b;
+ return v;
+}
+
+void
+f2 (unsigned int v)
+{
+ #pragma omp atomic write
+ s.b = v;
+}
+
+void
+f3 (void)
+{
+ #pragma omp atomic
+ s.b |= 1;
+}
+
+int
+f4 (void)
+{
+ int v;
+ #pragma omp atomic capture
+ v = s.b += 8;
+ return v;
+}
+
+int
+f5 (void)
+{
+ int v;
+ #pragma omp atomic capture
+ {
+ v = s.b;
+ s.b -= 4;
+ }
+ return v;
+}
+
+void
+f6 (void)
+{
+ #pragma omp atomic
+ s.b = s.b & 7;
+}
+
+void
+f7 (void)
+{
+ #pragma omp atomic
+ s.b = ~7 & s.b;
+}
+
+int
+f8 (void)
+{
+ int v;
+ #pragma omp atomic capture
+ v = s.b = 8 + s.b;
+ return v;
+}
+
+int
+f9 (void)
+{
+ int v;
+ #pragma omp atomic capture
+ {
+ v = s.b;
+ s.b = s.b - 4;
+ }
+ return v;
+}
+
+int
+main ()
+{
+ if (f1 () != 11)
+ __builtin_abort ();
+ f2 (4);
+ if (s.a != 210 || s.b != 4 || s.c != 1235)
+ __builtin_abort ();
+ s.a = 813;
+ s.c = 31532;
+ if (f1 () != 4)
+ __builtin_abort ();
+ f3 ();
+ if (f1 () != 5)
+ __builtin_abort ();
+ if (s.a != 813 || s.b != 5 || s.c != 31532)
+ __builtin_abort ();
+ if (f4 () != 13)
+ __builtin_abort ();
+ if (f1 () != 13)
+ __builtin_abort ();
+ f2 (14);
+ if (s.a != 813 || s.b != 14 || s.c != 31532)
+ __builtin_abort ();
+ if (f5 () != 14)
+ __builtin_abort ();
+ if (f1 () != 10 || s.a != 813 || s.b != 10 || s.c != 31532)
+ __builtin_abort ();
+ f6 ();
+ if (f1 () != 2)
+ __builtin_abort ();
+ f2 (15);
+ f7 ();
+ if (f1 () != 8)
+ __builtin_abort ();
+ if (f8 () != 0 || s.a != 813 || s.b != 0 || s.c != 31532)
+ __builtin_abort ();
+ if (f9 () != 0 || s.a != 813 || s.b != 12 || s.c != 31532)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/pr81687-1.c b/libgomp/testsuite/libgomp.c/pr81687-1.c
new file mode 100644
index 00000000000..768ec4484d4
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/pr81687-1.c
@@ -0,0 +1,23 @@
+/* PR c/81687 */
+/* { dg-do link } */
+/* { dg-additional-options "-O2" } */
+
+extern int printf (const char *, ...);
+
+int
+main ()
+{
+ #pragma omp parallel
+ {
+ lab1:
+ printf ("lab1=%p\n", (void *)(&&lab1));
+ }
+ lab2:
+ #pragma omp parallel
+ {
+ lab3:
+ printf ("lab2=%p\n", (void *)(&&lab2));
+ }
+ printf ("lab3=%p\n", (void *)(&&lab3));
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/pr81687-2.c b/libgomp/testsuite/libgomp.c/pr81687-2.c
new file mode 100644
index 00000000000..e819f762032
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/pr81687-2.c
@@ -0,0 +1,27 @@
+/* PR c/81687 */
+/* { dg-do link } */
+/* { dg-additional-options "-O2" } */
+
+int
+main ()
+{
+ __label__ lab4, lab5, lab6;
+ volatile int l = 0;
+ int m = l;
+ void foo (int x) { if (x == 1) goto lab4; }
+ void bar (int x) { if (x == 2) goto lab5; }
+ void baz (int x) { if (x == 3) goto lab6; }
+ #pragma omp parallel
+ {
+ foo (m + 1);
+ lab4:;
+ }
+ #pragma omp task
+ {
+ bar (m + 2);
+ lab5:;
+ }
+ baz (m + 3);
+ lab6:;
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop-2.c
new file mode 100644
index 00000000000..046ac68014b
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop-2.c
@@ -0,0 +1,45 @@
+/* { dg-do run } */
+
+#include <assert.h>
+
+#define DO_PRAGMA(x) _Pragma (#x)
+
+#define test(idx,type,ngangs) \
+ void \
+ test_##idx () \
+ { \
+ int b[100]; \
+ \
+ for (unsigned int i = 0; i < 100; i++) \
+ b[i] = 0; \
+ \
+ DO_PRAGMA(acc parallel num_gangs (ngangs) copy (b)) \
+ { \
+ _Pragma("acc loop gang") \
+ for (type j = 0; j < 5; j++) \
+ { \
+ _Pragma("acc loop vector") \
+ for (unsigned int i = 0; i < 20; i++) \
+ b[j * 20 + i] = -2; \
+ } \
+ } \
+ \
+ for (unsigned int i = 0; i < 100; i++) \
+ assert (b[i] == -2); \
+ }
+
+test (0, signed char, 256)
+test (1, unsigned char, 256)
+test (2, signed short, 65535)
+test (3, unsigned short, 65535)
+
+int
+main ()
+{
+ test_0 ();
+ test_1 ();
+ test_2 ();
+ test_3 ();
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c
index 0ac0cf62e45..e4dd682e84f 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c
@@ -1,5 +1,4 @@
/* { dg-do run } */
-/* { dg-xfail-run-if "PR78266" { openacc_nvidia_accel_selected } } */
#include <assert.h>
diff --git a/libsanitizer/ChangeLog b/libsanitizer/ChangeLog
index 192318390d3..5c20f7da931 100644
--- a/libsanitizer/ChangeLog
+++ b/libsanitizer/ChangeLog
@@ -1,3 +1,14 @@
+2017-08-07 Jakub Jelinek <jakub@redhat.com>
+
+ * include/system/sys/ptrace.h: New file.
+
+2017-07-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR sanitizer/80998
+ * ubsan/ubsan_handlers.cc: Cherry-pick upstream r304461.
+ * ubsan/ubsan_checks.inc: Likewise.
+ * ubsan/ubsan_handlers.h: Likewise.
+
2017-07-14 Jakub Jelinek <jakub@redhat.com>
PR sanitizer/81066
diff --git a/libsanitizer/include/system/sys/ptrace.h b/libsanitizer/include/system/sys/ptrace.h
new file mode 100644
index 00000000000..1cfe4ce96e0
--- /dev/null
+++ b/libsanitizer/include/system/sys/ptrace.h
@@ -0,0 +1,7 @@
+#include_next <sys/ptrace.h>
+#ifndef PTRACE_GETREGSET
+/* glibc before
+ https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=cbff0d9689c4d68578b6a4f0a17807232506ea27
+ doesn't define PTRACE_GETREGSET. */
+#define PTRACE_GETREGSET 0x4204
+#endif
diff --git a/libsanitizer/ubsan/ubsan_checks.inc b/libsanitizer/ubsan/ubsan_checks.inc
index ea85877198a..31e9495e301 100644
--- a/libsanitizer/ubsan/ubsan_checks.inc
+++ b/libsanitizer/ubsan/ubsan_checks.inc
@@ -17,6 +17,7 @@
UBSAN_CHECK(GenericUB, "undefined-behavior", "undefined")
UBSAN_CHECK(NullPointerUse, "null-pointer-use", "null")
+UBSAN_CHECK(PointerOverflow, "pointer-overflow", "pointer-overflow")
UBSAN_CHECK(MisalignedPointerUse, "misaligned-pointer-use", "alignment")
UBSAN_CHECK(InsufficientObjectSize, "insufficient-object-size", "object-size")
UBSAN_CHECK(SignedIntegerOverflow, "signed-integer-overflow",
diff --git a/libsanitizer/ubsan/ubsan_handlers.cc b/libsanitizer/ubsan/ubsan_handlers.cc
index 5631e457a1c..761ccef63f3 100644
--- a/libsanitizer/ubsan/ubsan_handlers.cc
+++ b/libsanitizer/ubsan/ubsan_handlers.cc
@@ -521,6 +521,37 @@ void __ubsan::__ubsan_handle_nonnull_arg_abort(NonNullArgData *Data) {
Die();
}
+static void handlePointerOverflowImpl(PointerOverflowData *Data,
+ ValueHandle Base,
+ ValueHandle Result,
+ ReportOptions Opts) {
+ SourceLocation Loc = Data->Loc.acquire();
+ ErrorType ET = ErrorType::PointerOverflow;
+
+ if (ignoreReport(Loc, Opts, ET))
+ return;
+
+ ScopedReport R(Opts, Loc, ET);
+
+ Diag(Loc, DL_Error, "pointer index expression with base %0 overflowed to %1")
+ << (void *)Base << (void*)Result;
+}
+
+void __ubsan::__ubsan_handle_pointer_overflow(PointerOverflowData *Data,
+ ValueHandle Base,
+ ValueHandle Result) {
+ GET_REPORT_OPTIONS(false);
+ handlePointerOverflowImpl(Data, Base, Result, Opts);
+}
+
+void __ubsan::__ubsan_handle_pointer_overflow_abort(PointerOverflowData *Data,
+ ValueHandle Base,
+ ValueHandle Result) {
+ GET_REPORT_OPTIONS(true);
+ handlePointerOverflowImpl(Data, Base, Result, Opts);
+ Die();
+}
+
static void handleCFIBadIcall(CFICheckFailData *Data, ValueHandle Function,
ReportOptions Opts) {
if (Data->CheckKind != CFITCK_ICall)
diff --git a/libsanitizer/ubsan/ubsan_handlers.h b/libsanitizer/ubsan/ubsan_handlers.h
index 394c9eac298..d04554acee3 100644
--- a/libsanitizer/ubsan/ubsan_handlers.h
+++ b/libsanitizer/ubsan/ubsan_handlers.h
@@ -146,6 +146,13 @@ struct NonNullArgData {
/// \brief Handle passing null pointer to function with nonnull attribute.
RECOVERABLE(nonnull_arg, NonNullArgData *Data)
+struct PointerOverflowData {
+ SourceLocation Loc;
+};
+
+RECOVERABLE(pointer_overflow, PointerOverflowData *Data, ValueHandle Base,
+ ValueHandle Result)
+
/// \brief Known CFI check kinds.
/// Keep in sync with the enum of the same name in CodeGenFunction.h
enum CFITypeCheckKind : unsigned char {
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index d60c5705486..fd9a6afbc3c 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,253 @@
+2017-08-11 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/81808
+ * testsuite/27_io/basic_fstream/53984.cc: Adjust test for targets
+ that allow opening a directory as a FILE and reading from it.
+
+2017-08-09 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/std/type_traits (_GLIBCXX_NO_BUILTIN_HAS_UNIQ_OBJ_REP):
+ Replace with _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP and use
+ __is_identifier to set it.
+
+2017-08-09 Katsuhiko Nishimra <ktns.87@gmail.com>
+
+ * include/std/type_traits (_GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE): Use
+ __is_identifier instead of __has_builtin.
+
+2017-08-09 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/79820
+ PR libstdc++/81751
+ * config/io/basic_file_stdio.cc (sys_open(FILE*, ios_base::openmode)):
+ Call fflush on the stream instead of calling sync() while _M_cfile is
+ null. Restore original value of errno.
+ * testsuite/ext/stdio_filebuf/char/79820.cc: New.
+ * testsuite/ext/stdio_filebuf/char/81751.cc: New.
+
+2017-07-31 Marek Polacek <polacek@redhat.com>
+
+ PR libstdc++/81599
+ * include/bits/stl_stack.h: Fix typo.
+
+2017-07-26 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/27_io/basic_fstream/53984.cc: Fix test.
+
+2017-07-26 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/27_io/basic_fstream/53984.cc: Fix typo in dg-require
+ directive.
+
+2017-07-25 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/53984
+ * include/bits/basic_ios.h (basic_ios::_M_setstate): Adjust comment.
+ * include/bits/istream.tcc (basic_istream::sentry): Handle exceptions
+ during construction.
+ * include/std/istream: Adjust comments for formatted input functions
+ and unformatted input functions.
+ * testsuite/27_io/basic_fstream/53984.cc: New.
+ * testsuite/27_io/basic_istream/sentry/char/53984.cc: New.
+
+ * include/bits/ios_base.h (ios_base::io_state, ios_base::open_mode)
+ (ios_base::seek_dir): Remove for C++17.
+ * include/std/streambuf (basic_streambuf::stossc): Remove for C++17.
+ Add deprecated attribute for C++11 and C++14.
+ * testsuite/27_io/types/1.cc: Don't run for C++17 and later.
+ * testsuite/27_io/types/4.cc: New.
+
+2017-07-23 Michael Collison <michael.collison@arm.com>
+
+ Add optimized implementation of mersenne twister for aarch64
+ * config/cpu/aarch64/opt/ext/opt_random.h: New file.
+ (__arch64_recursion): New function.
+ (__aarch64_lsr_128): New function.
+ (__aarch64_lsl_128): New function.
+ (operator==): New function.
+ (simd_fast_mersenne_twister_engine): Implement
+ method _M_gen_rand.
+ * config/cpu/aarch64/opt/bits/opt_random.h: New file.
+ * include/ext/random: (simd_fast_mersenne_twister_engine):
+ add _M_state private array.
+
+2017-07-23 François Dumont <fdumont@gcc.gnu.org>
+
+ PR libstdc++/81064
+ * include/bits/algorithmfwd.h: Reorganize versioned namespace.
+ * include/bits/basic_string.h: Likewise.
+ * include/bits/c++config: Likewise.
+ * include/bits/deque.tcc: Likewise.
+ * include/bits/forward_list.h: Likewise.
+ * include/bits/forward_list.tcc: Likewise.
+ * include/bits/hashtable_policy.h: Likewise.
+ * include/bits/list.tcc: Likewise.
+ * include/bits/move.h: Likewise.
+ * include/bits/quoted_string.h: Likewise.
+ * include/bits/random.h: Likewise.
+ * include/bits/random.tcc: Likewise.
+ * include/bits/regex.h: Likewise.
+ * include/bits/regex.tcc: Likewise.
+ * include/bits/regex_automaton.h: Likewise.
+ * include/bits/regex_automaton.tcc: Likewise.
+ * include/bits/regex_compiler.h: Likewise.
+ * include/bits/regex_compiler.tcc: Likewise.
+ * include/bits/regex_constants.h: Likewise.
+ * include/bits/regex_error.h: Likewise.
+ * include/bits/regex_executor.h: Likewise.
+ * include/bits/regex_executor.tcc: Likewise.
+ * include/bits/regex_scanner.h: Likewise.
+ * include/bits/regex_scanner.tcc: Likewise.
+ * include/bits/specfun.h: Likewise.
+ * include/bits/stl_algo.h: Likewise.
+ * include/bits/stl_algobase.h: Likewise.
+ * include/bits/stl_bvector.h: Likewise.
+ * include/bits/stl_deque.h: Likewise.
+ * include/bits/stl_iterator.h: Likewise.
+ * include/bits/stl_iterator_base_funcs.h: Likewise.
+ * include/bits/stl_list.h: Likewise.
+ * include/bits/stl_map.h: Likewise.
+ * include/bits/stl_multimap.h: Likewise.
+ * include/bits/stl_multiset.h: Likewise.
+ * include/bits/stl_relops.h: Likewise.
+ * include/bits/stl_set.h: Likewise.
+ * include/bits/stl_vector.h: Likewise.
+ * include/bits/uniform_int_dist.h: Likewise.
+ * include/bits/unordered_map.h: Likewise.
+ * include/bits/unordered_set.h: Likewise.
+ * include/bits/vector.tcc: Likewise.
+ * include/c_global/cmath: Likewise.
+ * include/c_std/cmath: Likewise.
+ * include/decimal/decimal: Likewise.
+ * include/decimal/decimal.h: Likewise.
+ * include/experimental/algorithm: Likewise.
+ * include/experimental/any: Likewise.
+ * include/experimental/array: Likewise.
+ * include/experimental/bits/erase_if.h: Likewise.
+ * include/experimental/bits/fs_dir.h: Likewise.
+ * include/experimental/bits/fs_fwd.h: Likewise.
+ * include/experimental/bits/fs_ops.h: Likewise.
+ * include/experimental/bits/fs_path.h: Likewise.
+ * include/experimental/bits/lfts_config.h: Likewise.
+ * include/experimental/bits/shared_ptr.h: Likewise.
+ * include/experimental/bits/string_view.tcc: Likewise.
+ * include/experimental/chrono: Likewise.
+ * include/experimental/deque: Likewise.
+ * include/experimental/filesystem: Likewise.
+ * include/experimental/forward_list: Likewise.
+ * include/experimental/functional: Likewise.
+ * include/experimental/iterator: Likewise.
+ * include/experimental/list: Likewise.
+ * include/experimental/map: Likewise.
+ * include/experimental/memory: Likewise.
+ * include/experimental/memory_resource: Likewise.
+ * include/experimental/numeric: Likewise.
+ * include/experimental/optional: Likewise.
+ * include/experimental/propagate_const: Likewise.
+ * include/experimental/random: Likewise.
+ * include/experimental/ratio: Likewise.
+ * include/experimental/regex: Likewise.
+ * include/experimental/set: Likewise.
+ * include/experimental/source_location: Likewise.
+ * include/experimental/string: Likewise.
+ * include/experimental/string_view: Likewise.
+ * include/experimental/system_error: Likewise.
+ * include/experimental/tuple: Likewise.
+ * include/experimental/type_traits: Likewise.
+ * include/experimental/unordered_map: Likewise.
+ * include/experimental/unordered_set: Likewise.
+ * include/experimental/utility: Likewise.
+ * include/experimental/vector: Likewise.
+ * include/ext/bitmap_allocator.h: Likewise.
+ * include/ext/codecvt_specializations.h: Likewise.
+ * include/ext/rope: Likewise.
+ * include/ext/typelist.h: Likewise.
+ * include/std/chrono: Likewise.
+ * include/std/complex: Likewise.
+ * include/std/functional: Likewise.
+ * include/std/numeric: Likewise.
+ * include/std/string_view: Likewise.
+ * include/std/thread: Likewise.
+ * include/std/variant: Likewise.
+ * include/tr1/array: Likewise.
+ * include/tr1/bessel_function.tcc: Likewise.
+ * include/tr1/beta_function.tcc: Likewise.
+ * include/tr1/cmath: Likewise.
+ * include/tr1/complex: Likewise.
+ * include/tr1/ell_integral.tcc: Likewise.
+ * include/tr1/exp_integral.tcc: Likewise.
+ * include/tr1/functional: Likewise.
+ * include/tr1/functional_hash.h: Likewise.
+ * include/tr1/gamma.tcc: Likewise.
+ * include/tr1/hashtable.h: Likewise.
+ * include/tr1/hashtable_policy.h: Likewise.
+ * include/tr1/hypergeometric.tcc: Likewise.
+ * include/tr1/legendre_function.tcc: Likewise.
+ * include/tr1/modified_bessel_func.tcc: Likewise.
+ * include/tr1/poly_hermite.tcc: Likewise.
+ * include/tr1/poly_laguerre.tcc: Likewise.
+ * include/tr1/random.h: Likewise.
+ * include/tr1/random.tcc: Likewise.
+ * include/tr1/regex: Likewise.
+ * include/tr1/riemann_zeta.tcc: Likewise.
+ * include/tr1/shared_ptr.h: Likewise.
+ * include/tr1/special_function_util.h: Likewise.
+ * include/tr1/tuple: Likewise.
+ * include/tr1/type_traits: Likewise.
+ * include/tr1/unordered_map.h: Likewise.
+ * include/tr1/unordered_set.h: Likewise.
+ * include/tr1/utility: Likewise.
+ * include/tr2/bool_set: Likewise.
+ * include/tr2/bool_set.tcc: Likewise.
+ * include/tr2/dynamic_bitset: Likewise.
+ * include/tr2/dynamic_bitset.tcc: Likewise.
+ * include/tr2/ratio: Likewise.
+ * include/tr2/type_traits: Likewise.
+ * src/c++11/chrono.cc: Likewise.
+ * src/c++11/compatibility-c++0x.cc: Likewise.
+ * src/c++11/compatibility-chrono.cc: Likewise.
+ * src/c++11/cxx11-shim_facets.cc: Likewise.
+ * src/c++11/hashtable_c++0x.cc: Likewise.
+ * src/c++11/placeholders.cc: Likewise.
+ * src/c++11/thread.cc: Likewise.
+ * src/c++98/bitmap_allocator.cc: Likewise.
+ * src/c++98/hashtable_tr1.cc: Likewise.
+ * src/c++98/list.cc: Likewise.
+ * src/shared/hashtable-aux.cc: Likewise.
+ * testsuite/20_util/duration/literals/range.cc: Adapt line number.
+ * testsuite/20_util/duration/requirements/typedefs_neg1.cc: Likewise.
+ * testsuite/20_util/duration/requirements/typedefs_neg2.cc: Likewise.
+ * testsuite/20_util/duration/requirements/typedefs_neg3.cc: Likewise.
+ * testsuite/20_util/forward/c_neg.cc: Likewise.
+ * testsuite/20_util/forward/f_neg.cc: Likewise.
+ * testsuite/26_numerics/gcd/gcd_neg.cc: Likewise.
+ * testsuite/26_numerics/lcm/lcm_neg.cc: Likewise.
+ * testsuite/26_numerics/random/pr60037-neg.cc: Likewise.
+ * python/libstdcxx/v6/printers.py: Adapt.
+
+2017-07-20 Jonathan Wakely <jwakely@redhat.com>
+
+ * config/allocator/malloc_allocator_base.h [__SANITIZE_ADDRESS__]
+ (_GLIBCXX_SANITIZE_STD_ALLOCATOR): Define.
+ * config/allocator/new_allocator_base.h [__SANITIZE_ADDRESS__]
+ (_GLIBCXX_SANITIZE_STD_ALLOCATOR): Define.
+ * doc/xml/manual/using.xml (_GLIBCXX_SANITIZE_VECTOR): Document macro.
+ * include/bits/stl_vector.h [_GLIBCXX_SANITIZE_VECTOR]
+ (_Vector_impl::_Asan, _Vector_impl::_Asan::_Reinit)
+ (_Vector_impl::_Asan::_Grow, _GLIBCXX_ASAN_ANNOTATE_REINIT)
+ (_GLIBCXX_ASAN_ANNOTATE_GROW, _GLIBCXX_ASAN_ANNOTATE_GREW)
+ (_GLIBCXX_ASAN_ANNOTATE_SHRINK, _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC):
+ Define annotation helper types and macros.
+ (vector::~vector, vector::push_back, vector::pop_back)
+ (vector::_M_erase_at_end): Add annotations.
+ * include/bits/vector.tcc (vector::reserve, vector::emplace_back)
+ (vector::insert, vector::_M_erase, vector::operator=)
+ (vector::_M_fill_assign, vector::_M_assign_aux)
+ (vector::_M_insert_rval, vector::_M_emplace_aux)
+ (vector::_M_insert_aux, vector::_M_realloc_insert)
+ (vector::_M_fill_insert, vector::_M_default_append)
+ (vector::_M_shrink_to_fit, vector::_M_range_insert): Annotate.
+
2017-07-19 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/81476
diff --git a/libstdc++-v3/config/allocator/malloc_allocator_base.h b/libstdc++-v3/config/allocator/malloc_allocator_base.h
index b091bbca863..54e0837f01f 100644
--- a/libstdc++-v3/config/allocator/malloc_allocator_base.h
+++ b/libstdc++-v3/config/allocator/malloc_allocator_base.h
@@ -52,4 +52,8 @@ namespace std
# define __allocator_base __gnu_cxx::malloc_allocator
#endif
+#if defined(__SANITIZE_ADDRESS__) && !defined(_GLIBCXX_SANITIZE_STD_ALLOCATOR)
+# define _GLIBCXX_SANITIZE_STD_ALLOCATOR 1
+#endif
+
#endif
diff --git a/libstdc++-v3/config/allocator/new_allocator_base.h b/libstdc++-v3/config/allocator/new_allocator_base.h
index 3d2bb67887f..e776ed31864 100644
--- a/libstdc++-v3/config/allocator/new_allocator_base.h
+++ b/libstdc++-v3/config/allocator/new_allocator_base.h
@@ -52,4 +52,8 @@ namespace std
# define __allocator_base __gnu_cxx::new_allocator
#endif
+#if defined(__SANITIZE_ADDRESS__) && !defined(_GLIBCXX_SANITIZE_STD_ALLOCATOR)
+# define _GLIBCXX_SANITIZE_STD_ALLOCATOR 1
+#endif
+
#endif
diff --git a/libstdc++-v3/config/cpu/aarch64/opt/bits/opt_random.h b/libstdc++-v3/config/cpu/aarch64/opt/bits/opt_random.h
new file mode 100644
index 00000000000..fba7ea812ad
--- /dev/null
+++ b/libstdc++-v3/config/cpu/aarch64/opt/bits/opt_random.h
@@ -0,0 +1,47 @@
+// Optimizations for random number functions, aarch64 version -*- C++ -*-
+
+// Copyright (C) 2017 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.
+
+// 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/>.
+
+/** @file bits/opt_random.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{random}
+ */
+
+#ifndef _BITS_OPT_RANDOM_H
+#define _BITS_OPT_RANDOM_H 1
+
+#pragma GCC system_header
+
+
+namespace std _GLIBCXX_VISIBILITY (default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+
+
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
+
+
+#endif // _BITS_OPT_RANDOM_H
diff --git a/libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h b/libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h
new file mode 100644
index 00000000000..330050fc7f7
--- /dev/null
+++ b/libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h
@@ -0,0 +1,180 @@
+// Optimizations for random number extensions, aarch64 version -*- C++ -*-
+
+// Copyright (C) 2017 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.
+
+// 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/>.
+
+/** @file ext/random.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{ext/random}
+ */
+
+#ifndef _EXT_OPT_RANDOM_H
+#define _EXT_OPT_RANDOM_H 1
+
+#pragma GCC system_header
+
+#ifdef __ARM_NEON
+
+#ifdef __AARCH64EB__
+# define __VEXT(_A,_B,_C) __builtin_shuffle (_A, _B, (__Uint8x16_t) \
+ {16-_C, 17-_C, 18-_C, 19-_C, 20-_C, 21-_C, 22-_C, 23-_C, \
+ 24-_C, 25-_C, 26-_C, 27-_C, 28-_C, 29-_C, 30-_C, 31-_C})
+#else
+# define __VEXT(_A,_B,_C) __builtin_shuffle (_B, _A, (__Uint8x16_t) \
+ {_C, _C+1, _C+2, _C+3, _C+4, _C+5, _C+6, _C+7, \
+ _C+8, _C+9, _C+10, _C+11, _C+12, _C+13, _C+14, _C+15})
+#endif
+
+namespace __gnu_cxx _GLIBCXX_VISIBILITY (default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ namespace {
+ // Logical Shift right 128-bits by c * 8 bits
+
+ __extension__ extern __inline __Uint32x4_t
+ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ __aarch64_lsr_128 (__Uint8x16_t __a, __const int __c)
+ {
+ const __Uint8x16_t __zero = {0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0};
+
+ return (__Uint32x4_t) __VEXT (__zero, __a, __c);
+ }
+
+ // Logical Shift left 128-bits by c * 8 bits
+
+ __extension__ extern __inline __Uint32x4_t
+ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+ __aarch64_lsl_128 (__Uint8x16_t __a, __const int __c)
+ {
+ const __Uint8x16_t __zero = {0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0};
+
+ return (__Uint32x4_t) __VEXT (__a, __zero, 16 - __c);
+ }
+
+ template<size_t __sl1, size_t __sl2, size_t __sr1, size_t __sr2>
+ inline __Uint32x4_t __aarch64_recursion (__Uint32x4_t __a,
+ __Uint32x4_t __b,
+ __Uint32x4_t __c,
+ __Uint32x4_t __d,
+ __Uint32x4_t __e)
+ {
+ __Uint32x4_t __y = (__b >> __sr1);
+ __Uint32x4_t __z = __aarch64_lsr_128 ((__Uint8x16_t) __c, __sr2);
+
+ __Uint32x4_t __v = __d << __sl1;
+
+ __z = __z ^ __a;
+ __z = __z ^ __v;
+
+ __Uint32x4_t __x = __aarch64_lsl_128 ((__Uint8x16_t) __a, __sl2);
+
+ __y = __y & __e;
+ __z = __z ^ __x;
+ return __z ^ __y;
+ }
+}
+
+#define _GLIBCXX_OPT_HAVE_RANDOM_SFMT_GEN_READ 1
+ template<typename _UIntType, size_t __m,
+ size_t __pos1, size_t __sl1, size_t __sl2,
+ size_t __sr1, size_t __sr2,
+ uint32_t __msk1, uint32_t __msk2,
+ uint32_t __msk3, uint32_t __msk4,
+ uint32_t __parity1, uint32_t __parity2,
+ uint32_t __parity3, uint32_t __parity4>
+ void simd_fast_mersenne_twister_engine<_UIntType, __m,
+ __pos1, __sl1, __sl2, __sr1, __sr2,
+ __msk1, __msk2, __msk3, __msk4,
+ __parity1, __parity2, __parity3,
+ __parity4>::
+ _M_gen_rand (void)
+ {
+ __Uint32x4_t __r1 = _M_state[_M_nstate - 2];
+ __Uint32x4_t __r2 = _M_state[_M_nstate - 1];
+
+ __Uint32x4_t __aData = {__msk1, __msk2, __msk3, __msk4};
+
+ size_t __i;
+ for (__i = 0; __i < _M_nstate - __pos1; ++__i)
+ {
+ __Uint32x4_t __r = __aarch64_recursion<__sl1, __sl2, __sr1, __sr2>
+ (_M_state[__i], _M_state[__i + __pos1], __r1, __r2, __aData);
+
+ _M_state[__i] = __r;
+
+ __r1 = __r2;
+ __r2 = __r;
+ }
+ for (; __i < _M_nstate; ++__i)
+ {
+ __Uint32x4_t __r = __aarch64_recursion<__sl1, __sl2, __sr1, __sr2>
+ (_M_state[__i], _M_state[__i + __pos1 - _M_nstate], __r1, __r2,
+ __aData);
+
+ _M_state[__i] = __r;
+
+ __r1 = __r2;
+ __r2 = __r;
+ }
+
+ _M_pos = 0;
+ }
+
+
+#define _GLIBCXX_OPT_HAVE_RANDOM_SFMT_OPERATOREQUAL 1
+ template<typename _UIntType, size_t __m,
+ size_t __pos1, size_t __sl1, size_t __sl2,
+ size_t __sr1, size_t __sr2,
+ uint32_t __msk1, uint32_t __msk2,
+ uint32_t __msk3, uint32_t __msk4,
+ uint32_t __parity1, uint32_t __parity2,
+ uint32_t __parity3, uint32_t __parity4>
+ bool
+ operator==(const __gnu_cxx::simd_fast_mersenne_twister_engine<_UIntType,
+ __m, __pos1, __sl1, __sl2, __sr1, __sr2,
+ __msk1, __msk2, __msk3, __msk4,
+ __parity1, __parity2, __parity3, __parity4>& __lhs,
+ const __gnu_cxx::simd_fast_mersenne_twister_engine<_UIntType,
+ __m, __pos1, __sl1, __sl2, __sr1, __sr2,
+ __msk1, __msk2, __msk3, __msk4,
+ __parity1, __parity2, __parity3, __parity4>& __rhs)
+ {
+ if (__lhs._M_pos != __rhs._M_pos)
+ return false;
+
+ __Uint32x4_t __res = __lhs._M_state[0] ^ __rhs._M_state[0];
+
+ for (size_t __i = 1; __i < __lhs._M_nstate; ++__i)
+ __res |= __lhs._M_state[__i] ^ __rhs._M_state[__i];
+
+ return (__int128) __res == 0;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace
+
+#endif // __ARM_NEON
+
+#endif // _EXT_OPT_RANDOM_H
diff --git a/libstdc++-v3/config/io/basic_file_stdio.cc b/libstdc++-v3/config/io/basic_file_stdio.cc
index e7367016504..eeb1e5e94b6 100644
--- a/libstdc++-v3/config/io/basic_file_stdio.cc
+++ b/libstdc++-v3/config/io/basic_file_stdio.cc
@@ -195,11 +195,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__basic_file* __ret = NULL;
if (!this->is_open() && __file)
{
- int __err;
+ int __err, __save_errno = errno;
+ // POSIX guarantees that fflush sets errno on error, but C doesn't.
errno = 0;
do
- __err = this->sync();
+ __err = fflush(__file);
while (__err && errno == EINTR);
+ errno = __save_errno;
if (!__err)
{
_M_cfile = __file;
diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml
index 5c0e1b9f8c1..6ce29fd30be 100644
--- a/libstdc++-v3/doc/xml/manual/using.xml
+++ b/libstdc++-v3/doc/xml/manual/using.xml
@@ -991,6 +991,24 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe
</listitem></varlistentry>
</variablelist>
+ <varlistentry><term><code>_GLIBCXX_SANITIZE_VECTOR</code></term>
+ <listitem>
+ <para>
+ Undefined by default. When defined, <classname>std::vector</classname>
+ operations will be annotated so that AddressSanitizer can detect
+ invalid accesses to the unused capacity of a
+ <classname>std::vector</classname>. These annotations are only
+ enabled for
+ <classname>std::vector&lt;T, std::allocator&lt;T&gt;&gt;</classname>
+ and only when <classname>std::allocator</classname> is derived from
+ <xref linkend="allocator.impl"><classname>new_allocator</classname>
+ or <classname>malloc_allocator</classname></xref>. The annotations
+ must be present on all vector operations or none, so this macro must
+ be defined to the same value for all translation units that create,
+ destroy or modify vectors.
+ </para>
+ </listitem></varlistentry>
+
</section>
<section xml:id="manual.intro.using.abi" xreflabel="Dual ABI">
diff --git a/libstdc++-v3/include/bits/algorithmfwd.h b/libstdc++-v3/include/bits/algorithmfwd.h
index 3ff4ff71230..673b98e7867 100644
--- a/libstdc++-v3/include/bits/algorithmfwd.h
+++ b/libstdc++-v3/include/bits/algorithmfwd.h
@@ -615,8 +615,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_FIter
upper_bound(_FIter, _FIter, const _Tp&, _Compare);
-_GLIBCXX_END_NAMESPACE_VERSION
-
_GLIBCXX_BEGIN_NAMESPACE_ALGO
template<typename _FIter>
@@ -845,6 +843,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
_GLIBCXX_END_NAMESPACE_ALGO
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#ifdef _GLIBCXX_PARALLEL
diff --git a/libstdc++-v3/include/bits/basic_ios.h b/libstdc++-v3/include/bits/basic_ios.h
index 318e41b7c55..f0b8682b4fe 100644
--- a/libstdc++-v3/include/bits/basic_ios.h
+++ b/libstdc++-v3/include/bits/basic_ios.h
@@ -157,8 +157,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
setstate(iostate __state)
{ this->clear(this->rdstate() | __state); }
- // Flip the internal state on for the proper state bits, then re
- // throws the propagated exception if bit also set in
+ // Flip the internal state on for the proper state bits, then
+ // rethrows the propagated exception if bit also set in
// exceptions().
void
_M_setstate(iostate __state)
diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h
index 7fd867c6acc..a343d7b1628 100644
--- a/libstdc++-v3/include/bits/basic_string.h
+++ b/libstdc++-v3/include/bits/basic_string.h
@@ -6470,8 +6470,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ };
#endif
-_GLIBCXX_END_NAMESPACE_VERSION
-
#if __cplusplus > 201103L
#define __cpp_lib_string_udls 201304
@@ -6480,8 +6478,6 @@ _GLIBCXX_END_NAMESPACE_VERSION
{
inline namespace string_literals
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
_GLIBCXX_DEFAULT_ABI_TAG
inline basic_string<char>
operator""s(const char* __str, size_t __len)
@@ -6506,12 +6502,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return basic_string<char32_t>{__str, __len}; }
#endif
-_GLIBCXX_END_NAMESPACE_VERSION
} // inline namespace string_literals
} // inline namespace literals
#endif // __cplusplus > 201103L
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++11
diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config
index 3e3905010f7..d5d1d24ee1a 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -267,88 +267,58 @@ namespace __gnu_cxx
# define _GLIBCXX_DEFAULT_ABI_TAG
#endif
-
// Defined if inline namespaces are used for versioning.
#define _GLIBCXX_INLINE_VERSION
// Inline namespace for symbol versioning.
#if _GLIBCXX_INLINE_VERSION
+# define _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace __8 {
+# define _GLIBCXX_END_NAMESPACE_VERSION }
namespace std
{
- inline namespace __8 { }
-
- namespace rel_ops { inline namespace __8 { } }
-
- namespace tr1
- {
- inline namespace __8 { }
- namespace placeholders { inline namespace __8 { } }
- namespace regex_constants { inline namespace __8 { } }
- namespace __detail { inline namespace __8 { } }
- }
-
- namespace tr2
- { inline namespace __8 { } }
-
- namespace decimal { inline namespace __8 { } }
-
-#if __cplusplus >= 201103L
- namespace chrono { inline namespace __8 { } }
- namespace placeholders { inline namespace __8 { } }
- namespace regex_constants { inline namespace __8 { } }
- namespace this_thread { inline namespace __8 { } }
-
+inline _GLIBCXX_BEGIN_NAMESPACE_VERSION
#if __cplusplus >= 201402L
inline namespace literals {
- inline namespace chrono_literals { inline namespace __8 { } }
- inline namespace complex_literals { inline namespace __8 { } }
- inline namespace string_literals { inline namespace __8 { } }
+ inline namespace chrono_literals { }
+ inline namespace complex_literals { }
+ inline namespace string_literals { }
#if __cplusplus > 201402L
- inline namespace string_view_literals { inline namespace __8 { } }
+ inline namespace string_view_literals { }
#endif // C++17
}
#endif // C++14
-#endif // C++11
-
- namespace __detail {
- inline namespace __8 { }
-#if __cplusplus > 201402L
- namespace __variant { inline namespace __8 { } }
-#endif
- }
+_GLIBCXX_END_NAMESPACE_VERSION
}
namespace __gnu_cxx
{
- inline namespace __8 { }
- namespace __detail { inline namespace __8 { } }
+inline _GLIBCXX_BEGIN_NAMESPACE_VERSION
+_GLIBCXX_END_NAMESPACE_VERSION
}
-# define _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace __8 {
-# define _GLIBCXX_END_NAMESPACE_VERSION }
+
#else
# define _GLIBCXX_BEGIN_NAMESPACE_VERSION
# define _GLIBCXX_END_NAMESPACE_VERSION
#endif
-
// Inline namespaces for special modes: debug, parallel, profile.
#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PARALLEL) \
|| defined(_GLIBCXX_PROFILE)
namespace std
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
// Non-inline namespace for components replaced by alternates in active mode.
namespace __cxx1998
{
-# if _GLIBCXX_INLINE_VERSION
- inline namespace __8 { }
-# endif
-
# if _GLIBCXX_USE_CXX11_ABI
inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
# endif
}
+_GLIBCXX_END_NAMESPACE_VERSION
+
// Inline namespace for debug mode.
# ifdef _GLIBCXX_DEBUG
inline namespace __debug { }
@@ -396,25 +366,23 @@ namespace std
#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PROFILE)
# define _GLIBCXX_STD_C __cxx1998
# define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER \
- namespace _GLIBCXX_STD_C { _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_CONTAINER \
- _GLIBCXX_END_NAMESPACE_VERSION }
+ namespace _GLIBCXX_STD_C {
+# define _GLIBCXX_END_NAMESPACE_CONTAINER }
#else
# define _GLIBCXX_STD_C std
-# define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_CONTAINER _GLIBCXX_END_NAMESPACE_VERSION
+# define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+# define _GLIBCXX_END_NAMESPACE_CONTAINER
#endif
#ifdef _GLIBCXX_PARALLEL
# define _GLIBCXX_STD_A __cxx1998
# define _GLIBCXX_BEGIN_NAMESPACE_ALGO \
- namespace _GLIBCXX_STD_A { _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_ALGO \
- _GLIBCXX_END_NAMESPACE_VERSION }
+ namespace _GLIBCXX_STD_A {
+# define _GLIBCXX_END_NAMESPACE_ALGO }
#else
# define _GLIBCXX_STD_A std
-# define _GLIBCXX_BEGIN_NAMESPACE_ALGO _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_ALGO _GLIBCXX_END_NAMESPACE_VERSION
+# define _GLIBCXX_BEGIN_NAMESPACE_ALGO
+# define _GLIBCXX_END_NAMESPACE_ALGO
#endif
// GLIBCXX_ABI Deprecated
diff --git a/libstdc++-v3/include/bits/complex128.h b/libstdc++-v3/include/bits/complex128.h
index 76332016819..ad9fdaeae08 100644
--- a/libstdc++-v3/include/bits/complex128.h
+++ b/libstdc++-v3/include/bits/complex128.h
@@ -1,6 +1,6 @@
// -*- C++ -*- header.
-// Copyright (C) 2016-2017 Free Software Foundation, Inc.
+// Copyright (C) 2017 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
@@ -24,7 +24,7 @@
/** @file bits/complex128.h
* This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{complex}
+ * Do not attempt to use it directly. @headername{xxxxx}
*/
#ifndef _GLIBCXX_BITS_COMPLEX128_H
@@ -33,43 +33,22 @@
#pragma GCC system_header
#if _GLIBCXX_HAVE_FLOAT128_MATH
-/*
+
+#include <bits/float128_io.h>
+
typedef _Complex float __attribute__((mode(TC))) __complex128;
-#ifdef __cplusplus
-extern "C" {
-#endif
- __float128 cabsq (__complex128) noexcept;
- __float128 cargq (__complex128) noexcept;
- __float128 cimagq (__complex128) noexcept;
- __float128 crealq (__complex128) noexcept;
- __complex128 cacosq (__complex128) noexcept;
- __complex128 cacoshq (__complex128) noexcept;
- __complex128 casinq (__complex128) noexcept;
- __complex128 casinhq (__complex128) noexcept;
- __complex128 catanq (__complex128) noexcept;
- __complex128 catanhq (__complex128) noexcept;
- __complex128 ccosq (__complex128) noexcept;
- __complex128 ccoshq (__complex128) noexcept;
- __complex128 cexpq (__complex128) noexcept;
- __complex128 cexpiq (__float128) noexcept;
- __complex128 clogq (__complex128) noexcept;
- __complex128 clog10q (__complex128) noexcept;
- __complex128 conjq (__complex128) noexcept;
- __complex128 cpowq (__complex128, __complex128) noexcept;
- __complex128 cprojq (__complex128) noexcept;
- __complex128 csinq (__complex128) noexcept;
- __complex128 csinhq (__complex128) noexcept;
- __complex128 csqrtq (__complex128) noexcept;
- __complex128 ctanq (__complex128) noexcept;
- __complex128 ctanhq (__complex128) noexcept;
-#ifdef __cplusplus
-}
-#endif
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+ // Forward declarations.?
+ //template<typename _Tp> class complex;
+ //template<> class complex<float>;
+ //template<> class complex<double>;
+ //template<> class complex<long double>;
+ //template<> class complex<__float128>;
+
/// complex<__float128> specialization
template<>
struct complex<__float128>
@@ -260,173 +239,41 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline _GLIBCXX_CONSTEXPR
complex<long double>::complex(const complex<__float128>& __z)
: _M_value(__z.__rep()) { }
-*/
-/*
- inline __float128
- abs(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return cabsq(__z); }
-
- inline __float128
- arg(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return cargq(__z); }
-
- inline __float128
- imag(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return cimagq(__z); }
-
- inline __float128
- real(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return crealq(__z); }
-
- inline __complex128
- acos(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return cacosq(__z); }
-
- inline __complex128
- acosh(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return cacoshq(__z); }
-
- inline __complex128
- asin(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return casinq(__z); }
-
- inline __complex128
- asinh(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return casinhq(__z); }
-
- inline __complex128
- atan(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return catanq(__z); }
-
- inline __complex128
- atanh(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return catanhq(__z); }
-
- inline __complex128
- cos(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return ccosq(__z); }
-
- inline __complex128
- cosh(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return ccoshq(__z); }
-
- inline __complex128
- exp(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return cexpq(__z); }
-
- inline __complex128
- log(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return clogq(__z); }
-
- inline __complex128
- log10(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return clog10q(__z); }
-
- inline __complex128
- conj(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return conjq(__z); }
-
- inline __complex128
- pow(const __complex128& __z, const __complex128& __w) _GLIBCXX_USE_NOEXCEPT
- { return cpowq(__z, __w); }
-
- inline __complex128
- proj(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return cprojq(__z); }
-
- inline __complex128
- sin(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return csinq(__z); }
-
- inline __complex128
- sinh(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return csinhq(__z); }
-
- inline __complex128
- sqrt(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return csqrtq(__z); }
-
- inline __complex128
- tan(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return ctanq(__z); }
-
- inline __complex128
- tanh(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
- { return ctanhq(__z); }
-#if _GLIBCXX_USE_C99_COMPLEX
-
-#endif
-*/
-/*
- inline __complex128
- fabs(const __complex128& __z)
- { return std::abs(__z); }
-
- /// Additional overloads.
-
- inline __float128
- arg(__float128 __x) _GLIBCXX_USE_NOEXCEPT
- { return __x < 0.0Q ? M_PIq : 0.0Q; }
-
- inline _GLIBCXX_USE_CONSTEXPR __float128
- imag(__float128) _GLIBCXX_USE_NOEXCEPT
- { return 0.0Q; }
-
- inline _GLIBCXX_USE_CONSTEXPR __float128
- real(__float128 __x) _GLIBCXX_USE_NOEXCEPT
- { return __x; }
-
- inline __float128
- norm(__float128 __x) _GLIBCXX_USE_NOEXCEPT
- { return __x * __x; }
-*/
-/* FIXME: Can't find __promote_fp_t for some reason.
- template<typename _Up>
- inline std::complex<__gnu_cxx::__promote_fp_t<__float128, _Up>>
- pow(const __complex128& __x, const _Up& __y)
- {
- using __type = __gnu_cxx::__promote_fp_t<__float128, _Up>;
- return std::pow(std::complex<__type>(__x), __type(__y));
- }
- template<typename _Tp>
- inline std::complex<__gnu_cxx::__promote_fp_t<_Tp, __float128>>
- pow(const _Tp& __x, const __complex128& __y)
- {
- using __type = __gnu_cxx::__promote_fp_t<_Tp, __float128>;
- return std::pow(__type(__x), std::complex<__type>(__y));
- }
-*/
-/*
- // DR 1137.
- inline _GLIBCXX_USE_CONSTEXPR __float128
- proj(__float128 __x)
- { return __x; }
-
- inline _GLIBCXX_USE_CONSTEXPR __float128
- conj(__float128 __x)
- { return __x; }
-_GLIBCXX_END_NAMESPACE_VERSION
-*/
-/*
+#if _GLIBCXX_EXTERN_TEMPLATE
+ template istream& operator>>(istream&, complex<__float128>&);
+ template ostream& operator<<(ostream&, const complex<__float128>&);
+#ifdef _GLIBCXX_USE_WCHAR_T
+ // FIXME!!!
+ //template wistream& operator>>(wistream&, complex<__float128>&);
+ //template wostream& operator<<(wostream&, const complex<__float128>&);
+#endif // _GLIBCXX_USE_WCHAR_T
+#endif // _GLIBCXX_EXTERN_TEMPLATE
+
#if __cplusplus > 201103L
inline namespace literals {
inline namespace complex_literals {
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+#define __cpp_lib_complex_udls 201309
+
inline std::complex<__float128>
operator""iq(const char* __str)
{ return complex<__float128>(0.0Q, strtoflt128(__str, 0)); }
+ constexpr std::complex<__float128>
+ operator""iq(unsigned long long __num)
+ { return std::complex<__float128>{0.0L, static_cast<__float128>(__num)}; }
+
_GLIBCXX_END_NAMESPACE_VERSION
} // inline namespace complex_literals
} // inline namespace literals
#endif // C++14
-} // namespace std
-*/
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
+#endif // C++11
+
+} // namespace std
#endif // _GLIBCXX_BITS_COMPLEX128_H
diff --git a/libstdc++-v3/include/bits/complex128_math.h b/libstdc++-v3/include/bits/complex128_math.h
new file mode 100644
index 00000000000..894ac7a7cb2
--- /dev/null
+++ b/libstdc++-v3/include/bits/complex128_math.h
@@ -0,0 +1,164 @@
+// -*- C++ -*- header.
+
+// Copyright (C) 2017 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.
+
+// 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/>.
+
+/** @file bits/complex128.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{xxxxx}
+ */
+
+#ifndef _GLIBCXX_BITS_COMPLEX128_MATH_H
+#define _GLIBCXX_BITS_COMPLEX128_MATH_H 1
+
+#pragma GCC system_header
+
+#if _GLIBCXX_HAVE_FLOAT128_MATH
+
+typedef _Complex float __attribute__((mode(TC))) __complex128;
+
+// FIXME: This is a fake quadmath.h
+#ifdef __cplusplus
+extern "C" {
+#endif
+ __float128 strtoflt128 (const char*, char**) _GLIBCXX_NOEXCEPT;
+
+ __float128 cabsq (__complex128) _GLIBCXX_NOEXCEPT;
+ __float128 cargq (__complex128) _GLIBCXX_NOEXCEPT;
+ __float128 cimagq (__complex128) _GLIBCXX_NOEXCEPT;
+ __float128 crealq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 cacosq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 cacoshq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 casinq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 casinhq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 catanq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 catanhq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 ccosq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 ccoshq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 cexpq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 cexpiq (__float128) _GLIBCXX_NOEXCEPT;
+ __complex128 clogq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 clog10q (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 conjq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 cpowq (__complex128, __complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 cprojq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 csinq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 csinhq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 csqrtq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 ctanq (__complex128) _GLIBCXX_NOEXCEPT;
+ __complex128 ctanhq (__complex128) _GLIBCXX_NOEXCEPT;
+#ifdef __cplusplus
+}
+#endif
+
+namespace std
+{
+
+#if _GLIBCXX_USE_C99_COMPLEX
+
+ inline __float128
+ __complex_abs(const __complex128& __z)
+ { return cabsq(__z); }
+
+ inline __float128
+ __complex_arg(const __complex128& __z)
+ { return cargq(__z); }
+
+ inline __complex128
+ __complex_cos(const __complex128& __z)
+ { return ccosq(__z); }
+
+ inline __complex128
+ __complex_cosh(const __complex128& __z)
+ { return ccoshq(__z); }
+
+ inline __complex128
+ __complex_exp(const __complex128& __z)
+ { return cexpq(__z); }
+
+ inline __complex128
+ __complex_log(const __complex128& __z)
+ { return clogq(__z); }
+
+ inline __complex128
+ __complex_sin(const __complex128& __z)
+ { return csinq(__z); }
+
+ inline __complex128
+ __complex_sinh(const __complex128& __z)
+ { return csinhq(__z); }
+
+ inline __complex128
+ __complex_sqrt(const __complex128& __z)
+ { return csqrtq(__z); }
+
+ inline __complex128
+ __complex_tan(const __complex128& __z)
+ { return ctanq(__z); }
+
+ inline __complex128
+ __complex_tanh(const __complex128& __z)
+ { return ctanhq(__z); }
+
+ inline __complex128
+ __complex_pow(const __complex128& __x, const __complex128& __y)
+ { return cpowq(__x, __y); }
+
+#if __cplusplus >= 201103L
+
+ inline __complex128
+ __complex_acos(const __complex128& __z)
+ { return cacosq(__z); }
+
+ inline __complex128
+ __complex_asin(const __complex128& __z)
+ { return casinq(__z); }
+
+ inline __complex128
+ __complex_atan(const __complex128& __z)
+ { return catanq(__z); }
+
+ inline __complex128
+ __complex_acosh(const __complex128& __z)
+ { return cacoshq(__z); }
+
+ inline __complex128
+ __complex_asinh(const __complex128& __z)
+ { return casinhq(__z); }
+
+ inline __complex128
+ __complex_atanh(const __complex128& __z)
+ { return catanhq(__z); }
+
+ inline __complex128
+ __complex_proj(const __complex128& __z)
+ { return cprojq(__z); }
+
+#endif // C++11
+
+#endif // _GLIBCXX_USE_C99_COMPLEX
+
+} // namespace std
+
+#endif // _GLIBCXX_HAVE_FLOAT128_MATH
+
+#endif // _GLIBCXX_BITS_COMPLEX128_MATH_H
diff --git a/libstdc++-v3/include/bits/deque.tcc b/libstdc++-v3/include/bits/deque.tcc
index 38a6e82aaef..d25ad690178 100644
--- a/libstdc++-v3/include/bits/deque.tcc
+++ b/libstdc++-v3/include/bits/deque.tcc
@@ -58,6 +58,7 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#if __cplusplus >= 201103L
@@ -1107,6 +1108,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#endif
_GLIBCXX_END_NAMESPACE_CONTAINER
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif
diff --git a/libstdc++-v3/include/bits/forward_list.h b/libstdc++-v3/include/bits/forward_list.h
index f319b7f0607..9d86fcc1568 100644
--- a/libstdc++-v3/include/bits/forward_list.h
+++ b/libstdc++-v3/include/bits/forward_list.h
@@ -43,6 +43,7 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
@@ -1440,6 +1441,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{ __lx.swap(__ly); }
_GLIBCXX_END_NAMESPACE_CONTAINER
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // _FORWARD_LIST_H
diff --git a/libstdc++-v3/include/bits/forward_list.tcc b/libstdc++-v3/include/bits/forward_list.tcc
index b823b09e1af..64bd9c4bf13 100644
--- a/libstdc++-v3/include/bits/forward_list.tcc
+++ b/libstdc++-v3/include/bits/forward_list.tcc
@@ -32,6 +32,7 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<typename _Tp, typename _Alloc>
@@ -493,6 +494,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
}
_GLIBCXX_END_NAMESPACE_CONTAINER
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif /* _FORWARD_LIST_TCC */
diff --git a/libstdc++-v3/include/bits/hashtable_policy.h b/libstdc++-v3/include/bits/hashtable_policy.h
index 8af8c498de2..a3a31d1fb11 100644
--- a/libstdc++-v3/include/bits/hashtable_policy.h
+++ b/libstdc++-v3/include/bits/hashtable_policy.h
@@ -43,12 +43,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typename _RehashPolicy, typename _Traits>
class _Hashtable;
-_GLIBCXX_END_NAMESPACE_VERSION
-
namespace __detail
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @defgroup hashtable-detail Base and Implementation Classes
* @ingroup unordered_associative_containers
@@ -2122,8 +2118,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
//@} hashtable-detail
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // _HASHTABLE_POLICY_H
diff --git a/libstdc++-v3/include/bits/ios_base.h b/libstdc++-v3/include/bits/ios_base.h
index e5a107db4bc..e68b4305517 100644
--- a/libstdc++-v3/include/bits/ios_base.h
+++ b/libstdc++-v3/include/bits/ios_base.h
@@ -469,13 +469,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// Request a seek relative to the current end of the sequence.
static const seekdir end = _S_end;
- // Annex D.6
+#if __cplusplus <= 201402L
+ // Annex D.6 (removed in C++17)
typedef int io_state;
typedef int open_mode;
typedef int seek_dir;
typedef std::streampos streampos;
typedef std::streamoff streamoff;
+#endif
// Callbacks;
/**
diff --git a/libstdc++-v3/include/bits/istream.tcc b/libstdc++-v3/include/bits/istream.tcc
index b390f743bba..92df9d126ef 100644
--- a/libstdc++-v3/include/bits/istream.tcc
+++ b/libstdc++-v3/include/bits/istream.tcc
@@ -48,28 +48,36 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
ios_base::iostate __err = ios_base::goodbit;
if (__in.good())
- {
- if (__in.tie())
- __in.tie()->flush();
- if (!__noskip && bool(__in.flags() & ios_base::skipws))
- {
- const __int_type __eof = traits_type::eof();
- __streambuf_type* __sb = __in.rdbuf();
- __int_type __c = __sb->sgetc();
-
- const __ctype_type& __ct = __check_facet(__in._M_ctype);
- while (!traits_type::eq_int_type(__c, __eof)
- && __ct.is(ctype_base::space,
- traits_type::to_char_type(__c)))
- __c = __sb->snextc();
+ __try
+ {
+ if (__in.tie())
+ __in.tie()->flush();
+ if (!__noskip && bool(__in.flags() & ios_base::skipws))
+ {
+ const __int_type __eof = traits_type::eof();
+ __streambuf_type* __sb = __in.rdbuf();
+ __int_type __c = __sb->sgetc();
+
+ const __ctype_type& __ct = __check_facet(__in._M_ctype);
+ while (!traits_type::eq_int_type(__c, __eof)
+ && __ct.is(ctype_base::space,
+ traits_type::to_char_type(__c)))
+ __c = __sb->snextc();
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // 195. Should basic_istream::sentry's constructor ever
- // set eofbit?
- if (traits_type::eq_int_type(__c, __eof))
- __err |= ios_base::eofbit;
- }
- }
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 195. Should basic_istream::sentry's constructor ever
+ // set eofbit?
+ if (traits_type::eq_int_type(__c, __eof))
+ __err |= ios_base::eofbit;
+ }
+ }
+ __catch(__cxxabiv1::__forced_unwind&)
+ {
+ __in._M_setstate(ios_base::badbit);
+ __throw_exception_again;
+ }
+ __catch(...)
+ { __in._M_setstate(ios_base::badbit); }
if (__in.good() && __err == ios_base::goodbit)
_M_ok = true;
diff --git a/libstdc++-v3/include/bits/list.tcc b/libstdc++-v3/include/bits/list.tcc
index fcb8353e09f..e21dab54263 100644
--- a/libstdc++-v3/include/bits/list.tcc
+++ b/libstdc++-v3/include/bits/list.tcc
@@ -58,6 +58,7 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<typename _Tp, typename _Alloc>
@@ -594,6 +595,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
}
_GLIBCXX_END_NAMESPACE_CONTAINER
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif /* _LIST_TCC */
diff --git a/libstdc++-v3/include/bits/move.h b/libstdc++-v3/include/bits/move.h
index 5f47b0e7bae..373f9556524 100644
--- a/libstdc++-v3/include/bits/move.h
+++ b/libstdc++-v3/include/bits/move.h
@@ -47,10 +47,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__addressof(_Tp& __r) _GLIBCXX_NOEXCEPT
{ return __builtin_addressof(__r); }
+#if __cplusplus >= 201103L
+
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
-#if __cplusplus >= 201103L
#include <type_traits> // Brings in std::declval too.
namespace std _GLIBCXX_VISIBILITY(default)
@@ -153,8 +154,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/// @} group utilities
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
#define _GLIBCXX_MOVE(__val) std::move(__val)
#define _GLIBCXX_FORWARD(_Tp, __val) std::forward<_Tp>(__val)
@@ -163,10 +162,6 @@ _GLIBCXX_END_NAMESPACE_VERSION
#define _GLIBCXX_FORWARD(_Tp, __val) (__val)
#endif
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @addtogroup utilities
* @{
diff --git a/libstdc++-v3/include/bits/quoted_string.h b/libstdc++-v3/include/bits/quoted_string.h
index 10cfec21181..0e51c223433 100644
--- a/libstdc++-v3/include/bits/quoted_string.h
+++ b/libstdc++-v3/include/bits/quoted_string.h
@@ -39,9 +39,9 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
- namespace __detail {
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+ namespace __detail {
/**
* @brief Struct for delimited strings.
*/
@@ -155,9 +155,9 @@ namespace std _GLIBCXX_VISIBILITY(default)
return __is;
}
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++11
diff --git a/libstdc++-v3/include/bits/random.h b/libstdc++-v3/include/bits/random.h
index be2b4a6a517..2b022b2f469 100644
--- a/libstdc++-v3/include/bits/random.h
+++ b/libstdc++-v3/include/bits/random.h
@@ -58,15 +58,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_RealType
generate_canonical(_UniformRandomNumberGenerator& __g);
-_GLIBCXX_END_NAMESPACE_VERSION
-
/*
* Implementation-space details.
*/
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _UIntType, size_t __w,
bool = __w < static_cast<size_t>
(std::numeric_limits<_UIntType>::digits)>
@@ -189,11 +185,8 @@ _GLIBCXX_END_NAMESPACE_VERSION
_Engine& _M_g;
};
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @addtogroup random_generators Random Number Generators
* @ingroup random
diff --git a/libstdc++-v3/include/bits/random.tcc b/libstdc++-v3/include/bits/random.tcc
index 63d1c020285..95bcf0a163e 100644
--- a/libstdc++-v3/include/bits/random.tcc
+++ b/libstdc++-v3/include/bits/random.tcc
@@ -34,13 +34,13 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
/*
* (Further) implementation-space details.
*/
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// General case for x = (ax + c) mod m -- use Schrage's algorithm
// to avoid integer overflow.
//
@@ -89,11 +89,8 @@ namespace std _GLIBCXX_VISIBILITY(default)
return __result;
}
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
constexpr _UIntType
linear_congruential_engine<_UIntType, __a, __c, __m>::multiplier;
diff --git a/libstdc++-v3/include/bits/regex.h b/libstdc++-v3/include/bits/regex.h
index 0bb88cb6afb..32e7159eec9 100644
--- a/libstdc++-v3/include/bits/regex.h
+++ b/libstdc++-v3/include/bits/regex.h
@@ -39,12 +39,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
class match_results;
_GLIBCXX_END_NAMESPACE_CXX11
-_GLIBCXX_END_NAMESPACE_VERSION
namespace __detail
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
enum class _RegexExecutorPolicy : int
{ _S_auto, _S_alternate };
@@ -53,19 +50,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_RegexExecutorPolicy __policy,
bool __match_mode>
bool
- __regex_algo_impl(_BiIter __s,
- _BiIter __e,
+ __regex_algo_impl(_BiIter __s,
+ _BiIter __e,
match_results<_BiIter, _Alloc>& __m,
const basic_regex<_CharT, _TraitsT>& __re,
regex_constants::match_flag_type __flags);
template<typename, typename, typename, bool>
class _Executor;
-
-_GLIBCXX_END_NAMESPACE_VERSION
}
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CXX11
/**
@@ -87,9 +81,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
struct regex_traits
{
public:
- typedef _Ch_type char_type;
- typedef std::basic_string<char_type> string_type;
- typedef std::locale locale_type;
+ typedef _Ch_type char_type;
+ typedef std::basic_string<char_type> string_type;
+ typedef std::locale locale_type;
private:
struct _RegexMask
{
@@ -397,8 +391,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
"regex traits class must have the same char_type");
// types:
- typedef _Ch_type value_type;
- typedef _Rx_traits traits_type;
+ typedef _Ch_type value_type;
+ typedef _Rx_traits traits_type;
typedef typename traits_type::string_type string_type;
typedef regex_constants::syntax_option_type flag_type;
typedef typename traits_type::locale_type locale_type;
@@ -771,20 +765,17 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
template<typename _Bp, typename _Ap, typename _Cp, typename _Rp,
__detail::_RegexExecutorPolicy, bool>
- friend bool __detail::
-#if _GLIBCXX_INLINE_VERSION
- __8:: // Required due to PR c++/59256
-#endif
- __regex_algo_impl(_Bp, _Bp, match_results<_Bp, _Ap>&,
- const basic_regex<_Cp, _Rp>&,
- regex_constants::match_flag_type);
+ friend bool
+ __detail::__regex_algo_impl(_Bp, _Bp, match_results<_Bp, _Ap>&,
+ const basic_regex<_Cp, _Rp>&,
+ regex_constants::match_flag_type);
template<typename, typename, typename, bool>
friend class __detail::_Executor;
- flag_type _M_flags;
- locale_type _M_loc;
- _AutomatonPtr _M_automaton;
+ flag_type _M_flags;
+ locale_type _M_loc;
+ _AutomatonPtr _M_automaton;
};
#if __cpp_deduction_guides >= 201606
@@ -837,8 +828,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
public:
typedef typename __iter_traits::value_type value_type;
typedef typename __iter_traits::difference_type difference_type;
- typedef _BiIter iterator;
- typedef std::basic_string<value_type> string_type;
+ typedef _BiIter iterator;
+ typedef std::basic_string<value_type> string_type;
bool matched;
@@ -923,14 +914,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
/** @brief Standard regex submatch over a C-style null-terminated string. */
- typedef sub_match<const char*> csub_match;
+ typedef sub_match<const char*> csub_match;
/** @brief Standard regex submatch over a standard string. */
typedef sub_match<string::const_iterator> ssub_match;
#ifdef _GLIBCXX_USE_WCHAR_T
/** @brief Regex submatch over a C-style null-terminated wide string. */
- typedef sub_match<const wchar_t*> wcsub_match;
+ typedef sub_match<const wchar_t*> wcsub_match;
/** @brief Regex submatch over a standard wide string. */
typedef sub_match<wstring::const_iterator> wssub_match;
@@ -1548,16 +1539,16 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
* @name 10.? Public Types
*/
//@{
- typedef sub_match<_Bi_iter> value_type;
- typedef const value_type& const_reference;
- typedef const_reference reference;
- typedef typename _Base_type::const_iterator const_iterator;
- typedef const_iterator iterator;
+ typedef sub_match<_Bi_iter> value_type;
+ typedef const value_type& const_reference;
+ typedef const_reference reference;
+ typedef typename _Base_type::const_iterator const_iterator;
+ typedef const_iterator iterator;
typedef typename __iter_traits::difference_type difference_type;
typedef typename allocator_traits<_Alloc>::size_type size_type;
- typedef _Alloc allocator_type;
+ typedef _Alloc allocator_type;
typedef typename __iter_traits::value_type char_type;
- typedef std::basic_string<char_type> string_type;
+ typedef std::basic_string<char_type> string_type;
//@}
public:
@@ -1872,13 +1863,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
template<typename _Bp, typename _Ap, typename _Cp, typename _Rp,
__detail::_RegexExecutorPolicy, bool>
- friend bool __detail::
-#if _GLIBCXX_INLINE_VERSION
- __8:: // Required due to PR c++/59256
-#endif
- __regex_algo_impl(_Bp, _Bp, match_results<_Bp, _Ap>&,
- const basic_regex<_Cp, _Rp>&,
- regex_constants::match_flag_type);
+ friend bool
+ __detail::__regex_algo_impl(_Bp, _Bp, match_results<_Bp, _Ap>&,
+ const basic_regex<_Cp, _Rp>&,
+ regex_constants::match_flag_type);
void
_M_resize(unsigned int __size)
@@ -1911,10 +1899,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
_Bi_iter _M_begin;
};
- typedef match_results<const char*> cmatch;
- typedef match_results<string::const_iterator> smatch;
+ typedef match_results<const char*> cmatch;
+ typedef match_results<string::const_iterator> smatch;
#ifdef _GLIBCXX_USE_WCHAR_T
- typedef match_results<const wchar_t*> wcmatch;
+ typedef match_results<const wchar_t*> wcmatch;
typedef match_results<wstring::const_iterator> wsmatch;
#endif
@@ -1994,11 +1982,11 @@ _GLIBCXX_END_NAMESPACE_CXX11
template<typename _Bi_iter, typename _Alloc,
typename _Ch_type, typename _Rx_traits>
inline bool
- regex_match(_Bi_iter __s,
- _Bi_iter __e,
- match_results<_Bi_iter, _Alloc>& __m,
+ regex_match(_Bi_iter __s,
+ _Bi_iter __e,
+ match_results<_Bi_iter, _Alloc>& __m,
const basic_regex<_Ch_type, _Rx_traits>& __re,
- regex_constants::match_flag_type __flags
+ regex_constants::match_flag_type __flags
= regex_constants::match_default)
{
return __detail::__regex_algo_impl<_Bi_iter, _Alloc, _Ch_type, _Rx_traits,
@@ -2452,11 +2440,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
{
public:
typedef basic_regex<_Ch_type, _Rx_traits> regex_type;
- typedef match_results<_Bi_iter> value_type;
- typedef std::ptrdiff_t difference_type;
- typedef const value_type* pointer;
- typedef const value_type& reference;
- typedef std::forward_iterator_tag iterator_category;
+ typedef match_results<_Bi_iter> value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef const value_type* pointer;
+ typedef const value_type& reference;
+ typedef std::forward_iterator_tag iterator_category;
/**
* @brief Provides a singular iterator, useful for indicating
@@ -2543,18 +2531,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
}
private:
- _Bi_iter _M_begin;
- _Bi_iter _M_end;
- const regex_type* _M_pregex;
- regex_constants::match_flag_type _M_flags;
- match_results<_Bi_iter> _M_match;
+ _Bi_iter _M_begin;
+ _Bi_iter _M_end;
+ const regex_type* _M_pregex;
+ regex_constants::match_flag_type _M_flags;
+ match_results<_Bi_iter> _M_match;
};
- typedef regex_iterator<const char*> cregex_iterator;
- typedef regex_iterator<string::const_iterator> sregex_iterator;
+ typedef regex_iterator<const char*> cregex_iterator;
+ typedef regex_iterator<string::const_iterator> sregex_iterator;
#ifdef _GLIBCXX_USE_WCHAR_T
- typedef regex_iterator<const wchar_t*> wcregex_iterator;
- typedef regex_iterator<wstring::const_iterator> wsregex_iterator;
+ typedef regex_iterator<const wchar_t*> wcregex_iterator;
+ typedef regex_iterator<wstring::const_iterator> wsregex_iterator;
#endif
// [7.12.2] Class template regex_token_iterator
@@ -2571,12 +2559,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
class regex_token_iterator
{
public:
- typedef basic_regex<_Ch_type, _Rx_traits> regex_type;
- typedef sub_match<_Bi_iter> value_type;
- typedef std::ptrdiff_t difference_type;
- typedef const value_type* pointer;
- typedef const value_type& reference;
- typedef std::forward_iterator_tag iterator_category;
+ typedef basic_regex<_Ch_type, _Rx_traits> regex_type;
+ typedef sub_match<_Bi_iter> value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef const value_type* pointer;
+ typedef const value_type& reference;
+ typedef std::forward_iterator_tag iterator_category;
public:
/**
@@ -2778,25 +2766,25 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
_M_result = nullptr;
}
- _Position _M_position;
- std::vector<int> _M_subs;
- value_type _M_suffix;
- std::size_t _M_n;
- const value_type* _M_result;
+ _Position _M_position;
+ std::vector<int> _M_subs;
+ value_type _M_suffix;
+ std::size_t _M_n;
+ const value_type* _M_result;
// Show whether _M_subs contains -1
- bool _M_has_m1;
+ bool _M_has_m1;
};
/** @brief Token iterator for C-style NULL-terminated strings. */
- typedef regex_token_iterator<const char*> cregex_token_iterator;
+ typedef regex_token_iterator<const char*> cregex_token_iterator;
/** @brief Token iterator for standard strings. */
- typedef regex_token_iterator<string::const_iterator> sregex_token_iterator;
+ typedef regex_token_iterator<string::const_iterator> sregex_token_iterator;
#ifdef _GLIBCXX_USE_WCHAR_T
/** @brief Token iterator for C-style NULL-terminated wide strings. */
- typedef regex_token_iterator<const wchar_t*> wcregex_token_iterator;
+ typedef regex_token_iterator<const wchar_t*> wcregex_token_iterator;
/** @brief Token iterator for standard wide-character strings. */
typedef regex_token_iterator<wstring::const_iterator> wsregex_token_iterator;
diff --git a/libstdc++-v3/include/bits/regex.tcc b/libstdc++-v3/include/bits/regex.tcc
index dc32a49dcd9..fc2d5846c46 100644
--- a/libstdc++-v3/include/bits/regex.tcc
+++ b/libstdc++-v3/include/bits/regex.tcc
@@ -30,10 +30,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace __detail
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace __detail
+{
// Result of merging regex_match and regex_search.
//
// __policy now can be _S_auto (auto dispatch) and _S_alternate (use
@@ -118,12 +118,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
return __ret;
}
-
-_GLIBCXX_END_NAMESPACE_VERSION
}
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _Ch_type>
template<typename _Fwd_iter>
typename regex_traits<_Ch_type>::string_type
@@ -663,4 +659,3 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
-
diff --git a/libstdc++-v3/include/bits/regex_automaton.h b/libstdc++-v3/include/bits/regex_automaton.h
index a5fab6356cc..00d1bd295cd 100644
--- a/libstdc++-v3/include/bits/regex_automaton.h
+++ b/libstdc++-v3/include/bits/regex_automaton.h
@@ -35,10 +35,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace __detail
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace __detail
+{
/**
* @defgroup regex-detail Base and Implementation Classes
* @ingroup regex
@@ -393,8 +393,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
//@} regex-detail
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#include <bits/regex_automaton.tcc>
diff --git a/libstdc++-v3/include/bits/regex_automaton.tcc b/libstdc++-v3/include/bits/regex_automaton.tcc
index 727bde1f6c6..573b059a251 100644
--- a/libstdc++-v3/include/bits/regex_automaton.tcc
+++ b/libstdc++-v3/include/bits/regex_automaton.tcc
@@ -30,10 +30,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace __detail
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace __detail
+{
#ifdef _GLIBCXX_DEBUG
inline std::ostream&
_State_base::_M_print(std::ostream& ostr) const
@@ -233,7 +233,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
return _StateSeq(_M_nfa, __m[_M_start], __m[_M_end]);
}
+} // namespace __detail
_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace __detail
} // namespace
diff --git a/libstdc++-v3/include/bits/regex_compiler.h b/libstdc++-v3/include/bits/regex_compiler.h
index 2c00939f6f9..5d46cd43bd3 100644
--- a/libstdc++-v3/include/bits/regex_compiler.h
+++ b/libstdc++-v3/include/bits/regex_compiler.h
@@ -37,12 +37,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
class regex_traits;
_GLIBCXX_END_NAMESPACE_CXX11
-_GLIBCXX_END_NAMESPACE_VERSION
namespace __detail
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @addtogroup regex-detail
* @{
@@ -575,8 +572,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
//@} regex-detail
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#include <bits/regex_compiler.tcc>
diff --git a/libstdc++-v3/include/bits/regex_compiler.tcc b/libstdc++-v3/include/bits/regex_compiler.tcc
index a6d8016d87f..1f7dd91b643 100644
--- a/libstdc++-v3/include/bits/regex_compiler.tcc
+++ b/libstdc++-v3/include/bits/regex_compiler.tcc
@@ -55,10 +55,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace __detail
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace __detail
+{
template<typename _TraitsT>
_Compiler<_TraitsT>::
_Compiler(_IterT __b, _IterT __e,
@@ -633,7 +633,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return false;
}() ^ _M_is_non_matching;
}
+} // namespace __detail
_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace __detail
} // namespace
diff --git a/libstdc++-v3/include/bits/regex_constants.h b/libstdc++-v3/include/bits/regex_constants.h
index dad2d637aa8..12c9eea4985 100644
--- a/libstdc++-v3/include/bits/regex_constants.h
+++ b/libstdc++-v3/include/bits/regex_constants.h
@@ -32,6 +32,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
/**
* @defgroup regex Regular Expressions
*
@@ -45,8 +47,6 @@ namespace std _GLIBCXX_VISIBILITY(default)
*/
namespace regex_constants
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @name 5.1 Regular Expression Syntax Options
*/
@@ -408,10 +408,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __a = __a ^ __b; }
//@}
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace regex_constants
-
/* @} */ // group regex
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
diff --git a/libstdc++-v3/include/bits/regex_error.h b/libstdc++-v3/include/bits/regex_error.h
index 55f6db9cf7a..f2a3389e984 100644
--- a/libstdc++-v3/include/bits/regex_error.h
+++ b/libstdc++-v3/include/bits/regex_error.h
@@ -32,6 +32,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
/**
* @addtogroup regex
* @{
@@ -39,8 +41,6 @@ namespace std _GLIBCXX_VISIBILITY(default)
namespace regex_constants
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @name 5.3 Error Types
*/
@@ -120,11 +120,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr error_type error_stack(_S_error_stack);
//@}
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace regex_constants
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// [7.8] Class regex_error
/**
* @brief A regular expression exception class.
diff --git a/libstdc++-v3/include/bits/regex_executor.h b/libstdc++-v3/include/bits/regex_executor.h
index 61054742870..3d1f2516f50 100644
--- a/libstdc++-v3/include/bits/regex_executor.h
+++ b/libstdc++-v3/include/bits/regex_executor.h
@@ -32,10 +32,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace __detail
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace __detail
+{
/**
* @addtogroup regex-detail
* @{
@@ -251,8 +251,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
//@} regex-detail
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#include <bits/regex_executor.tcc>
diff --git a/libstdc++-v3/include/bits/regex_executor.tcc b/libstdc++-v3/include/bits/regex_executor.tcc
index 9d4ece74416..226e05856e1 100644
--- a/libstdc++-v3/include/bits/regex_executor.tcc
+++ b/libstdc++-v3/include/bits/regex_executor.tcc
@@ -30,10 +30,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace __detail
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace __detail
+{
template<typename _BiIter, typename _Alloc, typename _TraitsT,
bool __dfs_mode>
bool _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
@@ -513,7 +513,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __left_is_word != __right_is_word;
}
+} // namespace __detail
_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace __detail
} // namespace
diff --git a/libstdc++-v3/include/bits/regex_scanner.h b/libstdc++-v3/include/bits/regex_scanner.h
index 37ad862a669..670efeda69f 100644
--- a/libstdc++-v3/include/bits/regex_scanner.h
+++ b/libstdc++-v3/include/bits/regex_scanner.h
@@ -30,10 +30,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace __detail
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace __detail
+{
/**
* @addtogroup regex-detail
* @{
@@ -265,8 +265,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
//@} regex-detail
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#include <bits/regex_scanner.tcc>
diff --git a/libstdc++-v3/include/bits/regex_scanner.tcc b/libstdc++-v3/include/bits/regex_scanner.tcc
index ad0b0477f3c..c65bfe2f68d 100644
--- a/libstdc++-v3/include/bits/regex_scanner.tcc
+++ b/libstdc++-v3/include/bits/regex_scanner.tcc
@@ -48,10 +48,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace __detail
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace __detail
+{
template<typename _CharT>
_Scanner<_CharT>::
_Scanner(typename _Scanner::_IterT __begin,
@@ -584,6 +584,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
#endif
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
diff --git a/libstdc++-v3/include/bits/sf_bernoulli.tcc b/libstdc++-v3/include/bits/sf_bernoulli.tcc
new file mode 100644
index 00000000000..43e8737cb41
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_bernoulli.tcc
@@ -0,0 +1,191 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2017 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.
+//
+// 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/>.
+
+/** @file bits/sf_bernoulli.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// C++ Mathematical Special Functions
+//
+
+#ifndef _GLIBCXX_BITS_SF_BERNOULLI_TCC
+#define _GLIBCXX_BITS_SF_BERNOULLI_TCC 1
+
+#pragma GCC system_header
+
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief This returns Bernoulli numbers from a table or by summation
+ * for larger values.
+ * @f[
+ * B_{2n} = (-1)^{n+1} 2\frac{(2n)!}{(2\pi)^{2n}} \zeta(2n)
+ * @f]
+ *
+ * Note that
+ * @f[
+ * \zeta(2n) - 1 = (-1)^{n+1} \frac{(2\pi)^{2n}}{(2n)!} B_{2n} - 2
+ * @f]
+ * are small and rapidly decreasing finctions of n.
+ *
+ * @param __n the order n of the Bernoulli number.
+ * @return The Bernoulli number of order n.
+ */
+ template<typename _Tp>
+ _GLIBCXX14_CONSTEXPR _Tp
+ __bernoulli_series(unsigned int __n)
+ {
+ constexpr unsigned long _S_num_bern_tab = 12;
+ constexpr _Tp
+ _S_bernoulli_2n[_S_num_bern_tab]
+ {
+ _Tp{1ULL},
+ _Tp{1ULL} / _Tp{6ULL},
+ -_Tp{1ULL} / _Tp{30ULL},
+ _Tp{1ULL} / _Tp{42ULL},
+ -_Tp{1ULL} / _Tp{30ULL},
+ _Tp{5ULL} / _Tp{66ULL},
+ -_Tp{691ULL} / _Tp{2730ULL},
+ _Tp{7ULL} / _Tp{6ULL},
+ -_Tp{3617ULL} / _Tp{510ULL},
+ _Tp{43867ULL} / _Tp{798ULL},
+ -_Tp{174611ULL} / _Tp{330ULL},
+ _Tp{854513ULL} / _Tp{138ULL}
+ };
+
+ if (__n == 0)
+ return _Tp{1};
+ else if (__n == 1)
+ return -_Tp{1} / _Tp{2};
+ // Take care of the rest of the odd ones.
+ else if (__n % 2 == 1)
+ return _Tp{0};
+ // Take care of some small evens that are painful for the series.
+ else if (__n / 2 < _S_num_bern_tab)
+ return _S_bernoulli_2n[__n / 2];
+ else
+ {
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<>(_Tp{});
+ constexpr auto _S_2pi = __gnu_cxx::__const_2_pi(_Tp{});
+ auto __fact = _Tp{1};
+ if ((__n / 2) % 2 == 0)
+ __fact *= -_Tp{1};
+ for (unsigned int __k = 1; __k <= __n; ++__k)
+ __fact *= __k / _S_2pi;
+ __fact *= _Tp{2};
+
+ // Riemann zeta function minus-1 for even integer argument.
+ auto __sum = _Tp{0};
+ for (unsigned int __i = 2; __i < 1000; ++__i)
+ {
+ auto __term = std::pow(_Tp(__i), -_Tp(__n));
+ __sum += __term;
+ if (__term < __gnu_cxx::__epsilon<_Tp>() * __sum)
+ break;
+ }
+
+ return __fact + __fact * __sum;
+ }
+ }
+
+ /**
+ * @brief This returns Bernoulli number @f$ B_n @f$.
+ *
+ * @param __n the order n of the Bernoulli number.
+ * @return The Bernoulli number of order n.
+ */
+ template<typename _Tp>
+ _GLIBCXX14_CONSTEXPR _Tp
+ __bernoulli(unsigned int __n)
+ { return __bernoulli_series<_Tp>(__n); }
+
+ /**
+ * @brief This returns Bernoulli number @f$ B_2n @f$ at even integer
+ * arguments @f$ 2n @f$.
+ *
+ * @param __n the half-order n of the Bernoulli number.
+ * @return The Bernoulli number of order 2n.
+ */
+ template<typename _Tp>
+ _GLIBCXX14_CONSTEXPR _Tp
+ __bernoulli_2n(unsigned int __n)
+ { return __bernoulli_series<_Tp>(2 * __n); }
+
+ /**
+ * Return the Bernoulli polynomial @f$ B_n(x) @f$ of order n at argument x.
+ *
+ * The values at 0 and 1 are equal to the corresponding Bernoulli number:
+ * @f[
+ * B_n(0) = B_n(1) = B_n
+ * @f]
+ *
+ * The derivative is proportional to the previous polynomial:
+ * @f[
+ * B_n'(x) = n * B_{n-1}(x)
+ * @f]
+ *
+ * The series expansion is:
+ * @f[
+ * B_n(x) = \sum_{k=0}^{n} B_k binom{n}{k} x^{n-k}
+ * @f]
+ *
+ * A useful argument promotion is:
+ * @f[
+ * B_n(x+1) - B_n(x) = n * x^{n-1}
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __bernoulli(unsigned int __n, _Tp __x)
+ {
+ if (__isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else
+ {
+ auto _B_n = std::__detail::__bernoulli<_Tp>(0);
+ auto __binomial = _Tp{1};
+ for (auto __k = 1u; __k <= __n; ++__k)
+ {
+ __binomial *= _Tp(__n + 1 - __k) / _Tp(__k);
+ _B_n = __x * _B_n + __binomial
+ * std::__detail::__bernoulli<_Tp>(__k);
+ }
+ return _B_n;
+ }
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_BERNOULLI_TCC
+
diff --git a/libstdc++-v3/include/bits/sf_bessel.tcc b/libstdc++-v3/include/bits/sf_bessel.tcc
index 6f44cf2cfc6..61630dae63f 100644
--- a/libstdc++-v3/include/bits/sf_bessel.tcc
+++ b/libstdc++-v3/include/bits/sf_bessel.tcc
@@ -90,12 +90,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
auto _Rsum = __bk_xk;
auto __ak_xk = _Tp{1};
auto _Psum = __ak_xk;
+ auto __convP = false;
++__k;
auto __2km1 = 1;
__bk_xk *= (__4nu2 + __2km1 * (__2km1 + 2)) / __8x;
auto _Ssum = __bk_xk;
__ak_xk *= (__2nu - __2km1) * (__2nu + __2km1) / __8x;
auto _Qsum = __ak_xk;
+ auto __convQ = false;
+ auto __ak_xk_prev = std::abs(__ak_xk);
do
{
++__k;
@@ -103,16 +106,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__bk_xk = -(__4nu2 + __2km1 * (__2km1 + 2)) * __ak_xk / (__k * __8x);
_Rsum += __bk_xk;
__ak_xk *= -(__2nu - __2km1) * (__2nu + __2km1) / (__k * __8x);
+ if (std::abs(__ak_xk) > __ak_xk_prev)
+ break;
+ __ak_xk_prev = std::abs(__ak_xk);
_Psum += __ak_xk;
- const auto __convP = std::abs(__ak_xk) < _S_eps * std::abs(_Psum);
+ __convP = std::abs(__ak_xk) < _S_eps * std::abs(_Psum);
++__k;
__2km1 += 2;
__bk_xk = (__4nu2 + __2km1 * (__2km1 + 2)) * __ak_xk / (__k * __8x);
_Ssum += __bk_xk;
__ak_xk *= (__2nu - __2km1) * (__2nu + __2km1) / (__k * __8x);
+ if (std::abs(__ak_xk) > __ak_xk_prev)
+ break;
+ __ak_xk_prev = std::abs(__ak_xk);
_Qsum += __ak_xk;
- const auto __convQ = std::abs(__ak_xk) < _S_eps * std::abs(_Qsum);
+ __convQ = std::abs(__ak_xk) < _S_eps * std::abs(_Qsum);
if (__convP && __convQ && __k > (__nu / _Tp{2}))
break;
@@ -201,6 +210,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using __bess_t = __gnu_cxx::__cyl_bessel_t<_Tp, _Tp, _Tp>;
const auto _S_inf = __gnu_cxx::__infinity(__x);
const auto _S_eps = __gnu_cxx::__epsilon(__x);
+ const auto _S_tiny = __gnu_cxx::__min(__x);
const auto _S_pi = __gnu_cxx::__const_pi(__x);
// When the multiplier is N i.e.
// fp_min = N * min()
@@ -356,13 +366,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__fact = _Jmu / _Jnul;
const auto _Jnu = __fact * _Jnul1;
const auto _Jpnu = __fact * _Jpnu1;
- for (int __i = 1; __i <= __n; ++__i)
- _Nmu = __gnu_cxx::__exchange(_Nnu1,
- (__mu + __i) * __xi2 * _Nnu1 - _Nmu);
- const auto _Nnu = _Nmu;
- const auto _Npnu = __nu * __xi * _Nmu - _Nnu1;
-
- return __bess_t{__nu, __x, _Jnu, _Jpnu, _Nnu, _Npnu};
+ if (std::abs(_S_pi * __x * _Jnu / _Tp{2}) > _S_tiny)
+ {
+ for (int __i = 1; __i <= __n; ++__i)
+ _Nmu = __gnu_cxx::__exchange(_Nnu1,
+ (__mu + __i) * __xi2 * _Nnu1 - _Nmu);
+ const auto _Nnu = _Nmu;
+ const auto _Npnu = __nu * __xi * _Nmu - _Nnu1;
+ return __bess_t{__nu, __x, _Jnu, _Jpnu, _Nnu, _Npnu};
+ }
+ else
+ return __bess_t{__nu, __x, _Jnu, _Jpnu, -_S_inf, _S_inf};
}
diff --git a/libstdc++-v3/include/bits/sf_chebyshev.tcc b/libstdc++-v3/include/bits/sf_chebyshev.tcc
index 5929b2627dd..5289d1605f5 100644
--- a/libstdc++-v3/include/bits/sf_chebyshev.tcc
+++ b/libstdc++-v3/include/bits/sf_chebyshev.tcc
@@ -32,6 +32,7 @@
#pragma GCC system_header
+#include <tuple>
#include <ext/math_const.h>
namespace std _GLIBCXX_VISIBILITY(default)
@@ -55,17 +56,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @param _C1 The value of the first-order Chebyshev polynomial at @f$ x @f$
*/
template<typename _Tp>
- _Tp
+ std::tuple<_Tp, _Tp, _Tp>
__chebyshev_recur(unsigned int __n, _Tp __x, _Tp _C0, _Tp _C1)
{
- auto _Ck = _Tp{0};
- for (unsigned int __j = 1; __j < __n; ++__j)
+ auto _Ck = _Tp{2} * __x * _C1 - _C0;
+ for (unsigned int __j = 2; __j < __n; ++__j)
{
- _Ck = _Tp{2} * __x * _C1 - _C0;
_C0 = _C1;
_C1 = _Ck;
+ _Ck = _Tp{2} * __x * _C1 - _C0;
}
- return _Ck;
+ return std::make_tuple(_Ck, _C1, _C0);
}
/**
@@ -83,18 +84,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @param __x The real argument @f$ -1 <= x <= +1 @f$
*/
template<typename _Tp>
- _Tp
+ __gnu_cxx::__chebyshev_t_t<_Tp>
__chebyshev_t(unsigned int __n, _Tp __x)
{
auto _T0 = _Tp{1};
if (__n == 0)
- return _T0;
+ return {__n, __x, _T0, _Tp{0}, _Tp{0}};
auto _T1 = __x;
if (__n == 1)
- return _T1;
+ return {__n, __x, _T1, _T0, _Tp{0}};
- return __chebyshev_recur(__n, __x, _T0, _T1);
+ auto _Ts = __chebyshev_recur(__n, __x, _T0, _T1);
+ return {__n, __x, std::get<0>(_Ts), std::get<1>(_Ts), std::get<2>(_Ts)};
}
/**
@@ -112,18 +114,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @param __x The real argument @f$ -1 <= x <= +1 @f$
*/
template<typename _Tp>
- _Tp
+ __gnu_cxx::__chebyshev_u_t<_Tp>
__chebyshev_u(unsigned int __n, _Tp __x)
{
auto _U0 = _Tp{1};
if (__n == 0)
- return _U0;
+ return {__n, __x, _U0, _Tp{0}, _Tp{0}};
auto _U1 = _Tp{2} * __x;
if (__n == 1)
- return _U1;
+ return {__n, __x, _U1, _U0, _Tp{0}};
- return __chebyshev_recur(__n, __x, _U0, _U1);
+ auto _Cs = __chebyshev_recur(__n, __x, _U0, _U1);
+ return {__n, __x, std::get<0>(_Cs), std::get<1>(_Cs), std::get<2>(_Cs)};
}
/**
@@ -153,7 +156,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if (__n == 1)
return _V1;
- return __chebyshev_recur(__n, __x, _V0, _V1);
+ return std::get<0>(__chebyshev_recur(__n, __x, _V0, _V1));
}
/**
@@ -183,7 +186,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if (__n == 1)
return _W1;
- return __chebyshev_recur(__n, __x, _W0, _W1);
+ return std::get<0>(__chebyshev_recur(__n, __x, _W0, _W1));
}
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/bits/sf_coulomb.tcc b/libstdc++-v3/include/bits/sf_coulomb.tcc
index 7c443fc08b1..0fe4e30f699 100644
--- a/libstdc++-v3/include/bits/sf_coulomb.tcc
+++ b/libstdc++-v3/include/bits/sf_coulomb.tcc
@@ -22,13 +22,13 @@
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// <http://www.gnu.org/licenses/>.
-/** @file bits/sf_hydrogen.tcc
+/** @file bits/sf_coulomb.tcc
* This is an internal header file, included by other library headers.
* You should not attempt to use it directly.
*/
-#ifndef _GLIBCXX_BITS_SF_HYDROGEN_TCC
-#define _GLIBCXX_BITS_SF_HYDROGEN_TCC 1
+#ifndef _GLIBCXX_BITS_SF_COULOMB_TCC
+#define _GLIBCXX_BITS_SF_COULOMB_TCC 1
#pragma GCC system_header
@@ -200,7 +200,7 @@ template<typename _Tp>
std::complex<_Tp>
__coulomb_CF2(unsigned int __l, _Tp __eta, _Tp __x)
{
- const auto _S_i = std::complex{0, 1};
+ const auto _S_i = std::complex<_Tp>{0, 1};
const auto _CF2_acc = _Tp{4} * std::numeric_limits<_Tp>::epsilon();
const auto _CF2_abort = 2.0e+05;
@@ -221,7 +221,7 @@ template<typename _Tp>
{
__PQ += __dpq;
__pk += _Tp{2};
- __a += std::complex(__pk, __wi);
+ __a += std::complex<_Tp>(__pk, __wi);
__b += _Tp{2} * _S_i;
__d = __b + __a * __d;
__d = std::conj(__d) / std::norm(__d);
@@ -288,4 +288,4 @@ _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
}
-#endif // _GLIBCXX_BITS_SF_HYDROGEN_TCC
+#endif // _GLIBCXX_BITS_SF_COULOMB_TCC
diff --git a/libstdc++-v3/include/bits/sf_euler.tcc b/libstdc++-v3/include/bits/sf_euler.tcc
new file mode 100644
index 00000000000..59d6bee0889
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_euler.tcc
@@ -0,0 +1,261 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2017 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.
+//
+// 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/>.
+
+/** @file bits/sf_euler.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// C++ Mathematical Special Functions
+//
+
+#ifndef _GLIBCXX_BITS_SF_EULER_TCC
+#define _GLIBCXX_BITS_SF_EULER_TCC 1
+
+#pragma GCC system_header
+
+#include <vector>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * Return the Euler number from lookup or by series expansion.
+ *
+ * The Euler numbers are given by the recursive sum:
+ * @f[
+ * E_n = B_n(1) = B_n
+ * @f]
+ * where @f$ E_0 = 1 @f$, @f$ E_1 = 0 @f$, @f$ E_2 = -1 @f$
+ *
+ * @todo Find a way to predict the maximum Euler number for a type.
+ */
+ template<typename _Tp>
+ _Tp
+ __euler_series(unsigned int __n)
+ {
+ static constexpr std::size_t _S_len = 22;
+ static constexpr _Tp
+ _S_num[_S_len]
+ {
+ 1ll, 0,
+ -1ll, 0ll,
+ 5ll, 0ll,
+ -61ll, 0ll,
+ 1385ll, 0ll,
+ -50521ll, 0ll,
+ 2702765ll, 0ll,
+ -199360981ll, 0ll,
+ 19391512145ll, 0ll,
+ -2404879675441ll, 0ll,
+ 370371188237525ll, 0ll,
+ //-69348874393137901ll, 0ll,
+ };
+
+ if (__n == 0)
+ return _Tp{1};
+ else if (__n & 1)
+ return _Tp{0};
+ else if (__n == 2)
+ return _Tp{-1};
+ else if (__n < _S_len)
+ return _S_num[__n];
+ else
+ {
+ std::vector<_Tp> _En(__n + 1);
+ _En[0] = _Tp{1};
+ _En[1] = _Tp{0};
+ _En[2] = _Tp{-1};
+
+ for (auto __i = 3u; __i <= __n; ++__i)
+ {
+ _En[__i] = 0;
+
+ if (__i % 2 == 0)
+ {
+ for (auto __j = 2u; __j <= __i; __j += 2u)
+ _En[__i] -= __binomial<_Tp>(__i, __j)
+ * _En[__i - __j];
+ }
+ }
+ return _En[__n];
+ }
+ }
+
+ /**
+ * @brief This returns Euler number @f$ E_n @f$.
+ *
+ * @param __n the order n of the Euler number.
+ * @return The Euler number of order n.
+ */
+ template<typename _Tp>
+ inline _Tp
+ __euler(unsigned int __n)
+ { return __euler_series<_Tp>(__n); }
+
+ /**
+ * Return the Euler polynomial @f$ E_n(x) @f$ of order n at argument x.
+ *
+ * The derivative is proportional to the previous polynomial:
+ * @f[
+ * E_n'(x) = n E_{n-1}(x)
+ * @f]
+ *
+ * @f[
+ * E_n(1/2) = \frac{E_n}{2^n}, \mbox{ where } E_n
+ * \mbox{ is the n-th Euler number.}
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __euler(unsigned int __n, _Tp __x)
+ {
+ if (__isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else
+ {
+ auto __bx1 = __bernoulli(__n + 1, __x );
+ auto __bx2 = __bernoulli(__n + 1, _Tp{0.5L} * __x );
+
+ auto _E_n = _Tp{2} * (__bx1 - __bx2 * std::pow(_Tp{2}, _Tp(__n + 1)))
+ / _Tp(__n + 1);
+
+ return _E_n;
+ }
+ }
+
+ /**
+ * Return the Eulerian number of the first kind.
+ * The Eulerian numbers of the first kind are defined by recursion:
+ * @f[
+ * \newcommand{\eulerian}[2]{\genfrac{\langle}{\rangle}{0pt}{0}{#1}{#2}}
+ *
+ * \eulerian{n}{m} = (n-m)\eulerian{n-1}{m-1} + (m+1)\eulerian{n-1}{m}
+ * \mbox{ for } n > 0
+ * @f]
+ * Note that @f$ A(n,m) @f$ is a common older notation.
+ */
+ template<typename _Tp>
+ _Tp
+ __eulerian_1_recur(unsigned int __n, unsigned int __m)
+ {
+ if (__m == 0)
+ return _Tp{1};
+ else if (__m >= __n)
+ return _Tp{0};
+ else if (__m == __n - 1)
+ return _Tp{1};
+ else if (__n - __m - 1 < __m) // Symmetry.
+ return __eulerian_1_recur<_Tp>(__n, __n - __m - 1);
+ else
+ {
+ // Start recursion with n == 2 (already returned above).
+ std::vector<_Tp> _Aold(__m + 1), _Anew(__m + 1);
+ _Aold[0] = _Tp{1};
+ _Anew[0] = _Tp{1};
+ _Anew[1] = _Tp{1};
+ for (auto __in = 3u; __in <= __n; ++__in)
+ {
+ std::swap(_Aold, _Anew);
+ for (auto __im = 1u; __im <= __m; ++__im)
+ _Anew[__im] = (__in - __im) * _Aold[__im - 1]
+ + (__im + 1) * _Aold[__im];
+ }
+ return _Anew[__m];
+ }
+ }
+
+ /**
+ * Return the Eulerian number of the first kind.
+ * The Eulerian numbers of the first kind are defined by recursion:
+ * @f[
+ * \genfrac\langle\rangle{0pt}{0}{n}{m}
+ * = (n-m)\genfrac\langle\rangle{0pt}{0}{n-1}{m-1}
+ * + (m+1)\genfrac\langle\rangle{0pt}{0}{n-1}{m}
+ * \mbox{ for } n > 0
+ * @f]
+ * Note that @f$ A(n,m) @f$ is a common older notation.
+ */
+ template<typename _Tp>
+ inline _Tp
+ __eulerian_1(unsigned int __n, unsigned int __m)
+ { return __eulerian_1_recur<_Tp>(__n, __m); }
+
+ /**
+ * Return the Eulerian number of the second kind by recursion.
+ * The recursion is:
+ * @f[
+ * A(n,m) = (2n-m-1)A(n-1,m-1) + (m+1)A(n-1,m) \mbox{ for } n > 0
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __eulerian_2_recur(unsigned int __n, unsigned int __m)
+ {
+ if (__m == 0)
+ return _Tp{1};
+ else if (__m >= __n)
+ return _Tp{0};
+ else if (__n == 0)
+ return _Tp{1};
+ else
+ {
+ // Start recursion with n == 2 (already returned above).
+ std::vector<_Tp> _Aold(__m + 1), _Anew(__m + 1);
+ _Aold[0] = _Tp{1};
+ _Anew[0] = _Tp{1};
+ _Anew[1] = _Tp{2};
+ for (auto __in = 3u; __in <= __n; ++__in)
+ {
+ std::swap(_Aold, _Anew);
+ for (auto __im = 1u; __im <= __m; ++__im)
+ _Anew[__im] = (2 * __in - __im - 1) * _Aold[__im - 1]
+ + (__im + 1) * _Aold[__im];
+ }
+ return _Anew[__m];
+ }
+ }
+
+ /**
+ * Return the Eulerian number of the second kind.
+ * The Eulerian numbers of the second kind are defined by recursion:
+ * @f[
+ * A(n,m) = (2n-m-1)A(n-1,m-1) + (m+1)A(n-1,m) \mbox{ for } n > 0
+ * @f]
+ */
+ template<typename _Tp>
+ inline _Tp
+ __eulerian_2(unsigned int __n, unsigned int __m)
+ { return __eulerian_2_recur<_Tp>(__n, __m); }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_EULER_TCC
diff --git a/libstdc++-v3/include/bits/sf_gamma.tcc b/libstdc++-v3/include/bits/sf_gamma.tcc
index 4cb799c6576..8793a35479e 100644
--- a/libstdc++-v3/include/bits/sf_gamma.tcc
+++ b/libstdc++-v3/include/bits/sf_gamma.tcc
@@ -2525,17 +2525,32 @@ _S_neg_double_factorial_table[999]
return _Tp{0};
else if (__k == 0 || __k == __n)
return _Tp{1};
- else if (__n < _S_num_factorials<_Real>
- && __k < _S_num_factorials<_Real>)
- return __factorial<_Tp>(__n)
- / __factorial<_Tp>(__k) / __factorial<_Tp>(__n - __k);
else
- {
- const auto __log_coeff = __log_binomial<_Val>(__n, __k);
- if (std::abs(__log_coeff) > __max_binom)
- return __gnu_cxx::__infinity<_Tp>();
+ {
+ unsigned int __nmk = __n - __k;
+#if __cpp_lib_gcd >= 201606
+ unsigned int& __m = (__k > __nmk ? __k : __nmk);
+ unsigned int __q = 1;
+ while ((__q = std::gcd(__n, std::max(__k, __m))) > 1)
+ {
+ __n /= __q;
+ __m /= __q;
+ __m = (__k > __nmk ? __k : __nmk);
+ }
+#endif
+ if (__n < _S_num_factorials<_Real>
+ && __k < _S_num_factorials<_Real>
+ && __nmk < _S_num_factorials<_Real>)
+ return __factorial<_Tp>(__n)
+ / __factorial<_Tp>(__k) / __factorial<_Tp>(__nmk);
else
- return std::exp(__log_coeff);
+ {
+ const auto __log_coeff = __log_binomial<_Val>(__n, __k);
+ if (std::abs(__log_coeff) > __max_binom)
+ return __gnu_cxx::__infinity<_Tp>();
+ else
+ return std::exp(__log_coeff);
+ }
}
}
diff --git a/libstdc++-v3/include/bits/sf_gegenbauer.tcc b/libstdc++-v3/include/bits/sf_gegenbauer.tcc
index ef3be01adec..4c12dc30c06 100644
--- a/libstdc++-v3/include/bits/sf_gegenbauer.tcc
+++ b/libstdc++-v3/include/bits/sf_gegenbauer.tcc
@@ -55,36 +55,143 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @tparam _Talpha The real type of the order
* @tparam _Tp The real type of the argument
* @param __n The non-negative integral degree
- * @param __alpha The real order
+ * @param __alpha1 The real order
* @param __x The real argument
*/
template<typename _Tp>
_Tp
- __gegenbauer_poly(unsigned int __n, _Tp __alpha, _Tp __x)
+ __gegenbauer_poly(unsigned int __n, _Tp __alpha1, _Tp __x)
{
const auto _S_NaN = __gnu_cxx::__quiet_NaN(__x);
- if (__isnan(__alpha) || __isnan(__x))
+ if (__isnan(__alpha1) || __isnan(__x))
return _S_NaN;
- auto _C0 = _Tp{1};
+ auto __C_nm2 = _Tp{1};
if (__n == 0)
- return _C0;
+ return __C_nm2;
- auto _C1 = _Tp{2} * __alpha * __x;
+ auto __C_nm1 = _Tp{2} * __alpha1 * __x;
if (__n == 1)
- return _C1;
-
- auto _Cn = _Tp{0};
- for (unsigned int __nn = 2; __nn <= __n; ++__nn)
- {
- _Cn = (_Tp{2} * (_Tp{__nn} - _Tp{1} + __alpha) * __x * _C1
- - (_Tp{__nn} - _Tp{2} + _Tp{2} * __alpha) * _C0)
- / _Tp(__nn);
- _C0 = _C1;
- _C1 = _Cn;
- }
- return _Cn;
+ return __C_nm1;
+
+ auto __C_n = (_Tp{2} * (_Tp{1} + __alpha1) * __x * __C_nm1
+ - _Tp{2} * __alpha1 * __C_nm2) / _Tp(2);
+ for (unsigned int __nn = 3; __nn <= __n; ++__nn)
+ {
+ __C_nm2 = __C_nm1;
+ __C_nm1 = __C_n;
+ __C_n = (_Tp{2} * (_Tp(__nn) - _Tp{1} + __alpha1) * __x * __C_nm1
+ - (_Tp(__nn) - _Tp{2} + _Tp{2} * __alpha1) * __C_nm2)
+ / _Tp(__nn);
+ }
+ return __C_n;
+ }
+
+ /**
+ * Return a vector containing the zeros of the Gegenbauer or ultraspherical
+ * polynomial @f$ C_n^{(\alpha)}@f$.
+ */
+ template<typename _Tp>
+ std::vector<__gnu_cxx::__quadrature_point_t<_Tp>>
+ __gegenbauer_zeros(unsigned int __n, _Tp __alpha1)
+ {
+ const auto _S_eps = __gnu_cxx::__epsilon(__alpha1);
+ const unsigned int _S_maxit = 1000u;
+ std::vector<__gnu_cxx::__quadrature_point_t<_Tp>> __pt(__n);
+
+ _Tp __z;
+ _Tp __w;
+ for (auto __i = 1u; __i <= __n; ++__i)
+ {
+ if (__i == 1)
+ {
+ auto __an = __alpha1 / __n;
+ auto __an2 = __an * __an;
+ auto __r1 = (1.0 + __alpha1) * (2.78 / (4.0 + __n * __n)
+ + 0.768 * __an / __n);
+ auto __r2 = 1.0 + 1.48 * __an + 0.96 * __an + 1.282 * __an2;
+ __z = 1.0 - __r1 / __r2;
+ }
+ else if (__i == 2)
+ {
+ auto __r1 = (4.1 + __alpha1)
+ / ((1.0 + __alpha1) * (1.0 + 0.156 * __alpha1));
+ auto __r2 = 1.0
+ + 0.06 * (__n - 8.0) * (1.0 + 0.12 * __alpha1) / __n;
+ auto __r3 = 1.0
+ + 0.012 * __alpha1 * (1.0 + 0.25 * std::abs(__alpha1)) / __n;
+ __z -= (1.0 - __z) * __r1 * __r2 * __r3;
+ }
+ else if (__i == 3)
+ {
+ auto __r1 = (1.67 + 0.28 * __alpha1) / (1.0 + 0.37 * __alpha1);
+ auto __r2 = 1.0 + 0.22 * (__n - 8.0) / __n;
+ auto __r3 = 1.0 + 8.0 *__alpha1 / ((6.28 + __alpha1) * __n * __n);
+ __z -= (__pt[0].__zero - __z) * __r1 * __r2 * __r3;
+ }
+ else if (__i == __n - 1)
+ {
+ auto __r1 = (1.0 + 0.235 * __alpha1) / (0.766 + 0.119 * __alpha1);
+ auto __r2 = 1.0 / (1.0 + 0.639 * (__n - 4.0)
+ / (1.0 + 0.71 * (__n - 4.0)));
+ auto __r3 = 1.0 / (1.0 + 20.0 * __alpha1
+ / ((7.5 + __alpha1) * __n * __n));
+ __z += (__z - __pt[__n - 4].__zero) * __r1 * __r2 * __r3;
+ }
+ else if (__i == __n)
+ {
+ auto __r1 = (1.0 + 0.37 * __alpha1) / (1.67 + 0.28 * __alpha1);
+ auto __r2 = 1.0 / (1.0 + 0.22 * (__n - 8.0) / __n);
+ auto __r3 = 1.0 / (1.0 + 8.0 * __alpha1
+ / ((6.28 + __alpha1) * __n * __n));
+ __z += (__z - __pt[__n - 3].__zero) * __r1 * __r2 * __r3;
+ }
+ else
+ __z = 3.0 * __pt[__i - 2].__zero
+ - 3.0 * __pt[__i - 3].__zero + __pt[__i - 4].__zero;
+
+ auto __2alpha = _Tp{2} * __alpha1;
+ for (auto __its = 1u; __its <= _S_maxit; ++__its)
+ {
+ auto __temp = _Tp{2} + __2alpha;
+ auto __C1 = (__temp * __z) / _Tp{2};
+ auto __C2 = _Tp{1};
+ for (auto __j = 2u; __j <= __n; ++__j)
+ {
+ auto __C3 = __C2;
+ __C2 = __C1;
+ __temp = _Tp{2} * __j + __2alpha;
+ auto __a = _Tp{2} * __j * (__j + __2alpha)
+ * (__temp - _Tp{2});
+ auto __b = (__temp - _Tp{1})
+ * __temp * (__temp - _Tp{2}) * __z;
+ auto __c = _Tp{2} * (__j - 1 + __alpha1)
+ * (__j - 1 + __alpha1) * __temp;
+ __C1 = (__b * __C2 - __c * __C3) / __a;
+ }
+ auto __Cp = (__n * (-__temp * __z) * __C1
+ + _Tp{2} * (__n + __alpha1) * (__n + __alpha1) * __C2)
+ / (__temp * (_Tp{1} - __z * __z));
+ auto __z1 = __z;
+ __z = __z1 - __C1 / __Cp;
+ if (std::abs(__z - __z1) <= _S_eps)
+ {
+ __w = std::exp(std::lgamma(__alpha1 + _Tp(__n))
+ + std::lgamma(__alpha1 + _Tp(__n))
+ - std::lgamma(_Tp(__n + 1))
+ - std::lgamma(_Tp(__n + 1) + __2alpha))
+ * __temp * std::pow(_Tp{2}, __2alpha) / (__Cp * __C2);
+ break;
+ }
+ if (__its > _S_maxit)
+ std::__throw_logic_error("__jacobi_zeros: Too many iterations");
+ }
+ __pt[__i - 1].__zero = __z;
+ __pt[__i - 1].__weight = __w;
+ }
+
+ return __pt;
}
} // namespace __detail
diff --git a/libstdc++-v3/include/bits/sf_hermite.tcc b/libstdc++-v3/include/bits/sf_hermite.tcc
index 2660b4edab7..c16cb84dd54 100644
--- a/libstdc++-v3/include/bits/sf_hermite.tcc
+++ b/libstdc++-v3/include/bits/sf_hermite.tcc
@@ -67,29 +67,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* and argument x.
*/
template<typename _Tp>
- _Tp
- __poly_hermite_recursion(unsigned int __n, _Tp __x)
+ __gnu_cxx::__hermite_t<_Tp>
+ __hermite_recur(unsigned int __n, _Tp __x)
{
// Compute H_0.
auto __H_nm2 = _Tp{1};
if (__n == 0)
- return __H_nm2;
+ return {__n, __x, __H_nm2, _Tp{0}, _Tp{0}};
// Compute H_1.
auto __H_nm1 = _Tp{2} * __x;
if (__n == 1)
- return __H_nm1;
+ return {__n, __x, __H_nm1, __H_nm2, _Tp{0}};
// Compute H_n.
- _Tp __H_n;
- for (unsigned int __i = 2; __i <= __n; ++__i)
+ auto __H_n = _Tp{2} * (__x * __H_nm1 - __H_nm2);
+ for (unsigned int __i = 3; __i <= __n; ++__i)
{
- __H_n = _Tp{2} * (__x * __H_nm1 - _Tp(__i - 1) * __H_nm2);
__H_nm2 = __H_nm1;
__H_nm1 = __H_n;
+ __H_n = _Tp{2} * (__x * __H_nm1 - _Tp(__i - 1) * __H_nm2);
}
- return __H_n;
+ //auto __Hp_n = std::sqrt(_Tp(2 * __n)) * __H_nm1;
+ return {__n, __x, __H_n, __H_nm1, __H_nm2};
}
/**
@@ -112,7 +113,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _Tp>
_Tp
- __poly_hermite_asymp(unsigned int __n, _Tp __x)
+ __hermite_asymp(unsigned int __n, _Tp __x)
{
const auto _S_pi = __gnu_cxx::__const_pi(__x);
const auto _S_sqrt_2 = __gnu_cxx::__const_root_2(__x);
@@ -181,16 +182,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _Tp>
_Tp
- __poly_hermite(unsigned int __n, _Tp __x)
+ __hermite(unsigned int __n, _Tp __x)
{
if (__isnan(__x))
return __gnu_cxx::__quiet_NaN(__x);
else if (__x < _Tp{0})
- return (__n % 2 == 1 ? -1 : +1) * __poly_hermite(__n, -__x);
+ return (__n % 2 == 1 ? -1 : +1) * __hermite(__n, -__x);
else if (__n > 10000)
- return __poly_hermite_asymp(__n, __x);
+ return __hermite_asymp(__n, __x);
else
- return __poly_hermite_recursion(__n, __x);
+ return __hermite_recur(__n, __x).__H_n;
}
/**
@@ -213,29 +214,29 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* and argument x.
*/
template<typename _Tp>
- _Tp
- __poly_prob_hermite_recursion(unsigned int __n, _Tp __x)
+ __gnu_cxx::__hermite_he_t<_Tp>
+ __prob_hermite_recursion(unsigned int __n, _Tp __x)
{
// Compute He_0.
auto __He_nm2 = _Tp{1};
if (__n == 0)
- return __He_nm2;
+ return {__n, __x, __He_nm2, _Tp{0}, _Tp{0}};
// Compute He_1.
auto __He_nm1 = __x;
if (__n == 1)
- return __He_nm1;
+ return {__n, __x, __He_nm1, __He_nm2, _Tp{0}};
// Compute He_n.
- _Tp __He_n;
- for (unsigned int __i = 2; __i <= __n; ++__i)
+ auto __He_n = __x * __He_nm1 - __He_nm2;
+ for (unsigned int __i = 3; __i <= __n; ++__i)
{
- __He_n = __x * __He_nm1 - _Tp(__i - 1) * __He_nm2;
__He_nm2 = __He_nm1;
__He_nm1 = __He_n;
+ __He_n = __x * __He_nm1 - _Tp(__i - 1) * __He_nm2;
}
- return __He_n;
+ return {__n, __x, __He_n, __He_nm1, __He_nm2};
}
/**
@@ -283,10 +284,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
}
- _Tp __z;
- _Tp __w;
for (auto __i = 1u; __i <= __m; ++__i)
{
+ _Tp __z;
+ _Tp __w;
if (__i == 1)
__z = std::sqrt(_Tp(2 * __n + 1))
- 1.85575 * std::pow(_Tp(2 * __n + 1), -0.166667);
diff --git a/libstdc++-v3/include/bits/sf_jacobi.tcc b/libstdc++-v3/include/bits/sf_jacobi.tcc
index 3785ddafe99..49fd864e4a4 100644
--- a/libstdc++-v3/include/bits/sf_jacobi.tcc
+++ b/libstdc++-v3/include/bits/sf_jacobi.tcc
@@ -55,27 +55,33 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @f]
*/
template<typename _Tp>
- _Tp
- __poly_jacobi(unsigned int __n, _Tp __alpha, _Tp __beta, _Tp __x)
+ __gnu_cxx::__jacobi_t<_Tp>
+ __jacobi_recur(unsigned int __n, _Tp __alpha1, _Tp __beta1, _Tp __x)
{
const auto _S_NaN = __gnu_cxx::__quiet_NaN(__x);
- if (__isnan(__alpha) || __isnan(__beta) || __isnan(__x))
- return _S_NaN;
+ if (__isnan(__alpha1) || __isnan(__beta1) || __isnan(__x))
+ return {__n, __alpha1, __beta1, _S_NaN, _S_NaN, _S_NaN, _S_NaN};
- auto _Pm2 = _Tp{1};
+ auto __P_nm2 = _Tp{1};
if (__n == 0)
- return _Pm2;
+ return {__n, __alpha1, __beta1, __x, __P_nm2, _Tp{0}, _Tp{0}};
- auto __apb = __alpha + __beta;
- auto __amb = __alpha - __beta;
- auto _Pm1 = (__amb + (_Tp{2} + __apb) * __x) / _Tp{2};
+ const auto __apb = __alpha1 + __beta1;
+ const auto __amb = __alpha1 - __beta1;
+ auto __P_nm1 = (__amb + (__apb + _Tp{2}) * __x) / _Tp{2};
if (__n == 1)
- return _Pm1;
+ return {__n, __alpha1, __beta1, __x, __P_nm1, __P_nm2, _Tp{0}};
- auto _Pm0 = _Tp{0};
- auto __a2mb2 = __amb * __apb;
- for (auto __k = 2; __k <= __n; ++__k )
+ const auto __a2mb2 = __amb * __apb;
+ const auto __bah = ((__apb + _Tp{2}) + _Tp{2});
+ const auto __poo = (__bah - _Tp{1});
+ auto __P_n = (((__poo * __a2mb2)
+ + ((__poo - _Tp{1}) * __poo * __bah) * __x)
+ * __P_nm1 - (_Tp{2} * (__alpha1 + _Tp{1})
+ * (__beta1 + _Tp{1}) * __bah) * __P_nm2)
+ / (_Tp{4} * (__apb + _Tp{2}) * (__poo - _Tp{1}));
+ for (auto __k = 3; __k <= __n; ++__k )
{
auto __apbpk = __apb + _Tp(__k);
auto __apbp2k = __apbpk + _Tp(__k);
@@ -84,16 +90,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
auto __d = _Tp{2} * __k * __apbpk * __apbp2km2;
auto __a = __apbp2km2 * __apbp2km1 * __apbp2k;
auto __b = __apbp2km1 * __a2mb2;
- auto __c = _Tp{2} * (__alpha + _Tp(__k - 1))
- * (__beta + _Tp(__k - 1)) * __apbp2k;
+ auto __c = _Tp{2} * (__alpha1 + _Tp(__k - 1))
+ * (__beta1 + _Tp(__k - 1)) * __apbp2k;
if (__d == _Tp{0})
- std::__throw_runtime_error(__N("__poly_jacobi: "
+ std::__throw_runtime_error(__N("__jacobi_recur: "
"Failure in recursion"));
- _Pm0 = ((__b + __a * __x) * _Pm1 - __c * _Pm2) / __d;
- _Pm2 = _Pm1;
- _Pm1 = _Pm0;
+ __P_nm2 = __P_nm1;
+ __P_nm1 = __P_n;
+ __P_n = ((__b + __a * __x) * __P_nm1 - __c * __P_nm2) / __d;
}
- return _Pm0;
+ //auto __Pp_n = (__n * (__alpha1 - __beta1 - __apbp2k * __x) * __P_nm1
+ // + _Tp{2} * (__n + __alpha1) * (__n + __beta1) * __P_nm2)
+ // / (__apbp2k * (_Tp{1} - __x * __x));
+ return {__n, __alpha1, __beta1, __x, __P_n, __P_nm1, __P_nm2};
}
/*
@@ -110,6 +119,117 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
/**
+ * Return a vector containing the zeros of the Jacobi polynomial
+ * @f$ P_n^{(\alpha,\beta)}@f$.
+ */
+ template<typename _Tp>
+ std::vector<__gnu_cxx::__quadrature_point_t<_Tp>>
+ __jacobi_zeros(unsigned int __n, _Tp __alpha1, _Tp __beta1)
+ {
+ const auto _S_eps = __gnu_cxx::__epsilon(__alpha1);
+ const unsigned int _S_maxit = 1000u;
+
+ std::vector<__gnu_cxx::__quadrature_point_t<_Tp>> __pt(__n);
+
+ _Tp __z;
+ _Tp __w;
+ for (auto __i = 1u; __i <= __n; ++__i)
+ {
+ if (__i == 1)
+ {
+ auto __an = __alpha1 / __n;
+ auto __bn = __beta1 / __n;
+ auto __r1 = (1.0 + __alpha1) * (2.78 / (4.0 + __n * __n)
+ + 0.768 * __an / __n);
+ auto __r2 = 1.0 + 1.48 * __an + 0.96 * __bn
+ + 0.452 * __an * __an + 0.83 * __an * __bn;
+ __z = 1.0 - __r1 / __r2;
+ }
+ else if (__i == 2)
+ {
+ auto __r1 = (4.1 + __alpha1)
+ / ((1.0 + __alpha1) * (1.0 + 0.156 * __alpha1));
+ auto __r2 = 1.0
+ + 0.06 * (__n - 8.0) * (1.0 + 0.12 * __alpha1) / __n;
+ auto __r3 = 1.0
+ + 0.012 * __beta1 * (1.0 + 0.25 * std::abs(__alpha1)) / __n;
+ __z -= (1.0 - __z) * __r1 * __r2 * __r3;
+ }
+ else if (__i == 3)
+ {
+ auto __r1 = (1.67 + 0.28 * __alpha1) / (1.0 + 0.37 * __alpha1);
+ auto __r2 = 1.0 + 0.22 * (__n - 8.0) / __n;
+ auto __r3 = 1.0 + 8.0 * __beta1 / ((6.28 + __beta1) * __n * __n);
+ __z -= (__pt[0].__zero - __z) * __r1 * __r2 * __r3;
+ }
+ else if (__i == __n - 1)
+ {
+ auto __r1 = (1.0 + 0.235 * __beta1) / (0.766 + 0.119 * __beta1);
+ auto __r2 = 1.0 / (1.0 + 0.639 * (__n - 4.0)
+ / (1.0 + 0.71 * (__n - 4.0)));
+ auto __r3 = 1.0 / (1.0 + 20.0 * __alpha1
+ / ((7.5 + __alpha1) * __n * __n));
+ __z += (__z - __pt[__n - 4].__zero) * __r1 * __r2 * __r3;
+ }
+ else if (__i == __n)
+ {
+ auto __r1 = (1.0 + 0.37 * __beta1) / (1.67 + 0.28 * __beta1);
+ auto __r2 = 1.0 / (1.0 + 0.22 * (__n - 8.0) / __n);
+ auto __r3 = 1.0 / (1.0 + 8.0 * __alpha1
+ / ((6.28 + __alpha1) * __n * __n));
+ __z += (__z - __pt[__n - 3].__zero) * __r1 * __r2 * __r3;
+ }
+ else
+ {
+ __z = 3.0 * __pt[__i - 2].__zero
+ - 3.0 * __pt[__i - 3].__zero + __pt[__i - 4].__zero;
+ }
+
+ auto __alphabeta = __alpha1 + __beta1;
+ for (auto __its = 1u; __its <= _S_maxit; ++__its)
+ {
+ auto __temp = _Tp{2} + __alphabeta;
+ auto __P1 = (__alpha1 - __beta1 + __temp * __z) / _Tp{2};
+ auto __P2 = _Tp{1};
+ for (auto __j = 2u; __j <= __n; ++__j)
+ {
+ auto __P3 = __P2;
+ __P2 = __P1;
+ __temp = _Tp{2} * __j + __alphabeta;
+ auto __a = _Tp{2} * __j * (__j + __alphabeta)
+ * (__temp - _Tp{2});
+ auto __b = (__temp - _Tp{1})
+ * (__alpha1 * __alpha1 - __beta1 * __beta1
+ + __temp * (__temp - _Tp{2}) * __z);
+ auto __c = _Tp{2} * (__j - 1 + __alpha1)
+ * (__j - 1 + __beta1) * __temp;
+ __P1 = (__b * __P2 - __c * __P3) / __a;
+ }
+ auto __Pp = (__n * (__alpha1 - __beta1 - __temp * __z) * __P1
+ + _Tp{2} * (__n + __alpha1) * (__n + __beta1) * __P2)
+ / (__temp * (_Tp{1} - __z * __z));
+ auto __z1 = __z;
+ __z = __z1 - __P1 / __Pp;
+ if (std::abs(__z - __z1) <= _S_eps)
+ {
+ __w = std::exp(std::lgamma(__alpha1 + _Tp(__n))
+ + std::lgamma(__beta1 + _Tp(__n))
+ - std::lgamma(_Tp(__n + 1))
+ - std::lgamma(_Tp(__n + 1) + __alphabeta))
+ * __temp * std::pow(_Tp{2}, __alphabeta) / (__Pp * __P2);
+ break;
+ }
+ if (__its > _S_maxit)
+ std::__throw_logic_error("__jacobi_zeros: Too many iterations");
+ }
+ __pt[__i - 1].__zero = __z;
+ __pt[__i - 1].__weight = __w;
+ }
+
+ return __pt;
+ }
+
+ /**
* Return the radial polynomial @f$ R_n^m(\rho) @f$ for non-negative
* degree @f$ n @f$, order @f$ m <= n @f$, and real radial
* argument @f$ \rho @f$.
@@ -156,8 +276,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
auto __k = (__n - __m) / 2;
return (__k % 2 == 0 ? +1 : -1) * std::pow(__rho, __m)
- * __poly_jacobi(__k, _Tp(__m), _Tp{0},
- _Tp{1} - _Tp{2} * __rho * __rho);
+ * __jacobi_recur(__k, _Tp(__m), _Tp{0},
+ _Tp{1} - _Tp{2} * __rho * __rho).__P_n;
}
}
@@ -197,7 +317,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if (__isnan(__rho) || __isnan(__phi))
return _S_NaN;
else
- return __poly_radial_jacobi(__n, std::abs(__m), __rho)
+ return __poly_radial_jacobi(__n, std::abs(__m), __rho)
* (__m >= 0 ? std::cos(__m * __phi) : std::sin(__m * __phi));
}
diff --git a/libstdc++-v3/include/bits/sf_laguerre.tcc b/libstdc++-v3/include/bits/sf_laguerre.tcc
index f0b762c0fd9..a00f41bc794 100644
--- a/libstdc++-v3/include/bits/sf_laguerre.tcc
+++ b/libstdc++-v3/include/bits/sf_laguerre.tcc
@@ -72,32 +72,31 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _Tpa, typename _Tp>
_Tp
- __poly_laguerre_large_n(unsigned __n, _Tpa __alpha1, _Tp __x)
+ __laguerre_large_n(unsigned __n, _Tpa __alpha1, _Tp __x)
{
- const _Tp __a = -_Tp(__n);
- const _Tp __b = _Tp(__alpha1) + _Tp{1};
- const _Tp __eta = _Tp{2} * __b - _Tp{4} * __a;
- const _Tp __cos2th = __x / __eta;
- const _Tp __sin2th = _Tp{1} - __cos2th;
- const _Tp __th = std::acos(std::sqrt(__cos2th));
- const _Tp __pre_h = __gnu_cxx::__const_pi_half(__x)
+ const auto __a = -_Tp(__n);
+ const auto __b = _Tp(__alpha1) + _Tp{1};
+ const auto __eta = _Tp{2} * __b - _Tp{4} * __a;
+ const auto __cos2th = __x / __eta;
+ const auto __sin2th = _Tp{1} - __cos2th;
+ const auto __th = std::acos(std::sqrt(__cos2th));
+ const auto __pre_h = __gnu_cxx::__const_pi_half(__x)
* __gnu_cxx::__const_pi_half(__x)
* __eta * __eta * __cos2th * __sin2th;
- const _Tp __lg_b = __log_gamma(_Tp(__n) + __b);
- const _Tp __lnfact = __log_gamma(_Tp(__n + 1));
-
- _Tp __pre_term1 = _Tp{0.5L} * (_Tp{1} - __b)
- * std::log(_Tp{0.25L} * __x * __eta);
- _Tp __pre_term2 = _Tp{0.25L} * std::log(__pre_h);
- _Tp __lnpre = __lg_b - __lnfact + _Tp{0.5L} * __x
- + __pre_term1 - __pre_term2;
- _Tp __ser_term1 = __sin_pi(__a);
- _Tp __ser_term2 = std::sin(_Tp{0.25L} * __eta
- * (_Tp{2} * __th
- - std::sin(_Tp{2} * __th))
+ const auto __lg_b = __log_gamma(_Tp(__n) + __b);
+ const auto __lnfact = __log_gamma(_Tp(__n + 1));
+
+ const auto __pre_term1 = _Tp{0.5L} * (_Tp{1} - __b)
+ * std::log(_Tp{0.25L} * __x * __eta);
+ const auto __pre_term2 = _Tp{0.25L} * std::log(__pre_h);
+ const auto __lnpre = __lg_b - __lnfact + _Tp{0.5L} * __x
+ + __pre_term1 - __pre_term2;
+ const auto __ser_term1 = __sin_pi(__a);
+ const auto __ser_term2 = std::sin(_Tp{0.25L} * __eta
+ * (_Tp{2} * __th - std::sin(_Tp{2} * __th))
+ __gnu_cxx::__const_pi_quarter(__x));
- _Tp __ser = __ser_term1 + __ser_term2;
+ const auto __ser = __ser_term1 + __ser_term2;
return std::exp(__lnpre) * __ser;
}
@@ -109,7 +108,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* The associated Laguerre function is defined by
* @f[
- * L_n^\alpha(x) = \frac{(\alpha + 1)_n}{n!}
+ * L_n^{(\alpha)}(x) = \frac{(\alpha + 1)_n}{n!}
* {}_1F_1(-n; \alpha + 1; x)
* @f]
* where @f$ (\alpha)_n @f$ is the Pochhammer symbol and
@@ -129,20 +128,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _Tpa, typename _Tp>
_Tp
- __poly_laguerre_hyperg(unsigned int __n, _Tpa __alpha1, _Tp __x)
+ __laguerre_hyperg(unsigned int __n, _Tpa __alpha1, _Tp __x)
{
- const _Tp __b = _Tp(__alpha1) + _Tp{1};
- const _Tp __mx = -__x;
- const _Tp __tc_sgn = (__x < _Tp{0} ? _Tp{1}
+ const auto __b = _Tp(__alpha1) + _Tp{1};
+ const auto __mx = -__x;
+ const auto __tc_sgn = (__x < _Tp{0} ? _Tp{1}
: ((__n % 2 == 1) ? -_Tp{1} : _Tp{1}));
// Get |x|^n/n!
- _Tp __tc = _Tp{1};
- const _Tp __ax = std::abs(__x);
+ auto __tc = _Tp{1};
+ const auto __ax = std::abs(__x);
for (unsigned int __k = 1; __k <= __n; ++__k)
__tc *= (__ax / __k);
- _Tp __term = __tc * __tc_sgn;
- _Tp __sum = __term;
+ auto __term = __tc * __tc_sgn;
+ auto __sum = __term;
for (int __k = int(__n) - 1; __k >= 0; --__k)
{
__term *= ((__b + _Tp(__k)) / _Tp{int(__n) - __k})
@@ -156,12 +155,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief This routine returns the associated Laguerre polynomial
- * of order @c n, degree @c @f$ \alpha @f$: @f$ L_n^\alpha(x) @f$
+ * of order @c n, degree @c @f$ \alpha @f$: @f$ L_n^{(\alpha)}(x) @f$
* by recursion.
*
* The associated Laguerre function is defined by
* @f[
- * L_n^\alpha(x) = \frac{(\alpha + 1)_n}{n!}
+ * L_n^{(\alpha)}(x) = \frac{(\alpha + 1)_n}{n!}
* {}_1F_1(-n; \alpha + 1; x)
* @f]
* where @f$ (\alpha)_n @f$ is the Pochhammer symbol and
@@ -170,7 +169,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* The associated Laguerre polynomial is defined for integral
* @f$ \alpha = m @f$ by:
* @f[
- * L_n^m(x) = (-1)^m \frac{d^m}{dx^m} L_{n + m}(x)
+ * L_n^{(m)}(x) = (-1)^m \frac{d^m}{dx^m} L_{n + m}(x)
* @f]
* where the Laguerre polynomial is defined by:
* @f[
@@ -186,33 +185,36 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* degree @f$ \alpha @f$, and argument x.
*/
template<typename _Tpa, typename _Tp>
- _Tp
- __poly_laguerre_recursion(unsigned int __n, _Tpa __alpha1, _Tp __x)
+ __gnu_cxx::__laguerre_t<_Tpa, _Tp>
+ __laguerre_recur(unsigned int __n, _Tpa __alpha1, _Tp __x)
{
- // Compute l_0.
- _Tp __l_0 = _Tp{1};
+ // Compute L_0.
+ auto __L_0 = _Tp{1};
if (__n == 0)
- return __l_0;
+ return {__n, __alpha1, __x, __L_0, _Tp{0}, _Tp{0}};
- // Compute l_1^alpha.
- _Tp __l_1 = -__x + _Tp{1} + _Tp(__alpha1);
+ // Compute L_1^{(alpha)}.
+ auto __L_1 = -__x + _Tp{1} + _Tp(__alpha1);
if (__n == 1)
- return __l_1;
-
- // Compute l_n^alpha by recursion on n.
- _Tp __l_n2 = __l_0;
- _Tp __l_n1 = __l_1;
- _Tp __l_n = _Tp{0};
- for (unsigned int __nn = 2; __nn <= __n; ++__nn)
+ return {__n, __alpha1, __x, __L_1, __L_0, _Tp{0}};
+
+ // Compute L_n^{(alpha)} by recursion on n.
+ auto __L_nm2 = __L_0;
+ auto __L_nm1 = __L_1;
+ auto __L_n = (_Tp{3} + _Tp(__alpha1) - __x) * __L_nm1 / _Tp{2}
+ - (_Tp{1} + _Tp(__alpha1)) * __L_nm2 / _Tp{2};
+ for (unsigned int __nn = 3; __nn <= __n; ++__nn)
{
- __l_n = (_Tp(2 * __nn - 1) + _Tp(__alpha1) - __x)
- * __l_n1 / _Tp(__nn)
- - (_Tp(__nn - 1) + _Tp(__alpha1)) * __l_n2 / _Tp(__nn);
- __l_n2 = __l_n1;
- __l_n1 = __l_n;
+ __L_nm2 = __L_nm1;
+ __L_nm1 = __L_n;
+ __L_n = (_Tp(2 * __nn - 1) + _Tp(__alpha1) - __x)
+ * __L_nm1 / _Tp(__nn)
+ - (_Tp(__nn - 1) + _Tp(__alpha1)) * __L_nm2 / _Tp(__nn);
}
- return __l_n;
+ // Derivative.
+ //auto __Lp_n = (_Tp(__n) * __L_nm1 - _Tp(__n + __alpha1) * __L_nm2) / __x;
+ return {__n, __alpha1, __x, __L_n, __L_nm1, __L_nm2};
}
/**
@@ -220,9 +222,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _Tp>
std::vector<__gnu_cxx::__quadrature_point_t<_Tp>>
- __laguerre_zeros(unsigned int __n, _Tp __alpha)
+ __laguerre_zeros(unsigned int __n, _Tp __alpha1)
{
- const auto _S_eps = __gnu_cxx::__epsilon(__alpha);
+ const auto _S_eps = __gnu_cxx::__epsilon(__alpha1);
const unsigned int _S_maxit = 1000;
std::vector<__gnu_cxx::__quadrature_point_t<_Tp>> __pt(__n);
@@ -233,16 +235,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
auto __w = _Tp{0};
// Clever approximations for roots.
if (__i == 1)
- __z += (1.0 + __alpha)
- * (3.0 + 0.92 * __alpha) / (1.0 + 2.4 * __n + 1.8 * __alpha);
+ __z += (1.0 + __alpha1)
+ * (3.0 + 0.92 * __alpha1) / (1.0 + 2.4 * __n + 1.8 * __alpha1);
else if (__i == 2)
- __z += (15.0 + 6.25 * __alpha) / (1.0 + 2.5 * __n + 0.9 * __alpha);
+ __z += (15.0 + 6.25 * __alpha1) / (1.0 + 2.5 * __n + 0.9 * __alpha1);
else
{
auto __ai = __i - 2;
__z += ((1.0 + 2.55 * __ai) / (1.9 * __ai)
- + 1.26 * __ai * __alpha / (1.0 + 3.5 * __ai))
- * (__z - __pt[__i - 3].__zero) / (1.0 + 0.3 * __alpha);
+ + 1.26 * __ai * __alpha1 / (1.0 + 3.5 * __ai))
+ * (__z - __pt[__i - 3].__zero) / (1.0 + 0.3 * __alpha1);
}
// Iterate TTRR for polynomial values
for (auto __its = 1u; __its <= _S_maxit; ++__its)
@@ -253,17 +255,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
auto __L3 = __L2;
__L2 = __L1;
- __L1 = ((_Tp(2 * __j - 1 + __alpha) - __z) * __L2
- - (_Tp(__j - 1 + __alpha)) * __L3) / _Tp(__j);
+ __L1 = ((_Tp(2 * __j - 1 + __alpha1) - __z) * __L2
+ - (_Tp(__j - 1 + __alpha1)) * __L3) / _Tp(__j);
}
// Derivative.
- auto __Lp = (_Tp(__n) * __L1 - _Tp(__n + __alpha) * __L2) / __z;
+ auto __Lp = (_Tp(__n) * __L1 - _Tp(__n + __alpha1) * __L2) / __z;
// Newton's rule for root.
auto __z1 = __z;
__z = __z1 - __L1 / __Lp;
if (std::abs(__z - __z1) <= _S_eps)
{
- auto __exparg = std::lgamma(_Tp(__alpha + __n))
+ auto __exparg = std::lgamma(_Tp(__alpha1 + __n))
- std::lgamma(_Tp(__n));
__w = -std::exp(__exparg) / (__Lp * __n * __L2);
break;
@@ -281,11 +283,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief This routine returns the associated Laguerre polynomial
- * of order n, degree @f$ \alpha @f$: @f$ L_n^alpha(x) @f$.
+ * of order n, degree @f$ \alpha @f$: @f$ L_n^{(\alpha)}(x) @f$.
*
* The associated Laguerre function is defined by
* @f[
- * L_n^\alpha(x) = \frac{(\alpha + 1)_n}{n!}
+ * L_n^{(\alpha)}(x) = \frac{(\alpha + 1)_n}{n!}
* {}_1F_1(-n; \alpha + 1; x)
* @f]
* where @f$ (\alpha)_n @f$ is the Pochhammer symbol and
@@ -294,7 +296,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* The associated Laguerre polynomial is defined for integral
* @f$ \alpha = m @f$ by:
* @f[
- * L_n^m(x) = (-1)^m \frac{d^m}{dx^m} L_{n + m}(x)
+ * L_n^{(m)}(x) = (-1)^m \frac{d^m}{dx^m} L_{n + m}(x)
* @f]
* where the Laguerre polynomial is defined by:
* @f[
@@ -311,7 +313,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
template<typename _Tpa, typename _Tp>
_Tp
- __poly_laguerre(unsigned int __n, _Tpa __alpha1, _Tp __x)
+ __laguerre(unsigned int __n, _Tpa __alpha1, _Tp __x)
{
const unsigned int __max_iter = 10000000;
if (__isnan(__x))
@@ -322,30 +324,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return _Tp{1} + _Tp(__alpha1) - __x;
else if (__x == _Tp{0})
{
- _Tp __prod = _Tp(__alpha1) + _Tp{1};
+ auto __prod = _Tp(__alpha1) + _Tp{1};
for (unsigned int __k = 2; __k <= __n; ++__k)
__prod *= (_Tp(__alpha1) + _Tp(__k)) / _Tp(__k);
return __prod;
}
else if (__n > __max_iter && _Tp(__alpha1) > -_Tp{1}
&& __x < _Tp{2} * (_Tp(__alpha1) + _Tp{1}) + _Tp(4 * __n))
- return __poly_laguerre_large_n(__n, __alpha1, __x);
+ return __laguerre_large_n(__n, __alpha1, __x);
else if (_Tp(__alpha1) >= _Tp{0}
|| (__x > _Tp{0} && _Tp(__alpha1) < -_Tp(__n + 1)))
- return __poly_laguerre_recursion(__n, __alpha1, __x);
+ return __laguerre_recur(__n, __alpha1, __x).__L_n;
else
- return __poly_laguerre_hyperg(__n, __alpha1, __x);
+ return __laguerre_hyperg(__n, __alpha1, __x);
}
/**
* @brief This routine returns the associated Laguerre polynomial
- * of order n, degree m: @f$ L_n^m(x) @f$.
+ * of order n, degree m: @f$ L_n^{(m)}(x) @f$.
*
* The associated Laguerre polynomial is defined for integral
* @f$ \alpha = m @f$ by:
* @f[
- * L_n^m(x) = (-1)^m \frac{d^m}{dx^m} L_{n + m}(x)
+ * L_n^{(m)}(x) = (-1)^m \frac{d^m}{dx^m} L_{n + m}(x)
* @f]
* where the Laguerre polynomial is defined by:
* @f[
@@ -362,7 +364,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp>
_Tp
__assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x)
- { return __poly_laguerre<unsigned int, _Tp>(__n, __m, __x); }
+ { return __laguerre<unsigned int, _Tp>(__n, __m, __x); }
/**
@@ -382,7 +384,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp>
_Tp
__laguerre(unsigned int __n, _Tp __x)
- { return __poly_laguerre<unsigned int, _Tp>(__n, 0, __x); }
+ { return __laguerre<unsigned int, _Tp>(__n, 0, __x); }
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
diff --git a/libstdc++-v3/include/bits/sf_legendre.tcc b/libstdc++-v3/include/bits/sf_legendre.tcc
index be32313f64e..3837f4086fc 100644
--- a/libstdc++-v3/include/bits/sf_legendre.tcc
+++ b/libstdc++-v3/include/bits/sf_legendre.tcc
@@ -78,37 +78,48 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @param __x The argument of the Legendre polynomial.
*/
template<typename _Tp>
- _Tp
- __poly_legendre_p(unsigned int __l, _Tp __x)
+ __gnu_cxx::__legendre_p_t<_Tp>
+ __legendre_p(unsigned int __l, _Tp __x)
{
+ using __ret_t = __gnu_cxx::__legendre_p_t<_Tp>;
+
+ const auto __lge1 = __l >= 1 ? _Tp{+1} : _Tp{0};
+ const auto __lge2 = __l >= 2 ? _Tp{+1} : _Tp{0};
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(__x);
+
if (__isnan(__x))
- return __gnu_cxx::__quiet_NaN(__x);
+ return {__l, _S_NaN, _S_NaN, _S_NaN, _S_NaN};
else if (__x == _Tp{+1})
- return _Tp{+1};
+ return {__l, __x, _Tp{+1}, __lge1, __lge2};
else if (__x == _Tp{-1})
- return (__l % 2 == 1 ? _Tp{-1} : _Tp{+1});
+ return __l % 2 == 1
+ ? __ret_t{__l, __x, _Tp{-1}, +__lge1, -__lge2}
+ : __ret_t{__l, __x, _Tp{+1}, -__lge1, +__lge2};
else
{
auto _P_lm2 = _Tp{1};
if (__l == 0)
- return _P_lm2;
+ return {__l, __x, _P_lm2, _Tp{0}, _Tp{0}};
auto _P_lm1 = __x;
if (__l == 1)
- return _P_lm1;
+ return {__l, __x, _P_lm1, _P_lm2, _Tp{0}};
- auto _P_l = _Tp{0};
- for (unsigned int __ll = 2; __ll <= __l; ++__ll)
+ auto _P_l = _Tp{2} * __x * _P_lm1 - _P_lm2
+ - (__x * _P_lm1 - _P_lm2) / _Tp{2};
+ for (unsigned int __ll = 3; __ll <= __l; ++__ll)
{
+ _P_lm2 = _P_lm1;
+ _P_lm1 = _P_l;
// This arrangement is supposed to be better for roundoff
// protection, Arfken, 2nd Ed, Eq 12.17a.
_P_l = _Tp{2} * __x * _P_lm1 - _P_lm2
- (__x * _P_lm1 - _P_lm2) / _Tp(__ll);
- _P_lm2 = _P_lm1;
- _P_lm1 = _P_l;
}
+ // Recursion for the derivative of The Legendre polynomial.
+ //auto __Pp_l = __l * (__z * _P_l - _P_lm1) / (__z * __z - _Tp{1});
- return _P_l;
+ return {__l, __x, _P_l, _P_lm1, _P_lm2};
}
}
@@ -147,15 +158,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
auto _Q_lm1 = __x * _Q_lm2 - _Tp{1};
if (__l == 1)
return _Q_lm1;
- auto _Q_l = _Tp{0};
- for (unsigned int __ll = 2; __ll <= __l; ++__ll)
+ auto _Q_l = _Tp{2} * __x * _Q_lm1 - _Q_lm2
+ - (__x * _Q_lm1 - _Q_lm2) / _Tp{2};
+ for (unsigned int __ll = 3; __ll <= __l; ++__ll)
{
+ _Q_lm2 = _Q_lm1;
+ _Q_lm1 = _Q_l;
// This arrangement is supposed to be better for roundoff
// protection, Arfken, 2nd Ed, Eq 12.17a.
_Q_l = _Tp{2} * __x * _Q_lm1 - _Q_lm2
- (__x * _Q_lm1 - _Q_lm2) / _Tp(__ll);
- _Q_lm2 = _Q_lm1;
- _Q_lm1 = _Q_l;
}
return _Q_l;
@@ -163,20 +175,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * @brief Return the associated Legendre function by recursion
- * on @f$ l @f$ and downward recursion on m.
+ * @brief Return the associated Legendre function by recursion
+ * on @f$ l @f$ and downward recursion on m.
*
- * The associated Legendre function is derived from the Legendre function
- * @f$ P_l(x) @f$ by the Rodrigues formula:
- * @f[
- * P_l^m(x) = (1 - x^2)^{m/2}\frac{d^m}{dx^m}P_l(x)
- * @f]
+ * The associated Legendre function is derived from the Legendre function
+ * @f$ P_l(x) @f$ by the Rodrigues formula:
+ * @f[
+ * P_l^m(x) = (1 - x^2)^{m/2}\frac{d^m}{dx^m}P_l(x)
+ * @f]
*
- * @param __l The order of the associated Legendre function.
- * @f$ l >= 0 @f$.
- * @param __m The order of the associated Legendre function.
- * @f$ m <= l @f$.
- * @param __x The argument of the associated Legendre function.
+ * @param __l The order of the associated Legendre function.
+ * @f$ l >= 0 @f$.
+ * @param __m The order of the associated Legendre function.
+ * @f$ m <= l @f$.
+ * @param __x The argument of the associated Legendre function.
*/
template<typename _Tp>
_Tp
@@ -188,7 +200,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
else if (__isnan(__x))
return __gnu_cxx::__quiet_NaN(__x);
else if (__m == 0)
- return __poly_legendre_p(__l, __x);
+ return __legendre_p(__l, __x).__P_l;
else
{
_Tp _P_mm = _Tp{1};
@@ -213,13 +225,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tp _P_lm2m = _P_mm;
_Tp _P_lm1m = _P_mp1m;
- _Tp _P_lm = _Tp{0};
- for (unsigned int __j = __m + 2; __j <= __l; ++__j)
+ _Tp _P_lm = (_Tp(2 * __m + 3) * __x * _P_lm1m
+ - _Tp(2 * __m + 1) * _P_lm2m) / _Tp{2};
+ for (unsigned int __j = __m + 3; __j <= __l; ++__j)
{
- _P_lm = (_Tp(2 * __j - 1) * __x * _P_lm1m
- - _Tp(__j + __m - 1) * _P_lm2m) / _Tp(__j - __m);
_P_lm2m = _P_lm1m;
_P_lm1m = _P_lm;
+ _P_lm = (_Tp(2 * __j - 1) * __x * _P_lm1m
+ - _Tp(__j + __m - 1) * _P_lm2m) / _Tp(__j - __m);
}
return _P_lm;
@@ -228,30 +241,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
- * @brief Return the spherical associated Legendre function.
+ * @brief Return the spherical associated Legendre function.
*
- * The spherical associated Legendre function of @f$ l @f$, @f$ m @f$,
- * and @f$ \theta @f$ is defined as @f$ Y_l^m(\theta,0) @f$ where
- * @f[
- * Y_l^m(\theta,\phi) = (-1)^m[\frac{(2l+1)}{4\pi}
- * \frac{(l-m)!}{(l+m)!}]
- * P_l^m(\cos\theta) \exp^{im\phi}
- * @f]
- * is the spherical harmonic function and @f$ P_l^m(x) @f$ is the
- * associated Legendre function.
+ * The spherical associated Legendre function of @f$ l @f$, @f$ m @f$,
+ * and @f$ \theta @f$ is defined as @f$ Y_l^m(\theta,0) @f$ where
+ * @f[
+ * Y_l^m(\theta,\phi) = (-1)^m[\frac{(2l+1)}{4\pi}
+ * \frac{(l-m)!}{(l+m)!}]
+ * P_l^m(\cos\theta) \exp^{im\phi}
+ * @f]
+ * is the spherical harmonic function and @f$ P_l^m(x) @f$ is the
+ * associated Legendre function.
*
- * This function differs from the associated Legendre function by
- * argument (@f$x = \cos(\theta)@f$) and by a normalization factor
- * but this factor is rather large for large @f$ l @f$ and @f$ m @f$
- * and so this function is stable for larger differences of @f$ l @f$
- * and @f$ m @f$.
+ * This function differs from the associated Legendre function by
+ * argument (@f$x = \cos(\theta)@f$) and by a normalization factor
+ * but this factor is rather large for large @f$ l @f$ and @f$ m @f$
+ * and so this function is stable for larger differences of @f$ l @f$
+ * and @f$ m @f$.
*
- * @param __l The order of the spherical associated Legendre function.
- * @f$ l >= 0 @f$.
- * @param __m The order of the spherical associated Legendre function.
- * @f$ m <= l @f$.
- * @param __theta The radian polar angle argument
- * of the spherical associated Legendre function.
+ * @param __l The order of the spherical associated Legendre function.
+ * @f$ l >= 0 @f$.
+ * @param __m The order of the spherical associated Legendre function.
+ * @f$ m <= l @f$.
+ * @param __theta The radian polar angle argument
+ * of the spherical associated Legendre function.
*/
template<typename _Tp>
_Tp
@@ -266,7 +279,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
std::__throw_domain_error(__N("__sph_legendre: bad argument"));
else if (__m == 0)
{
- _Tp _P_l = __poly_legendre_p(__l, __x);
+ _Tp _P_l = __legendre_p(__l, __x).__P_l;
_Tp __fact = std::sqrt(_Tp(2 * __l + 1)
/ (_Tp{4} * __gnu_cxx::__const_pi(__theta)));
_P_l *= __fact;
@@ -331,24 +344,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
- * @brief Return the spherical harmonic function.
+ * @brief Return the spherical harmonic function.
*
- * The spherical harmonic function of @f$ l @f$, @f$ m @f$,
- * and @f$ \theta @f$, @f$ \phi @f$ is defined by:
- * @f[
- * Y_l^m(\theta,\phi) = (-1)^m[\frac{(2l+1)}{4\pi}
- * \frac{(l-m)!}{(l+m)!}]
- * P_l^{|m|}(\cos\theta) \exp^{im\phi}
- * @f]
+ * The spherical harmonic function of @f$ l @f$, @f$ m @f$,
+ * and @f$ \theta @f$, @f$ \phi @f$ is defined by:
+ * @f[
+ * Y_l^m(\theta,\phi) = (-1)^m[\frac{(2l+1)}{4\pi}
+ * \frac{(l-m)!}{(l+m)!}]
+ * P_l^{|m|}(\cos\theta) \exp^{im\phi}
+ * @f]
*
- * @param __l The order of the spherical harmonic function.
- * @f$ l >= 0 @f$.
- * @param __m The order of the spherical harmonic function.
- * @f$ m <= l @f$.
- * @param __theta The radian polar angle argument
- * of the spherical harmonic function.
- * @param __phi The radian azimuthal angle argument
- * of the spherical harmonic function.
+ * @param __l The order of the spherical harmonic function.
+ * @f$ l >= 0 @f$.
+ * @param __m The order of the spherical harmonic function.
+ * @f$ m <= l @f$.
+ * @param __theta The radian polar angle argument
+ * of the spherical harmonic function.
+ * @param __phi The radian azimuthal angle argument
+ * of the spherical harmonic function.
*/
template<typename _Tp>
std::complex<_Tp>
diff --git a/libstdc++-v3/include/bits/sf_mod_bessel.tcc b/libstdc++-v3/include/bits/sf_mod_bessel.tcc
index e4371d4a5ce..e0004df009a 100644
--- a/libstdc++-v3/include/bits/sf_mod_bessel.tcc
+++ b/libstdc++-v3/include/bits/sf_mod_bessel.tcc
@@ -90,12 +90,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
auto _Rsum = __bk_xk;
auto __ak_xk = _Tp{1};
auto _Psum = __ak_xk;
+ auto __convP = false;
++__k;
auto __2km1 = 1;
__bk_xk *= (__4nu2 + __2km1 * (__2km1 + 2)) / __8x;
auto _Ssum = __bk_xk;
__ak_xk *= (__2nu - __2km1) * (__2nu + __2km1) / __8x;
auto _Qsum = __ak_xk;
+ auto __convQ = false;
+ auto __ak_xk_prev = std::abs(__ak_xk);
do
{
++__k;
@@ -104,15 +107,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Rsum += __bk_xk;
__ak_xk *= (__2nu - __2km1) * (__2nu + __2km1) / (__k * __8x);
_Psum += __ak_xk;
- const auto __convP = std::abs(__ak_xk) < _S_eps * std::abs(_Psum);
+ if (std::abs(__ak_xk) > __ak_xk_prev)
+ break;
+ __ak_xk_prev = std::abs(__ak_xk);
+ __convP = std::abs(__ak_xk) < _S_eps * std::abs(_Psum);
++__k;
__2km1 += 2;
__bk_xk = (__4nu2 + __2km1 * (__2km1 + 2)) * __ak_xk / (__k * __8x);
_Ssum += __bk_xk;
__ak_xk *= (__2nu - __2km1) * (__2nu + __2km1) / (__k * __8x);
+ if (std::abs(__ak_xk) > __ak_xk_prev)
+ break;
+ __ak_xk_prev = std::abs(__ak_xk);
_Qsum += __ak_xk;
- const auto __convQ = std::abs(__ak_xk) < _S_eps * std::abs(_Qsum);
+ __convQ = std::abs(__ak_xk) < _S_eps * std::abs(_Qsum);
if (__convP && __convQ && __k > (__nu / _Tp{2}))
break;
@@ -147,6 +156,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using __bess_t = __gnu_cxx::__cyl_mod_bessel_t<_Tp, _Tp, _Tp>;
const auto _S_inf = __gnu_cxx::__infinity(__x);
const auto _S_eps = __gnu_cxx::__epsilon(__x);
+ const auto _S_tiny = __gnu_cxx::__min(__x);
const auto _S_pi = __gnu_cxx::__const_pi(__x);
const auto _S_fp_min = _Tp{10} * _S_eps;
constexpr int _S_max_iter = 15000;
diff --git a/libstdc++-v3/include/bits/sf_polylog.tcc b/libstdc++-v3/include/bits/sf_polylog.tcc
index 0760d00549a..7d6ed849e0c 100644
--- a/libstdc++-v3/include/bits/sf_polylog.tcc
+++ b/libstdc++-v3/include/bits/sf_polylog.tcc
@@ -1423,7 +1423,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* @param __s The order s > -1.
* @param __x The real argument.
- * @return The real Fermi-Dirac cosine sum F_s(x),
+ * @return The real Fermi-Dirac integral F_s(x),
*/
template<typename _Sp, typename _Tp>
_Tp
@@ -1455,7 +1455,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* @param __s The order s >= 0.
* @param __x The real argument.
- * @return The real Fermi-Dirac cosine sum G_s(x),
+ * @return The real Bose-Einstein integral G_s(x),
*/
template<typename _Sp, typename _Tp>
_Tp
diff --git a/libstdc++-v3/include/bits/sf_stirling.tcc b/libstdc++-v3/include/bits/sf_stirling.tcc
new file mode 100644
index 00000000000..af53f83c3ca
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_stirling.tcc
@@ -0,0 +1,345 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2017 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.
+//
+// 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/>.
+
+/** @file bits/sf_stirling.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// C++ Mathematical Special Functions
+//
+
+#ifndef _GLIBCXX_BITS_SF_STIRLING_TCC
+#define _GLIBCXX_BITS_SF_STIRLING_TCC 1
+
+#pragma GCC system_header
+
+#include <vector>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * Return the Stirling number of the second kind from lookup
+ * or by series expansion.
+ *
+ * The series is:
+ * @f[
+ * \newcommand{\stirling}[2]{\genfrac{\{}{\}}{0pt}{0}{#1}{#2}}
+ *
+ * \sigma_n^{(m)} = \stirling{n}{m}
+ * = \sum_{k=0}^{m}\frac{(-1)^{m-k}k^n}{(m-k)!k!}
+ * @f]
+ * The Stirling number of the second kind is denoted by other symbols
+ * in the literature:
+ * @f$ \sigma_n^{(m)} @f$, @f$ \textit{S}_n^{(m)} @f$ and others.
+ *
+ * @todo Find a way to predict the maximum Stirling number for a type.
+ */
+ template<typename _Tp>
+ _Tp
+ __stirling_2_series(unsigned int __n, unsigned int __m)
+ {
+ if (__m > _S_num_factorials<_Tp>)
+ {
+ auto _S2 = _Tp{0};
+ for (auto __k = 0u; __k <= __m; ++__k)
+ {
+ auto __lf1 = __log_factorial<_Tp>(__k);
+ auto __lf2 = __log_factorial<_Tp>(__m - __k);
+ _S2 += ((__m - __k) & 1 ? _Tp{-1} : _Tp{1})
+ * std::exp(__n * std::log(__k) - __lf1 - __lf2);
+ }
+ return _S2;
+ }
+ else
+ {
+ auto _S2 = _Tp{0};
+ for (auto __k = 0u; __k <= __m; ++__k)
+ {
+ _S2 += ((__m - __k) & 1 ? _Tp{-1} : _Tp{1})
+ * std::pow(__k, __n)
+ / __factorial<_Tp>(__k)
+ / __factorial<_Tp>(__m - __k);
+ }
+ // @todo Only round if the sum is less than
+ // the maximum representable integer.
+ // Find or make a tool for this.
+ return std::nearbyint(_S2);
+ }
+ }
+
+ /**
+ * Return the Stirling number of the second kind by recursion.
+ * The recursion is
+ * @f[
+ * \newcommand{\stirling}[2]{\genfrac{\{}{\}}{0pt}{0}{#1}{#2}}
+ * \stirling{n}{m} = m \stirling{n-1}{m} + \stirling{n-1}{m-1}
+ * @f]
+ * with starting values
+ * @f[
+ * \newcommand{\stirling}[2]{\genfrac{\{}{\}}{0pt}{0}{#1}{#2}}
+ * \stirling{0}{0\rightarrow m} = {1, 0, 0, ..., 0}
+ * @f]
+ * and
+ * @f[
+ * \newcommand{\stirling}[2]{\genfrac{\{}{\}}{0pt}{0}{#1}{#2}}
+ * \stirling{0\rightarrow n}{0} = {1, 0, 0, ..., 0}
+ * @f]
+ *
+ * The Stirling number of the second kind is denoted by other symbols
+ * in the literature:
+ * @f$ \sigma_n^{(m)} @f$, @f$ \textit{S}_n^{(m)} @f$ and others.
+ */
+ template<typename _Tp>
+ _Tp
+ __stirling_2_recur(unsigned int __n, unsigned int __m)
+ {
+ if (__n == 0)
+ return _Tp(__m == 0);
+ else if (__m == 0)
+ return _Tp(__n == 0);
+ else
+ {
+ std::vector<_Tp> __sigold(__m + 1), __signew(__m + 1);
+ __sigold[1] = _Tp{1};
+ if (__n == 1)
+ return __sigold[__m];
+ for (auto __in = 1u; __in <= __n; ++__in)
+ {
+ __signew[1] = __sigold[1];
+ for (auto __im = 2u; __im <= __m; ++__im)
+ __signew[__im] = __im * __sigold[__im] + __sigold[__im - 1];
+ std::swap(__sigold, __signew);
+ }
+ return __signew[__m];
+ }
+ }
+
+ /**
+ * Return the Stirling number of the second kind from lookup
+ * or by series expansion.
+ *
+ * The series is:
+ * @f[
+ * \sigma_n^{(m)} = \sum_{k=0}^{m}\frac{(-1)^{m-k}k^n}{(m-k)!k!}
+ * @f]
+ *
+ * @todo Find asymptotic solutions for Stirling numbers of the second kind.
+ * @todo Develop an iterator model for Stirling numbers of the second kind.
+ */
+ template<typename _Tp>
+ _Tp
+ __stirling_2(unsigned int __n, unsigned int __m)
+ {
+ if (__m > __n)
+ return _Tp{0};
+ else if (__m == __n)
+ return _Tp{1};
+ else if (__m == 0 && __n >= 10)
+ return _Tp{0};
+ else
+ return __stirling_2_recur<_Tp>(__n, __m);
+ }
+
+ /**
+ * Return the Stirling number of the second kind.
+ *
+ * @todo Look into asymptotic solutions.
+ */
+ template<typename _Tp>
+ _Tp
+ __log_stirling_2(unsigned int __n, unsigned int __m)
+ {
+ if (__m > __n)
+ return -std::numeric_limits<_Tp>::infinity();
+ else if (__m == __n)
+ return _Tp{0};
+ else if (__m == 0 && __n >= 1)
+ return -std::numeric_limits<_Tp>::infinity();
+ else
+ return std::log(__stirling_2<_Tp>(__n, __m));
+ }
+
+ /**
+ * Return the Stirling number of the first kind by series expansion.
+ * N.B. This seems to be a total disaster.
+ */
+ template<typename _Tp>
+ _Tp
+ __stirling_1_series(unsigned int __n, unsigned int __m)
+ {
+ using __gnu_cxx::__parity;
+ if (2 * __n - __m > _S_num_factorials<_Tp> / 2)
+ {
+ auto _S1 = _Tp{0};
+ for (auto __k = 0u; __k <= __n - __m; ++__k)
+ {
+ const auto __nmpk = __n - __m + __k;
+ const auto __nmmk = __n - __m - __k;
+ const auto __lbc1 = __log_binomial<_Tp>(__n - 1 + __k, __nmpk);
+ const auto __slbc1 = __log_binomial_sign<_Tp>(__n - 1 + __k, __nmpk);
+ const auto __lbc2 = __log_binomial<_Tp>(2 * __n - __m, __nmmk);
+ const auto __slbc2 = __log_binomial_sign<_Tp>(2 * __n - __m, __nmmk);
+ _S1 += __parity<_Tp>(__k) * __slbc1 * __slbc2
+ * std::exp(__lbc1 + __lbc2 + __log_stirling_2<_Tp>(__nmpk, __k));
+ }
+ return _S1;
+ }
+ else
+ {
+ auto _S1 = _Tp{0};
+ for (auto __k = 0u; __k <= __n - __m; ++__k)
+ {
+ const auto __nmpk = __n - __m + __k;
+ const auto __nmmk = __n - __m - __k;
+ _S1 += __parity<_Tp>(__k)
+ * __binomial<_Tp>(__n - 1 + __k, __nmpk)
+ * __binomial<_Tp>(2 * __n - __m, __nmmk)
+ * __stirling_2<_Tp>(__nmpk, __k);
+ }
+ // @todo Only round if the sum is less than
+ // the maximum representable integer.
+ // Find or make a tool for this.
+ return std::nearbyint(_S1);
+ }
+ }
+
+ /**
+ * Return the Stirling number of the first kind by recursion.
+ * The recursion is
+ * @f[
+ * S_{n+1}^{(m)} = S_n^{(m-1)} - n S_n^{(m)} \mbox{ or }
+ * @f]
+ * with starting values
+ * @f[
+ * S_0^{(0\rightarrow m)} = {1, 0, 0, ..., 0}
+ * @f]
+ * and
+ * @f[
+ * S_{0\rightarrow n}^{(0)} = {1, 0, 0, ..., 0}
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __stirling_1_recur(unsigned int __n, unsigned int __m)
+ {
+ if (__n == 0)
+ return _Tp(__m == 0);
+ else if (__m == 0)
+ return _Tp(__n == 0);
+ else
+ {
+ std::vector<_Tp> _Sold(__m + 1), _Snew(__m + 1);
+ _Sold[1] = _Tp{1};
+ if (__n == 1)
+ return _Sold[__m];
+ for (auto __in = 1u; __in <= __n; ++__in)
+ {
+ for (auto __im = 1u; __im <= __m; ++__im)
+ _Snew[__im] = _Sold[__im - 1] - __in * _Sold[__im];
+ std::swap(_Sold, _Snew);
+ }
+ return _Snew[__m];
+ }
+ }
+
+ /**
+ * Return the Stirling number of the first kind.
+ *
+ * The Stirling numbers of the first kind are the coefficients of
+ * the Pocchammer polynomials:
+ * @f[
+ * (x)_n = \sum_{k=0}^{n} S_n^{(k)} x^k
+ * @f]
+ *
+ * The recursion is
+ * @f[
+ * S_{n+1}^{(m)} = S_n^{(m-1)} - n S_n^{(m)} \mbox{ or }
+ * @f]
+ * with starting values
+ * @f[
+ * S_0^{(0\rightarrow m)} = {1, 0, 0, ..., 0}
+ * @f]
+ * and
+ * @f[
+ * S_{0\rightarrow n}^{(0)} = {1, 0, 0, ..., 0}
+ * @f]
+ *
+ * @todo Find asymptotic solutions for the Stirling numbers of the first kind.
+ * @todo Develop an iterator model for Stirling numbers of the first kind.
+ */
+ template<typename _Tp>
+ _Tp
+ __stirling_1(unsigned int __n, unsigned int __m)
+ {
+ if (__m > __n)
+ return _Tp{0};
+ else if (__m == __n)
+ return _Tp{1};
+ else if (__m == 0 && __n >= 1)
+ return _Tp{0};
+ else
+ return __stirling_1_recur<_Tp>(__n, __m);
+ }
+
+ /**
+ * Return the logarithm of the absolute value of Stirling number
+ * of the first kind.
+ */
+ template<typename _Tp>
+ _Tp
+ __log_stirling_1(unsigned int __n, unsigned int __m)
+ {
+ if (__m > __n)
+ return -std::numeric_limits<_Tp>::infinity();
+ else if (__m == __n)
+ return _Tp{0};
+ else if (__m == 0 && __n >= 1)
+ return -std::numeric_limits<_Tp>::infinity();
+ else
+ return std::log(std::abs(__stirling_1<_Tp>(__n, __m)));
+ }
+
+ /**
+ * Return the sign of the exponent of the logarithm of the Stirling number
+ * of the first kind.
+ */
+ template<typename _Tp>
+ inline _Tp
+ __log_stirling_1_sign(unsigned int __n, unsigned int __m)
+ { return (__n + __m) & 1 ? _Tp{-1} : _Tp{+1}; }
+
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_STIRLING_TCC
+
diff --git a/libstdc++-v3/include/bits/sf_theta.tcc b/libstdc++-v3/include/bits/sf_theta.tcc
index 6250369566b..598ed50232f 100644
--- a/libstdc++-v3/include/bits/sf_theta.tcc
+++ b/libstdc++-v3/include/bits/sf_theta.tcc
@@ -44,24 +44,29 @@ namespace __detail
_GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
- * Compute and return the @f$ \theta_1 @f$ function by series expansion.
+ * Compute and return the exponential @f$ \theta_2 @f$ function
+ * by series expansion:
+ * @f[
+ * \theta_2(\nu, x) = \frac{1}{\sqrt{\pi x}}
+ * \sum_{k=-\infty}^{\infty}(-1)^k e^{-(\nu+k)^2/x}
+ * @f]
*/
template<typename _Tp>
_Tp
__theta_2_sum(_Tp __nu, _Tp __x)
{
- using _Val = __num_traits_t<_Tp>;
- const auto _S_eps = __gnu_cxx::__epsilon(__x);
- const auto _S_NaN = __gnu_cxx::__quiet_NaN(__x);
- const auto _S_pi = __gnu_cxx::__const_pi(__x);
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_pi = __gnu_cxx::__const_pi(std::abs(__x));
auto __sum = std::exp(-__nu * __nu / __x);
auto __sign = _Tp{-1};
for (auto __k = 1; __k < 20; ++__k)
{
- auto __nup = __nu + _Tp(__k);
- auto __termp = __sign * std::exp(-__nup * __nup / __x);
- auto __num = __nu - _Tp(__k);
- auto __termm = __sign * std::exp(-__num * __num / __x);
+ const auto __nup = __nu + _Tp(__k);
+ const auto __termp = __sign * std::exp(-__nup * __nup / __x);
+ const auto __num = __nu - _Tp(__k);
+ const auto __termm = __sign * std::exp(-__num * __num / __x);
__sum += __termp + __termm;
__sign = -__sign;
if (std::abs(__termp) < _S_eps * std::abs(__sum)
@@ -72,23 +77,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * Compute and return the @f$ \theta_3 @f$ function by series expansion.
+ * Compute and return the exponential @f$ \theta_3 @f$ function
+ * by series expansion:
+ * @f[
+ * \theta_3(\nu, x) = \frac{1}{\sqrt{\pi x}}
+ * \sum_{k=-\infty}^{\infty} e^{-(\nu+k)^2/x}
+ * @f]
*/
template<typename _Tp>
_Tp
__theta_3_sum(_Tp __nu, _Tp __x)
{
- using _Val = __num_traits_t<_Tp>;
- const auto _S_eps = __gnu_cxx::__epsilon(__x);
- const auto _S_NaN = __gnu_cxx::__quiet_NaN(__x);
- const auto _S_pi = __gnu_cxx::__const_pi(__x);
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_pi = __gnu_cxx::__const_pi(std::abs(__x));
auto __sum = std::exp(-__nu * __nu / __x);
for (auto __k = 1; __k < 20; ++__k)
{
- auto __nup = __nu + _Tp(__k);
- auto __termp = std::exp(-__nup * __nup / __x);
- auto __num = __nu - _Tp(__k);
- auto __termm = std::exp(-__num * __num / __x);
+ const auto __nup = __nu + _Tp(__k);
+ const auto __termp = std::exp(-__nup * __nup / __x);
+ const auto __num = __nu - _Tp(__k);
+ const auto __termm = std::exp(-__num * __num / __x);
__sum += __termp + __termm;
if (std::abs(__termp) < _S_eps * std::abs(__sum)
&& std::abs(__termm) < _S_eps * std::abs(__sum))
@@ -98,23 +108,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * Compute and return the @f$ \theta_2 @f$ function by series expansion.
+ * Compute and return the exponential @f$ \theta_2 @f$ function
+ * by asymptotic series expansion:
+ * @f[
+ * \theta_2(\nu, x) = 2\sum_{k=0}^{\infty} e^{-((k+1/2)\pi)^2 x}
+ * \cos((2k+1)\nu\pi)
+ * @f]
*/
template<typename _Tp>
_Tp
__theta_2_asymp(_Tp __nu, _Tp __x)
{
- using _Val = __num_traits_t<_Tp>;
- const auto _S_eps = __gnu_cxx::__epsilon(__x);
- const auto _S_NaN = __gnu_cxx::__quiet_NaN(__x);
- const auto _S_pi = __gnu_cxx::__const_pi(__x);
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_pi = __gnu_cxx::__const_pi(std::abs(__x));
auto __sum = _Tp{0};
for (auto __k = 0; __k < 20; ++__k)
{
- auto __thing = _Tp(2 * __k + 1) * _S_pi;
- auto __cosarg = __nu * __thing;
- auto __exparg = __thing * __thing * __x / _Tp{4};
- auto __term = std::exp(-__exparg) * std::cos(__cosarg);
+ const auto __thing = _Tp(2 * __k + 1) * _S_pi;
+ const auto __cosarg = __nu * __thing;
+ const auto __exparg = __thing * __thing * __x / _Tp{4};
+ const auto __term = std::exp(-__exparg) * std::cos(__cosarg);
__sum += __term;
if (std::abs(__term) < _S_eps * std::abs(__sum))
break;
@@ -123,23 +138,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/**
- * Compute and return the @f$ \theta_3 @f$ function by asymptotic series expansion.
+ * Compute and return the exponential @f$ \theta_3 @f$ function
+ * by asymptotic series expansion:
+ * @f[
+ * \theta_3(\nu, x) = 1 + 2\sum_{k=1}^{\infty} e^{-(k\pi)^2 x}
+ * \cos(2k\nu\pi)
+ * @f]
*/
template<typename _Tp>
_Tp
__theta_3_asymp(_Tp __nu, _Tp __x)
{
- using _Val = __num_traits_t<_Tp>;
- const auto _S_eps = __gnu_cxx::__epsilon(__x);
- const auto _S_NaN = __gnu_cxx::__quiet_NaN(__x);
- const auto _S_pi = __gnu_cxx::__const_pi(__x);
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_pi = __gnu_cxx::__const_pi(std::abs(__x));
auto __sum = _Tp{0};
for (auto __k = 1; __k < 20; ++__k)
{
- auto __thing = _Tp(2 * __k) * _S_pi;
- auto __cosarg = __nu * __thing;
- auto __exparg = __thing * __thing * __x / _Tp{4};
- auto __term = std::exp(-__exparg) * std::cos(__cosarg);
+ const auto __thing = _Tp(2 * __k) * _S_pi;
+ const auto __cosarg = __nu * __thing;
+ const auto __exparg = __thing * __thing * __x / _Tp{4};
+ const auto __term = std::exp(-__exparg) * std::cos(__cosarg);
__sum += __term;
if (std::abs(__term) < _S_eps * std::abs(__sum))
break;
@@ -152,8 +172,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* The exponential theta-2 function is defined by
* @f[
- * \theta_2(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
- * (-1)^j \exp\left( \frac{-(\nu + j)^2}{x} \right)
+ * \theta_2(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{k=-\infty}^{+\infty}
+ * (-1)^k \exp\left( \frac{-(\nu + k)^2}{x} \right)
* @f]
*
* @param __nu The periodic (period = 2) argument
@@ -163,13 +183,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tp
__theta_2(_Tp __nu, _Tp __x)
{
- using _Val = __num_traits_t<_Tp>;
- const auto _S_NaN = __gnu_cxx::__quiet_NaN(__x);
- const auto _S_pi = __gnu_cxx::__const_pi(__x);
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_pi = __gnu_cxx::__const_pi(std::abs(__x));
if (__isnan(__nu) || __isnan(__x))
return _S_NaN;
- else if (std::abs(__x) <= _Tp{1} / _S_pi)
+ else if (std::abs(__x) <= _Real{1} / _S_pi)
return __theta_2_sum(__nu, __x);
else
return __theta_2_asymp(__nu, __x);
@@ -178,10 +198,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the exponential theta-1 function of period @c nu and argument @c x.
*
- * The Neville theta-1 function is defined by
+ * The exponential theta-1 function is defined by
* @f[
- * \theta_1(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
- * (-1)^j \exp\left( \frac{-(\nu + j - 1/2)^2}{x} \right)
+ * \theta_1(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{k=-\infty}^{+\infty}
+ * (-1)^k \exp\left( \frac{-(\nu + k - 1/2)^2}{x} \right)
* @f]
*
* @param __nu The periodic (period = 2) argument
@@ -191,12 +211,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tp
__theta_1(_Tp __nu, _Tp __x)
{
- using _Val = __num_traits_t<_Tp>;
- const auto _S_NaN = __gnu_cxx::__quiet_NaN(__x);
- const auto _S_pi = __gnu_cxx::__const_pi(__x);
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_pi = __gnu_cxx::__const_pi(std::abs(__x));
if (__isnan(__nu) || __isnan(__x))
return _S_NaN;
+ else if (__gnu_cxx::__fp_is_zero(__x))
+ return _Tp{0};
else
return __theta_2(__nu - _Tp{0.5L}, __x);
}
@@ -206,8 +228,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* The exponential theta-3 function is defined by
* @f[
- * \theta_3(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
- * \exp\left( \frac{-(\nu+j)^2}{x} \right)
+ * \theta_3(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{k=-\infty}^{+\infty}
+ * \exp\left( \frac{-(\nu+k)^2}{x} \right)
* @f]
*
* @param __nu The periodic (period = 1) argument
@@ -217,25 +239,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tp
__theta_3(_Tp __nu, _Tp __x)
{
- using _Val = __num_traits_t<_Tp>;
- const auto _S_NaN = __gnu_cxx::__quiet_NaN(__x);
- const auto _S_pi = __gnu_cxx::__const_pi(__x);
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_pi = __gnu_cxx::__const_pi(std::abs(__x));
if (__isnan(__nu) || __isnan(__x))
return _S_NaN;
- else if (std::abs(__x) <= _Tp{1} / _S_pi)
+ else if (std::abs(__x) <= _Real{1} / _S_pi)
return __theta_3_sum(__nu, __x);
else
return __theta_3_asymp(__nu, __x);
}
/**
- * Return the exponential theta-2 function of period @c nu and argument @c x.
+ * Return the exponential theta-4 function of period @c nu and argument @c x.
*
- * The exponential theta-2 function is defined by
+ * The exponential theta-4 function is defined by
* @f[
- * \theta_2(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
- * (-1)^j \exp\left( \frac{-(\nu + j)^2}{x} \right)
+ * \theta_4(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{k=-\infty}^{+\infty}
+ * (-1)^k \exp\left( \frac{-(\nu + k)^2}{x} \right)
* @f]
*
* @param __nu The periodic (period = 2) argument
@@ -245,9 +267,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tp
__theta_4(_Tp __nu, _Tp __x)
{
- using _Val = __num_traits_t<_Tp>;
- const auto _S_NaN = __gnu_cxx::__quiet_NaN(__x);
- const auto _S_pi = __gnu_cxx::__const_pi(__x);
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_pi = __gnu_cxx::__const_pi(std::abs(__x));
if (__isnan(__nu) || __isnan(__x))
return _S_NaN;
@@ -268,7 +290,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tp
__ellnome_series(_Tp __k)
{
- auto __m = __k * __k;
+ const auto __m = __k * __k;
return __m * ((_Tp{1} / _Tp{16})
+ __m * ((_Tp{1} / _Tp{32})
+ __m * ((_Tp{21} / _Tp{1024})
@@ -290,9 +312,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__ellnome_k(_Tp __k)
{
const auto _S_pi = _Tp{3.1415926535897932384626433832795029L};
- auto __kp = std::sqrt(_Tp{1} - __k * __k);
- auto __K = __comp_ellint_1(__k);
- auto __Kp = __comp_ellint_1(__kp);
+ const auto __kp = std::sqrt(_Tp{1} - __k * __k);
+ const auto __K = __comp_ellint_1(__k);
+ const auto __Kp = __comp_ellint_1(__kp);
return std::exp(-_S_pi * __Kp / __K);
}
@@ -329,9 +351,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tp
__theta_s(_Tp __k, _Tp __x)
{
- using _Val = __num_traits_t<_Tp>;
- const auto _S_NaN = __gnu_cxx::__quiet_NaN(__x);
- const auto _S_pi_2 = __gnu_cxx::__const_pi_half(__x);
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_pi_2 = __gnu_cxx::__const_pi_half(std::abs(__x));
if (__isnan(__k) || __isnan(__x))
return _S_NaN;
@@ -340,9 +362,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
" argument k out of range"));
else
{
- auto __kc = std::sqrt(_Tp{1} - __k * __k);
- auto _Kk = __comp_ellint_1(__k);
- auto __q = __ellnome(__k);
+ const auto __kc = std::sqrt(_Tp{1} - __k * __k);
+ const auto _Kk = __comp_ellint_1(__k);
+ const auto __q = __ellnome(__k);
return std::sqrt(_S_pi_2 / (__k * __kc * _Kk))
* __theta_1(__q, _S_pi_2 * __x / _Kk);
}
@@ -359,9 +381,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tp
__theta_c(_Tp __k, _Tp __x)
{
- using _Val = __num_traits_t<_Tp>;
- const auto _S_NaN = __gnu_cxx::__quiet_NaN(__x);
- const auto _S_pi_2 = __gnu_cxx::__const_pi_half(__x);
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_pi_2 = __gnu_cxx::__const_pi_half(std::abs(__x));
if (__isnan(__k) || __isnan(__x))
return _S_NaN;
@@ -370,8 +392,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
" argument k out of range"));
else
{
- auto _Kk = __comp_ellint_1(__k);
- auto __q = __ellnome(__k);
+ const auto _Kk = __comp_ellint_1(__k);
+ const auto __q = __ellnome(__k);
return std::sqrt(_S_pi_2 / (__k * _Kk))
* __theta_2(__q, _S_pi_2 * __x / _Kk);
}
@@ -388,9 +410,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tp
__theta_d(_Tp __k, _Tp __x)
{
- using _Val = __num_traits_t<_Tp>;
- const auto _S_NaN = __gnu_cxx::__quiet_NaN(__x);
- const auto _S_pi_2 = __gnu_cxx::__const_pi_half(__x);
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_pi_2 = __gnu_cxx::__const_pi_half(std::abs(__x));
if (__isnan(__k) || __isnan(__x))
return _S_NaN;
@@ -399,8 +421,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
" argument k out of range"));
else
{
- auto _Kk = __comp_ellint_1(__k);
- auto __q = __ellnome(__k);
+ const auto _Kk = __comp_ellint_1(__k);
+ const auto __q = __ellnome(__k);
return std::sqrt(_S_pi_2 / _Kk)
* __theta_3(__q, _S_pi_2 * __x / _Kk);
}
@@ -419,9 +441,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tp
__theta_n(_Tp __k, _Tp __x)
{
- using _Val = __num_traits_t<_Tp>;
- const auto _S_NaN = __gnu_cxx::__quiet_NaN(__x);
- const auto _S_pi_2 = __gnu_cxx::__const_pi_half(__x);
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_pi_2 = __gnu_cxx::__const_pi_half(std::abs(__x));
if (__isnan(__k) || __isnan(__x))
return _S_NaN;
@@ -430,44 +452,1149 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
" argument k out of range"));
else
{
- auto __kc = std::sqrt(_Tp{1} - __k * __k);
- auto _Kk = __comp_ellint_1(__k);
- auto __q = __ellnome(__k);
+ const auto __kc = std::sqrt(_Tp{1} - __k * __k);
+ const auto _Kk = __comp_ellint_1(__k);
+ const auto __q = __ellnome(__k);
return std::sqrt(_S_pi_2 / (__kc * _Kk))
* __theta_4(__q, _S_pi_2 * __x / _Kk);
}
}
/**
- * Return a tuple of the three primary Jacobi elliptic functions:
+ * A struct representing the Jacobi and Weierstrass lattice.
+ * The two types for the frequencies and the subsequent type calculus
+ * allow us to treat the rectangulr lattice (real nome, pure imaginary
+ * lattice parameter) specially.
+ */
+ template<typename _Tp_Omega1, typename _Tp_Omega3 = std::complex<_Tp_Omega1>>
+ struct __jacobi_lattice_t
+ {
+ static_assert(__gnu_cxx::is_complex_v<_Tp_Omega1>
+ || __gnu_cxx::is_complex_v<_Tp_Omega3>,
+ "One frequecy type must be complex.");
+ using _Real_Omega1 = __num_traits_t<_Tp_Omega1>;
+ using _Real_Omega3 = __num_traits_t<_Tp_Omega3>;
+ using _Real = __gnu_cxx::__promote_fp_t<_Real_Omega1, _Real_Omega3>;
+ using _Cmplx = std::complex<_Real>;
+ using _Tp_Nome = std::conditional_t<__gnu_cxx::is_complex_v<_Tp_Omega1>
+ && __gnu_cxx::is_complex_v<_Tp_Omega3>,
+ _Cmplx, _Real>;
+
+ /**
+ * A struct representing a complex scalar lattice parameter
+ * or half period ratio.
+ */
+ struct __tau_t
+ {
+ _Cmplx __val;
+
+ explicit __tau_t(_Cmplx __tau)
+ : __val(__tau)
+ { }
+ };
+
+ /**
+ * A struct representing a complex argument reduced
+ * to the 'central' lattice cell.
+ */
+ struct __arg_t
+ {
+ int __m;
+ int __n;
+ _Cmplx __z;
+ };
+
+ /// Construct the lattice from two complex lattice frequencies.
+ __jacobi_lattice_t(const _Tp_Omega1& __omega1,
+ const _Tp_Omega3& __omega3)
+ : _M_omega_1(__omega1),
+ _M_omega_3(__omega3)
+ {
+ if (__isnan(_M_omega_1) || __isnan(_M_omega_3))
+ std::__throw_domain_error("Invalid input");
+ else if (std::imag(this->__tau().__val) <= _Real{0})
+ std::__throw_domain_error("__jacobi_lattice_t: "
+ "Lattice parameter must have positive imaginary part.");
+ else
+ {
+ auto __det = std::real(_M_omega_3) * std::imag(_M_omega_1)
+ - std::imag(_M_omega_3) * std::real(_M_omega_1);
+ if (std::abs(__det) == 0)
+ std::__throw_domain_error("__jacobi_lattice_t: "
+ "Lattice frequencies must be linearly independent.");
+ }
+ }
+
+ /// Construct the lattice from a single complex lattice parameter
+ /// or half period ratio.
+ explicit __jacobi_lattice_t(const __tau_t& __tau)
+ : _M_omega_1(2 * _S_pi),
+ _M_omega_3(2 * _S_pi)
+ {
+ if (__isnan(__tau.__val))
+ std::__throw_domain_error("Invalid input");
+ else if (std::imag(__tau.__val) <= _Real{0})
+ std::__throw_domain_error("__jacobi_lattice_t: "
+ "Lattice parameter must have positive imaginary part.");
+ else
+ {
+ if constexpr (__gnu_cxx::is_complex_v<_Tp_Omega3>)
+ _M_omega_3 *= __tau.__val;
+ else
+ _M_omega_1 *= __tau.__val;
+ }
+ }
+
+ /// Construct the lattice from a single scalar elliptic nome.
+ explicit __jacobi_lattice_t(_Tp_Nome __q)
+ : __jacobi_lattice_t(__tau_t(_Cmplx{0, -1} * std::log(__q) / _S_pi))
+ { }
+
+ /// Return the acalar lattice parameter or half period ratio.
+ __tau_t
+ __tau() const
+ { return __tau_t(this->_M_omega_3 / this->_M_omega_1); }
+
+ /// Return the first lattice frequency.
+ _Tp_Omega1
+ __omega_1() const
+ { return this->_M_omega_1; }
+
+ /// Return the second lattice frequency.
+ _Cmplx
+ __omega_2() const
+ { return -(_Cmplx(this->_M_omega_1) + _Cmplx(this->omega_3)); }
+
+ /// Return the third lattice frequency.
+ _Tp_Omega3
+ __omega_3() const
+ { return this->_M_omega_3; }
+
+ _Tp_Nome
+ __ellnome() const;
+
+ __arg_t
+ __reduce(const _Cmplx& __z) const;
+
+ static constexpr auto _S_pi = __gnu_cxx::__const_pi<_Real>();
+ _Tp_Omega1 _M_omega_1;
+ _Tp_Omega3 _M_omega_3;
+ };
+
+ /**
+ * Return the elliptic nome corresponding to the lattice parameter.
+ */
+ template<typename _Tp_Omega1, typename _Tp_Omega3>
+ typename __jacobi_lattice_t<_Tp_Omega1, _Tp_Omega3>::_Tp_Nome
+ __jacobi_lattice_t<_Tp_Omega1, _Tp_Omega3>::__ellnome() const
+ {
+ const auto _S_i = _Cmplx{0, 1};
+ const auto _S_pi = __gnu_cxx::__const_pi<_Real>();
+ if constexpr (__gnu_cxx::is_complex_v<_Tp_Nome>)
+ return std::exp(_S_i * _S_pi * this->__tau().__val);
+ else
+ return std::real(std::exp(_S_i * _S_pi * this->__tau().__val));
+ }
+
+ /**
+ * Reduce the argument to the fundamental lattice parallelogram
+ * @f$ (0, 2\pi, 2\pi (1 + \tau), 2\pi \tau) @f$.
+ * This is sort of like a 2D lattice remquo.
+ *
+ * @param __z The argument to be reduced.
+ * @return A struct containing the argument reduced to the interior
+ * of the fundamental parallelogram and two integers indicating
+ * the number of periods in the 'real' and 'tau' directions.
+ */
+ template<typename _Tp1, typename _Tp3>
+ typename __jacobi_lattice_t<_Tp1, _Tp3>::__arg_t
+ __jacobi_lattice_t<_Tp1, _Tp3>::
+ __reduce(const typename __jacobi_lattice_t<_Tp1, _Tp3>::_Cmplx& __z) const
+ {
+ const auto _S_pi = __gnu_cxx::__const_pi<_Real>();
+
+ const auto __tau = this->__tau().__val;
+ const auto __tau_r = std::real(__tau);
+ const auto __tau_i = std::imag(__tau);
+ const auto __z_r = std::real(__z);
+ const auto __z_i = std::imag(__z);
+
+ // Solve z = (z_r, z_i) = pi a (1, 0) + pi b (tau_r, tau_i).
+ const auto __b = __z_i / __tau_i / _S_pi;
+ const int __n = std::floor(__b);
+ const auto __nu = __b - __n;
+ const auto __a = (__z_r - __b * __tau_r * _S_pi) / _S_pi;
+ const int __m = std::floor(__a);
+ const auto __mu = __a - __m;
+
+ return {__m, __n,
+ _S_pi * _Cmplx(__mu + __nu * __tau_r, __nu * __tau_i)};
+ }
+
+ /**
+ * A struct for the non-zero theta functions and their derivatives
+ * at zero argument.
+ */
+ template<typename _Tp1, typename _Tp3 = std::complex<_Tp1>>
+ struct __jacobi_theta_0_t
+ {
+ __jacobi_theta_0_t(const __jacobi_lattice_t<_Tp1, _Tp3>& __lattice);
+
+ using _Type = typename __jacobi_lattice_t<_Tp1, _Tp3>::_Tp_Nome;
+
+ _Type th1p;
+ _Type th1ppp;
+ _Type th2;
+ _Type th2pp;
+ _Type th3;
+ _Type th3pp;
+ _Type th4;
+ _Type th4pp;
+
+ _Type
+ dedekind_eta() const
+ { return std::cbrt(th2 * th3 * th4 / _Type{2}); }
+ };
+
+ /**
+ * Return a struct of the Jacobi theta functions and up to three non-zero
+ * derivatives evaluated at zero argument.
+ */
+ template<typename _Tp1, typename _Tp3>
+ __jacobi_theta_0_t<_Tp1, _Tp3>::
+ __jacobi_theta_0_t(const __jacobi_lattice_t<_Tp1, _Tp3>& __lattice)
+ {
+ using _Real = __num_traits_t<_Type>;
+ constexpr std::size_t _S_max_iter = 50;
+ const auto __q = __lattice.__ellnome();
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__q));
+
+ const auto __fact = _Real{2} * std::pow(__q, _Real{0.25L});
+ this->th1p = __fact;
+ this->th2 = __fact;
+ this->th3 = _Real{1};
+ this->th4 = _Real{1};
+ this->th1ppp = _Real{0};
+ this->th2pp = _Real{0};
+ this->th3pp = _Real{0};
+ this->th4pp = _Real{0};
+ auto __q2n = _Type{1};
+ for (std::size_t __n = 1; __n < _S_max_iter; ++__n)
+ {
+ __q2n *= __q;
+ const auto __tp = _Real{1} + __q2n;
+ this->th3 *= __tp * __tp;
+ const auto __tm = _Real{1} - __q2n;
+ this->th4 *= __tm * __tm;
+
+ this->th3pp += __q2n / __tp / __tp;
+ this->th4pp += __q2n / __tm / __tm;
+
+ __q2n *= __q;
+ const auto __tm2 = _Real{1} - __q2n;
+ this->th3 *= __tm2;
+ this->th4 *= __tm2;
+ this->th2 *= __tm2;
+ this->th1p *= __tm2 * __tm2 * __tm2;
+ const auto __tp2 = _Real{1} + __q2n;
+ this->th2 *= __tp2 * __tp2;
+
+ this->th1ppp += __q2n / __tm2 / __tm2;
+ this->th2pp += __q2n / __tp2 / __tp2;
+
+ if (std::abs(__q2n) < _S_eps)
+ break;
+ }
+ // Could check th1p =? th2pp * th3pp * th4pp at this point.
+ // Could check th1ppp =? th2pp + th3pp + th4pp at this point.
+ this->th1ppp = (_Real{-1} + _Real{24} * this->th1ppp) * this->th1p;
+ this->th2pp = (_Real{-1} - _Real{8} * this->th2pp) * this->th2;
+ this->th3pp = _Real{-8} * this->th3;
+ this->th4pp = _Real{8} * this->th4;
+ }
+
+ /**
+ * A struct of the Weierstrass elliptic function roots.
+ * @f[
+ * e_1 = \frac{\pi^2}{12\omega_1^2}(\theta_2^4(q,0) + 2\theta_4^4(q,0))
+ * @f]
+ * @f[
+ * e_2 = \frac{\pi^2}{12\omega_1^2}(\theta_2^4(q,0) - \theta_4^4(q,0))
+ * @f]
+ * @f[
+ * e_3 = \frac{\pi^2}{12\omega_1^2}(-2\theta_2^4(q,0) - \theta_4^4(q,0))
+ * @f]
+ * Note that @f$ e_1 + e_2 + e_3 = 0 @f$
+ */
+ template<typename _Tp1, typename _Tp3 = std::complex<_Tp1>>
+ struct __weierstrass_roots_t
+ {
+ using _Type = typename __jacobi_lattice_t<_Tp1, _Tp3>::_Tp_Nome;
+ using _Real = __num_traits_t<_Type>;
+ using _Cmplx = std::complex<_Real>;
+
+ _Type __e1, __e2, __e3;
+
+ __weierstrass_roots_t(const __jacobi_lattice_t<_Tp1, _Tp3>& __lattice);
+ };
+
+ /**
+ * Constructor for the Weierstrass roots.
+ *
+ * @param __lattice The Jacobi latticce.
+ */
+ template<typename _Tp1, typename _Tp3>
+ __weierstrass_roots_t<_Tp1, _Tp3>::
+ __weierstrass_roots_t(const __jacobi_lattice_t<_Tp1, _Tp3>& __lattice)
+ {
+ const auto _S_pi = __gnu_cxx::__const_pi<_Real>();
+
+ const auto __tht0 = __jacobi_theta_0_t(__lattice);
+
+ const auto __th22 = __tht0.th2 * __tht0.th2;
+ const auto __th24 = __th22 * __th22;
+ const auto __th42 = __tht0.th4 * __tht0.th4;
+ const auto __th44 = __th42 * __th42;
+ const auto __fr = _S_pi / __lattice.__omega_1();
+ const auto __fc = __fr * __fr / _Real{12};
+
+ __e1 = __fc * (__th24 + _Real{2} * __th44);
+ __e2 = __fc * (__th24 - __th44);
+ __e3 = __fc * (_Real{-2} * __th24 - __th44);
+ }
+
+ /**
+ * A struct of the Weierstrass elliptic function invariants.
+ * @f[
+ * g_2 = 2(e_1 e_2 + e_2 e_3 + e_3 e_1)
+ * @f]
+ * @f[
+ * g_3 = 4(e_1 e_2 e_3)
+ * @f]
+ */
+ template<typename _Tp1, typename _Tp3>
+ struct __weierstrass_invariants_t
+ {
+ using _Type = typename __jacobi_lattice_t<_Tp1, _Tp3>::_Tp_Nome;
+ using _Real = __num_traits_t<_Type>;
+ using _Cmplx = std::complex<_Real>;
+
+ _Type __g_2, __g_3;
+
+ __weierstrass_invariants_t(const __jacobi_lattice_t<_Tp1, _Tp3>&);
+
+ _Type
+ __klein_j() const
+ {
+ const auto __g_2p3 = __g_2 * __g_2 * __g_2;
+ return _Type{1738} * __g_2p3 / (__g_2p3 - _Type{27} * __g_3 * __g_3);
+ }
+ };
+
+ /**
+ * Constructor for the Weierstrass invariants.
+ * @f[
+ * g_2 = 2(e_1 e_2 + e_2 e_3 + e_3 e_1)
+ * @f]
+ * @f[
+ * g_3 = 4(e_1 e_2 e_3)
+ * @f]
+ */
+ template<typename _Tp1, typename _Tp3>
+ __weierstrass_invariants_t<_Tp1, _Tp3>::
+ __weierstrass_invariants_t(const __jacobi_lattice_t<_Tp1, _Tp3>& __lattice)
+ {
+ const auto __roots = __weierstrass_roots_t<_Tp1, _Tp3>(__lattice);
+ __g_2 = _Real{2} * (__roots.__e1 * __roots.__e1
+ + __roots.__e2 * __roots.__e2
+ + __roots.__e3 * __roots.__e3);
+ __g_3 = _Real{4} * __roots.__e1 * __roots.__e2 * __roots.__e3;
+ }
+
+ /**
+ * Return the Jacobi @f$ \theta_1 @f$ function by summation of the series.
+ *
+ * The Jacobi or elliptic theta-1 function is defined by
+ * @f[
+ * \theta_1(q,x) = 2\sum_{n=1}^{\infty}(-1)^n
+ * q^{(n+\frac{1}{2})^2}\sin{(2n+1)x}
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ _Tp
+ __jacobi_theta_1_sum(_Tp __q, _Tp __x)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ constexpr std::size_t _S_max_iter = 50;
+
+ _Tp __sum{};
+ _Real __sign{-1};
+ for (std::size_t __n = 0; __n < _S_max_iter; ++__n)
+ {
+ __sign *= -1;
+ const auto __term = __sign
+ * std::pow(__q, _Real((__n + 0.5L) * (__n + 0.5L)))
+ * std::sin(_Real(2 * __n + 1) * __x);
+ __sum += __term;
+ if (std::abs(__term) < _S_eps * std::abs(__sum))
+ break;
+ }
+ return _Real{2} * __sum;
+ }
+
+ /**
+ * Return the Jacobi @f$ \theta_1 @f$ function by accumulation of the product.
+ *
+ * The Jacobi or elliptic theta-1 function is defined by
+ * @f[
+ * \theta_1(q,x) = 2 q^{1/4} \sin(x) \prod_{n=1}^{\infty}
+ * (1 - q^{2n})(1 - 2q^{2n}\cos(2x) + q^{4n})
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ _Tp
+ __jacobi_theta_1_prod(_Tp __q, _Tp __x)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ constexpr std::size_t _S_max_iter = 50;
+ const auto __q2 = __q * __q;
+ const auto __q4 = __q2 * __q2;
+ const auto __cos2x = std::cos(_Real{2} * __x);
+
+ auto __q2n = _Tp{1};
+ auto __q4n = _Tp{1};
+ auto __prod = _Tp{1};
+ for (std::size_t __n = 1; __n < _S_max_iter; ++__n)
+ {
+ __q2n *= __q2;
+ __q4n *= __q4;
+ const auto __fact = (_Real{1} - __q2n)
+ * (_Real{1} - _Real{2} * __q2n * __cos2x + __q4n);
+ __prod *= __fact;
+ if (std::abs(__fact) < _S_eps)
+ break;
+ }
+
+ return _Real{2} * std::pow(__q, _Tp{0.25L}) * std::sin(__x) * __prod;
+ }
+
+ /**
+ * Return the Jacobi @f$ \theta_1 @f$ function by summation of the series.
+ *
+ * The Jacobi or elliptic theta function is defined by
+ * @f[
+ * \theta_1(q,x) = 2\sum_{n=1}^{\infty}(-1)^n
+ * q^{(n+\frac{1}{2})^2}\sin{(2n+1)x}
+ * @f]
+ *
+ * Regarding the nome and the theta function as functions of the lattice
+ * parameter @f$ \tau -i log(q)/ \pi @f$ or @f$ q = e^{i\pi\tau} @f$
+ * the lattice parameter is transformed to maximize its imaginary part:
+ * @f[
+ * \theta_1(\tau+1,x) = -i e^{i\pi/4}\theta_1(\tau,x)
+ * @f]
+ * and
+ * @f[
+ * \sqrt{-i\tau}\theta_1(\tau,x) = e^{(i\tau x^2/\pi)}\theta_1(\tau',\tau' x)
+ * @f]
+ * where the new lattice parameter is @f$ \tau' = -1/\tau @f$.
+ *
+ * The argument is reduced with
+ * @f[
+ * \theta_1(q, x+(m+n\tau)\pi) = (-1)^{m+n}q^{-n^2}e^{-2inx}\theta_1(q, x)
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __jacobi_theta_1(std::complex<_Tp> __q, std::complex<_Tp> __x)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ using _Cmplx = std::complex<_Real>;
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ const auto _S_pi = __gnu_cxx::__const_pi(std::abs(__x));
+ const auto _S_i = std::complex<_Real>{0, 1};
+ constexpr auto _S_q_min = _Real{0.001L};
+ constexpr auto _S_q_max = _Real{0.95e-1L};
+
+ if (__isnan(__q) || __isnan(__x))
+ return _Tp{_S_NaN};
+ else if (std::abs(__q) >= _Real{1})
+ std::__throw_domain_error(__N("__jacobi_theta_1:"
+ " nome q out of range"));
+ else if (std::abs(__q) < _S_q_min || std::abs(__q) > _S_q_max)
+ return __jacobi_theta_1_prod(__q, __x);
+ else if (std::abs(__x) < _S_eps)
+ return std::complex<_Tp>{0, 0};
+ else
+ {
+ const auto __lattice = __jacobi_lattice_t<_Cmplx, _Cmplx>(__q);
+ auto __tau = __lattice.__tau().__val;
+
+ const auto __x_red = __lattice.__reduce(__x);
+ auto __fact = std::complex<_Tp>{1, 0};
+ if (__x_red.__m != 0)
+ __fact *= __gnu_cxx::__parity<_Tp>(__x_red.__m);
+ if (__x_red.__n != 0)
+ __fact *= __gnu_cxx::__parity<_Tp>(__x_red.__n)
+ * std::exp(_S_i * _Real{-2 * __x_red.__n} * __x_red.__z)
+ * std::pow(__q, -__x_red.__n * __x_red.__n);
+ __x = __x_red.__z;
+
+ // theta_1(tau+1, z) = exp(i tau/4) theta_1(tau, z)
+ const auto __itau = std::floor(std::real(__tau));
+ __tau -= __itau;
+ __fact *= __polar_pi(_Real{1}, __itau / _Real{4});
+
+ if (std::imag(__tau) < 0.5)
+ {
+ const auto __fact2 = _S_i * std::sqrt(-_S_i * __tau);
+ __tau = _Real{-1} / __tau;
+ const auto __phase = std::exp(_S_i * __tau * __x * __x / _S_pi);
+ __fact *= __phase / __fact2;
+ __q = std::exp(_S_i * _S_pi * __tau);
+ __x *= __tau;
+ }
+
+ return __fact * __jacobi_theta_1_sum(__q, __x);
+ }
+ }
+
+ /**
+ * Return the Jacobi @f$ \theta_1 @f$ function for real nome and argument.
+ *
+ * The Jacobi or elliptic theta function is defined by
+ * @f[
+ * \theta_1(q,x) = 2\sum_{n=1}^{\infty}(-1)^n
+ * q^{(n+\frac{1}{2})^2}\sin{(2n+1)x}
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ _Tp
+ __jacobi_theta_1(_Tp __q, const _Tp __x)
+ {
+ using _Cmplx = std::complex<_Tp>;
+
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ const auto __ret = __jacobi_theta_1(_Cmplx(__q), _Cmplx(__x));
+
+ if (std::abs(__ret) > _S_eps
+ && std::abs(std::imag(__ret)) > _S_eps * std::abs(__ret))
+ std::__throw_runtime_error("__jacobi_theta_1: "
+ "Unexpected large imaginary part");
+ else
+ return std::real(__ret);
+ }
+
+ /**
+ * Return the Jacobi @f$ \theta_2 @f$ function by summation of the series.
+ *
+ * The Jacobi or elliptic theta-2 function is defined by
+ * @f[
+ * \theta_2(q,x) = 2\sum_{n=1}^{\infty}
+ * q^{(n+\frac{1}{2})^2}\cos{(2n+1)x}
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ _Tp
+ __jacobi_theta_2_sum(_Tp __q, _Tp __x)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ constexpr std::size_t _S_max_iter = 50;
+
+ _Tp __sum{};
+ for (std::size_t __n = 0; __n < _S_max_iter; ++__n)
+ {
+ const auto __term = std::pow(__q, _Real((__n + 0.5L) * (__n + 0.5L)))
+ * std::cos(_Real(2 * __n + 1) * __x);
+ __sum += __term;
+ if (std::abs(__term) < _S_eps * std::abs(__sum))
+ break;
+ }
+ return _Real{2} * __sum;
+ }
+
+ /**
+ * Return the Jacobi @f$ \theta_2 @f$ function by accumulation of the product.
+ *
+ * The Jacobi or elliptic theta-2 function is defined by
+ * @f[
+ * \theta_2(q,x) = 2 q^{1/4} \sin(x) \prod_{n=1}^{\infty}
+ * (1 - q^{2n})(1 + 2q^{2n}\cos(2x) + q^{4n})
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ _Tp
+ __jacobi_theta_2_prod(_Tp __q, _Tp __x)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ constexpr std::size_t _S_max_iter = 50;
+ const auto __q2 = __q * __q;
+ const auto __q4 = __q2 * __q2;
+ const auto __cos2x = std::cos(_Real{2} * __x);
+
+ auto __q2n = _Tp{1};
+ auto __q4n = _Tp{1};
+ auto __prod = _Tp{1};
+ for (std::size_t __n = 1; __n < _S_max_iter; ++__n)
+ {
+ __q2n *= __q2;
+ __q4n *= __q4;
+ const auto __fact = (_Real{1} - __q2n)
+ * (_Real{1} + _Real{2} * __q2n * __cos2x + __q4n);
+ __prod *= __fact;
+ if (std::abs(__fact) < _S_eps)
+ break;
+ }
+
+ return _Real{2} * std::pow(__q, _Tp{0.25L}) * std::cos(__x) * __prod;
+ }
+
+ // Pre-declare Jacobi theta_4 sum ...
+ template<typename _Tp>
+ _Tp
+ __jacobi_theta_4_sum(_Tp __q, _Tp __x);
+
+ // ... and product.
+ template<typename _Tp>
+ _Tp
+ __jacobi_theta_4_prod(_Tp __q, _Tp __x);
+
+ /**
+ * Return the Jacobi @f$ \theta_2 @f$ function by summation of the series.
+ *
+ * The Jacobi or elliptic theta function is defined by
+ * @f[
+ * \theta_2(q,x) = 2\sum_{n=1}^{\infty}
+ * q^{(n+\frac{1}{2})^2}\cos{(2n+1)x}
+ * @f]
+ *
+ * Regarding the nome and the theta function as functions of the lattice
+ * parameter @f$ \tau -i log(q)/ \pi @f$ or @f$ q = e^{i\pi\tau} @f$
+ * the lattice parameter is transformed to maximize its imaginary part:
+ * @f[
+ * \theta_2(\tau+1,x) = e^{i\pi/4}\theta_2(\tau,x)
+ * @f]
+ * and
+ * @f[
+ * \sqrt{-i\tau}\theta_2(\tau,x) = e^{(i\tau x^2/\pi)}\theta_4(\tau',\tau' x)
+ * @f]
+ * where the new lattice parameter is @f$ \tau' = -1/\tau @f$.
+ *
+ * The argument is reduced with
+ * @f[
+ * \theta_2(q, x + (m+n\tau)\pi) = (-1)^{m}q^{-n^2}e^{-2inx}\theta_2(q, x)
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __jacobi_theta_2(std::complex<_Tp> __q, std::complex<_Tp> __x)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ using _Cmplx = std::complex<_Real>;
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ const auto _S_pi = __gnu_cxx::__const_pi(std::abs(__x));
+ const auto _S_i = std::complex<_Real>{0, 1};
+ constexpr auto _S_q_min = _Real{0.001L};
+ constexpr auto _S_q_max = _Real{0.95e-1L};
+
+ if (__isnan(__q) || __isnan(__x))
+ return _Tp{_S_NaN};
+ else if (std::abs(__q) >= _Real{1})
+ std::__throw_domain_error(__N("__jacobi_theta_2:"
+ " nome q out of range"));
+ else if (std::abs(__q) < _S_q_min || std::abs(__q) > _S_q_max)
+ return __jacobi_theta_2_prod(__q, __x);
+ else if (std::abs(__x) < _S_eps)
+ return __jacobi_theta_0_t(__jacobi_lattice_t<_Cmplx, _Cmplx>(__q)).th2;
+ else
+ {
+ const auto __lattice = __jacobi_lattice_t<_Cmplx, _Cmplx>(__q);
+ auto __tau = __lattice.__tau().__val;
+
+ const auto __x_red = __lattice.__reduce(__x);
+ auto __fact = std::complex<_Tp>{1, 0};
+ if (__x_red.__m != 0)
+ __fact *= __gnu_cxx::__parity<_Tp>(__x_red.__m);
+ if (__x_red.__n != 0)
+ __fact *= std::exp(_S_i * _Real{-2 * __x_red.__n} * __x_red.__z)
+ * std::pow(__q, -__x_red.__n * __x_red.__n);
+ __x = __x_red.__z;
+
+ // theta_2(tau+1, z) = theta_2(tau, z)
+ const auto __itau = std::floor(std::real(__tau));
+ __tau -= __itau;
+ __fact *= __polar_pi(_Real{1}, __itau / _Real{4});
+
+ if (std::imag(__tau) < 0.5)
+ {
+ const auto __fact2 = std::sqrt(-_S_i * __tau);
+ __tau = _Real{-1} / __tau;
+ const auto __phase = std::exp(_S_i * __tau * __x * __x / _S_pi);
+ __fact *= __phase / __fact2;
+ __q = std::exp(_S_i * _S_pi * __tau);
+ __x *= __tau;
+ return __fact * __jacobi_theta_4_sum(__q, __x);
+ }
+ else
+ return __fact * __jacobi_theta_2_sum(__q, __x);
+ }
+ }
+
+ /**
+ * Return the Jacobi @f$ \theta_2 @f$ function for real nome and argument.
+ *
+ * The Jacobi or elliptic theta function is defined by
+ * @f[
+ * \theta_2(q,x) = 2\sum_{n=1}^{\infty}
+ * q^{(n+\frac{1}{2})^2}\cos{(2n+1)x}
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ _Tp
+ __jacobi_theta_2(_Tp __q, const _Tp __x)
+ {
+ using _Cmplx = std::complex<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+
+ const auto __ret = __jacobi_theta_2(_Cmplx(__q), _Cmplx(__x));
+
+ if (std::abs(__ret) > _S_eps
+ && std::abs(std::imag(__ret)) > _S_eps * std::abs(__ret))
+ std::__throw_runtime_error("__jacobi_theta_2: "
+ "Unexpected large imaginary part");
+ else
+ return std::real(__ret);
+ }
+
+ /**
+ * Return the Jacobi @f$ \theta_3 @f$ function by summation of the series.
+ *
+ * The Jacobi or elliptic theta-3 function is defined by
+ * @f[
+ * \theta_3(q,x) = 1 + 2\sum_{n=1}^{\infty} q^{n^2}\cos{2nx}
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ _Tp
+ __jacobi_theta_3_sum(_Tp __q, _Tp __x)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ constexpr std::size_t _S_max_iter = 50;
+
+ _Tp __sum{};
+ for (std::size_t __n = 1; __n < _S_max_iter; ++__n)
+ {
+ const auto __term = std::pow(__q, _Real(__n * __n))
+ * std::cos(_Real(2 * __n) * __x);
+ __sum += __term;
+ if (std::abs(__term) < _S_eps * std::abs(__sum))
+ break;
+ }
+ return _Real{1} + _Real{2} * __sum;
+ }
+
+ /**
+ * Return the Jacobi @f$ \theta_3 @f$ function by accumulation of the product.
+ *
+ * The Jacobi or elliptic theta-3 function is defined by
+ * @f[
+ * \theta_3(q,x) = \prod_{n=1}^{\infty}
+ * (1 - q^{2n})(1 + 2q^{2n-1}\cos(2x) + q^{4n-2})
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ _Tp
+ __jacobi_theta_3_prod(_Tp __q, _Tp __x)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ constexpr std::size_t _S_max_iter = 50;
+ const auto __q2 = __q * __q;
+ const auto __q4 = __q2 * __q2;
+ const auto __cos2x = std::cos(_Real{2} * __x);
+
+ auto __q2nm1 = __q;
+ auto __q4nm2 = __q2;
+ auto __prod = _Tp{1};
+ for (std::size_t __n = 1; __n < _S_max_iter; ++__n)
+ {
+ const auto __fact = (_Real{1} - __q2nm1 * __q)
+ * (_Real{1} + _Real{2} * __q2nm1 * __cos2x + __q4nm2);
+ __prod *= __fact;
+ if (std::abs(__fact) < _S_eps)
+ break;
+ __q2nm1 *= __q2;
+ __q4nm2 *= __q4;
+ }
+
+ return __prod;
+ }
+
+ /**
+ * Return the Jacobi @f$ \theta_3 @f$ function by summation of the series.
+ *
+ * The Jacobi or elliptic theta function is defined by
+ * @f[
+ * \theta_3(q,x) = 1 + 2\sum_{n=1}^{\infty} q^{n^2}\cos{2nx}
+ * @f]
+ *
+ * Regarding the nome and the theta function as functions of the lattice
+ * parameter @f$ \tau -i log(q)/ \pi @f$ or @f$ q = e^{i\pi\tau} @f$
+ * the lattice parameter is transformed to maximize its imaginary part:
+ * @f[
+ * \theta_3(\tau+1,x) = \theta_3(\tau,x)
+ * @f]
+ * and
+ * @f[
+ * \sqrt{-i\tau}\theta_3(\tau,x) = e^{(i\tau x^2/\pi)}\theta_3(\tau',\tau' x)
+ * @f]
+ * where the new lattice parameter is @f$ \tau' = -1/\tau @f$.
+ *
+ * The argument is reduced with
+ * @f[
+ * \theta_3(q, x + (m+n\tau)\pi) = q^{-n^2} e^{-2inx} \theta_3(q, x)
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __jacobi_theta_3(std::complex<_Tp> __q, std::complex<_Tp> __x)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ using _Cmplx = std::complex<_Real>;
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ const auto _S_pi = __gnu_cxx::__const_pi(std::abs(__x));
+ const auto _S_i = std::complex<_Real>{0, 1};
+ constexpr auto _S_q_min = _Real{0.001L};
+ constexpr auto _S_q_max = _Real{0.95e-1L};
+
+ if (__isnan(__q) || __isnan(__x))
+ return _Tp{_S_NaN};
+ else if (std::abs(__q) >= _Real{1})
+ std::__throw_domain_error(__N("__jacobi_theta_3:"
+ " nome q out of range"));
+ else if (std::abs(__q) < _S_q_min || std::abs(__q) > _S_q_max)
+ return __jacobi_theta_3_prod(__q, __x);
+ else if (std::abs(__x) < _S_eps)
+ return __jacobi_theta_0_t(__jacobi_lattice_t<_Cmplx, _Cmplx>(__q)).th3;
+ else
+ {
+ const auto __lattice = __jacobi_lattice_t<_Cmplx, _Cmplx>(__q);
+ auto __tau = __lattice.__tau().__val;
+
+ const auto __x_red = __lattice.__reduce(__x);
+ auto __fact = std::complex<_Tp>{1, 0};
+ if (__x_red.__n != 0)
+ __fact *= std::exp(_S_i * _Real{-2 * __x_red.__n} * __x_red.__z)
+ * std::pow(__q, -__x_red.__n * __x_red.__n);
+ __x = __x_red.__z;
+
+ // theta_3(tau+1, z) = theta_3(tau, z)
+ const auto __itau = std::floor(std::real(__tau));
+ __tau -= __itau;
+
+ if (std::imag(__tau) < 0.5)
+ {
+ const auto __fact2 = std::sqrt(-_S_i * __tau);
+ __tau = _Real{-1} / __tau;
+ const auto __phase = std::exp(_S_i * __tau * __x * __x / _S_pi);
+ __fact *= __phase / __fact2;
+ __q = std::exp(_S_i * _S_pi * __tau);
+ __x *= __tau;
+ }
+
+ return __fact * __jacobi_theta_3_sum(__q, __x);
+ }
+ }
+
+ /**
+ * Return the Jacobi @f$ \theta_3 @f$ function for real nome and argument.
+ *
+ * The Jacobi or elliptic theta function is defined by
+ * @f[
+ * \theta_3(q,x) = 1 + 2\sum_{n=1}^{\infty} q^{n^2}\cos{2nx}
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ _Tp
+ __jacobi_theta_3(_Tp __q, const _Tp __x)
+ {
+ using _Cmplx = std::complex<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+
+ const auto __ret = __jacobi_theta_3(_Cmplx(__q), _Cmplx(__x));
+
+ if (std::abs(__ret) > _S_eps
+ && std::abs(std::imag(__ret)) > _S_eps * std::abs(__ret))
+ std::__throw_runtime_error("__jacobi_theta_3: "
+ "Unexpected large imaginary part");
+ else
+ return std::real(__ret);
+ }
+
+ /**
+ * Return the Jacobi @f$ \theta_4 @f$ function by summation of the series.
+ *
+ * The Jacobi or elliptic theta function is defined by
+ * @f[
+ * \theta_4(q,x) = 1 + 2\sum_{n=1}^{\infty}(-1)^n q^{n^2}\cos{2nx}
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ _Tp
+ __jacobi_theta_4_sum(_Tp __q, _Tp __x)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ constexpr std::size_t _S_max_iter = 50;
+
+ _Tp __sum{};
+ _Real __sign{1};
+ for (std::size_t __n = 1; __n < _S_max_iter; ++__n)
+ {
+ __sign *= -1;
+ const auto __term = __sign * std::pow(__q, _Real(__n * __n))
+ * std::cos(_Real(2 * __n) * __x);
+ __sum += __term;
+ if (std::abs(__term) < _S_eps * std::abs(__sum))
+ break;
+ }
+ return _Real{1} + _Real{2} * __sum;
+ }
+
+ /**
+ * Return the Jacobi @f$ \theta_4 @f$ function by accumulation of the product.
+ *
+ * The Jacobi or elliptic theta-4 function is defined by
+ * @f[
+ * \theta_4(q,x) = \prod_{n=1}^{\infty}
+ * (1 - q^{2n})(1 - 2q^{2n-1}\cos(2x) + q^{4n-2})
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ _Tp
+ __jacobi_theta_4_prod(_Tp __q, _Tp __x)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ constexpr std::size_t _S_max_iter = 50;
+ const auto __q2 = __q * __q;
+ const auto __q4 = __q2 * __q2;
+ const auto __cos2x = std::cos(_Real{2} * __x);
+
+ auto __q2nm1 = __q;
+ auto __q4nm2 = __q2;
+ auto __prod = _Tp{1};
+ for (std::size_t __n = 1; __n < _S_max_iter; ++__n)
+ {
+ const auto __fact = (_Real{1} - __q2nm1 * __q)
+ * (_Real{1} - _Real{2} * __q2nm1 * __cos2x + __q4nm2);
+ __prod *= __fact;
+ if (std::abs(__fact) < _S_eps)
+ break;
+ __q2nm1 *= __q2;
+ __q4nm2 *= __q4;
+ }
+
+ return __prod;
+ }
+
+ /**
+ * Return the Jacobi @f$ \theta_4 @f$ function by summation of the series.
+ *
+ * The Jacobi or elliptic theta-4 function is defined by
+ * @f[
+ * \theta_4(q,x) = 1 + 2\sum_{n=1}^{\infty}(-1)^n q^{n^2}\cos{2nx}
+ * @f]
+ *
+ * Regarding the nome and the theta function as functions of the lattice
+ * parameter @f$ \tau -i log(q)/ \pi @f$ or @f$ q = e^{i\pi\tau} @f$
+ * the lattice parameter is transformed to maximize its imaginary part:
+ * @f[
+ * \theta_4(\tau+1,x) = \theta_4(\tau,x)
+ * @f]
+ * and
+ * @f[
+ * \sqrt{-i\tau}\theta_4(\tau,x) = e^{(i\tau x^2/\pi)}\theta_2(\tau',\tau' x)
+ * @f]
+ * where the new lattice parameter is @f$ \tau' = -1/\tau @f$.
+ *
+ * The argument is reduced with
+ * @f[
+ * \theta_4(q, z+(m + n\tau)\pi) = (-1)^n q^{-n^2}e^{-2inz}\theta_4(q, z)
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __jacobi_theta_4(std::complex<_Tp> __q, std::complex<_Tp> __x)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ using _Cmplx = std::complex<_Real>;
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__x));
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+ const auto _S_pi = __gnu_cxx::__const_pi(std::abs(__x));
+ const auto _S_i = std::complex<_Real>{0, 1};
+ constexpr auto _S_q_min = _Real{0.001L};
+ constexpr auto _S_q_max = _Real{0.95e-1L};
+
+ if (__isnan(__q) || __isnan(__x))
+ return _Tp{_S_NaN};
+ else if (std::abs(__q) >= _Real{1})
+ std::__throw_domain_error(__N("__jacobi_theta_4:"
+ " nome q out of range"));
+ else if (std::abs(__q) < _S_q_min || std::abs(__q) > _S_q_max)
+ return __jacobi_theta_4_prod(__q, __x);
+ else if (std::abs(__x) < _S_eps)
+ return __jacobi_theta_0_t(__jacobi_lattice_t<_Cmplx, _Cmplx>(__q)).th4;
+ else
+ {
+ const auto __lattice = __jacobi_lattice_t<_Cmplx, _Cmplx>(__q);
+ auto __tau = __lattice.__tau().__val;
+
+ const auto __x_red = __lattice.__reduce(__x);
+ auto __fact = std::complex<_Tp>{1, 0};
+ if (__x_red.__n != 0)
+ __fact *= std::exp(_S_i * _Real{-2 * __x_red.__n} * __x_red.__z)
+ * std::pow(__q, -__x_red.__n * __x_red.__n);
+ if (__x_red.__n != 0)
+ __fact *= __gnu_cxx::__parity<_Tp>(__x_red.__n);
+ __x = __x_red.__z;
+
+ // theta_4(tau+1, z) = theta_4(tau, z)
+ const auto __itau = std::floor(std::real(__tau));
+ __tau -= __itau;
+
+ if (std::imag(__tau) < 0.5)
+ {
+ const auto __fact2 = std::sqrt(-_S_i * __tau);
+ __tau = _Real{-1} / __tau;
+ const auto __phase = std::exp(_S_i * __tau * __x * __x / _S_pi);
+ __fact *= __phase / __fact2;
+ __q = std::exp(_S_i * _S_pi * __tau);
+ __x *= __tau;
+ return __fact * __jacobi_theta_2_sum(__q, __x);
+ }
+ else
+ return __fact * __jacobi_theta_4_sum(__q, __x);
+ }
+ }
+
+ /**
+ * Return the Jacobi @f$ \theta_4 @f$ function for real nome and argument.
+ *
+ * The Jacobi or elliptic theta function is defined by
+ * @f[
+ * \theta_4(q,x) = 1 + 2\sum_{n=1}^{\infty}(-1)^n q^{n^2}\cos{2nx}
+ * @f]
+ *
+ * @param __q The elliptic nome, @f$ |q| < 1 @f$.
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ _Tp
+ __jacobi_theta_4(_Tp __q, const _Tp __x)
+ {
+ using _Cmplx = std::complex<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__x));
+
+ const auto __ret = __jacobi_theta_4(_Cmplx(__q), _Cmplx(__x));
+
+ if (std::abs(__ret) > _S_eps
+ && std::abs(std::imag(__ret)) > _S_eps * std::abs(__ret))
+ std::__throw_runtime_error("__jacobi_theta_4: "
+ "Unexpected large imaginary part");
+ else
+ return std::real(__ret);
+ }
+
+ /**
+ * Return a structure containing the three primary Jacobi elliptic functions:
* @f$ sn(k, u), cn(k, u), dn(k, u) @f$.
+ *
+ * @param __k The elliptic modulus @f$ |k| < 1 @f$.
+ * @param __u The argument.
+ * @return An object containing the three principal Jacobi elliptic functions,
+ * @f$ sn(k, u), cn(k, u), dn(k, u) @f$ and the means to compute
+ * the remaining nine as well as the amplitude.
*/
template<typename _Tp>
- __gnu_cxx::__jacobi_t<_Tp>
- __jacobi_sncndn(_Tp __k, _Tp __u)
+ __gnu_cxx::__jacobi_ellint_t<_Tp>
+ __jacobi_ellint(_Tp __k, _Tp __u)
{
- using _Val = __num_traits_t<_Tp>;
- const auto _S_eps = __gnu_cxx::__epsilon(__u);
- const auto _S_NaN = __gnu_cxx::__quiet_NaN(__u);
+ using _Real = __num_traits_t<_Tp>;
+ const auto _S_eps = __gnu_cxx::__epsilon(std::abs(__u));
+ const auto _S_NaN = __gnu_cxx::__quiet_NaN(std::abs(__u));
if (__isnan(__k) || __isnan(__u))
- return __gnu_cxx::__jacobi_t<_Tp>{_S_NaN, _S_NaN, _S_NaN};
+ return __gnu_cxx::__jacobi_ellint_t<_Tp>{_S_NaN, _S_NaN, _S_NaN};
else if (std::abs(__k) > _Tp{1})
- std::__throw_domain_error(__N("__jacobi_sncndn:"
+ std::__throw_domain_error(__N("__jacobi_ellint:"
" argument k out of range"));
else if (std::abs(_Tp{1} - __k) < _Tp{2} * _S_eps)
{
auto __sn = std::tanh(__u);
auto __cn = _Tp{1} / std::cosh(__u);
auto __dn = __cn;
- return __gnu_cxx::__jacobi_t<_Tp>{__sn, __cn, __dn};
+ return __gnu_cxx::__jacobi_ellint_t<_Tp>{__sn, __cn, __dn};
}
else if (std::abs(__k) < _Tp{2} * _S_eps)
{
auto __sn = std::sin(__u);
auto __cn = std::cos(__u);
auto __dn = _Tp{1};
- return __gnu_cxx::__jacobi_t<_Tp>{__sn, __cn, __dn};
+ return __gnu_cxx::__jacobi_ellint_t<_Tp>{__sn, __cn, __dn};
}
else
{
@@ -524,7 +1651,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
std::swap(__dn, __cn);
__sn /= __d;
}
- return __gnu_cxx::__jacobi_t<_Tp>{__sn, __cn, __dn};
+ return __gnu_cxx::__jacobi_ellint_t<_Tp>{__sn, __cn, __dn};
}
}
diff --git a/libstdc++-v3/include/bits/sf_trig.tcc b/libstdc++-v3/include/bits/sf_trig.tcc
index bae66db13d7..841c55faeee 100644
--- a/libstdc++-v3/include/bits/sf_trig.tcc
+++ b/libstdc++-v3/include/bits/sf_trig.tcc
@@ -401,6 +401,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__rho * __sc.__sin_v);
}
+ /**
+ * Reperiodized complex constructor.
+ */
+ template<typename _Tp>
+ inline std::complex<_Tp>
+ __polar_pi(_Tp __rho, const std::complex<_Tp>& __phi_pi)
+ {
+ __gnu_cxx::__sincos_t<_Tp> __sc = __sincos_pi(__phi_pi);
+ return std::complex<_Tp>(__rho * __sc.__cos_v,
+ __rho * __sc.__sin_v);
+ }
+
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
} // namespace std
diff --git a/libstdc++-v3/include/bits/sf_zeta.tcc b/libstdc++-v3/include/bits/sf_zeta.tcc
index 5cf0bec54c9..eab190cb68d 100644
--- a/libstdc++-v3/include/bits/sf_zeta.tcc
+++ b/libstdc++-v3/include/bits/sf_zeta.tcc
@@ -708,7 +708,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __riemann_zeta_sum(__s);
}
else
- return _Val{1} + std::pow(_Val{2}, -__s);
+ return _Val{1} + std::exp2(-__s);
}
}
diff --git a/libstdc++-v3/include/bits/specfun.h b/libstdc++-v3/include/bits/specfun.h
index 8dbfe6086af..2cda681165f 100644
--- a/libstdc++-v3/include/bits/specfun.h
+++ b/libstdc++-v3/include/bits/specfun.h
@@ -228,6 +228,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* - @ref __gnu_cxx::jacobi_sn "jacobi_sn - Jacobi sine amplitude functions"
* - @ref __gnu_cxx::jacobi_cn "jacobi_cn - Jacobi cosine amplitude functions"
* - @ref __gnu_cxx::jacobi_dn "jacobi_dn - Jacobi delta amplitude functions"
+ * - @ref __gnu_cxx::jacobi_theta_1 "theta_1 - Jacobi theta function 1"
+ * - @ref __gnu_cxx::jacobi_theta_2 "theta_2 - Jacobi theta function 2"
+ * - @ref __gnu_cxx::jacobi_theta_3 "theta_3 - Jacobi theta function 3"
+ * - @ref __gnu_cxx::jacobi_theta_4 "theta_4 - Jacobi theta function 4"
* - @ref __gnu_cxx::jacobi_zeta "jacobi_zeta - Jacobi zeta functions"
* - @ref __gnu_cxx::lbinomial "lbinomial - Log binomial coefficients"
* - @ref __gnu_cxx::ldouble_factorial "ldouble_factorial - Log double factorials"
@@ -1048,7 +1052,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
inline float
hermitef(unsigned int __n, float __x)
- { return __detail::__poly_hermite<float>(__n, __x); }
+ { return __detail::__hermite<float>(__n, __x); }
/**
* Return the Hermite polynomial @f$ H_n(x) @f$ of nonnegative order n
@@ -1058,7 +1062,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
inline long double
hermitel(unsigned int __n, long double __x)
- { return __detail::__poly_hermite<long double>(__n, __x); }
+ { return __detail::__hermite<long double>(__n, __x); }
/**
* Return the Hermite polynomial @f$ H_n(x) @f$ of order n
@@ -1083,7 +1087,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
hermite(unsigned int __n, _Tp __x)
{
using __type = __gnu_cxx::__promote_fp_t<_Tp>;
- return __detail::__poly_hermite<__type>(__n, __x);
+ return __detail::__hermite<__type>(__n, __x);
}
// Laguerre polynomials
@@ -1140,7 +1144,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
inline float
legendref(unsigned int __l, float __x)
- { return __detail::__poly_legendre_p<float>(__l, __x); }
+ { return __detail::__legendre_p<float>(__l, __x).__P_l; }
/**
* Return the Legendre polynomial @f$ P_l(x) @f$ of nonnegative
@@ -1150,7 +1154,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
inline long double
legendrel(unsigned int __l, long double __x)
- { return __detail::__poly_legendre_p<long double>(__l, __x); }
+ { return __detail::__legendre_p<long double>(__l, __x).__P_l; }
/**
* Return the Legendre polynomial @f$ P_l(x) @f$ of nonnegative
@@ -1172,7 +1176,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
legendre(unsigned int __l, _Tp __x)
{
using __type = __gnu_cxx::__promote_fp_t<_Tp>;
- return __detail::__poly_legendre_p<__type>(__l, __x);
+ return __detail::__legendre_p<__type>(__l, __x).__P_l;
}
// Riemann zeta functions
@@ -1864,7 +1868,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline float
jacobi_snf(float __k, float __u)
{
- return std::__detail::__jacobi_sncndn<float>(__k, __u).__sn_value;
+ return std::__detail::__jacobi_ellint<float>(__k, __u).__sn_value;
}
/**
@@ -1876,7 +1880,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline long double
jacobi_snl(long double __k, long double __u)
{
- return std::__detail::__jacobi_sncndn<long double>(__k, __u).__sn_value;
+ return std::__detail::__jacobi_ellint<long double>(__k, __u).__sn_value;
}
/**
@@ -1900,7 +1904,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
jacobi_sn(_Kp __k, _Up __u)
{
using __type = __gnu_cxx::__promote_fp_t<_Kp, _Up>;
- return std::__detail::__jacobi_sncndn<__type>(__k, __u).__sn_value;
+ return std::__detail::__jacobi_ellint<__type>(__k, __u).__sn_value;
}
// Jacobi elliptic cosine amplitude functions.
@@ -1914,7 +1918,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline float
jacobi_cnf(float __k, float __u)
{
- return std::__detail::__jacobi_sncndn<float>(__k, __u).__cn_value;
+ return std::__detail::__jacobi_ellint<float>(__k, __u).__cn_value;
}
/**
@@ -1926,7 +1930,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline long double
jacobi_cnl(long double __k, long double __u)
{
- return std::__detail::__jacobi_sncndn<long double>(__k, __u).__cn_value;
+ return std::__detail::__jacobi_ellint<long double>(__k, __u).__cn_value;
}
/**
@@ -1950,7 +1954,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
jacobi_cn(_Kp __k, _Up __u)
{
using __type = __gnu_cxx::__promote_fp_t<_Kp, _Up>;
- return std::__detail::__jacobi_sncndn<__type>(__k, __u).__cn_value;
+ return std::__detail::__jacobi_ellint<__type>(__k, __u).__cn_value;
}
// Jacobi elliptic delta amplitude functions.
@@ -1964,7 +1968,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline float
jacobi_dnf(float __k, float __u)
{
- return std::__detail::__jacobi_sncndn<float>(__k, __u).__dn_value;
+ return std::__detail::__jacobi_ellint<float>(__k, __u).__dn_value;
}
/**
@@ -1976,7 +1980,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline long double
jacobi_dnl(long double __k, long double __u)
{
- return std::__detail::__jacobi_sncndn<long double>(__k, __u).__dn_value;
+ return std::__detail::__jacobi_ellint<long double>(__k, __u).__dn_value;
}
/**
@@ -2000,7 +2004,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
jacobi_dn(_Kp __k, _Up __u)
{
using __type = __gnu_cxx::__promote_fp_t<_Kp, _Up>;
- return std::__detail::__jacobi_sncndn<__type>(__k, __u).__dn_value;
+ return std::__detail::__jacobi_ellint<__type>(__k, __u).__dn_value;
}
// Chebyshev polynomials of the first kind
@@ -2013,7 +2017,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
inline float
chebyshev_tf(unsigned int __n, float __x)
- { return std::__detail::__chebyshev_t<float>(__n, __x); }
+ { return std::__detail::__chebyshev_t<float>(__n, __x).__T_n; }
/**
* Return the Chebyshev polynomials of the first kind @f$ T_n(x) @f$
@@ -2023,7 +2027,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
inline long double
chebyshev_tl(unsigned int __n, long double __x)
- { return std::__detail::__chebyshev_t<long double>(__n, __x); }
+ { return std::__detail::__chebyshev_t<long double>(__n, __x).__T_n; }
/**
* Return the Chebyshev polynomial of the first kind @f$ T_n(x) @f$
@@ -2044,7 +2048,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
chebyshev_t(unsigned int __n, _Tp __x)
{
using __type = __gnu_cxx::__promote_fp_t<_Tp>;
- return std::__detail::__chebyshev_t<__type>(__n, __x);
+ return std::__detail::__chebyshev_t<__type>(__n, __x).__T_n;
}
// Chebyshev polynomials of the second kind
@@ -2057,7 +2061,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
inline float
chebyshev_uf(unsigned int __n, float __x)
- { return std::__detail::__chebyshev_u<float>(__n, __x); }
+ { return std::__detail::__chebyshev_u<float>(__n, __x).__U_n; }
/**
* Return the Chebyshev polynomials of the second kind @f$ U_n(x) @f$
@@ -2067,7 +2071,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
inline long double
chebyshev_ul(unsigned int __n, long double __x)
- { return std::__detail::__chebyshev_u<long double>(__n, __x); }
+ { return std::__detail::__chebyshev_u<long double>(__n, __x).__U_n; }
/**
* Return the Chebyshev polynomial of the second kind @f$ U_n(x) @f$
@@ -2088,7 +2092,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
chebyshev_u(unsigned int __n, _Tp __x)
{
using __type = __gnu_cxx::__promote_fp_t<_Tp>;
- return std::__detail::__chebyshev_u<__type>(__n, __x);
+ return std::__detail::__chebyshev_u<__type>(__n, __x).__U_n;
}
// Chebyshev polynomials of the third kind
@@ -2192,18 +2196,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
inline float
jacobif(unsigned __n, float __alpha, float __beta, float __x)
- { return std::__detail::__poly_jacobi<float>(__n, __alpha, __beta, __x); }
+ {
+ return std::__detail::__jacobi_recur<float>(__n, __alpha, __beta, __x)
+ .__P_n;
+ }
/**
* Return the Jacobi polynomial @f$ P_n^{(\alpha,\beta)}(x) @f$
- * of degree @f$ n @f$ and @c <tt>long double</tt> orders @f$ \alpha, \beta > -1 @f$
- * and argument @f$ x @f$.
+ * of degree @f$ n @f$ and @c <tt>long double</tt> orders
+ * @f$ \alpha, \beta > -1 @f$ and argument @f$ x @f$.
*
* @see jacobi for details.
*/
inline long double
- jacobil(unsigned __n, long double __alpha, long double __beta, long double __x)
- { return std::__detail::__poly_jacobi<long double>(__n, __alpha, __beta, __x); }
+ jacobil(unsigned __n, long double __alpha, long double __beta,
+ long double __x)
+ {
+ return std::__detail::__jacobi_recur<long double>(__n, __alpha, __beta, __x)
+ .__P_n;
+ }
/**
* Return the Jacobi polynomial @f$ P_n^{(\alpha,\beta)}(x) @f$
@@ -2238,14 +2249,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
jacobi(unsigned __n, _Talpha __alpha, _Tbeta __beta, _Tp __x)
{
using __type = __gnu_cxx::__promote_fp_t<_Talpha, _Tbeta, _Tp>;
- return std::__detail::__poly_jacobi<__type>(__n, __alpha, __beta, __x);
+ return std::__detail::__jacobi_recur<__type>(__n, __alpha, __beta,
+ __x).__P_n;
}
// Gegenbauer polynomials
/**
* Return the Gegenbauer polynomial @f$ C_n^{\alpha}(x) @f$ of degree @c n
- * and @c float order @f$ \alpha > -1/2, \alpha \neq 0 @f$ and argument @f$ x @f$.
+ * and @c float order @f$ \alpha > -1/2, \alpha \neq 0 @f$
+ * and argument @f$ x @f$.
*
* @see gegenbauer for details.
*/
@@ -2268,7 +2281,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Return the Gegenbauer polynomial @f$ C_n^{\alpha}(x) @f$ of degree @c n
* and real order @f$ \alpha > -1/2, \alpha \neq 0 @f$ and argument @f$ x @f$.
*
- * The Gegenbauer polynomials are generated by a three-term recursion relation:
+ * The Gegenbauer polynomial is generated by a three-term recursion relation:
* @f[
* C_n^{\alpha}(x) = \frac{1}{n}\left[ 2x(n+\alpha-1)C_{n-1}^{\alpha}(x)
* - (n+2\alpha-2)C_{n-2}^{\alpha}(x) \right]
@@ -5357,7 +5370,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* Return the exponential theta-1 function @f$ \theta_1(\nu,x) @f$
* of period @f$ \nu @f$ and argument @f$ x @f$.
*
- * The Neville theta-1 function is defined by
+ * The exponential theta-1 function is defined by
* @f[
* \theta_1(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
* (-1)^j \exp\left( \frac{-(\nu + j - 1/2)^2}{x} \right)
@@ -5733,6 +5746,178 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return std::__detail::__theta_n<__type>(__k, __x);
}
+ // Jacobi theta_1 functions.
+
+ /**
+ * Return the Jacobi theta-1 function @f$ \theta_1(q,x) @f$
+ * of nome @f$ q @f$ and argument @f$ x @f$.
+ *
+ * @see jacobi_theta_1 for details.
+ */
+ inline float
+ jacobi_theta_1f(float __q, float __x)
+ { return std::__detail::__jacobi_theta_1<float>(__q, __x); }
+
+ /**
+ * Return the Jacobi theta-1 function @f$ \theta_1(q,x) @f$
+ * of nome @f$ q @f$ and argument @f$ x @f$.
+ *
+ * @see jacobi_theta_1 for details.
+ */
+ inline long double
+ jacobi_theta_1l(long double __q, long double __x)
+ { return std::__detail::__jacobi_theta_1<long double>(__q, __x); }
+
+ /**
+ * Return the Jacobi theta-1 function @f$ \theta_1(q,x) @f$
+ * of nome @f$ q @f$ and argument @f$ x @f$.
+ *
+ * The Jacobi theta-1 function is defined by
+ * @f[
+ * \theta_1(q,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
+ * (-1)^j \exp\left( \frac{-(q + j - 1/2)^2}{x} \right)
+ * @f]
+ *
+ * @param __q The periodic (period = 2) argument
+ * @param __x The argument
+ */
+ template<typename _Tpq, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tpq, _Tp>
+ jacobi_theta_1(_Tpq __q, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpq, _Tp>;
+ return std::__detail::__jacobi_theta_1<__type>(__q, __x);
+ }
+
+ // Jacobi theta_2 functions.
+
+ /**
+ * Return the Jacobi theta-2 function @f$ \theta_2(q,x) @f$
+ * of nome @f$ q @f$ and argument @f$ x @f$.
+ *
+ * @see jacobi_theta_2 for details.
+ */
+ inline float
+ jacobi_theta_2f(float __q, float __x)
+ { return std::__detail::__jacobi_theta_2<float>(__q, __x); }
+
+ /**
+ * Return the Jacobi theta-2 function @f$ \theta_2(q,x) @f$
+ * of nome @f$ q @f$ and argument @f$ x @f$.
+ *
+ * @see jacobi_theta_2 for details.
+ */
+ inline long double
+ jacobi_theta_2l(long double __q, long double __x)
+ { return std::__detail::__jacobi_theta_2<long double>(__q, __x); }
+
+ /**
+ * Return the Jacobi theta-2 function @f$ \theta_2(q,x) @f$
+ * of nome @f$ q @f$ and argument @f$ x @f$.
+ *
+ * The Jacobi theta-2 function is defined by
+ * @f[
+ * \theta_2(q,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
+ * (-1)^j \exp\left( \frac{-(q + j)^2}{x} \right)
+ * @f]
+ *
+ * @param __q The periodic (period = 2) argument
+ * @param __x The argument
+ */
+ template<typename _Tpq, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tpq, _Tp>
+ jacobi_theta_2(_Tpq __q, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpq, _Tp>;
+ return std::__detail::__jacobi_theta_2<__type>(__q, __x);
+ }
+
+ // Jacobi theta_3 functions.
+
+ /**
+ * Return the Jacobi theta-3 function @f$ \theta_3(q,x) @f$
+ * of nome @f$ q @f$ and argument @f$ x @f$.
+ *
+ * @see jacobi_theta_3 for details.
+ */
+ inline float
+ jacobi_theta_3f(float __q, float __x)
+ { return std::__detail::__jacobi_theta_3<float>(__q, __x); }
+
+ /**
+ * Return the Jacobi theta-3 function @f$ \theta_3(q,x) @f$
+ * of nome @f$ q @f$ and argument @f$ x @f$.
+ *
+ * @see jacobi_theta_3 for details.
+ */
+ inline long double
+ jacobi_theta_3l(long double __q, long double __x)
+ { return std::__detail::__jacobi_theta_3<long double>(__q, __x); }
+
+ /**
+ * Return the Jacobi theta-3 function @f$ \theta_3(q,x) @f$
+ * of nome @f$ q @f$ and argument @f$ x @f$.
+ *
+ * The Jacobi theta-3 function is defined by
+ * @f[
+ * \theta_3(q,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
+ * \exp\left( \frac{-(q+j)^2}{x} \right)
+ * @f]
+ *
+ * @param __q The elliptic nome
+ * @param __x The argument
+ */
+ template<typename _Tpq, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tpq, _Tp>
+ jacobi_theta_3(_Tpq __q, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpq, _Tp>;
+ return std::__detail::__jacobi_theta_3<__type>(__q, __x);
+ }
+
+ // Jacobi theta_4 functions.
+
+ /**
+ * Return the Jacobi theta-4 function @f$ \theta_4(q,x) @f$
+ * of nome @f$ q @f$ and argument @f$ x @f$.
+ *
+ * @see jacobi_theta_4 for details.
+ */
+ inline float
+ jacobi_theta_4f(float __q, float __x)
+ { return std::__detail::__jacobi_theta_4<float>(__q, __x); }
+
+ /**
+ * Return the Jacobi theta-4 function @f$ \theta_4(q,x) @f$
+ * of nome @f$ q @f$ and argument @f$ x @f$.
+ *
+ * @see jacobi_theta_4 for details.
+ */
+ inline long double
+ jacobi_theta_4l(long double __q, long double __x)
+ { return std::__detail::__jacobi_theta_4<long double>(__q, __x); }
+
+ /**
+ * Return the Jacobi theta-4 function @f$ \theta_4(q,x) @f$
+ * of nome @f$ q @f$ and argument @f$ x @f$.
+ *
+ * The Jacobi theta-4 function is defined by
+ * @f[
+ * \theta_4(q,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
+ * \exp\left( \frac{-(q + j + 1/2)^2}{x} \right)
+ * @f]
+ *
+ * @param __q The elliptic nome
+ * @param __x The argument
+ */
+ template<typename _Tpq, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tpq, _Tp>
+ jacobi_theta_4(_Tpq __q, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpq, _Tp>;
+ return std::__detail::__jacobi_theta_4<__type>(__q, __x);
+ }
+
// Owens T functions.
/**
@@ -5778,14 +5963,40 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Fermi-Dirac integrals.
+ /**
+ * Return the Fermi-Dirac integral of @c float order s and argument x.
+ *
+ * @see fermi_dirac for details.
+ */
inline float
fermi_diracf(float __s, float __x)
{ return std::__detail::__fermi_dirac<float>(__s, __x); }
+ /**
+ * Return the Fermi-Dirac integral of <tt> long double </tt>
+ * order s and argument x.
+ *
+ * @see fermi_dirac for details.
+ */
inline long double
fermi_diracl(long double __s, long double __x)
{ return std::__detail::__fermi_dirac<long double>(__s, __x); }
+ /**
+ * Return the Fermi-Dirac integral of integer or real order s
+ * and real argument x.
+ * @see https://en.wikipedia.org/wiki/Clausen_function
+ * @see http://dlmf.nist.gov/25.12.16
+ *
+ * @f[
+ * F_s(x) = \frac{1}{\Gamma(s+1)}\int_0^\infty \frac{t^s}{e^{t-x} + 1}dt
+ * = -Li_{s+1}(-e^x)
+ * @f]
+ *
+ * @param __s The order s > -1.
+ * @param __x The real argument.
+ * @return The real Fermi-Dirac integral F_s(x),
+ */
template<typename _Tps, typename _Tp>
inline __gnu_cxx::__promote_fp_t<_Tps, _Tp>
fermi_dirac(_Tps __s, _Tp __x)
@@ -5796,14 +6007,40 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Bose-Einstein integrals.
+ /**
+ * Return the Bose-Einstein integral of @c float order s and argument x.
+ *
+ * @see bose_einstein for details.
+ */
inline float
bose_einsteinf(float __s, float __x)
{ return std::__detail::__bose_einstein<float>(__s, __x); }
+ /**
+ * Return the Bose-Einstein integral of <tt> long double </tt>
+ * order s and argument x.
+ *
+ * @see bose_einstein for details.
+ */
inline long double
bose_einsteinl(long double __s, long double __x)
{ return std::__detail::__bose_einstein<long double>(__s, __x); }
+ /**
+ * Return the Bose-Einstein integral of integer or real order s
+ * and real argument x.
+ * @see https://en.wikipedia.org/wiki/Clausen_function
+ * @see http://dlmf.nist.gov/25.12.16
+ *
+ * @f[
+ * G_s(x) = \frac{1}{\Gamma(s+1)}\int_0^\infty \frac{t^s}{e^{t-x} - 1}dt
+ * = Li_{s+1}(e^x)
+ * @f]
+ *
+ * @param __s The order s >= 0.
+ * @param __x The real argument.
+ * @return The real Bose-Einstein integral G_s(x),
+ */
template<typename _Tps, typename _Tp>
inline __gnu_cxx::__promote_fp_t<_Tps, _Tp>
bose_einstein(_Tps __s, _Tp __x)
diff --git a/libstdc++-v3/include/bits/specfun_state.h b/libstdc++-v3/include/bits/specfun_state.h
index fd78fd788f8..4efd8650804 100644
--- a/libstdc++-v3/include/bits/specfun_state.h
+++ b/libstdc++-v3/include/bits/specfun_state.h
@@ -57,6 +57,135 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
/**
+ * A struct to store the state of a Hermite polynomial.
+ */
+ template<typename _Tp>
+ struct __hermite_t
+ {
+ std::size_t __n;
+ _Tp __x;
+ _Tp __H_n;
+ _Tp __H_nm1;
+ _Tp __H_nm2;
+
+ _Tp
+ deriv() const
+ { return _Tp(2 * __n) * __H_nm1; }
+ };
+
+ /**
+ * A struct to store the state of a probabilist Hermite polynomial.
+ */
+ template<typename _Tp>
+ struct __hermite_he_t
+ {
+ std::size_t __n;
+ _Tp __x;
+ _Tp __He_n;
+ _Tp __He_nm1;
+ _Tp __He_nm2;
+
+ _Tp
+ deriv() const
+ { return _Tp(__n) * __He_nm1; }
+ };
+
+ /**
+ * A struct to store the state of a Legendre polynomial.
+ */
+ template<typename _Tp>
+ struct __legendre_p_t
+ {
+ std::size_t __l;
+ _Tp __z;
+ _Tp __P_l;
+ _Tp __P_lm1;
+ _Tp __P_lm2;
+
+ // @todo endpoints?
+ _Tp
+ deriv() const
+ { return __l * (__z * __P_l - __P_lm1) / (__z * __z - _Tp{1}); }
+ };
+
+ /**
+ * A struct to store the state of a Laguerre polynomial.
+ */
+ template<typename _Tpa, typename _Tp>
+ struct __laguerre_t
+ {
+ std::size_t __n;
+ _Tpa __alpha1;
+ _Tp __x;
+ _Tp __L_n;
+ _Tp __L_nm1;
+ _Tp __L_nm2;
+
+ _Tp
+ deriv() const
+ { return (_Tp(__n) * __L_nm1 - _Tp(__n + __alpha1) * __L_nm2) / __x; }
+ };
+
+ /**
+ * A struct to store the state of a Jacobi polynomial.
+ */
+ template<typename _Tp>
+ struct __jacobi_t
+ {
+ std::size_t __n;
+ _Tp __alpha1;
+ _Tp __beta1;
+ _Tp __x;
+ _Tp __P_n;
+ _Tp __P_nm1;
+ _Tp __P_nm2;
+
+ _Tp
+ deriv() const
+ {
+ auto __apbp2k = __alpha1 + __beta1 + _Tp{2} * __n;
+ return (__n * (__alpha1 - __beta1 - __apbp2k * __x) * __P_nm1
+ + _Tp{2} * (__n + __alpha1) * (__n + __beta1) * __P_nm2)
+ / (__apbp2k * (_Tp{1} - __x * __x));
+ }
+ };
+
+ /**
+ * A struct to store the state of a Chebyshev polynomial of the first kind.
+ */
+ template<typename _Tp>
+ struct __chebyshev_t_t
+ {
+ std::size_t __n;
+ _Tp __x;
+ _Tp __T_n;
+ _Tp __T_nm1;
+ _Tp __T_nm2;
+
+ _Tp
+ deriv() const
+ { return _Tp(__n) * (__T_nm1 - __x * __T_n) / (_Tp{1} - __x * __x); }
+ };
+
+ /**
+ * A struct to store the state of a Chebyshev polynomial of the second kind.
+ */
+ template<typename _Tp>
+ struct __chebyshev_u_t
+ {
+ std::size_t __n;
+ _Tp __x;
+ _Tp __U_n;
+ _Tp __U_nm1;
+ _Tp __U_nm2;
+
+ _Tp
+ deriv() const
+ { return (_Tp(__n + 1) * __U_nm1 - _Tp(__n) * __x * __U_n)
+ / (_Tp{1} - __x * __x); }
+ };
+
+ /**
* A struct to store a cosine and a sine value.
* A return for sincos-type functions.
*/
@@ -67,9 +196,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tp __cos_v;
};
- // Slots for Jacobi elliptic function tuple.
+ /**
+ * Slots for Jacobi elliptic function tuple.
+ */
template<typename _Tp>
- struct __jacobi_t
+ struct __jacobi_ellint_t
{
/// Jacobi sine amplitude value.
_Tp __sn_value;
@@ -129,7 +260,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// The derivative of the Airy function Bi.
_Tp __Bi_deriv;
- /// Return the Wronskian of the Airy functions.
+ /// Return the Wronskian of this Airy function state.
_Tp __Wronskian() const
{ return __Ai_value * __Bi_deriv - __Bi_value * __Ai_deriv; }
};
@@ -155,7 +286,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// The derivative of the Fock-type Airy function w2.
_Tp __w2_deriv;
- /// Return the Wronskian of the Fock-type Airy functions.
+ /// Return the Wronskian of this Fock-type Airy function state.
_Tp __Wronskian() const
{ return __w1_value * __w2_deriv - __w2_value * __w1_deriv; }
};
@@ -185,7 +316,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// The derivative of the Bessel function of the second kind.
_Tp __N_deriv;
- /// Return the Wronskian of the cylindrical Bessel functions.
+ /// Return the Wronskian of this cylindrical Bessel function state.
_Tp __Wronskian() const
{ return __J_value * __N_deriv - __N_value * __J_deriv; }
};
@@ -218,7 +349,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// The derivative of the irregular Coulomb function.
_Tp __G_deriv;
- /// Return the Wronskian of the Coulomb functions.
+ /// Return the Wronskian of this Coulomb function state.
_Tp __Wronskian() const
{ return __F_value * __G_deriv - __G_value * __F_deriv; }
};
@@ -252,7 +383,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// of the second kind.
_Tp __K_deriv;
- /// Return the Wronskian of the modified cylindrical Bessel functions.
+ /// Return the Wronskian of this modified cylindrical Bessel function
+ /// state.
_Tp __Wronskian() const
{ return __I_value * __K_deriv - __K_value * __I_deriv; }
};
@@ -281,7 +413,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// The derivative of the cylindrical Hankel function of the second kind.
_Tp __H2_deriv;
- /// Return the Wronskian of the cylindrical Hankel functions.
+ /// Return the Wronskian of this cylindrical Hankel function state.
_Tp __Wronskian() const
{ return __H1_value * __H2_deriv - __H2_value * __H1_deriv; }
};
@@ -307,7 +439,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// The derivative of the spherical Bessel function of the second kind.
_Tp __n_deriv;
- /// Return the Wronskian of the spherical Bessel functions.
+ /// Return the Wronskian of this spherical Bessel function state.
_Tp __Wronskian() const
{ return __j_value * __n_deriv - __n_value * __j_deriv; }
};
@@ -337,7 +469,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// of the second kind.
_Tp __k_deriv;
- /// Return the Wronskian of the modified cylindrical Bessel functions.
+ /// Return the Wronskian of this modified cylindrical Bessel function
+ /// state.
_Tp __Wronskian() const
{ return __i_value * __k_deriv - __k_value * __i_deriv; }
};
@@ -366,7 +499,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// The derivative of the spherical Hankel function of the second kind.
_Tp __h2_deriv;
- /// Return the Wronskian of the cylindrical Hankel functions.
+ /// Return the Wronskian of this cylindrical Hankel function state.
_Tp __Wronskian() const
{ return __h1_value * __h2_deriv - __h2_value * __h1_deriv; }
};
diff --git a/libstdc++-v3/include/bits/specfun_util.h b/libstdc++-v3/include/bits/specfun_util.h
index 034c90777a4..593897bb35b 100644
--- a/libstdc++-v3/include/bits/specfun_util.h
+++ b/libstdc++-v3/include/bits/specfun_util.h
@@ -49,6 +49,12 @@
# if __has_include(<quadmath.h>)
# include <quadmath.h>
# define _GLIBCXX_HAVE_FLOAT128_MATH 1
+# if _GLIBCXX_USE_C99_MATH && !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC
+namespace std
+{
+ bool isnan(__float128);
+}
+# endif
# endif
#endif // __STRICT_ANSI__ && _GLIBCXX_USE_FLOAT128
@@ -89,6 +95,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Create a NaN.
+ * This will be overloaded for complex and vector types.
*/
template<typename _Tp>
struct __make_NaN
diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h
index fbebfdbf032..ea413b1b155 100644
--- a/libstdc++-v3/include/bits/stl_algo.h
+++ b/libstdc++-v3/include/bits/stl_algo.h
@@ -3857,8 +3857,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#endif // C++11
-_GLIBCXX_END_NAMESPACE_VERSION
-
_GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
@@ -5839,6 +5837,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
#endif // C++14
_GLIBCXX_END_NAMESPACE_ALGO
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif /* _STL_ALGO_H */
diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h
index 0a49e6ff66c..f68ecb22b82 100644
--- a/libstdc++-v3/include/bits/stl_algobase.h
+++ b/libstdc++-v3/include/bits/stl_algobase.h
@@ -1020,8 +1020,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__lg(unsigned long long __n)
{ return sizeof(long long) * __CHAR_BIT__ - 1 - __builtin_clzll(__n); }
-_GLIBCXX_END_NAMESPACE_VERSION
-
_GLIBCXX_BEGIN_NAMESPACE_ALGO
/**
@@ -1411,6 +1409,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
#endif
_GLIBCXX_END_NAMESPACE_ALGO
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
// NB: This file is included within many other C++ includes, as a way
diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h
index bf4b23eb2d3..d24e760d01b 100644
--- a/libstdc++-v3/include/bits/stl_bvector.h
+++ b/libstdc++-v3/include/bits/stl_bvector.h
@@ -62,6 +62,7 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
typedef unsigned long _Bit_type;
@@ -552,6 +553,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
};
_GLIBCXX_END_NAMESPACE_CONTAINER
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
// Declare a partial specialization of vector<T, Alloc>.
@@ -559,6 +561,7 @@ _GLIBCXX_END_NAMESPACE_CONTAINER
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
@@ -1305,6 +1308,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
};
_GLIBCXX_END_NAMESPACE_CONTAINER
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#if __cplusplus >= 201103L
diff --git a/libstdc++-v3/include/bits/stl_deque.h b/libstdc++-v3/include/bits/stl_deque.h
index e03e7f5808f..48b2bc7f5eb 100644
--- a/libstdc++-v3/include/bits/stl_deque.h
+++ b/libstdc++-v3/include/bits/stl_deque.h
@@ -67,6 +67,7 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/**
@@ -2325,6 +2326,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#undef _GLIBCXX_DEQUE_BUF_SIZE
_GLIBCXX_END_NAMESPACE_CONTAINER
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif /* _STL_DEQUE_H */
diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h
index 18c6e3f625e..88667a568c3 100644
--- a/libstdc++-v3/include/bits/stl_iterator.h
+++ b/libstdc++-v3/include/bits/stl_iterator.h
@@ -984,15 +984,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it)
{ return __it.base(); }
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
-
#if __cplusplus >= 201103L
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @addtogroup iterators
* @{
@@ -1243,9 +1236,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
-> decltype(__miter_base(__it.base()))
{ return __miter_base(__it.base()); }
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
-
#define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) std::make_move_iterator(_Iter)
#define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) \
std::__make_move_if_noexcept_iterator(_Iter)
@@ -1254,6 +1244,9 @@ _GLIBCXX_END_NAMESPACE_VERSION
#define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) (_Iter)
#endif // C++11
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
+
#ifdef _GLIBCXX_DEBUG
# include <debug/stl_iterator.h>
#endif
diff --git a/libstdc++-v3/include/bits/stl_iterator_base_funcs.h b/libstdc++-v3/include/bits/stl_iterator_base_funcs.h
index e14a22ce255..86a93d34fa1 100644
--- a/libstdc++-v3/include/bits/stl_iterator_base_funcs.h
+++ b/libstdc++-v3/include/bits/stl_iterator_base_funcs.h
@@ -66,14 +66,14 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
// Forward declaration for the overloads of __distance.
template <typename> struct _List_iterator;
template <typename> struct _List_const_iterator;
_GLIBCXX_END_NAMESPACE_CONTAINER
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _InputIterator>
inline _GLIBCXX14_CONSTEXPR
typename iterator_traits<_InputIterator>::difference_type
diff --git a/libstdc++-v3/include/bits/stl_list.h b/libstdc++-v3/include/bits/stl_list.h
index 5da19b32eea..cef94f728ef 100644
--- a/libstdc++-v3/include/bits/stl_list.h
+++ b/libstdc++-v3/include/bits/stl_list.h
@@ -66,10 +66,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// Supporting structures are split into common and templated
// types; the latter publicly inherits from the former in an
// effort to reduce code duplication. This results in some
@@ -157,8 +157,6 @@ namespace std _GLIBCXX_VISIBILITY(default)
private:
_List_node_base* _M_base() { return this; }
};
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace detail
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
@@ -1992,7 +1990,6 @@ _GLIBCXX_END_NAMESPACE_CXX11
_GLIBCXX_END_NAMESPACE_CONTAINER
#if _GLIBCXX_USE_CXX11_ABI
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
// Detect when distance is used to compute the size of the whole list.
template<typename _Tp>
@@ -2026,9 +2023,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
return __n;
}
+#endif
_GLIBCXX_END_NAMESPACE_VERSION
-#endif
} // namespace std
#endif /* _STL_LIST_H */
diff --git a/libstdc++-v3/include/bits/stl_map.h b/libstdc++-v3/include/bits/stl_map.h
index 30339536f57..0e8a98a96c1 100644
--- a/libstdc++-v3/include/bits/stl_map.h
+++ b/libstdc++-v3/include/bits/stl_map.h
@@ -65,6 +65,7 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template <typename _Key, typename _Tp, typename _Compare, typename _Alloc>
@@ -1437,7 +1438,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_GLIBCXX_END_NAMESPACE_CONTAINER
#if __cplusplus > 201402L
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
// Allow std::map access to internals of compatible maps.
template<typename _Key, typename _Val, typename _Cmp1, typename _Alloc,
typename _Cmp2>
@@ -1456,9 +1456,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_S_get_tree(_GLIBCXX_STD_C::multimap<_Key, _Val, _Cmp2, _Alloc>& __map)
{ return __map._M_t; }
};
-_GLIBCXX_END_NAMESPACE_VERSION
#endif // C++17
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif /* _STL_MAP_H */
diff --git a/libstdc++-v3/include/bits/stl_multimap.h b/libstdc++-v3/include/bits/stl_multimap.h
index 7dc22a96a59..7e3cea48a47 100644
--- a/libstdc++-v3/include/bits/stl_multimap.h
+++ b/libstdc++-v3/include/bits/stl_multimap.h
@@ -63,6 +63,7 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template <typename _Key, typename _Tp, typename _Compare, typename _Alloc>
@@ -1102,7 +1103,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_GLIBCXX_END_NAMESPACE_CONTAINER
#if __cplusplus > 201402L
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
// Allow std::multimap access to internals of compatible maps.
template<typename _Key, typename _Val, typename _Cmp1, typename _Alloc,
typename _Cmp2>
@@ -1121,9 +1121,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_S_get_tree(_GLIBCXX_STD_C::multimap<_Key, _Val, _Cmp2, _Alloc>& __map)
{ return __map._M_t; }
};
-_GLIBCXX_END_NAMESPACE_VERSION
#endif // C++17
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif /* _STL_MULTIMAP_H */
diff --git a/libstdc++-v3/include/bits/stl_multiset.h b/libstdc++-v3/include/bits/stl_multiset.h
index 60a3db844cb..517e77e9372 100644
--- a/libstdc++-v3/include/bits/stl_multiset.h
+++ b/libstdc++-v3/include/bits/stl_multiset.h
@@ -63,6 +63,7 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<typename _Key, typename _Compare, typename _Alloc>
@@ -953,7 +954,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_GLIBCXX_END_NAMESPACE_CONTAINER
#if __cplusplus > 201402L
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
// Allow std::multiset access to internals of compatible sets.
template<typename _Val, typename _Cmp1, typename _Alloc, typename _Cmp2>
struct
@@ -971,9 +971,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_S_get_tree(_GLIBCXX_STD_C::multiset<_Val, _Cmp2, _Alloc>& __set)
{ return __set._M_t; }
};
-_GLIBCXX_END_NAMESPACE_VERSION
#endif // C++17
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif /* _STL_MULTISET_H */
diff --git a/libstdc++-v3/include/bits/stl_relops.h b/libstdc++-v3/include/bits/stl_relops.h
index a2614bd3040..e2a0e25ca31 100644
--- a/libstdc++-v3/include/bits/stl_relops.h
+++ b/libstdc++-v3/include/bits/stl_relops.h
@@ -66,10 +66,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace rel_ops
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/** @namespace std::rel_ops
* @brief The generated relational operators are sequestered here.
*/
@@ -125,10 +125,9 @@ namespace std _GLIBCXX_VISIBILITY(default)
inline bool
operator>=(const _Tp& __x, const _Tp& __y)
{ return !(__x < __y); }
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace rel_ops
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif /* _STL_RELOPS_H */
diff --git a/libstdc++-v3/include/bits/stl_set.h b/libstdc++-v3/include/bits/stl_set.h
index 817bc2d870f..e804a7cae70 100644
--- a/libstdc++-v3/include/bits/stl_set.h
+++ b/libstdc++-v3/include/bits/stl_set.h
@@ -63,6 +63,7 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<typename _Key, typename _Compare, typename _Alloc>
@@ -969,7 +970,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_GLIBCXX_END_NAMESPACE_CONTAINER
#if __cplusplus > 201402L
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
// Allow std::set access to internals of compatible sets.
template<typename _Val, typename _Cmp1, typename _Alloc, typename _Cmp2>
struct
@@ -986,8 +986,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_S_get_tree(_GLIBCXX_STD_C::multiset<_Val, _Cmp2, _Alloc>& __set)
{ return __set._M_t; }
};
-_GLIBCXX_END_NAMESPACE_VERSION
#endif // C++17
+_GLIBCXX_END_NAMESPACE_VERSION
} //namespace std
#endif /* _STL_SET_H */
diff --git a/libstdc++-v3/include/bits/stl_stack.h b/libstdc++-v3/include/bits/stl_stack.h
index ac59ec715cf..5f2b4ab4486 100644
--- a/libstdc++-v3/include/bits/stl_stack.h
+++ b/libstdc++-v3/include/bits/stl_stack.h
@@ -86,7 +86,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* The second template parameter defines the type of the underlying
* sequence/container. It defaults to std::deque, but it can be
- * any type that supports @c back, @c push_back, and @c pop_front,
+ * any type that supports @c back, @c push_back, and @c pop_back,
* such as std::list, std::vector, or an appropriate user-defined
* type.
*
diff --git a/libstdc++-v3/include/bits/stl_vector.h b/libstdc++-v3/include/bits/stl_vector.h
index 7ee3ce96890..69cb8030208 100644
--- a/libstdc++-v3/include/bits/stl_vector.h
+++ b/libstdc++-v3/include/bits/stl_vector.h
@@ -65,8 +65,15 @@
#include <debug/assertions.h>
+#if _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR
+extern "C" void
+__sanitizer_annotate_contiguous_container(const void*, const void*,
+ const void*, const void*);
+#endif
+
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/// See bits/stl_deque.h's _Deque_base for an explanation.
@@ -106,6 +113,121 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
std::swap(_M_finish, __x._M_finish);
std::swap(_M_end_of_storage, __x._M_end_of_storage);
}
+
+#if _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR
+ template<typename = _Tp_alloc_type>
+ struct _Asan
+ {
+ typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>
+ ::size_type size_type;
+
+ static void _S_shrink(_Vector_impl&, size_type) { }
+ static void _S_on_dealloc(_Vector_impl&) { }
+
+ typedef _Vector_impl& _Reinit;
+
+ struct _Grow
+ {
+ _Grow(_Vector_impl&, size_type) { }
+ void _M_grew(size_type) { }
+ };
+ };
+
+ // Enable ASan annotations for memory obtained from std::allocator.
+ template<typename _Up>
+ struct _Asan<allocator<_Up> >
+ {
+ typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>
+ ::size_type size_type;
+
+ // Adjust ASan annotation for [_M_start, _M_end_of_storage) to
+ // mark end of valid region as __curr instead of __prev.
+ static void
+ _S_adjust(_Vector_impl& __impl, pointer __prev, pointer __curr)
+ {
+ __sanitizer_annotate_contiguous_container(__impl._M_start,
+ __impl._M_end_of_storage, __prev, __curr);
+ }
+
+ static void
+ _S_grow(_Vector_impl& __impl, size_type __n)
+ { _S_adjust(__impl, __impl._M_finish, __impl._M_finish + __n); }
+
+ static void
+ _S_shrink(_Vector_impl& __impl, size_type __n)
+ { _S_adjust(__impl, __impl._M_finish + __n, __impl._M_finish); }
+
+ static void
+ _S_on_dealloc(_Vector_impl& __impl)
+ {
+ if (__impl._M_start)
+ _S_adjust(__impl, __impl._M_finish, __impl._M_end_of_storage);
+ }
+
+ // Used on reallocation to tell ASan unused capacity is invalid.
+ struct _Reinit
+ {
+ explicit _Reinit(_Vector_impl& __impl) : _M_impl(__impl)
+ {
+ // Mark unused capacity as valid again before deallocating it.
+ _S_on_dealloc(_M_impl);
+ }
+
+ ~_Reinit()
+ {
+ // Mark unused capacity as invalid after reallocation.
+ if (_M_impl._M_start)
+ _S_adjust(_M_impl, _M_impl._M_end_of_storage,
+ _M_impl._M_finish);
+ }
+
+ _Vector_impl& _M_impl;
+
+#if __cplusplus >= 201103L
+ _Reinit(const _Reinit&) = delete;
+ _Reinit& operator=(const _Reinit&) = delete;
+#endif
+ };
+
+ // Tell ASan when unused capacity is initialized to be valid.
+ struct _Grow
+ {
+ _Grow(_Vector_impl& __impl, size_type __n)
+ : _M_impl(__impl), _M_n(__n)
+ { _S_grow(_M_impl, __n); }
+
+ ~_Grow() { if (_M_n) _S_shrink(_M_impl, _M_n); }
+
+ void _M_grew(size_type __n) { _M_n -= __n; }
+
+#if __cplusplus >= 201103L
+ _Grow(const _Grow&) = delete;
+ _Grow& operator=(const _Grow&) = delete;
+#endif
+ private:
+ _Vector_impl& _M_impl;
+ size_type _M_n;
+ };
+ };
+
+#define _GLIBCXX_ASAN_ANNOTATE_REINIT \
+ typename _Base::_Vector_impl::template _Asan<>::_Reinit const \
+ __attribute__((__unused__)) __reinit_guard(this->_M_impl)
+#define _GLIBCXX_ASAN_ANNOTATE_GROW(n) \
+ typename _Base::_Vector_impl::template _Asan<>::_Grow \
+ __attribute__((__unused__)) __grow_guard(this->_M_impl, (n))
+#define _GLIBCXX_ASAN_ANNOTATE_GREW(n) __grow_guard._M_grew(n)
+#define _GLIBCXX_ASAN_ANNOTATE_SHRINK(n) \
+ _Base::_Vector_impl::template _Asan<>::_S_shrink(this->_M_impl, n)
+#define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC \
+ _Base::_Vector_impl::template _Asan<>::_S_on_dealloc(this->_M_impl)
+#else // ! (_GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR)
+#define _GLIBCXX_ASAN_ANNOTATE_REINIT
+#define _GLIBCXX_ASAN_ANNOTATE_GROW(n)
+#define _GLIBCXX_ASAN_ANNOTATE_GREW(n)
+#define _GLIBCXX_ASAN_ANNOTATE_SHRINK(n)
+#define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC
+#endif // _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR
};
public:
@@ -159,8 +281,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#endif
~_Vector_base() _GLIBCXX_NOEXCEPT
- { _M_deallocate(this->_M_impl._M_start, this->_M_impl._M_end_of_storage
- - this->_M_impl._M_start); }
+ {
+ _M_deallocate(_M_impl._M_start,
+ _M_impl._M_end_of_storage - _M_impl._M_start);
+ }
public:
_Vector_impl _M_impl;
@@ -190,7 +314,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
}
};
-
/**
* @brief A standard container which offers fixed time access to
* individual elements in any order.
@@ -431,8 +554,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* responsibility.
*/
~vector() _GLIBCXX_NOEXCEPT
- { std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
- _M_get_Tp_allocator()); }
+ {
+ std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+ _M_get_Tp_allocator());
+ _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC;
+ }
/**
* @brief %Vector assignment operator.
@@ -940,9 +1066,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
{
+ _GLIBCXX_ASAN_ANNOTATE_GROW(1);
_Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
__x);
++this->_M_impl._M_finish;
+ _GLIBCXX_ASAN_ANNOTATE_GREW(1);
}
else
_M_realloc_insert(end(), __x);
@@ -977,6 +1105,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
__glibcxx_requires_nonempty();
--this->_M_impl._M_finish;
_Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
+ _GLIBCXX_ASAN_ANNOTATE_SHRINK(1);
}
#if __cplusplus >= 201103L
@@ -1510,8 +1639,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
void
_M_erase_at_end(pointer __pos) _GLIBCXX_NOEXCEPT
{
- std::_Destroy(__pos, this->_M_impl._M_finish, _M_get_Tp_allocator());
- this->_M_impl._M_finish = __pos;
+ if (size_type __n = this->_M_impl._M_finish - __pos)
+ {
+ std::_Destroy(__pos, this->_M_impl._M_finish,
+ _M_get_Tp_allocator());
+ this->_M_impl._M_finish = __pos;
+ _GLIBCXX_ASAN_ANNOTATE_SHRINK(__n);
+ }
}
iterator
@@ -1655,6 +1789,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{ __x.swap(__y); }
_GLIBCXX_END_NAMESPACE_CONTAINER
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif /* _STL_VECTOR_H */
diff --git a/libstdc++-v3/include/bits/summation.tcc b/libstdc++-v3/include/bits/summation.tcc
index 45a653e5dda..efe0f0f3225 100644
--- a/libstdc++-v3/include/bits/summation.tcc
+++ b/libstdc++-v3/include/bits/summation.tcc
@@ -151,9 +151,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const auto __n = this->_M_part_sum.num_terms() - 1;
const auto __s_n = this->_M_part_sum();
- auto& __a = this->_M_a;
- __a.push_back(__s_n);
+ this->_M_a.push_back(__s_n);
if (__n < 2)
this->_M_sum = __s_n;
else
@@ -162,17 +161,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
for (auto __j = 1; __j <= __lowmax; ++__j)
{
auto __m = __n - 2 * __j;
- auto __denom = (__a[__m + 2] - __a[__m + 1])
- - (__a[__m + 1] - __a[__m]);
+ auto __denom = (this->_M_a[__m + 2] - this->_M_a[__m + 1])
+ - (this->_M_a[__m + 1] - this->_M_a[__m]);
if (std::abs(__denom) < _S_tiny)
- __a[__m] = _S_huge;
+ this->_M_a[__m] = _S_huge;
else
{
- auto __del = __a[__m] - __a[__m + 1];
- __a[__m] -= __del * __del / __denom;
+ auto __del = this->_M_a[__m] - this->_M_a[__m + 1];
+ this->_M_a[__m] -= __del * __del / __denom;
}
}
- this->_M_sum = __a[__n % 2];
+ this->_M_sum = this->_M_a[__n % 2];
}
}
@@ -190,9 +189,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const auto __n = this->_M_part_sum.num_terms() - 1;
const auto __s_n = this->_M_part_sum();
- auto& __e = this->_M_e;
- __e.push_back(__s_n);
+ this->_M_e.push_back(__s_n);
if (__n == 0)
this->_M_sum = __s_n;
else
@@ -201,14 +199,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
for (auto __j = __n; __j >= 1; --__j)
{
auto __aux1 = __aux2;
- __aux2 = __e[__j - 1];
- auto __diff = __e[__j] - __aux2;
+ __aux2 = this->_M_e[__j - 1];
+ auto __diff = this->_M_e[__j] - __aux2;
if (std::abs(__diff) < _S_tiny)
- __e[__j - 1] = _S_huge;
+ this->_M_e[__j - 1] = _S_huge;
else
- __e[__j - 1] = __aux1 + _Tp{1} / __diff;
+ this->_M_e[__j - 1] = __aux1 + _Tp{1} / __diff;
}
- this->_M_sum = __e[__n % 2];
+ this->_M_sum = this->_M_e[__n % 2];
}
return;
}
@@ -227,9 +225,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const auto __n = this->_M_part_sum.num_terms() - 1;
const auto __s_n = this->_M_part_sum();
- auto& __arj = this->_M_arj;
- __arj.push_back(__s_n);
+ this->_M_arj.push_back(__s_n);
if (__n < 3)
this->_M_sum = __s_n;
else
@@ -239,18 +236,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
for (auto __l = 1; __l <= __lmax; ++__l)
{
__m -= 3;
- auto __diff0 = __arj[__m + 1] - __arj[__m];
- auto __diff1 = __arj[__m + 2] - __arj[__m + 1];
- auto __diff2 = __arj[__m + 3] - __arj[__m + 2];
+ auto __diff0 = this->_M_arj[__m + 1] - this->_M_arj[__m];
+ auto __diff1 = this->_M_arj[__m + 2] - this->_M_arj[__m + 1];
+ auto __diff2 = this->_M_arj[__m + 3] - this->_M_arj[__m + 2];
auto __denom = __diff2 * (__diff1 - __diff0)
- __diff0 * (__diff2 - __diff1);
if (std::abs(__denom) < _S_tiny)
- __arj[__m] = _S_huge;
+ this->_M_arj[__m] = _S_huge;
else
- __arj[__m] = __arj[__m + 1]
- - __diff0 * __diff1 * (__diff2 - __diff1) / __denom;
+ this->_M_arj[__m] = this->_M_arj[__m + 1]
+ - __diff0 * __diff1
+ * (__diff2 - __diff1) / __denom;
}
- this->_M_sum = __arj[__n % 3];
+ this->_M_sum = this->_M_arj[__n % 3];
}
}
@@ -268,38 +266,35 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const auto __n = this->_M_part_sum.num_terms() - 1;
const auto __s_n = this->_M_part_sum();
- const auto __beta = this->_M_beta;
- auto& __anum = this->_M_num;
- auto& __aden = this->_M_den;
- __anum.push_back(__s_n / __r_n);
- __aden.push_back(value_type{1} / __r_n);
+ this->_M_num.push_back(__s_n / __r_n);
+ this->_M_den.push_back(value_type{1} / __r_n);
if (__n == 0)
this->_M_sum = __s_n;
else
{
- __anum[__n - 1] = __anum[__n] - __anum[__n - 1];
- __aden[__n - 1] = __aden[__n] - __aden[__n - 1];
+ this->_M_num[__n - 1] = this->_M_num[__n] - this->_M_num[__n - 1];
+ this->_M_den[__n - 1] = this->_M_den[__n] - this->_M_den[__n - 1];
if (__n > 1)
{
- auto __bn1 = __beta + _Tp(__n - 1);
- auto __bn2 = __beta + _Tp(__n);
+ auto __bn1 = this->_M_beta + _Tp(__n - 1);
+ auto __bn2 = this->_M_beta + _Tp(__n);
auto __coef = __bn1 / __bn2;
auto __coefp = _Tp{1};
for (auto __j = 2; __j <= __n; ++__j)
{
- auto __fact = (__beta + _Tp(__n - __j)) * __coefp / __bn2;
- __anum[__n - __j] = __anum[__n - __j + 1]
- - __fact * __anum[__n - __j];
- __aden[__n - __j] = __aden[__n - __j + 1]
- - __fact * __aden[__n - __j];
+ auto __fact = (this->_M_beta + _Tp(__n - __j)) * __coefp / __bn2;
+ this->_M_num[__n - __j] = this->_M_num[__n - __j + 1]
+ - __fact * this->_M_num[__n - __j];
+ this->_M_den[__n - __j] = this->_M_den[__n - __j + 1]
+ - __fact * this->_M_den[__n - __j];
__coefp *= __coef;
}
}
- if (std::abs(__aden[0]) < _S_tiny)
+ if (std::abs(this->_M_den[0]) < _S_tiny)
this->_M_sum = _S_huge;
else
- this->_M_sum = __anum[0] / __aden[0];
+ this->_M_sum = this->_M_num[0] / this->_M_den[0];
}
}
@@ -317,36 +312,33 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const auto __n = this->_M_part_sum.num_terms() - 1;
const auto __s_n = this->_M_part_sum();
- const auto __beta = this->_M_beta;
- auto& __anum = this->_M_num;
- auto& __aden = this->_M_den;
- __anum.push_back(__s_n / __r_n);
- __aden.push_back(value_type{1} / __r_n);
+ this->_M_num.push_back(__s_n / __r_n);
+ this->_M_den.push_back(value_type{1} / __r_n);
if (__n == 0)
this->_M_sum = __s_n;
else
{
- __anum[__n - 1] = __anum[__n] - __anum[__n - 1];
- __aden[__n - 1] = __aden[__n] - __aden[__n - 1];
+ this->_M_num[__n - 1] = this->_M_num[__n] - this->_M_num[__n - 1];
+ this->_M_den[__n - 1] = this->_M_den[__n] - this->_M_den[__n - 1];
if (__n > 1)
{
- auto __bn1 = __beta + _Tp(__n - 2);
- auto __bn2 = __beta + _Tp(__n - 1);
+ auto __bn1 = this->_M_beta + _Tp(__n - 2);
+ auto __bn2 = this->_M_beta + _Tp(__n - 1);
for (auto __j = 2; __j <= __n; ++__j)
{
auto __fact = __bn1 * __bn2
/ ((__bn1 + _Tp(__j - 1)) * (__bn2 + _Tp(__j - 1)));
- __anum[__n - __j] = __anum[__n - __j + 1]
- - __fact * __anum[__n - __j];
- __aden[__n - __j] = __aden[__n - __j + 1]
- - __fact * __aden[__n - __j];
+ this->_M_num[__n - __j] = this->_M_num[__n - __j + 1]
+ - __fact * this->_M_num[__n - __j];
+ this->_M_den[__n - __j] = this->_M_den[__n - __j + 1]
+ - __fact * this->_M_den[__n - __j];
}
}
- if (std::abs(__aden[0]) < _S_tiny)
+ if (std::abs(this->_M_den[0]) < _S_tiny)
this->_M_sum = _S_huge;
else
- this->_M_sum = __anum[0] / __aden[0];
+ this->_M_sum = this->_M_num[0] / this->_M_den[0];
}
}
diff --git a/libstdc++-v3/include/bits/uniform_int_dist.h b/libstdc++-v3/include/bits/uniform_int_dist.h
index af7ac14bccf..16509c4ef8a 100644
--- a/libstdc++-v3/include/bits/uniform_int_dist.h
+++ b/libstdc++-v3/include/bits/uniform_int_dist.h
@@ -36,10 +36,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
namespace __detail
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
/* Determine whether number is a power of 2. */
template<typename _Tp>
inline bool
@@ -47,11 +47,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
return ((__x - 1) & __x) == 0;
};
-_GLIBCXX_END_NAMESPACE_VERSION
}
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @brief Uniform discrete distribution for random numbers.
* A discrete random distribution on the range @f$[min, max]@f$ with equal
diff --git a/libstdc++-v3/include/bits/unordered_map.h b/libstdc++-v3/include/bits/unordered_map.h
index 4ef30ccccd6..df1302c80c0 100644
--- a/libstdc++-v3/include/bits/unordered_map.h
+++ b/libstdc++-v3/include/bits/unordered_map.h
@@ -32,6 +32,7 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/// Base types for unordered_map.
@@ -1911,7 +1912,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_GLIBCXX_END_NAMESPACE_CONTAINER
#if __cplusplus > 201402L
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
// Allow std::unordered_map access to internals of compatible maps.
template<typename _Key, typename _Val, typename _Hash1, typename _Eq1,
typename _Alloc, typename _Hash2, typename _Eq2>
@@ -1959,9 +1959,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
{ return __map._M_h; }
};
-_GLIBCXX_END_NAMESPACE_VERSION
#endif // C++17
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif /* _UNORDERED_MAP_H */
diff --git a/libstdc++-v3/include/bits/unordered_set.h b/libstdc++-v3/include/bits/unordered_set.h
index 85c2562f89e..df57915f31a 100644
--- a/libstdc++-v3/include/bits/unordered_set.h
+++ b/libstdc++-v3/include/bits/unordered_set.h
@@ -32,6 +32,7 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/// Base types for unordered_set.
@@ -1557,7 +1558,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_GLIBCXX_END_NAMESPACE_CONTAINER
#if __cplusplus > 201402L
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
// Allow std::unordered_set access to internals of compatible sets.
template<typename _Val, typename _Hash1, typename _Eq1, typename _Alloc,
typename _Hash2, typename _Eq2>
@@ -1604,9 +1604,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set)
{ return __set._M_h; }
};
-_GLIBCXX_END_NAMESPACE_VERSION
#endif // C++17
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif /* _UNORDERED_SET_H */
diff --git a/libstdc++-v3/include/bits/vector.tcc b/libstdc++-v3/include/bits/vector.tcc
index da4a64cbd1f..f14caaa713f 100644
--- a/libstdc++-v3/include/bits/vector.tcc
+++ b/libstdc++-v3/include/bits/vector.tcc
@@ -58,6 +58,7 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<typename _Tp, typename _Alloc>
@@ -73,6 +74,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
pointer __tmp = _M_allocate_and_copy(__n,
_GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(this->_M_impl._M_start),
_GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(this->_M_impl._M_finish));
+ _GLIBCXX_ASAN_ANNOTATE_REINIT;
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
_M_get_Tp_allocator());
_M_deallocate(this->_M_impl._M_start,
@@ -97,9 +99,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
{
+ _GLIBCXX_ASAN_ANNOTATE_GROW(1);
_Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
std::forward<_Args>(__args)...);
++this->_M_impl._M_finish;
+ _GLIBCXX_ASAN_ANNOTATE_GREW(1);
}
else
_M_realloc_insert(end(), std::forward<_Args>(__args)...);
@@ -122,9 +126,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
if (__position == end())
{
+ _GLIBCXX_ASAN_ANNOTATE_GROW(1);
_Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
__x);
++this->_M_impl._M_finish;
+ _GLIBCXX_ASAN_ANNOTATE_GREW(1);
}
else
{
@@ -157,6 +163,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_GLIBCXX_MOVE3(__position + 1, end(), __position);
--this->_M_impl._M_finish;
_Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
+ _GLIBCXX_ASAN_ANNOTATE_SHRINK(1);
return __position;
}
@@ -181,6 +188,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
if (&__x != this)
{
+ _GLIBCXX_ASAN_ANNOTATE_REINIT;
#if __cplusplus >= 201103L
if (_Alloc_traits::_S_propagate_on_copy_assign())
{
@@ -245,10 +253,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
else if (__n > size())
{
std::fill(begin(), end(), __val);
+ const size_type __add = __n - size();
+ _GLIBCXX_ASAN_ANNOTATE_GROW(__add);
this->_M_impl._M_finish =
std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
- __n - size(), __val,
- _M_get_Tp_allocator());
+ __add, __val, _M_get_Tp_allocator());
+ _GLIBCXX_ASAN_ANNOTATE_GREW(__add);
}
else
_M_erase_at_end(std::fill_n(this->_M_impl._M_start, __n, __val));
@@ -284,6 +294,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
if (__len > capacity())
{
pointer __tmp(_M_allocate_and_copy(__len, __first, __last));
+ _GLIBCXX_ASAN_ANNOTATE_REINIT;
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
_M_get_Tp_allocator());
_M_deallocate(this->_M_impl._M_start,
@@ -300,10 +311,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_ForwardIterator __mid = __first;
std::advance(__mid, size());
std::copy(__first, __mid, this->_M_impl._M_start);
+ const size_type __attribute__((__unused__)) __n = __len - size();
+ _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
this->_M_impl._M_finish =
std::__uninitialized_copy_a(__mid, __last,
this->_M_impl._M_finish,
_M_get_Tp_allocator());
+ _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
}
}
@@ -317,9 +331,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
if (__position == cend())
{
+ _GLIBCXX_ASAN_ANNOTATE_GROW(1);
_Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
std::move(__v));
++this->_M_impl._M_finish;
+ _GLIBCXX_ASAN_ANNOTATE_GREW(1);
}
else
_M_insert_aux(begin() + __n, std::move(__v));
@@ -340,9 +356,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
if (__position == cend())
{
+ _GLIBCXX_ASAN_ANNOTATE_GROW(1);
_Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
std::forward<_Args>(__args)...);
++this->_M_impl._M_finish;
+ _GLIBCXX_ASAN_ANNOTATE_GREW(1);
}
else
{
@@ -370,10 +388,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_M_insert_aux(iterator __position, const _Tp& __x)
#endif
{
+ _GLIBCXX_ASAN_ANNOTATE_GROW(1);
_Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
- _GLIBCXX_MOVE(*(this->_M_impl._M_finish
- - 1)));
+ _GLIBCXX_MOVE(*(this->_M_impl._M_finish - 1)));
++this->_M_impl._M_finish;
+ _GLIBCXX_ASAN_ANNOTATE_GREW(1);
#if __cplusplus < 201103L
_Tp __x_copy = __x;
#endif
@@ -443,11 +462,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_M_deallocate(__new_start, __len);
__throw_exception_again;
}
+ _GLIBCXX_ASAN_ANNOTATE_REINIT;
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
_M_get_Tp_allocator());
_M_deallocate(this->_M_impl._M_start,
- this->_M_impl._M_end_of_storage
- - this->_M_impl._M_start);
+ this->_M_impl._M_end_of_storage - this->_M_impl._M_start);
this->_M_impl._M_start = __new_start;
this->_M_impl._M_finish = __new_finish;
this->_M_impl._M_end_of_storage = __new_start + __len;
@@ -473,11 +492,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
pointer __old_finish(this->_M_impl._M_finish);
if (__elems_after > __n)
{
+ _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
std::__uninitialized_move_a(this->_M_impl._M_finish - __n,
this->_M_impl._M_finish,
this->_M_impl._M_finish,
_M_get_Tp_allocator());
this->_M_impl._M_finish += __n;
+ _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
_GLIBCXX_MOVE_BACKWARD3(__position.base(),
__old_finish - __n, __old_finish);
std::fill(__position.base(), __position.base() + __n,
@@ -485,15 +506,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
}
else
{
+ _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
this->_M_impl._M_finish =
std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
__n - __elems_after,
__x_copy,
_M_get_Tp_allocator());
+ _GLIBCXX_ASAN_ANNOTATE_GREW(__n - __elems_after);
std::__uninitialized_move_a(__position.base(), __old_finish,
this->_M_impl._M_finish,
_M_get_Tp_allocator());
this->_M_impl._M_finish += __elems_after;
+ _GLIBCXX_ASAN_ANNOTATE_GREW(__elems_after);
std::fill(__position.base(), __old_finish, __x_copy);
}
}
@@ -536,6 +560,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_M_deallocate(__new_start, __len);
__throw_exception_again;
}
+ _GLIBCXX_ASAN_ANNOTATE_REINIT;
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
_M_get_Tp_allocator());
_M_deallocate(this->_M_impl._M_start,
@@ -559,9 +584,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
if (size_type(this->_M_impl._M_end_of_storage
- this->_M_impl._M_finish) >= __n)
{
+ _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
this->_M_impl._M_finish =
std::__uninitialized_default_n_a(this->_M_impl._M_finish,
__n, _M_get_Tp_allocator());
+ _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
}
else
{
@@ -587,6 +614,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_M_deallocate(__new_start, __len);
__throw_exception_again;
}
+ _GLIBCXX_ASAN_ANNOTATE_REINIT;
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
_M_get_Tp_allocator());
_M_deallocate(this->_M_impl._M_start,
@@ -606,6 +634,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
if (capacity() == size())
return false;
+ _GLIBCXX_ASAN_ANNOTATE_REINIT;
return std::__shrink_to_fit_aux<vector>::_S_do_it(*this);
}
#endif
@@ -648,11 +677,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
pointer __old_finish(this->_M_impl._M_finish);
if (__elems_after > __n)
{
+ _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
std::__uninitialized_move_a(this->_M_impl._M_finish - __n,
this->_M_impl._M_finish,
this->_M_impl._M_finish,
_M_get_Tp_allocator());
this->_M_impl._M_finish += __n;
+ _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
_GLIBCXX_MOVE_BACKWARD3(__position.base(),
__old_finish - __n, __old_finish);
std::copy(__first, __last, __position);
@@ -661,15 +692,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
_ForwardIterator __mid = __first;
std::advance(__mid, __elems_after);
+ _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
std::__uninitialized_copy_a(__mid, __last,
this->_M_impl._M_finish,
_M_get_Tp_allocator());
this->_M_impl._M_finish += __n - __elems_after;
+ _GLIBCXX_ASAN_ANNOTATE_GREW(__n - __elems_after);
std::__uninitialized_move_a(__position.base(),
__old_finish,
this->_M_impl._M_finish,
_M_get_Tp_allocator());
this->_M_impl._M_finish += __elems_after;
+ _GLIBCXX_ASAN_ANNOTATE_GREW(__elems_after);
std::copy(__first, __mid, __position);
}
}
@@ -701,6 +735,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_M_deallocate(__new_start, __len);
__throw_exception_again;
}
+ _GLIBCXX_ASAN_ANNOTATE_REINIT;
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
_M_get_Tp_allocator());
_M_deallocate(this->_M_impl._M_start,
@@ -863,6 +898,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#endif
_GLIBCXX_END_NAMESPACE_CONTAINER
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#if __cplusplus >= 201103L
@@ -909,4 +945,9 @@ _GLIBCXX_END_NAMESPACE_VERSION
#endif // C++11
+#undef _GLIBCXX_ASAN_ANNOTATE_REINIT
+#undef _GLIBCXX_ASAN_ANNOTATE_GROW
+#undef _GLIBCXX_ASAN_ANNOTATE_GREW
+#undef _GLIBCXX_ASAN_ANNOTATE_SHRINK
+
#endif /* _VECTOR_TCC */
diff --git a/libstdc++-v3/include/decimal/decimal b/libstdc++-v3/include/decimal/decimal
index b167a7ac7f2..adc4619d944 100644
--- a/libstdc++-v3/include/decimal/decimal
+++ b/libstdc++-v3/include/decimal/decimal
@@ -42,6 +42,8 @@ that is currently not available.
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
/**
* @defgroup decimal Decimal Floating-Point Arithmetic
* @ingroup numerics
@@ -55,8 +57,6 @@ namespace std _GLIBCXX_VISIBILITY(default)
*/
namespace decimal
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
class decimal32;
class decimal64;
class decimal128;
@@ -483,10 +483,10 @@ namespace decimal
};
#define _GLIBCXX_USE_DECIMAL_ 1
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace decimal
// @} group decimal
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#include <decimal/decimal.h>
diff --git a/libstdc++-v3/include/decimal/decimal.h b/libstdc++-v3/include/decimal/decimal.h
index ede6e57c998..d4118962614 100644
--- a/libstdc++-v3/include/decimal/decimal.h
+++ b/libstdc++-v3/include/decimal/decimal.h
@@ -37,10 +37,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace decimal
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// ISO/IEC TR 24733 3.2.[234].1 Construct/copy/destroy.
inline decimal32::decimal32(decimal64 __r) : __val(__r.__getval()) {}
@@ -461,8 +461,9 @@ namespace decimal
#undef _DEFINE_DECIMAL_COMPARISON_LHS
#undef _DEFINE_DECIMAL_COMPARISON_RHS
#undef _DEFINE_DECIMAL_COMPARISONS
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace decimal
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif /* _GLIBCXX_DECIMAL_IMPL */
diff --git a/libstdc++-v3/include/experimental/algorithm b/libstdc++-v3/include/experimental/algorithm
index a7ab0e84c12..15391b1e9f2 100644
--- a/libstdc++-v3/include/experimental/algorithm
+++ b/libstdc++-v3/include/experimental/algorithm
@@ -40,12 +40,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _ForwardIterator, typename _Searcher>
inline _ForwardIterator
search(_ForwardIterator __first, _ForwardIterator __last,
@@ -81,10 +81,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__d,
std::forward<_UniformRandomNumberGenerator>(__g));
}
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v1
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/any b/libstdc++-v3/include/experimental/any
index 36c0680c25a..984306dfce8 100644
--- a/libstdc++-v3/include/experimental/any
+++ b/libstdc++-v3/include/experimental/any
@@ -43,12 +43,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @defgroup any Type-safe container of any type
* @ingroup experimental
@@ -520,9 +520,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
// @} group any
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v1
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/array b/libstdc++-v3/include/experimental/array
index 11cb924e087..9d758f7d149 100644
--- a/libstdc++-v3/include/experimental/array
+++ b/libstdc++-v3/include/experimental/array
@@ -40,12 +40,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
#define __cpp_lib_experimental_make_array 201505
/**
* @defgroup make_array Array creation functions
@@ -104,10 +104,10 @@ template <typename _Tp, size_t _Nm>
}
// @} group make_array
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v2
} // namespace experimental
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/bits/erase_if.h b/libstdc++-v3/include/experimental/bits/erase_if.h
index 7dc47dbb3eb..cc89ffad900 100644
--- a/libstdc++-v3/include/experimental/bits/erase_if.h
+++ b/libstdc++-v3/include/experimental/bits/erase_if.h
@@ -39,13 +39,14 @@
namespace std
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
namespace __detail
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Container, typename _Predicate>
void
__erase_nodes_if(_Container& __cont, _Predicate __pred)
@@ -59,10 +60,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
++__iter;
}
}
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
} // inline namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/bits/fs_dir.h b/libstdc++-v3/include/experimental/bits/fs_dir.h
index 0efaf944f60..1ff0d9b6def 100644
--- a/libstdc++-v3/include/experimental/bits/fs_dir.h
+++ b/libstdc++-v3/include/experimental/bits/fs_dir.h
@@ -40,14 +40,14 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
namespace filesystem
{
inline namespace v1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @ingroup filesystem
* @{
@@ -352,10 +352,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
_GLIBCXX_END_NAMESPACE_CXX11
// @} group filesystem
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace v1
} // namespace filesystem
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++11
diff --git a/libstdc++-v3/include/experimental/bits/fs_fwd.h b/libstdc++-v3/include/experimental/bits/fs_fwd.h
index c5aeefe41a7..7b851a3d4a8 100644
--- a/libstdc++-v3/include/experimental/bits/fs_fwd.h
+++ b/libstdc++-v3/include/experimental/bits/fs_fwd.h
@@ -40,17 +40,14 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
namespace filesystem
{
inline namespace v1
{
-#if _GLIBCXX_INLINE_VERSION
-inline namespace __8 { }
-#endif
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
#if _GLIBCXX_USE_CXX11_ABI
inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
#endif
@@ -282,10 +279,11 @@ _GLIBCXX_END_NAMESPACE_CXX11
bool is_symlink(file_status) noexcept;
// @} group filesystem
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace v1
} // namespace filesystem
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++11
diff --git a/libstdc++-v3/include/experimental/bits/fs_ops.h b/libstdc++-v3/include/experimental/bits/fs_ops.h
index 1b455f541ba..387537260e0 100644
--- a/libstdc++-v3/include/experimental/bits/fs_ops.h
+++ b/libstdc++-v3/include/experimental/bits/fs_ops.h
@@ -38,14 +38,14 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
namespace filesystem
{
inline namespace v1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @ingroup filesystem
* @{
@@ -286,10 +286,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
path temp_directory_path(error_code& __ec);
// @} group filesystem
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace v1
} // namespace filesystem
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++11
diff --git a/libstdc++-v3/include/experimental/bits/fs_path.h b/libstdc++-v3/include/experimental/bits/fs_path.h
index 3d639447254..cde3897b8e5 100644
--- a/libstdc++-v3/include/experimental/bits/fs_path.h
+++ b/libstdc++-v3/include/experimental/bits/fs_path.h
@@ -55,13 +55,14 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
namespace filesystem
{
inline namespace v1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CXX11
#if __cplusplus == 201402L
@@ -1080,10 +1081,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
// @} group filesystem
_GLIBCXX_END_NAMESPACE_CXX11
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace v1
} // namespace filesystem
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++11
diff --git a/libstdc++-v3/include/experimental/bits/lfts_config.h b/libstdc++-v3/include/experimental/bits/lfts_config.h
index ecc40c4327f..3b832706da0 100644
--- a/libstdc++-v3/include/experimental/bits/lfts_config.h
+++ b/libstdc++-v3/include/experimental/bits/lfts_config.h
@@ -35,30 +35,25 @@
#if _GLIBCXX_INLINE_VERSION
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace chrono
{
namespace experimental
{
-inline namespace fundamentals_v1 { inline namespace __8 { } }
-inline namespace fundamentals_v2 { inline namespace __8 { } }
+inline namespace fundamentals_v1 { }
+inline namespace fundamentals_v2 { }
} // namespace experimental
} // namespace chrono
namespace experimental
{
-inline namespace fundamentals_v1 {
- inline namespace __8 { }
- namespace __detail { inline namespace __8 { } }
-}
-inline namespace fundamentals_v2 {
- inline namespace __8 { }
- namespace pmr { inline namespace __8 { } }
- namespace __detail { inline namespace __8 { } }
-} // namespace fundamentals_v2
-inline namespace literals { inline namespace string_view_literals {
- inline namespace __8 { }
-} } // namespace literals::string_view_literals
+inline namespace fundamentals_v1 { }
+inline namespace fundamentals_v2 { }
+inline namespace literals { inline namespace string_view_literals { } }
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif
#endif
diff --git a/libstdc++-v3/include/experimental/bits/shared_ptr.h b/libstdc++-v3/include/experimental/bits/shared_ptr.h
index 27f22d23618..ef391eb641f 100644
--- a/libstdc++-v3/include/experimental/bits/shared_ptr.h
+++ b/libstdc++-v3/include/experimental/bits/shared_ptr.h
@@ -41,12 +41,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// 8.2.1
template<typename _Tp> class shared_ptr;
@@ -659,13 +659,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
mutable weak_ptr<_Tp> _M_weak_this;
};
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v2
} // namespace experimental
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/// std::hash specialization for shared_ptr.
template<typename _Tp>
struct hash<experimental::shared_ptr<_Tp>>
diff --git a/libstdc++-v3/include/experimental/bits/string_view.tcc b/libstdc++-v3/include/experimental/bits/string_view.tcc
index 03863d0a9df..e66932d1ac0 100644
--- a/libstdc++-v3/include/experimental/bits/string_view.tcc
+++ b/libstdc++-v3/include/experimental/bits/string_view.tcc
@@ -42,12 +42,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _CharT, typename _Traits>
typename basic_string_view<_CharT, _Traits>::size_type
basic_string_view<_CharT, _Traits>::
@@ -222,10 +222,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
return npos;
}
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v1
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // __cplusplus <= 201103L
diff --git a/libstdc++-v3/include/experimental/chrono b/libstdc++-v3/include/experimental/chrono
index 4247c9df746..71e36d2d86d 100644
--- a/libstdc++-v3/include/experimental/chrono
+++ b/libstdc++-v3/include/experimental/chrono
@@ -44,20 +44,21 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace chrono {
namespace experimental
{
inline namespace fundamentals_v1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
// See C++14 §20.12.4, customization traits
template <typename _Rep>
constexpr bool treat_as_floating_point_v =
treat_as_floating_point<_Rep>::value;
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v1
} // namespace experimental
} // namespace chrono
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // __cplusplus <= 201103L
diff --git a/libstdc++-v3/include/experimental/deque b/libstdc++-v3/include/experimental/deque
index c92476f915d..0180a750883 100644
--- a/libstdc++-v3/include/experimental/deque
+++ b/libstdc++-v3/include/experimental/deque
@@ -41,12 +41,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _Tp, typename _Alloc, typename _Predicate>
void
erase_if(deque<_Tp, _Alloc>& __cont, _Predicate __pred)
@@ -63,19 +63,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__cont.end());
}
-_GLIBCXX_END_NAMESPACE_VERSION
-
-namespace pmr {
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- template<typename _Tp>
- using deque = std::deque<_Tp, polymorphic_allocator<_Tp>>;
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace pmr
+ namespace pmr {
+ template<typename _Tp>
+ using deque = std::deque<_Tp, polymorphic_allocator<_Tp>>;
+ } // namespace pmr
} // namespace fundamentals_v2
} // namespace experimental
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/filesystem b/libstdc++-v3/include/experimental/filesystem
index 2f353693dbe..7953c802cd3 100644
--- a/libstdc++-v3/include/experimental/filesystem
+++ b/libstdc++-v3/include/experimental/filesystem
@@ -44,14 +44,14 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
namespace filesystem
{
inline namespace v1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @ingroup filesystem
*/
@@ -65,11 +65,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__what += " [" + _M_path2.string() + ']';
return __what;
}
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace v1
} // namespace filesystem
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++11
diff --git a/libstdc++-v3/include/experimental/forward_list b/libstdc++-v3/include/experimental/forward_list
index 1c835aca07e..5109cb57ade 100644
--- a/libstdc++-v3/include/experimental/forward_list
+++ b/libstdc++-v3/include/experimental/forward_list
@@ -40,12 +40,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _Tp, typename _Alloc, typename _Predicate>
inline void
erase_if(forward_list<_Tp, _Alloc>& __cont, _Predicate __pred)
@@ -59,19 +59,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
erase_if(__cont, [&](__elem_type& __elem) { return __elem == __value; });
}
-_GLIBCXX_END_NAMESPACE_VERSION
-
-namespace pmr {
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- template<typename _Tp>
- using forward_list = std::forward_list<_Tp, polymorphic_allocator<_Tp>>;
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace pmr
+ namespace pmr {
+ template<typename _Tp>
+ using forward_list = std::forward_list<_Tp, polymorphic_allocator<_Tp>>;
+ } // namespace pmr
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/functional b/libstdc++-v3/include/experimental/functional
index 4639e6f6cb3..3327399b4d4 100644
--- a/libstdc++-v3/include/experimental/functional
+++ b/libstdc++-v3/include/experimental/functional
@@ -49,12 +49,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// See C++14 §20.9.9, Function object binders
/// Variable template for std::is_bind_expression
@@ -368,14 +368,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
return __last;
}
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v1
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
#define __cpp_lib_experimental_not_fn 201406
/// [func.not_fn] Function template not_fn
@@ -386,10 +382,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
return std::_Not_fn<std::decay_t<_Fn>>{std::forward<_Fn>(__fn), 0};
}
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/iterator b/libstdc++-v3/include/experimental/iterator
index 8a8395da759..553009c92b0 100644
--- a/libstdc++-v3/include/experimental/iterator
+++ b/libstdc++-v3/include/experimental/iterator
@@ -45,12 +45,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
#define __cpp_lib_experimental_ostream_joiner 201411
/// Output iterator that inserts a delimiter between elements.
@@ -105,10 +105,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
make_ostream_joiner(basic_ostream<_CharT, _Traits>& __os,
_DelimT&& __delimiter)
{ return { __os, std::forward<_DelimT>(__delimiter) }; }
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // __cplusplus <= 201103L
diff --git a/libstdc++-v3/include/experimental/list b/libstdc++-v3/include/experimental/list
index 9409431c4d8..94663ad030a 100644
--- a/libstdc++-v3/include/experimental/list
+++ b/libstdc++-v3/include/experimental/list
@@ -40,12 +40,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _Tp, typename _Alloc, typename _Predicate>
inline void
erase_if(list<_Tp, _Alloc>& __cont, _Predicate __pred)
@@ -59,19 +59,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
erase_if(__cont, [&](__elem_type& __elem) { return __elem == __value; });
}
-_GLIBCXX_END_NAMESPACE_VERSION
-
namespace pmr {
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _Tp>
using list = std::list<_Tp, polymorphic_allocator<_Tp>>;
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace pmr
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/map b/libstdc++-v3/include/experimental/map
index 2bbc1bd5a11..85055967fa5 100644
--- a/libstdc++-v3/include/experimental/map
+++ b/libstdc++-v3/include/experimental/map
@@ -41,12 +41,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _Key, typename _Tp, typename _Compare, typename _Alloc,
typename _Predicate>
inline void
@@ -59,26 +59,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
erase_if(multimap<_Key, _Tp, _Compare, _Alloc>& __cont, _Predicate __pred)
{ __detail::__erase_nodes_if(__cont, __pred); }
-_GLIBCXX_END_NAMESPACE_VERSION
-
-namespace pmr {
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- template<typename _Key, typename _Tp, typename _Compare = less<_Key>>
- using map
+ namespace pmr {
+ template<typename _Key, typename _Tp, typename _Compare = less<_Key>>
+ using map
= std::map<_Key, _Tp, _Compare,
polymorphic_allocator<pair<const _Key, _Tp>>>;
- template<typename _Key, typename _Tp, typename _Compare = less<_Key>>
- using multimap
+ template<typename _Key, typename _Tp, typename _Compare = less<_Key>>
+ using multimap
= std::multimap<_Key, _Tp, _Compare,
polymorphic_allocator<pair<const _Key, _Tp>>>;
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace pmr
-
+ } // namespace pmr
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/memory b/libstdc++-v3/include/experimental/memory
index 7467674db81..33a154bf50c 100644
--- a/libstdc++-v3/include/experimental/memory
+++ b/libstdc++-v3/include/experimental/memory
@@ -47,12 +47,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
#define __cpp_lib_experimental_observer_ptr 201411
template <typename _Tp>
@@ -231,8 +231,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
return !(__p1 < __p2);
}
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v2
} // namespace experimental
@@ -250,6 +248,8 @@ template <typename _Tp>
}
};
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // __cplusplus <= 201103L
diff --git a/libstdc++-v3/include/experimental/memory_resource b/libstdc++-v3/include/experimental/memory_resource
index 99ace7a7f81..f4ecc5ab1d3 100644
--- a/libstdc++-v3/include/experimental/memory_resource
+++ b/libstdc++-v3/include/experimental/memory_resource
@@ -37,11 +37,11 @@
#include <experimental/bits/lfts_config.h>
namespace std {
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental {
inline namespace fundamentals_v2 {
namespace pmr {
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
#define __cpp_lib_experimental_memory_resources 201402L
class memory_resource;
@@ -379,11 +379,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__r = new_delete_resource();
return __get_default_resource().exchange(__r);
}
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace pmr
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif
diff --git a/libstdc++-v3/include/experimental/numeric b/libstdc++-v3/include/experimental/numeric
index b7b8207069f..33e7b55ef90 100644
--- a/libstdc++-v3/include/experimental/numeric
+++ b/libstdc++-v3/include/experimental/numeric
@@ -44,12 +44,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
#define __cpp_lib_experimental_gcd_lcm 201411
/// Greatest common divisor
@@ -75,10 +75,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static_assert(!is_same<_Nn, bool>::value, "lcm arguments are not bools");
return std::__detail::__lcm(__m, __n);
}
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // __cplusplus <= 201103L
diff --git a/libstdc++-v3/include/experimental/optional b/libstdc++-v3/include/experimental/optional
index 4a1e71d4234..d4c58a600bf 100644
--- a/libstdc++-v3/include/experimental/optional
+++ b/libstdc++-v3/include/experimental/optional
@@ -57,12 +57,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @defgroup optional Optional values
* @ingroup experimental
@@ -980,9 +980,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return optional<decay_t<_Tp>> { std::forward<_Tp>(__t) }; }
// @} group optional
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v1
-}
+} // namespace experimental
// [X.Y.12]
template<typename _Tp>
@@ -1001,7 +1000,9 @@ _GLIBCXX_END_NAMESPACE_VERSION
return __t ? hash<_Tp> {}(*__t) : __magic_disengaged_hash;
}
};
-}
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/propagate_const b/libstdc++-v3/include/experimental/propagate_const
index 719e17aa3d0..639f21a979e 100644
--- a/libstdc++-v3/include/experimental/propagate_const
+++ b/libstdc++-v3/include/experimental/propagate_const
@@ -43,12 +43,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @defgroup propagate_const Const-propagating wrapper
* @ingroup experimental
@@ -424,7 +424,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
// @} group propagate_const
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v2
} // namespace experimental
@@ -533,6 +532,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef experimental::propagate_const<_Tp> second_argument_type;
typedef bool result_type;
};
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/random b/libstdc++-v3/include/experimental/random
index e28df5df721..2d22544e9ca 100644
--- a/libstdc++-v3/include/experimental/random
+++ b/libstdc++-v3/include/experimental/random
@@ -33,10 +33,10 @@
#include <experimental/bits/lfts_config.h>
namespace std {
-namespace experimental {
-inline namespace fundamentals_v2 {
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace experimental {
+inline namespace fundamentals_v2 {
#define __cpp_lib_experimental_randint 201511
inline std::default_random_engine&
@@ -71,10 +71,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
_S_randint_engine().seed(__value);
}
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif
diff --git a/libstdc++-v3/include/experimental/ratio b/libstdc++-v3/include/experimental/ratio
index ffbae76ca79..bc2d0f267b2 100644
--- a/libstdc++-v3/include/experimental/ratio
+++ b/libstdc++-v3/include/experimental/ratio
@@ -44,12 +44,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// See C++14 §20.11.5, ratio comparison
template <typename _R1, typename _R2>
constexpr bool ratio_equal_v = ratio_equal<_R1, _R2>::value;
@@ -63,10 +63,10 @@ template <typename _R1, typename _R2>
constexpr bool ratio_greater_v = ratio_greater<_R1, _R2>::value;
template <typename _R1, typename _R2>
constexpr bool ratio_greater_equal_v = ratio_greater_equal<_R1, _R2>::value;
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v1
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // __cplusplus <= 201103L
diff --git a/libstdc++-v3/include/experimental/regex b/libstdc++-v3/include/experimental/regex
index 9b5679fc78e..bfcaf6b85c3 100644
--- a/libstdc++-v3/include/experimental/regex
+++ b/libstdc++-v3/include/experimental/regex
@@ -40,13 +40,14 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
namespace pmr
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_CXX11
template<typename _BidirectionalIterator>
@@ -60,11 +61,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
typedef match_results<wstring::const_iterator> wsmatch;
_GLIBCXX_END_NAMESPACE_CXX11
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace pmr
} // namespace fundamentals_v2
} // namespace experimental
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/set b/libstdc++-v3/include/experimental/set
index a10617bb2a9..fba136c90c5 100644
--- a/libstdc++-v3/include/experimental/set
+++ b/libstdc++-v3/include/experimental/set
@@ -41,12 +41,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _Key, typename _Compare, typename _Alloc,
typename _Predicate>
inline void
@@ -59,23 +59,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
erase_if(multiset<_Key, _Compare, _Alloc>& __cont, _Predicate __pred)
{ __detail::__erase_nodes_if(__cont, __pred); }
-_GLIBCXX_END_NAMESPACE_VERSION
-
-namespace pmr {
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- template<typename _Key, typename _Compare = less<_Key>>
- using set = std::set<_Key, _Compare, polymorphic_allocator<_Key>>;
-
- template<typename _Key, typename _Compare = less<_Key>>
- using multiset = std::multiset<_Key, _Compare,
- polymorphic_allocator<_Key>>;
+ namespace pmr {
+ template<typename _Key, typename _Compare = less<_Key>>
+ using set = std::set<_Key, _Compare, polymorphic_allocator<_Key>>;
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace pmr
+ template<typename _Key, typename _Compare = less<_Key>>
+ using multiset = std::multiset<_Key, _Compare,
+ polymorphic_allocator<_Key>>;
+ } // namespace pmr
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/source_location b/libstdc++-v3/include/experimental/source_location
index b06d8b651ae..a7fa95549b3 100644
--- a/libstdc++-v3/include/experimental/source_location
+++ b/libstdc++-v3/include/experimental/source_location
@@ -32,10 +32,10 @@
#include <cstdint>
namespace std {
-namespace experimental {
-inline namespace fundamentals_v2 {
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace experimental {
+inline namespace fundamentals_v2 {
#define __cpp_lib_experimental_source_location 201505
struct source_location
@@ -77,10 +77,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
uint_least32_t _M_line;
uint_least32_t _M_col;
};
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif
diff --git a/libstdc++-v3/include/experimental/string b/libstdc++-v3/include/experimental/string
index 5347991959e..893013b1869 100644
--- a/libstdc++-v3/include/experimental/string
+++ b/libstdc++-v3/include/experimental/string
@@ -41,12 +41,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _CharT, typename _Traits, typename _Alloc,
typename _Predicate>
inline void
@@ -64,30 +64,27 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__cont.end());
}
-_GLIBCXX_END_NAMESPACE_VERSION
+ namespace pmr {
+ _GLIBCXX_BEGIN_NAMESPACE_CXX11
-namespace pmr {
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-_GLIBCXX_BEGIN_NAMESPACE_CXX11
+ // basic_string using polymorphic allocator in namespace pmr
+ template<typename _CharT, typename _Traits = char_traits<_CharT>>
+ using basic_string =
+ std::basic_string<_CharT, _Traits, polymorphic_allocator<_CharT>>;
- // basic_string using polymorphic allocator in namespace pmr
- template<typename _CharT, typename _Traits = char_traits<_CharT>>
- using basic_string =
- std::basic_string<_CharT, _Traits, polymorphic_allocator<_CharT>>;
-
- // basic_string typedef names using polymorphic allocator in namespace
- // std::experimental::pmr
- typedef basic_string<char> string;
- typedef basic_string<char16_t> u16string;
- typedef basic_string<char32_t> u32string;
- typedef basic_string<wchar_t> wstring;
-
-_GLIBCXX_END_NAMESPACE_CXX11
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace pmr
+ // basic_string typedef names using polymorphic allocator in namespace
+ // std::experimental::pmr
+ typedef basic_string<char> string;
+ typedef basic_string<char16_t> u16string;
+ typedef basic_string<char32_t> u32string;
+ typedef basic_string<wchar_t> wstring;
+ _GLIBCXX_END_NAMESPACE_CXX11
+ } // namespace pmr
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/string_view b/libstdc++-v3/include/experimental/string_view
index bd212ac3719..5cec5597744 100644
--- a/libstdc++-v3/include/experimental/string_view
+++ b/libstdc++-v3/include/experimental/string_view
@@ -45,12 +45,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
#define __cpp_lib_experimental_string_view 201411
/**
@@ -434,23 +434,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const _CharT* _M_str;
};
-_GLIBCXX_END_NAMESPACE_VERSION
-
// [string.view.comparison], non-member basic_string_view comparison functions
namespace __detail
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
// Identity transform to create a non-deduced context, so that only one
// argument participates in template argument deduction and the other
// argument gets implicitly converted to the deduced type. See n3766.html.
template<typename _Tp>
using __idt = common_type_t<_Tp>;
-_GLIBCXX_END_NAMESPACE_VERSION
}
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _CharT, typename _Traits>
inline bool
operator==(basic_string_view<_CharT, _Traits> __x,
@@ -577,15 +571,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using u16string_view = basic_string_view<char16_t>;
using u32string_view = basic_string_view<char32_t>;
#endif
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v1
} // namespace experimental
// [string.view.hash], hash support:
-
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp>
struct hash;
@@ -647,7 +637,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct __is_fast_hash<hash<experimental::u32string_view>> : std::false_type
{ };
#endif
-_GLIBCXX_END_NAMESPACE_VERSION
namespace experimental
{
@@ -656,8 +645,6 @@ namespace experimental
{
inline namespace string_view_literals
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
inline constexpr basic_string_view<char>
operator""sv(const char* __str, size_t __len)
{ return basic_string_view<char>{__str, __len}; }
@@ -677,11 +664,11 @@ namespace experimental
operator""sv(const char32_t* __str, size_t __len)
{ return basic_string_view<char32_t>{__str, __len}; }
#endif
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace string_literals
} // namespace literals
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#include <experimental/bits/string_view.tcc>
diff --git a/libstdc++-v3/include/experimental/system_error b/libstdc++-v3/include/experimental/system_error
index 2b4855dba72..2bad7503b2f 100644
--- a/libstdc++-v3/include/experimental/system_error
+++ b/libstdc++-v3/include/experimental/system_error
@@ -44,22 +44,22 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// See C++14 §19.5, System error support
template <typename _Tp>
constexpr bool is_error_code_enum_v = is_error_code_enum<_Tp>::value;
template <typename _Tp>
constexpr bool is_error_condition_enum_v =
is_error_condition_enum<_Tp>::value;
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v1
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // __cplusplus <= 201103L
diff --git a/libstdc++-v3/include/experimental/tuple b/libstdc++-v3/include/experimental/tuple
index 879636eecd8..a12fa0a3327 100644
--- a/libstdc++-v3/include/experimental/tuple
+++ b/libstdc++-v3/include/experimental/tuple
@@ -41,12 +41,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// See C++14 §20.4.2.5, tuple helper classes
template <typename _Tp>
constexpr size_t tuple_size_v = tuple_size<_Tp>::value;
@@ -71,10 +71,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
std::forward<_Tuple>(__t),
_Indices{});
}
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v1
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/type_traits b/libstdc++-v3/include/experimental/type_traits
index 7ec06308ba9..3885c168e31 100644
--- a/libstdc++-v3/include/experimental/type_traits
+++ b/libstdc++-v3/include/experimental/type_traits
@@ -44,12 +44,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
#define __cpp_lib_experimental_type_trait_variable_templates 201402
// See C++14 §20.10.4.1, primary type categories
@@ -218,13 +218,10 @@ template <typename _From, typename _To>
// raw_invocation_type (still unimplemented)
// invocation_type_t (still unimplemented)
// raw_invocation_type_t (still unimplemented)
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v1
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
#define __cpp_lib_experimental_detect 201505
// [meta.detect]
@@ -299,10 +296,10 @@ template<typename... _Bn>
template<typename _Pp>
constexpr bool negation_v
= negation<_Pp>::value;
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // __cplusplus <= 201103L
diff --git a/libstdc++-v3/include/experimental/unordered_map b/libstdc++-v3/include/experimental/unordered_map
index fbc44b267b5..cddd5b3d78c 100644
--- a/libstdc++-v3/include/experimental/unordered_map
+++ b/libstdc++-v3/include/experimental/unordered_map
@@ -41,12 +41,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _Key, typename _Tp, typename _Hash, typename _CPred,
typename _Alloc, typename _Predicate>
inline void
@@ -61,28 +61,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Predicate __pred)
{ __detail::__erase_nodes_if(__cont, __pred); }
-_GLIBCXX_END_NAMESPACE_VERSION
-
-namespace pmr {
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
- typename _Pred = equal_to<_Key>>
- using unordered_map
+ namespace pmr {
+ template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
+ typename _Pred = equal_to<_Key>>
+ using unordered_map
= std::unordered_map<_Key, _Tp, _Hash, _Pred,
polymorphic_allocator<pair<const _Key, _Tp>>>;
- template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
- typename _Pred = equal_to<_Key>>
- using unordered_multimap
+ template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
+ typename _Pred = equal_to<_Key>>
+ using unordered_multimap
= std::unordered_multimap<_Key, _Tp, _Hash, _Pred,
polymorphic_allocator<pair<const _Key, _Tp>>>;
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace pmr
+ } // namespace pmr
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/unordered_set b/libstdc++-v3/include/experimental/unordered_set
index 3c8fe255275..816327f9ba7 100644
--- a/libstdc++-v3/include/experimental/unordered_set
+++ b/libstdc++-v3/include/experimental/unordered_set
@@ -41,12 +41,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _Key, typename _Hash, typename _CPred, typename _Alloc,
typename _Predicate>
inline void
@@ -61,27 +61,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Predicate __pred)
{ __detail::__erase_nodes_if(__cont, __pred); }
-_GLIBCXX_END_NAMESPACE_VERSION
-
-namespace pmr {
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- template<typename _Key, typename _Hash = hash<_Key>,
- typename _Pred = equal_to<_Key>>
- using unordered_set
+ namespace pmr {
+ template<typename _Key, typename _Hash = hash<_Key>,
+ typename _Pred = equal_to<_Key>>
+ using unordered_set
= std::unordered_set<_Key, _Hash, _Pred, polymorphic_allocator<_Key>>;
- template<typename _Key, typename _Hash = hash<_Key>,
- typename _Pred = equal_to<_Key>>
- using unordered_multiset
+ template<typename _Key, typename _Hash = hash<_Key>,
+ typename _Pred = equal_to<_Key>>
+ using unordered_multiset
= std::unordered_multiset<_Key, _Hash, _Pred,
polymorphic_allocator<_Key>>;
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace pmr
+ } // namespace pmr
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/experimental/utility b/libstdc++-v3/include/experimental/utility
index db85c5cc62c..5d21d67e387 100644
--- a/libstdc++-v3/include/experimental/utility
+++ b/libstdc++-v3/include/experimental/utility
@@ -34,16 +34,16 @@
#include <experimental/bits/lfts_config.h>
namespace std {
-namespace experimental {
-inline namespace fundamentals_v2 {
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace experimental {
+inline namespace fundamentals_v2 {
// 3.1.2, erased-type placeholder
using erased_type = std::__erased_type;
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif
diff --git a/libstdc++-v3/include/experimental/vector b/libstdc++-v3/include/experimental/vector
index b75a3bc7ce4..e77dd2e4771 100644
--- a/libstdc++-v3/include/experimental/vector
+++ b/libstdc++-v3/include/experimental/vector
@@ -41,12 +41,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace experimental
{
inline namespace fundamentals_v2
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
#define __cpp_lib_experimental_erase_if 201411
template<typename _Tp, typename _Alloc, typename _Predicate>
@@ -65,19 +65,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__cont.end());
}
-_GLIBCXX_END_NAMESPACE_VERSION
-
-namespace pmr {
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- template<typename _Tp>
- using vector = std::vector<_Tp, polymorphic_allocator<_Tp>>;
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace pmr
+ namespace pmr {
+ template<typename _Tp>
+ using vector = std::vector<_Tp, polymorphic_allocator<_Tp>>;
+ } // namespace pmr
} // namespace fundamentals_v2
} // namespace experimental
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
diff --git a/libstdc++-v3/include/ext/bitmap_allocator.h b/libstdc++-v3/include/ext/bitmap_allocator.h
index 3e3126985b7..65541a499eb 100644
--- a/libstdc++-v3/include/ext/bitmap_allocator.h
+++ b/libstdc++-v3/include/ext/bitmap_allocator.h
@@ -44,12 +44,13 @@
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
using std::size_t;
using std::ptrdiff_t;
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
/** @class __mini_vector bitmap_allocator.h bitmap_allocator.h
*
* @brief __mini_vector<> is a stripped down version of the
@@ -501,12 +502,8 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
size_t __mask = 1 << __pos;
*__pbmap |= __mask;
}
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/** @brief Generic Version of the bsf instruction.
*/
inline size_t
@@ -1134,4 +1131,3 @@ _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __gnu_cxx
#endif
-
diff --git a/libstdc++-v3/include/ext/codecvt_specializations.h b/libstdc++-v3/include/ext/codecvt_specializations.h
index 1f0452f4f80..fdc5c5b98bf 100644
--- a/libstdc++-v3/include/ext/codecvt_specializations.h
+++ b/libstdc++-v3/include/ext/codecvt_specializations.h
@@ -41,8 +41,8 @@
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
{
-_GLIBCXX_BEGIN_NAMESPACE_CXX11
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+_GLIBCXX_BEGIN_NAMESPACE_CXX11
/// Extension to use iconv for dealing with character encodings.
// This includes conversions and comparisons between various character
@@ -215,8 +215,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef typename std::fpos<state_type> pos_type;
};
-_GLIBCXX_END_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_CXX11
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
diff --git a/libstdc++-v3/include/ext/math_util.h b/libstdc++-v3/include/ext/math_util.h
index f1259fddaa5..b19bab936e5 100644
--- a/libstdc++-v3/include/ext/math_util.h
+++ b/libstdc++-v3/include/ext/math_util.h
@@ -48,7 +48,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __k & 1 ? _Tp{-1} : _Tp{+1}; }
/**
- * A function to return the max of the absolute values of two numbers
+ * A function to return the maximum of the absolute values of two numbers
* ... so we won't include everything.
* @param __a The left hand side
* @param __b The right hand side
diff --git a/libstdc++-v3/include/ext/polynomial.tcc b/libstdc++-v3/include/ext/polynomial.tcc
index 41b88f41943..df8706cdd06 100644
--- a/libstdc++-v3/include/ext/polynomial.tcc
+++ b/libstdc++-v3/include/ext/polynomial.tcc
@@ -75,7 +75,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __aa;
};
- // Could/should this be done by output iterator range?
+ // Could/should this be done by output iterator range?
template<typename _Tp>
template<typename _Polynomial<_Tp>::size_type N>
void
diff --git a/libstdc++-v3/include/ext/random b/libstdc++-v3/include/ext/random
index c991345886f..3665b285de7 100644
--- a/libstdc++-v3/include/ext/random
+++ b/libstdc++-v3/include/ext/random
@@ -184,6 +184,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __SSE2__
__m128i _M_state[_M_nstate];
#endif
+#ifdef __ARM_NEON
+#ifdef __aarch64__
+ __Uint32x4_t _M_state[_M_nstate];
+#endif
+#endif
uint32_t _M_state32[_M_nstate32];
result_type _M_stateT[state_size];
} __attribute__ ((__aligned__ (16)));
diff --git a/libstdc++-v3/include/ext/rope b/libstdc++-v3/include/ext/rope
index d97b57ff415..9f707a75960 100644
--- a/libstdc++-v3/include/ext/rope
+++ b/libstdc++-v3/include/ext/rope
@@ -65,6 +65,8 @@
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace __detail
{
enum { _S_max_rope_depth = 45 };
@@ -76,8 +78,6 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
using std::allocator;
using std::_Destroy;
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// See libstdc++/36832.
template<typename _ForwardIterator, typename _Allocator>
void
@@ -2937,10 +2937,10 @@ _GLIBCXX_END_NAMESPACE_VERSION
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr1
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr1
+{
template<>
struct hash<__gnu_cxx::crope>
{
@@ -2967,9 +2967,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return 13 * __str[0] + 5 * __str[__size - 1] + __size;
}
};
+} // namespace tr1
_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace tr1
} // namespace std
# include <ext/ropeimpl.h>
diff --git a/libstdc++-v3/include/ext/typelist.h b/libstdc++-v3/include/ext/typelist.h
index 46e653b40c5..3999c153501 100644
--- a/libstdc++-v3/include/ext/typelist.h
+++ b/libstdc++-v3/include/ext/typelist.h
@@ -127,18 +127,7 @@ namespace typelist
template<typename T1, typename T2, typename T3,
typename T4, typename T5, typename T6>
struct create6;
-} // namespace typelist
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
-
-namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
-namespace typelist
-{
namespace detail
{
template<typename Fn, typename Typelist_Chain>
@@ -366,10 +355,6 @@ namespace detail
typedef typename append_type::type::root type;
};
} // namespace detail
-} // namespace typelist
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
#define _GLIBCXX_TYPELIST_CHAIN1(X0) __gnu_cxx::typelist::chain<X0, __gnu_cxx::typelist::null_type>
#define _GLIBCXX_TYPELIST_CHAIN2(X0, X1) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN1(X1) >
@@ -392,12 +377,6 @@ _GLIBCXX_END_NAMESPACE_VERSION
#define _GLIBCXX_TYPELIST_CHAIN19(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN18(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18) >
#define _GLIBCXX_TYPELIST_CHAIN20(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN19(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19) >
-namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
-namespace typelist
-{
template<typename Fn, typename Typelist>
void
apply(Fn& fn, Typelist)
diff --git a/libstdc++-v3/include/std/chrono b/libstdc++-v3/include/std/chrono
index c3a6ba8f873..1bcbf524a7b 100644
--- a/libstdc++-v3/include/std/chrono
+++ b/libstdc++-v3/include/std/chrono
@@ -45,6 +45,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
/**
* @defgroup chrono Time
* @ingroup utilities
@@ -58,19 +60,13 @@ namespace std _GLIBCXX_VISIBILITY(default)
*/
namespace chrono
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _Rep, typename _Period = ratio<1>>
struct duration;
template<typename _Clock, typename _Dur = typename _Clock::duration>
struct time_point;
-
- _GLIBCXX_END_NAMESPACE_VERSION
}
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// 20.11.4.3 specialization of common_type (for duration, sfinae-friendly)
template<typename _CT, typename _Period1, typename _Period2>
@@ -117,12 +113,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
common_type<_Duration1, _Duration2>>::type, _Clock>::type
{ };
-_GLIBCXX_END_NAMESPACE_VERSION
-
namespace chrono
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// Primary template for duration_cast impl.
template<typename _ToDur, typename _CF, typename _CR,
bool _NumIsOne = false, bool _DenIsOne = false>
@@ -871,8 +863,6 @@ _GLIBCXX_END_NAMESPACE_VERSION
using high_resolution_clock = system_clock;
} // end inline namespace _V2
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace chrono
#if __cplusplus > 201103L
@@ -883,8 +873,6 @@ _GLIBCXX_END_NAMESPACE_VERSION
{
inline namespace chrono_literals
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _Rep, unsigned long long _Val>
struct _Checked_integral_constant
: integral_constant<_Rep, static_cast<_Rep>(_Val)>
@@ -959,22 +947,19 @@ _GLIBCXX_END_NAMESPACE_VERSION
operator""ns()
{ return __check_overflow<chrono::nanoseconds, _Digits...>(); }
- _GLIBCXX_END_NAMESPACE_VERSION
} // inline namespace chrono_literals
} // inline namespace literals
namespace chrono
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- using namespace literals::chrono_literals;
-
- _GLIBCXX_END_NAMESPACE_VERSION
+ using namespace literals::chrono_literals;
} // namespace chrono
#endif // __cplusplus > 201103L
// @} group chrono
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif //_GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/include/std/complex b/libstdc++-v3/include/std/complex
index d2aa172fc95..11c714e59ce 100644
--- a/libstdc++-v3/include/std/complex
+++ b/libstdc++-v3/include/std/complex
@@ -45,9 +45,10 @@
# include <cmath>
#undef _GLIBCXX_NO_SPECFUN
#include <sstream>
+
#if _GLIBCXX_HAVE_FLOAT128_MATH
-#include <bits/float128_io.h>
-#endif
+# include <bits/complex128_math.h>
+#endif // _GLIBCXX_HAVE_FLOAT128_MATH
// Get rid of a macro possibly defined in <complex.h>
#undef complex
@@ -571,42 +572,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __z.imag(); }
#endif
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- typedef _Complex float __attribute__((mode(TC))) __complex128;
-#ifdef __cplusplus
-extern "C" {
-#endif
- __float128 strtoflt128 (const char*, char**) _GLIBCXX_NOEXCEPT;
-
- __float128 cabsq (__complex128) _GLIBCXX_NOEXCEPT;
- __float128 cargq (__complex128) _GLIBCXX_NOEXCEPT;
- __float128 cimagq (__complex128) _GLIBCXX_NOEXCEPT;
- __float128 crealq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 cacosq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 cacoshq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 casinq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 casinhq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 catanq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 catanhq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 ccosq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 ccoshq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 cexpq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 cexpiq (__float128) _GLIBCXX_NOEXCEPT;
- __complex128 clogq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 clog10q (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 conjq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 cpowq (__complex128, __complex128) _GLIBCXX_NOEXCEPT;
- __complex128 cprojq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 csinq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 csinhq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 csqrtq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 ctanq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 ctanhq (__complex128) _GLIBCXX_NOEXCEPT;
-#ifdef __cplusplus
-}
-#endif
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
// 26.2.7/3 abs(__z): Returns the magnitude of __z.
template<typename _Tp>
inline _Tp
@@ -633,12 +598,6 @@ extern "C" {
__complex_abs(const __complex__ long double& __z)
{ return __builtin_cabsl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __float128
- __complex_abs(const __complex128& __z)
- { return cabsq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline _Tp
abs(const complex<_Tp>& __z) { return __complex_abs(__z.__rep()); }
@@ -666,12 +625,6 @@ extern "C" {
__complex_arg(const __complex__ long double& __z)
{ return __builtin_cargl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __float128
- __complex_arg(const __complex128& __z)
- { return cargq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline _Tp
arg(const complex<_Tp>& __z) { return __complex_arg(__z.__rep()); }
@@ -753,12 +706,6 @@ extern "C" {
__complex_cos(const __complex__ long double& __z)
{ return __builtin_ccosl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_cos(const __complex128& __z)
- { return ccosq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
cos(const complex<_Tp>& __z) { return __complex_cos(__z.__rep()); }
@@ -789,12 +736,6 @@ extern "C" {
__complex_cosh(const __complex__ long double& __z)
{ return __builtin_ccoshl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_cosh(const __complex128& __z)
- { return ccoshq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
cosh(const complex<_Tp>& __z) { return __complex_cosh(__z.__rep()); }
@@ -821,12 +762,6 @@ extern "C" {
__complex_exp(const __complex__ long double& __z)
{ return __builtin_cexpl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_exp(const __complex128& __z)
- { return cexpq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
exp(const complex<_Tp>& __z) { return __complex_exp(__z.__rep()); }
@@ -854,12 +789,6 @@ extern "C" {
__complex_log(const __complex__ long double& __z)
{ return __builtin_clogl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_log(const __complex128& __z)
- { return clogq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
log(const complex<_Tp>& __z) { return __complex_log(__z.__rep()); }
@@ -895,12 +824,6 @@ extern "C" {
__complex_sin(const __complex__ long double& __z)
{ return __builtin_csinl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_sin(const __complex128& __z)
- { return csinq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
sin(const complex<_Tp>& __z) { return __complex_sin(__z.__rep()); }
@@ -931,12 +854,6 @@ extern "C" {
__complex_sinh(const __complex__ long double& __z)
{ return __builtin_csinhl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_sinh(const __complex128& __z)
- { return csinhq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
sinh(const complex<_Tp>& __z) { return __complex_sinh(__z.__rep()); }
@@ -981,12 +898,6 @@ extern "C" {
__complex_sqrt(const __complex__ long double& __z)
{ return __builtin_csqrtl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_sqrt(const __complex128& __z)
- { return csqrtq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
sqrt(const complex<_Tp>& __z) { return __complex_sqrt(__z.__rep()); }
@@ -1014,12 +925,6 @@ extern "C" {
__complex_tan(const __complex__ long double& __z)
{ return __builtin_ctanl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_tan(const __complex128& __z)
- { return ctanq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
tan(const complex<_Tp>& __z) { return __complex_tan(__z.__rep()); }
@@ -1048,12 +953,6 @@ extern "C" {
__complex_tanh(const __complex__ long double& __z)
{ return __builtin_ctanhl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_tanh(const __complex128& __z)
- { return ctanhq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
tanh(const complex<_Tp>& __z) { return __complex_tanh(__z.__rep()); }
@@ -1132,12 +1031,6 @@ extern "C" {
const __complex__ long double& __y)
{ return __builtin_cpowl(__x, __y); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_pow(const __complex128& __x, const __complex128& __y)
- { return cpowq(__x, __y); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
pow(const complex<_Tp>& __x, const complex<_Tp>& __y)
@@ -1619,189 +1512,6 @@ extern "C" {
_ComplexT _M_value;
};
-#if _GLIBCXX_HAVE_FLOAT128_MATH
-
- /// complex<__float128> specialization
- template<>
- struct complex<__float128>
- {
- typedef __float128 value_type;
-
- // From quadmath.h
- //typedef _Complex float __attribute__((mode(TC))) __complex128;
- typedef __complex128 _ComplexT;
-
- _GLIBCXX_CONSTEXPR
- complex(_ComplexT __z)
- : _M_value(__z)
- { }
-
- _GLIBCXX_CONSTEXPR
- complex(__float128 __r = 0.0Q,
- __float128 __i = 0.0Q)
-#if __cplusplus >= 201103L
- : _M_value{ __r, __i }
- { }
-#else
- {
- __real__ _M_value = __r;
- __imag__ _M_value = __i;
- }
-#endif
-
- _GLIBCXX_CONSTEXPR
- complex(const complex<float>& __z)
- : _M_value(__z.__rep())
- { }
-
- _GLIBCXX_CONSTEXPR
- complex(const complex<double>& __z)
- : _M_value(__z.__rep())
- { }
-
- _GLIBCXX_CONSTEXPR
- complex(const complex<long double>& __z)
- : _M_value(__z.__rep())
- { }
-
-#if __cplusplus >= 201103L
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // DR 387. std::complex over-encapsulated.
- __attribute ((__abi_tag__ ("cxx11")))
- constexpr __float128
- real() const
- { return __real__ _M_value; }
-
- __attribute ((__abi_tag__ ("cxx11")))
- constexpr __float128
- imag() const
- { return __imag__ _M_value; }
-#else
- __float128&
- real()
- { return __real__ _M_value; }
-
- const __float128&
- real() const
- { return __real__ _M_value; }
-
- __float128&
- imag()
- { return __imag__ _M_value; }
-
- const __float128&
- imag()
- const { return __imag__ _M_value; }
-#endif
-
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // DR 387. std::complex over-encapsulated.
- void
- real(__float128 __val)
- { __real__ _M_value = __val; }
-
- void
- imag(__float128 __val)
- { __imag__ _M_value = __val; }
-
- complex&
- operator=(__float128 __r)
- {
- _M_value = __r;
- return *this;
- }
-
- complex&
- operator+=(__float128 __r)
- {
- _M_value += __r;
- return *this;
- }
-
- complex&
- operator-=(__float128 __r)
- {
- _M_value -= __r;
- return *this;
- }
-
- complex&
- operator*=(__float128 __r)
- {
- _M_value *= __r;
- return *this;
- }
-
- complex&
- operator/=(__float128 __r)
- {
- _M_value /= __r;
- return *this;
- }
-
- // The compiler knows how to do this efficiently
- // complex& operator=(const complex&);
-
- template<typename _Tp>
- complex&
- operator=(const complex<_Tp>& __z)
- {
- __real__ _M_value = __z.real();
- __imag__ _M_value = __z.imag();
- return *this;
- }
-
- template<typename _Tp>
- complex&
- operator+=(const complex<_Tp>& __z)
- {
- __real__ _M_value += __z.real();
- __imag__ _M_value += __z.imag();
- return *this;
- }
-
- template<typename _Tp>
- complex&
- operator-=(const complex<_Tp>& __z)
- {
- __real__ _M_value -= __z.real();
- __imag__ _M_value -= __z.imag();
- return *this;
- }
-
- template<typename _Tp>
- complex&
- operator*=(const complex<_Tp>& __z)
- {
- _ComplexT __t;
- __real__ __t = __z.real();
- __imag__ __t = __z.imag();
- _M_value *= __t;
- return *this;
- }
-
- template<typename _Tp>
- complex&
- operator/=(const complex<_Tp>& __z)
- {
- _ComplexT __t;
- __real__ __t = __z.real();
- __imag__ __t = __z.imag();
- _M_value /= __t;
- return *this;
- }
-
- _GLIBCXX_CONSTEXPR _ComplexT
- __rep() const
- { return _M_value; }
-
- private:
-
- _ComplexT _M_value;
- };
-
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
// These bits have to be at the end of this file, so that the
// specializations have all been defined.
inline _GLIBCXX_CONSTEXPR
@@ -1816,20 +1526,6 @@ extern "C" {
complex<double>::complex(const complex<long double>& __z)
: _M_value(__z.__rep()) { }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline _GLIBCXX_CONSTEXPR
- complex<float>::complex(const complex<__float128>& __z)
- : _M_value(__z.__rep()) { }
-
- inline _GLIBCXX_CONSTEXPR
- complex<double>::complex(const complex<__float128>& __z)
- : _M_value(__z.__rep()) { }
-
- inline _GLIBCXX_CONSTEXPR
- complex<long double>::complex(const complex<__float128>& __z)
- : _M_value(__z.__rep()) { }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
// Inhibit implicit instantiations for required instantiations,
// which are defined via explicit instantiations elsewhere.
// NB: This syntax is a GNU extension.
@@ -1840,10 +1536,6 @@ extern "C" {
extern template ostream& operator<<(ostream&, const complex<double>&);
extern template istream& operator>>(istream&, complex<long double>&);
extern template ostream& operator<<(ostream&, const complex<long double>&);
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- template istream& operator>>(istream&, complex<__float128>&);
- template ostream& operator<<(ostream&, const complex<__float128>&);
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
#ifdef _GLIBCXX_USE_WCHAR_T
extern template wistream& operator>>(wistream&, complex<float>&);
@@ -1928,12 +1620,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__complex_acos(const __complex__ long double& __z)
{ return __builtin_cacosl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_acos(const __complex128& __z)
- { return cacosq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline std::complex<_Tp>
acos(const std::complex<_Tp>& __z)
@@ -1970,12 +1656,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__complex_asin(const __complex__ long double& __z)
{ return __builtin_casinl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_asin(const __complex128& __z)
- { return casinq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline std::complex<_Tp>
asin(const std::complex<_Tp>& __z)
@@ -2020,12 +1700,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__complex_atan(const __complex__ long double& __z)
{ return __builtin_catanl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_atan(const __complex128& __z)
- { return catanq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline std::complex<_Tp>
atan(const std::complex<_Tp>& __z)
@@ -2062,12 +1736,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__complex_acosh(const __complex__ long double& __z)
{ return __builtin_cacoshl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_acosh(const __complex128& __z)
- { return cacoshq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline std::complex<_Tp>
acosh(const std::complex<_Tp>& __z)
@@ -2107,12 +1775,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__complex_asinh(const __complex__ long double& __z)
{ return __builtin_casinhl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_asinh(const __complex128& __z)
- { return casinhq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline std::complex<_Tp>
asinh(const std::complex<_Tp>& __z)
@@ -2157,12 +1819,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__complex_atanh(const __complex__ long double& __z)
{ return __builtin_catanhl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_atanh(const __complex128& __z)
- { return catanhq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline std::complex<_Tp>
atanh(const std::complex<_Tp>& __z)
@@ -2270,12 +1926,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__complex_proj(const __complex__ long double& __z)
{ return __builtin_cprojl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_proj(const __complex128& __z)
- { return cprojq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline std::complex<_Tp>
proj(const std::complex<_Tp>& __z)
@@ -2303,14 +1953,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return std::complex<__type>(__x, -__type());
}
-_GLIBCXX_END_NAMESPACE_VERSION
-
#if __cplusplus > 201103L
inline namespace literals {
inline namespace complex_literals {
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
#define __cpp_lib_complex_udls 201309
constexpr std::complex<float>
@@ -2337,24 +1983,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
operator""il(unsigned long long __num)
{ return std::complex<long double>{0.0L, static_cast<long double>(__num)}; }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline std::complex<__float128>
- operator""iq(const char* __str)
- { return complex<__float128>(0.0Q, strtoflt128(__str, 0)); }
-
- constexpr std::complex<__float128>
- operator""iq(unsigned long long __num)
- { return std::complex<__float128>{0.0L, static_cast<__float128>(__num)}; }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // inline namespace complex_literals
} // inline namespace literals
#endif // C++14
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
#endif // C++11
+#if _GLIBCXX_HAVE_FLOAT128_MATH
+# include <bits/complex128.h>
+#endif // _GLIBCXX_HAVE_FLOAT128_MATH
+
#endif /* _GLIBCXX_COMPLEX */
diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional
index 465b3ec7792..a6d121bb150 100644
--- a/libstdc++-v3/include/std/functional
+++ b/libstdc++-v3/include/std/functional
@@ -259,15 +259,12 @@ _GLIBCXX_MEM_FN_TRAITS(&& noexcept, false_type, true_type)
*/
template<int _Num> struct _Placeholder { };
- _GLIBCXX_END_NAMESPACE_VERSION
-
/** @namespace std::placeholders
* @brief ISO C++11 entities sub-namespace for functional.
* @ingroup binders
*/
namespace placeholders
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
/* Define a large number of placeholders. There is no way to
* simplify this with variadic templates, because we're introducing
* unique names for each.
@@ -301,11 +298,8 @@ _GLIBCXX_MEM_FN_TRAITS(&& noexcept, false_type, true_type)
extern const _Placeholder<27> _27;
extern const _Placeholder<28> _28;
extern const _Placeholder<29> _29;
- _GLIBCXX_END_NAMESPACE_VERSION
}
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* Partial specialization of is_placeholder that provides the placeholder
* number for the placeholder objects defined by libstdc++.
diff --git a/libstdc++-v3/include/std/istream b/libstdc++-v3/include/std/istream
index 1fa25555771..233cc6b0145 100644
--- a/libstdc++-v3/include/std/istream
+++ b/libstdc++-v3/include/std/istream
@@ -150,9 +150,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* whatever data is appropriate for the type of the argument.
*
* If an exception is thrown during extraction, ios_base::badbit
- * will be turned on in the stream's error state without causing an
- * ios_base::failure to be thrown. The original exception will then
- * be rethrown.
+ * will be turned on in the stream's error state (without causing an
+ * ios_base::failure to be thrown) and the original exception will
+ * be rethrown if badbit is set in the exceptions mask.
*/
//@{
@@ -286,9 +286,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* by gcount().
*
* If an exception is thrown during extraction, ios_base::badbit
- * will be turned on in the stream's error state without causing an
- * ios_base::failure to be thrown. The original exception will then
- * be rethrown.
+ * will be turned on in the stream's error state (without causing an
+ * ios_base::failure to be thrown) and the original exception will
+ * be rethrown if badbit is set in the exceptions mask.
*/
/**
diff --git a/libstdc++-v3/include/std/numeric b/libstdc++-v3/include/std/numeric
index c7abbc1b681..17d629db81d 100644
--- a/libstdc++-v3/include/std/numeric
+++ b/libstdc++-v3/include/std/numeric
@@ -79,10 +79,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace __detail
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace __detail
+{
// std::abs is not constexpr and doesn't support unsigned integers.
template<typename _Tp>
constexpr
@@ -117,11 +117,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* __detail::__abs_integral(__n)
: 0;
}
-
-_GLIBCXX_END_NAMESPACE_VERSION
-}
-
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
+} // namespace __detail
#if __cplusplus > 201402L
diff --git a/libstdc++-v3/include/std/streambuf b/libstdc++-v3/include/std/streambuf
index 862c4fdbe6d..a05b46e8199 100644
--- a/libstdc++-v3/include/std/streambuf
+++ b/libstdc++-v3/include/std/streambuf
@@ -768,8 +768,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
overflow(int_type __c = traits_type::eof())
{ return traits_type::eof(); }
-#if _GLIBCXX_USE_DEPRECATED
- // Annex D.6
+#if _GLIBCXX_USE_DEPRECATED && __cplusplus <= 201402L
+ // Annex D.6 (removed in C++17)
public:
/**
* @brief Tosses a character.
@@ -779,6 +779,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* See http://gcc.gnu.org/ml/libstdc++/2002-05/msg00168.html
*/
+#if __cplusplus >= 201103L
+ [[__deprecated__("stossc is deprecated, use sbumpc instead")]]
+#endif
void
stossc()
{
diff --git a/libstdc++-v3/include/std/string_view b/libstdc++-v3/include/std/string_view
index 311d6d725b3..88a7686618c 100644
--- a/libstdc++-v3/include/std/string_view
+++ b/libstdc++-v3/include/std/string_view
@@ -427,23 +427,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
size_t _M_len;
const _CharT* _M_str;
};
-_GLIBCXX_END_NAMESPACE_VERSION
// [string.view.comparison], non-member basic_string_view comparison function
namespace __detail
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
// Identity transform to create a non-deduced context, so that only one
// argument participates in template argument deduction and the other
// argument gets implicitly converted to the deduced type. See n3766.html.
template<typename _Tp>
using __idt = common_type_t<_Tp>;
-_GLIBCXX_END_NAMESPACE_VERSION
}
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _CharT, typename _Traits>
inline bool
operator==(basic_string_view<_CharT, _Traits> __x,
@@ -634,14 +629,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct __is_fast_hash<hash<u32string_view>> : std::false_type
{ };
#endif
-_GLIBCXX_END_NAMESPACE_VERSION
inline namespace literals
{
inline namespace string_view_literals
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
inline constexpr basic_string_view<char>
operator""sv(const char* __str, size_t __len)
{ return basic_string_view<char>{__str, __len}; }
@@ -661,11 +653,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
operator""sv(const char32_t* __str, size_t __len)
{ return basic_string_view<char32_t>{__str, __len}; }
#endif
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace string_literals
} // namespace literals
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#include <bits/string_view.tcc>
diff --git a/libstdc++-v3/include/std/thread b/libstdc++-v3/include/std/thread
index 8e2cb68e295..17db5ce87ae 100644
--- a/libstdc++-v3/include/std/thread
+++ b/libstdc++-v3/include/std/thread
@@ -321,16 +321,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __out << __id._M_thread;
}
-_GLIBCXX_END_NAMESPACE_VERSION
-
/** @namespace std::this_thread
* @brief ISO C++ 2011 entities sub-namespace for thread.
* 30.3.2 Namespace this_thread.
*/
namespace this_thread
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/// get_id
inline thread::id
get_id() noexcept
@@ -398,12 +394,11 @@ _GLIBCXX_END_NAMESPACE_VERSION
__now = _Clock::now();
}
}
-
- _GLIBCXX_END_NAMESPACE_VERSION
}
// @} group threads
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits
index 390b6f40af5..f021c42396c 100644
--- a/libstdc++-v3/include/std/type_traits
+++ b/libstdc++-v3/include/std/type_traits
@@ -2873,14 +2873,16 @@ template <typename _Base, typename _Derived>
template <typename _From, typename _To>
inline constexpr bool is_convertible_v = is_convertible<_From, _To>::value;
-#ifdef __has_builtin
-# if !__has_builtin(__has_unique_object_representations)
-// Try not to break non-GNU compilers that don't support the built-in:
-# define _GLIBCXX_NO_BUILTIN_HAS_UNIQ_OBJ_REP 1
+#if __GNUC__ >= 7
+# define _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP 1
+#elif defined(__is_identifier)
+// For non-GNU compilers:
+# if ! __is_identifier(__has_unique_object_representations)
+# define _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP 1
# endif
#endif
-#ifndef _GLIBCXX_NO_BUILTIN_HAS_UNIQ_OBJ_REP
+#ifdef _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP
# define __cpp_lib_has_unique_object_representations 201606
/// has_unique_object_representations
template<typename _Tp>
@@ -2890,13 +2892,13 @@ template <typename _From, typename _To>
)>
{ };
#endif
-#undef _GLIBCXX_NO_BUILTIN_HAS_UNIQ_OBJ_REP
+#undef _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP
#if __GNUC__ >= 7
# define _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 1
-#elif defined __has_builtin
+#elif defined(__is_identifier)
// For non-GNU compilers:
-# if __has_builtin(__is_aggregate)
+# if ! __is_identifier(__is_aggregate)
# define _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 1
# endif
#endif
diff --git a/libstdc++-v3/include/std/variant b/libstdc++-v3/include/std/variant
index 23db6d27529..d0c22e35d0f 100644
--- a/libstdc++-v3/include/std/variant
+++ b/libstdc++-v3/include/std/variant
@@ -50,12 +50,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace __detail
{
namespace __variant
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<size_t _Np, typename... _Types>
struct _Nth_type;
@@ -67,12 +67,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct _Nth_type<0, _First, _Rest...>
{ using type = _First; };
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __variant
} // namespace __detail
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename... _Types> class tuple;
template<typename... _Types> class variant;
template <typename> struct hash;
@@ -141,13 +138,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr variant_alternative_t<_Np, variant<_Types...>> const&&
get(const variant<_Types...>&&);
-_GLIBCXX_END_NAMESPACE_VERSION
-
namespace __detail
{
namespace __variant
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
// Returns the first apparence of _Tp in _Types.
// Returns sizeof...(_Types) if _Tp is not in _Types.
template<typename _Tp, typename... _Types>
@@ -299,40 +293,40 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct _Traits
{
static constexpr bool _S_default_ctor =
- is_default_constructible_v<typename _Nth_type<0, _Types...>::type>;
+ is_default_constructible_v<typename _Nth_type<0, _Types...>::type>;
static constexpr bool _S_copy_ctor =
- (is_copy_constructible_v<_Types> && ...);
+ (is_copy_constructible_v<_Types> && ...);
static constexpr bool _S_move_ctor =
- (is_move_constructible_v<_Types> && ...);
+ (is_move_constructible_v<_Types> && ...);
static constexpr bool _S_copy_assign =
- _S_copy_ctor && _S_move_ctor
- && (is_copy_assignable_v<_Types> && ...);
+ _S_copy_ctor && _S_move_ctor
+ && (is_copy_assignable_v<_Types> && ...);
static constexpr bool _S_move_assign =
- _S_move_ctor
- && (is_move_assignable_v<_Types> && ...);
+ _S_move_ctor
+ && (is_move_assignable_v<_Types> && ...);
static constexpr bool _S_trivial_dtor =
- (is_trivially_destructible_v<_Types> && ...);
+ (is_trivially_destructible_v<_Types> && ...);
static constexpr bool _S_trivial_copy_ctor =
- (is_trivially_copy_constructible_v<_Types> && ...);
+ (is_trivially_copy_constructible_v<_Types> && ...);
static constexpr bool _S_trivial_move_ctor =
- (is_trivially_move_constructible_v<_Types> && ...);
+ (is_trivially_move_constructible_v<_Types> && ...);
static constexpr bool _S_trivial_copy_assign =
- _S_trivial_dtor && (is_trivially_copy_assignable_v<_Types> && ...);
+ _S_trivial_dtor && (is_trivially_copy_assignable_v<_Types> && ...);
static constexpr bool _S_trivial_move_assign =
- _S_trivial_dtor && (is_trivially_move_assignable_v<_Types> && ...);
+ _S_trivial_dtor && (is_trivially_move_assignable_v<_Types> && ...);
// The following nothrow traits are for non-trivial SMFs. Trivial SMFs
// are always nothrow.
static constexpr bool _S_nothrow_default_ctor =
- is_nothrow_default_constructible_v<
- typename _Nth_type<0, _Types...>::type>;
+ is_nothrow_default_constructible_v<
+ typename _Nth_type<0, _Types...>::type>;
static constexpr bool _S_nothrow_copy_ctor = false;
static constexpr bool _S_nothrow_move_ctor =
- (is_nothrow_move_constructible_v<_Types> && ...);
+ (is_nothrow_move_constructible_v<_Types> && ...);
static constexpr bool _S_nothrow_copy_assign = false;
static constexpr bool _S_nothrow_move_assign =
- _S_nothrow_move_ctor && (is_nothrow_move_assignable_v<_Types> && ...);
+ _S_nothrow_move_ctor && (is_nothrow_move_assignable_v<_Types> && ...);
};
// Defines members and ctors.
@@ -452,7 +446,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename... _Types>
using _Variant_storage_alias =
- _Variant_storage<_Traits<_Types...>::_S_trivial_dtor, _Types...>;
+ _Variant_storage<_Traits<_Types...>::_S_trivial_dtor, _Types...>;
// The following are (Copy|Move) (ctor|assign) layers for forwarding
// triviality and handling non-trivial SMF behaviors.
@@ -464,7 +458,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using _Base::_Base;
_Copy_ctor_base(const _Copy_ctor_base& __rhs)
- noexcept(_Traits<_Types...>::_S_nothrow_copy_ctor)
+ noexcept(_Traits<_Types...>::_S_nothrow_copy_ctor)
{
if (__rhs._M_valid())
{
@@ -489,7 +483,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename... _Types>
using _Copy_ctor_alias =
- _Copy_ctor_base<_Traits<_Types...>::_S_trivial_copy_ctor, _Types...>;
+ _Copy_ctor_base<_Traits<_Types...>::_S_trivial_copy_ctor, _Types...>;
template<bool, typename... _Types>
struct _Move_ctor_base : _Copy_ctor_alias<_Types...>
@@ -498,7 +492,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using _Base::_Base;
_Move_ctor_base(_Move_ctor_base&& __rhs)
- noexcept(_Traits<_Types...>::_S_nothrow_move_ctor)
+ noexcept(_Traits<_Types...>::_S_nothrow_move_ctor)
{
if (__rhs._M_valid())
{
@@ -523,7 +517,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename... _Types>
using _Move_ctor_alias =
- _Move_ctor_base<_Traits<_Types...>::_S_trivial_move_ctor, _Types...>;
+ _Move_ctor_base<_Traits<_Types...>::_S_trivial_move_ctor, _Types...>;
template<bool, typename... _Types>
struct _Copy_assign_base : _Move_ctor_alias<_Types...>
@@ -533,7 +527,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Copy_assign_base&
operator=(const _Copy_assign_base& __rhs)
- noexcept(_Traits<_Types...>::_S_nothrow_copy_assign)
+ noexcept(_Traits<_Types...>::_S_nothrow_copy_assign)
{
if (this->_M_index == __rhs._M_index)
{
@@ -576,8 +570,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename... _Types>
using _Copy_assign_alias =
- _Copy_assign_base<_Traits<_Types...>::_S_trivial_copy_assign,
- _Types...>;
+ _Copy_assign_base<_Traits<_Types...>::_S_trivial_copy_assign,
+ _Types...>;
template<bool, typename... _Types>
struct _Move_assign_base : _Copy_assign_alias<_Types...>
@@ -601,7 +595,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Move_assign_base&
operator=(_Move_assign_base&& __rhs)
- noexcept(_Traits<_Types...>::_S_nothrow_move_assign)
+ noexcept(_Traits<_Types...>::_S_nothrow_move_assign)
{
if (this->_M_index == __rhs._M_index)
{
@@ -644,8 +638,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename... _Types>
using _Move_assign_alias =
- _Move_assign_base<_Traits<_Types...>::_S_trivial_move_assign,
- _Types...>;
+ _Move_assign_base<_Traits<_Types...>::_S_trivial_move_assign,
+ _Types...>;
template<typename... _Types>
struct _Variant_base : _Move_assign_alias<_Types...>
@@ -654,7 +648,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr
_Variant_base()
- noexcept(_Traits<_Types...>::_S_nothrow_default_ctor)
+ noexcept(_Traits<_Types...>::_S_nothrow_default_ctor)
: _Variant_base(in_place_index<0>) { }
template<size_t _Np, typename... _Args>
@@ -879,12 +873,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
std::index_sequence<__indices...>>
: _Base_dedup<__indices, __poison_hash<remove_const_t<_Types>>>... { };
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __variant
} // namespace __detail
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _Tp, typename... _Types>
inline constexpr bool holds_alternative(const variant<_Types...>& __v)
noexcept
@@ -1041,13 +1032,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class variant
: private __detail::__variant::_Variant_base<_Types...>,
private _Enable_default_constructor<
- __detail::__variant::_Traits<_Types...>::_S_default_ctor,
+ __detail::__variant::_Traits<_Types...>::_S_default_ctor,
variant<_Types...>>,
private _Enable_copy_move<
- __detail::__variant::_Traits<_Types...>::_S_copy_ctor,
- __detail::__variant::_Traits<_Types...>::_S_copy_assign,
- __detail::__variant::_Traits<_Types...>::_S_move_ctor,
- __detail::__variant::_Traits<_Types...>::_S_move_assign,
+ __detail::__variant::_Traits<_Types...>::_S_copy_ctor,
+ __detail::__variant::_Traits<_Types...>::_S_copy_assign,
+ __detail::__variant::_Traits<_Types...>::_S_move_ctor,
+ __detail::__variant::_Traits<_Types...>::_S_move_assign,
variant<_Types...>>
{
private:
@@ -1060,9 +1051,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using _Base = __detail::__variant::_Variant_base<_Types...>;
using _Default_ctor_enabler =
- _Enable_default_constructor<
- __detail::__variant::_Traits<_Types...>::_S_default_ctor,
- variant<_Types...>>;
+ _Enable_default_constructor<
+ __detail::__variant::_Traits<_Types...>::_S_default_ctor,
+ variant<_Types...>>;
template<typename _Tp>
static constexpr bool
@@ -1108,7 +1099,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
variant(_Tp&& __t)
noexcept(is_nothrow_constructible_v<__accepted_type<_Tp&&>, _Tp&&>)
: variant(in_place_index<__accepted_index<_Tp&&>>,
- std::forward<_Tp>(__t))
+ std::forward<_Tp>(__t))
{ __glibcxx_assert(holds_alternative<__accepted_type<_Tp&&>>(*this)); }
template<typename _Tp, typename... _Args,
@@ -1117,7 +1108,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr explicit
variant(in_place_type_t<_Tp>, _Args&&... __args)
: variant(in_place_index<__index_of<_Tp>>,
- std::forward<_Args>(__args)...)
+ std::forward<_Args>(__args)...)
{ __glibcxx_assert(holds_alternative<_Tp>(*this)); }
template<typename _Tp, typename _Up, typename... _Args,
@@ -1288,7 +1279,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static constexpr bool \
(*_S_erased_##__NAME[])(const variant&, const variant&) = \
{ &__detail::__variant::__erased_##__NAME< \
- const variant&, __indices>... }; \
+ const variant&, __indices>... }; \
template<size_t... __indices> \
constexpr inline bool \
_M_##__NAME(const variant& __rhs, \
@@ -1312,18 +1303,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#undef _VARIANT_RELATION_FUNCTION_TEMPLATE
template<size_t _Np, typename _Vp>
- friend constexpr decltype(auto) __detail::__variant::
-#if _GLIBCXX_INLINE_VERSION
- __8:: // Required due to PR c++/59256
-#endif
- __get(_Vp&& __v);
+ friend constexpr decltype(auto) __detail::__variant::__get(_Vp&& __v);
template<typename _Vp>
- friend void* __detail::__variant::
-#if _GLIBCXX_INLINE_VERSION
- __8:: // Required due to PR c++/59256
-#endif
- __get_storage(_Vp&& __v);
+ friend void* __detail::__variant::__get_storage(_Vp&& __v);
#define _VARIANT_RELATION_FUNCTION_TEMPLATE(__OP) \
template<typename... _Tp> \
@@ -1434,7 +1417,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename... _Types>
struct hash<variant<_Types...>>
: private __detail::__variant::_Variant_hash_base<
- variant<_Types...>, std::index_sequence_for<_Types...>>,
+ variant<_Types...>, std::index_sequence_for<_Types...>>,
public __variant_hash_call_base<_Types...>
{
using result_type = size_t;
diff --git a/libstdc++-v3/include/tr1/array b/libstdc++-v3/include/tr1/array
index 606d019ade3..04c43411941 100644
--- a/libstdc++-v3/include/tr1/array
+++ b/libstdc++-v3/include/tr1/array
@@ -35,10 +35,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr1
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr1
+{
/**
* @brief A standard container for storing a fixed size sequence of elements.
*
@@ -243,9 +243,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline const _Tp&
get(const array<_Tp, _Nm>& __arr)
{ return __arr[_Int]; }
+}
_GLIBCXX_END_NAMESPACE_VERSION
}
-}
#endif // _GLIBCXX_TR1_ARRAY
diff --git a/libstdc++-v3/include/tr1/bessel_function.tcc b/libstdc++-v3/include/tr1/bessel_function.tcc
index 7ba4c8a7f0d..7ac733d73b8 100644
--- a/libstdc++-v3/include/tr1/bessel_function.tcc
+++ b/libstdc++-v3/include/tr1/bessel_function.tcc
@@ -50,6 +50,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
#if _GLIBCXX_USE_STD_SPEC_FUNCS
# define _GLIBCXX_MATH_NS ::std
#elif defined(_GLIBCXX_TR1_CMATH)
@@ -64,8 +66,6 @@ namespace tr1
// Implementation-space details.
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @brief Compute the gamma functions required by the Temme series
* expansions of @f$ N_\nu(x) @f$ and @f$ K_\nu(x) @f$.
@@ -626,13 +626,13 @@ namespace tr1
return __n_n;
}
}
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
#undef _GLIBCXX_MATH_NS
#if ! _GLIBCXX_USE_STD_SPEC_FUNCS && defined(_GLIBCXX_TR1_CMATH)
} // namespace tr1
#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
}
#endif // _GLIBCXX_TR1_BESSEL_FUNCTION_TCC
diff --git a/libstdc++-v3/include/tr1/beta_function.tcc b/libstdc++-v3/include/tr1/beta_function.tcc
index 2770eef3cd3..7463356906f 100644
--- a/libstdc++-v3/include/tr1/beta_function.tcc
+++ b/libstdc++-v3/include/tr1/beta_function.tcc
@@ -48,6 +48,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
#if _GLIBCXX_USE_STD_SPEC_FUNCS
# define _GLIBCXX_MATH_NS ::std
#elif defined(_GLIBCXX_TR1_CMATH)
@@ -62,8 +64,6 @@ namespace tr1
// Implementation-space details.
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @brief Return the beta function: \f$B(x,y)\f$.
*
@@ -195,13 +195,13 @@ namespace tr1
else
return __beta_lgamma(__x, __y);
}
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
#undef _GLIBCXX_MATH_NS
#if ! _GLIBCXX_USE_STD_SPEC_FUNCS && defined(_GLIBCXX_TR1_CMATH)
} // namespace tr1
#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
}
#endif // _GLIBCXX_TR1_BETA_FUNCTION_TCC
diff --git a/libstdc++-v3/include/tr1/cmath b/libstdc++-v3/include/tr1/cmath
index b24e8c2a7d3..720452e4f5a 100644
--- a/libstdc++-v3/include/tr1/cmath
+++ b/libstdc++-v3/include/tr1/cmath
@@ -145,10 +145,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr1
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr1
+{
#if _GLIBCXX_USE_C99_MATH_TR1
// Using declarations to bring names from libc's <math.h> into std::tr1.
@@ -1059,16 +1059,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// @}
-#endif
-_GLIBCXX_END_NAMESPACE_VERSION
-}
-}
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-namespace tr1
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
+#endif /* _GLIBCXX_USE_C99_MATH_TR1 */
// DR 550. What should the return type of pow(float,int) be?
// NB: C++11 and TR1 != C++03.
@@ -1135,20 +1126,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#endif // C++11
-
-
-_GLIBCXX_END_NAMESPACE_VERSION
-}
-}
-
#if _GLIBCXX_USE_STD_SPEC_FUNCS
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-namespace tr1
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @defgroup tr1_math_spec_func Mathematical Special Functions
* @ingroup numerics
@@ -1250,12 +1229,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using std::sph_neumann;
/* @} */ // tr1_math_spec_func
-_GLIBCXX_END_NAMESPACE_VERSION
-}
-}
#else // ! _GLIBCXX_USE_STD_SPEC_FUNCS
+} // namespace tr1
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+
#include <bits/stl_algobase.h>
#include <limits>
#include <tr1/type_traits>
@@ -1274,10 +1255,10 @@ _GLIBCXX_END_NAMESPACE_VERSION
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr1
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr1
+{
/**
* @defgroup tr1_math_spec_func Mathematical Special Functions
* @ingroup numerics
@@ -1680,9 +1661,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
/* @} */ // tr1_math_spec_func
-_GLIBCXX_END_NAMESPACE_VERSION
-}
-}
#endif // _GLIBCXX_USE_STD_SPEC_FUNCS
+} // namespace tr1
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+
#endif // _GLIBCXX_TR1_CMATH
diff --git a/libstdc++-v3/include/tr1/complex b/libstdc++-v3/include/tr1/complex
index 10dce9d1bb4..2e7d05cf227 100644
--- a/libstdc++-v3/include/tr1/complex
+++ b/libstdc++-v3/include/tr1/complex
@@ -35,10 +35,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr1
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr1
+{
/**
* @addtogroup complex_numbers
* @{
@@ -412,9 +412,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return std::pow(__x, __y); }
// @} group complex_numbers
+}
_GLIBCXX_END_NAMESPACE_VERSION
}
-}
#endif // _GLIBCXX_TR1_COMPLEX
diff --git a/libstdc++-v3/include/tr1/ell_integral.tcc b/libstdc++-v3/include/tr1/ell_integral.tcc
index 01f9313a256..4bd22e5eebc 100644
--- a/libstdc++-v3/include/tr1/ell_integral.tcc
+++ b/libstdc++-v3/include/tr1/ell_integral.tcc
@@ -44,6 +44,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
#if _GLIBCXX_USE_STD_SPEC_FUNCS
#elif defined(_GLIBCXX_TR1_CMATH)
namespace tr1
@@ -56,8 +58,6 @@ namespace tr1
// Implementation-space details.
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @brief Return the Carlson elliptic function @f$ R_F(x,y,z) @f$
* of the first kind.
@@ -745,12 +745,12 @@ namespace tr1
return __Pi + _Tp(2) * __n * __comp_ellint_3(__k, __nu);
}
}
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
#if ! _GLIBCXX_USE_STD_SPEC_FUNCS && defined(_GLIBCXX_TR1_CMATH)
} // namespace tr1
#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
}
#endif // _GLIBCXX_TR1_ELL_INTEGRAL_TCC
diff --git a/libstdc++-v3/include/tr1/exp_integral.tcc b/libstdc++-v3/include/tr1/exp_integral.tcc
index 8e6f55178e7..663b2ce2f73 100644
--- a/libstdc++-v3/include/tr1/exp_integral.tcc
+++ b/libstdc++-v3/include/tr1/exp_integral.tcc
@@ -49,6 +49,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
#if _GLIBCXX_USE_STD_SPEC_FUNCS
#elif defined(_GLIBCXX_TR1_CMATH)
namespace tr1
@@ -61,8 +63,6 @@ namespace tr1
// Implementation-space details.
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _Tp> _Tp __expint_E1(_Tp);
/**
@@ -522,12 +522,12 @@ namespace tr1
else
return __expint_Ei(__x);
}
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
#if ! _GLIBCXX_USE_STD_SPEC_FUNCS && defined(_GLIBCXX_TR1_CMATH)
} // namespace tr1
#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
}
#endif // _GLIBCXX_TR1_EXP_INTEGRAL_TCC
diff --git a/libstdc++-v3/include/tr1/functional b/libstdc++-v3/include/tr1/functional
index 256f94d8a5f..cb40e90e255 100644
--- a/libstdc++-v3/include/tr1/functional
+++ b/libstdc++-v3/include/tr1/functional
@@ -48,18 +48,15 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-#if __cplusplus >= 201103L
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+#if __cplusplus >= 201103L
template<int> struct _Placeholder;
template<typename> class _Bind;
template<typename, typename> class _Bind_result;
-_GLIBCXX_END_NAMESPACE_VERSION
#endif
namespace tr1
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _MemberPointer>
class _Mem_fn;
template<typename _Tp, typename _Class>
@@ -855,14 +852,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// The type of placeholder objects defined by libstdc++.
template<int _Num> struct _Placeholder { };
-_GLIBCXX_END_NAMESPACE_VERSION
-
/** @namespace std::tr1::placeholders
* @brief Sub-namespace for tr1/functional.
*/
namespace placeholders
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
/* Define a large number of placeholders. There is no way to
* simplify this with variadic templates, because we're introducing
* unique names for each.
@@ -899,10 +893,8 @@ _GLIBCXX_END_NAMESPACE_VERSION
_Placeholder<28> _28;
_Placeholder<29> _29;
}
- _GLIBCXX_END_NAMESPACE_VERSION
}
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Partial specialization of is_placeholder that provides the placeholder
* number for the placeholder objects defined by libstdc++.
@@ -2247,12 +2239,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline void
swap(function<_Signature>& __x, function<_Signature>& __y)
{ __x.swap(__y); }
-
-_GLIBCXX_END_NAMESPACE_VERSION
}
#if __cplusplus >= 201103L
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename> struct is_placeholder;
@@ -2301,8 +2290,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Signature>>
: true_type { };
+#endif // C++11
_GLIBCXX_END_NAMESPACE_VERSION
-#endif
}
#endif // _GLIBCXX_TR1_FUNCTIONAL
diff --git a/libstdc++-v3/include/tr1/functional_hash.h b/libstdc++-v3/include/tr1/functional_hash.h
index acc766ddd53..f8cff25257f 100644
--- a/libstdc++-v3/include/tr1/functional_hash.h
+++ b/libstdc++-v3/include/tr1/functional_hash.h
@@ -34,10 +34,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr1
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr1
+{
/// Class template hash.
// Declaration of default hash functor std::tr1::hash. The types for
// which std::tr1::hash<T> is well-defined is in clause 6.3.3. of the PDTR.
@@ -192,9 +192,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_PURE size_t
hash<const wstring&>::operator()(const wstring&) const;
#endif
+}
_GLIBCXX_END_NAMESPACE_VERSION
}
-}
#endif // _GLIBCXX_TR1_FUNCTIONAL_HASH_H
diff --git a/libstdc++-v3/include/tr1/gamma.tcc b/libstdc++-v3/include/tr1/gamma.tcc
index dbbca1e9e80..7c4a664e5c9 100644
--- a/libstdc++-v3/include/tr1/gamma.tcc
+++ b/libstdc++-v3/include/tr1/gamma.tcc
@@ -50,6 +50,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
#if _GLIBCXX_USE_STD_SPEC_FUNCS
# define _GLIBCXX_MATH_NS ::std
#elif defined(_GLIBCXX_TR1_CMATH)
@@ -62,8 +64,6 @@ namespace tr1
// Implementation-space details.
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @brief This returns Bernoulli numbers from a table or by summation
* for larger values.
@@ -466,13 +466,13 @@ namespace tr1
return __result;
}
}
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
#undef _GLIBCXX_MATH_NS
#if ! _GLIBCXX_USE_STD_SPEC_FUNCS && defined(_GLIBCXX_TR1_CMATH)
} // namespace tr1
#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // _GLIBCXX_TR1_GAMMA_TCC
diff --git a/libstdc++-v3/include/tr1/hashtable.h b/libstdc++-v3/include/tr1/hashtable.h
index 8dc7a41ad5e..6e798cfd1dd 100644
--- a/libstdc++-v3/include/tr1/hashtable.h
+++ b/libstdc++-v3/include/tr1/hashtable.h
@@ -37,10 +37,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr1
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr1
+{
// Class template _Hashtable, class definition.
// Meaning of class template _Hashtable's template parameters
@@ -1173,9 +1173,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__throw_exception_again;
}
}
+} // namespace tr1
_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace tr1
} // namespace std
#endif // _GLIBCXX_TR1_HASHTABLE_H
diff --git a/libstdc++-v3/include/tr1/hashtable_policy.h b/libstdc++-v3/include/tr1/hashtable_policy.h
index f44d0cf9a73..9a75443ccb6 100644
--- a/libstdc++-v3/include/tr1/hashtable_policy.h
+++ b/libstdc++-v3/include/tr1/hashtable_policy.h
@@ -30,12 +30,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace tr1
{
namespace __detail
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// Helper function: return distance(first, last) for forward
// iterators, or 0 for input iterators.
template<class _Iterator>
@@ -772,7 +772,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_H1 _M_h1;
_H2 _M_h2;
};
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
}
+
+_GLIBCXX_END_NAMESPACE_VERSION
}
diff --git a/libstdc++-v3/include/tr1/hypergeometric.tcc b/libstdc++-v3/include/tr1/hypergeometric.tcc
index 49af5f98d96..dc9f176e27a 100644
--- a/libstdc++-v3/include/tr1/hypergeometric.tcc
+++ b/libstdc++-v3/include/tr1/hypergeometric.tcc
@@ -43,6 +43,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
#if _GLIBCXX_USE_STD_SPEC_FUNCS
# define _GLIBCXX_MATH_NS ::std
#elif defined(_GLIBCXX_TR1_CMATH)
@@ -57,8 +59,6 @@ namespace tr1
// Implementation-space details.
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @brief This routine returns the confluent hypergeometric function
* by series expansion.
@@ -773,13 +773,13 @@ namespace tr1
else
return __hyperg_luke(__a, __b, __c, __x);
}
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
#undef _GLIBCXX_MATH_NS
#if ! _GLIBCXX_USE_STD_SPEC_FUNCS && defined(_GLIBCXX_TR1_CMATH)
} // namespace tr1
#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
}
#endif // _GLIBCXX_TR1_HYPERGEOMETRIC_TCC
diff --git a/libstdc++-v3/include/tr1/legendre_function.tcc b/libstdc++-v3/include/tr1/legendre_function.tcc
index ea2a511d977..16fee54e9c4 100644
--- a/libstdc++-v3/include/tr1/legendre_function.tcc
+++ b/libstdc++-v3/include/tr1/legendre_function.tcc
@@ -48,6 +48,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
#if _GLIBCXX_USE_STD_SPEC_FUNCS
# define _GLIBCXX_MATH_NS ::std
#elif defined(_GLIBCXX_TR1_CMATH)
@@ -62,8 +64,6 @@ namespace tr1
// Implementation-space details.
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @brief Return the Legendre polynomial by recursion on order
* @f$ l @f$.
@@ -301,13 +301,13 @@ namespace tr1
}
}
}
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
#undef _GLIBCXX_MATH_NS
#if ! _GLIBCXX_USE_STD_SPEC_FUNCS && defined(_GLIBCXX_TR1_CMATH)
} // namespace tr1
#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
}
#endif // _GLIBCXX_TR1_LEGENDRE_FUNCTION_TCC
diff --git a/libstdc++-v3/include/tr1/modified_bessel_func.tcc b/libstdc++-v3/include/tr1/modified_bessel_func.tcc
index d21e3c7de66..79d7d7578fa 100644
--- a/libstdc++-v3/include/tr1/modified_bessel_func.tcc
+++ b/libstdc++-v3/include/tr1/modified_bessel_func.tcc
@@ -50,6 +50,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
#if _GLIBCXX_USE_STD_SPEC_FUNCS
#elif defined(_GLIBCXX_TR1_CMATH)
namespace tr1
@@ -62,8 +64,6 @@ namespace tr1
// Implementation-space details.
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @brief Compute the modified Bessel functions @f$ I_\nu(x) @f$ and
* @f$ K_\nu(x) @f$ and their first derivatives
@@ -430,12 +430,12 @@ namespace tr1
return;
}
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
#if ! _GLIBCXX_USE_STD_SPEC_FUNCS && defined(_GLIBCXX_TR1_CMATH)
} // namespace tr1
#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
}
#endif // _GLIBCXX_TR1_MODIFIED_BESSEL_FUNC_TCC
diff --git a/libstdc++-v3/include/tr1/poly_hermite.tcc b/libstdc++-v3/include/tr1/poly_hermite.tcc
index 80ea2187e4f..8136284310c 100644
--- a/libstdc++-v3/include/tr1/poly_hermite.tcc
+++ b/libstdc++-v3/include/tr1/poly_hermite.tcc
@@ -41,6 +41,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
#if _GLIBCXX_USE_STD_SPEC_FUNCS
#elif defined(_GLIBCXX_TR1_CMATH)
namespace tr1
@@ -53,8 +55,6 @@ namespace tr1
// Implementation-space details.
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @brief This routine returns the Hermite polynomial
* of order n: \f$ H_n(x) \f$ by recursion on n.
@@ -120,12 +120,12 @@ namespace tr1
else
return __poly_hermite_recursion(__n, __x);
}
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
#if ! _GLIBCXX_USE_STD_SPEC_FUNCS && defined(_GLIBCXX_TR1_CMATH)
} // namespace tr1
#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
}
#endif // _GLIBCXX_TR1_POLY_HERMITE_TCC
diff --git a/libstdc++-v3/include/tr1/poly_laguerre.tcc b/libstdc++-v3/include/tr1/poly_laguerre.tcc
index 0c33c032040..420b1f34db4 100644
--- a/libstdc++-v3/include/tr1/poly_laguerre.tcc
+++ b/libstdc++-v3/include/tr1/poly_laguerre.tcc
@@ -43,6 +43,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
#if _GLIBCXX_USE_STD_SPEC_FUNCS
# define _GLIBCXX_MATH_NS ::std
#elif defined(_GLIBCXX_TR1_CMATH)
@@ -57,8 +59,6 @@ namespace tr1
// Implementation-space details.
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @brief This routine returns the associated Laguerre polynomial
* of order @f$ n @f$, degree @f$ \alpha @f$ for large n.
@@ -317,13 +317,13 @@ namespace tr1
inline _Tp
__laguerre(unsigned int __n, _Tp __x)
{ return __poly_laguerre<unsigned int, _Tp>(__n, 0, __x); }
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
#undef _GLIBCXX_MATH_NS
#if ! _GLIBCXX_USE_STD_SPEC_FUNCS && defined(_GLIBCXX_TR1_CMATH)
} // namespace tr1
#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
}
#endif // _GLIBCXX_TR1_POLY_LAGUERRE_TCC
diff --git a/libstdc++-v3/include/tr1/random.h b/libstdc++-v3/include/tr1/random.h
index 9fe7fae900f..79a5b8f8cd4 100644
--- a/libstdc++-v3/include/tr1/random.h
+++ b/libstdc++-v3/include/tr1/random.h
@@ -35,6 +35,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace tr1
{
// [5.1] Random number generation
@@ -50,8 +52,6 @@ namespace tr1
*/
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<typename _UIntType, int __w,
bool = __w < std::numeric_limits<_UIntType>::digits>
struct _Shift
@@ -212,12 +212,8 @@ namespace tr1
private:
_Engine* _M_g;
};
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* Produces random numbers on a given distribution function using a
* non-uniform random number generation engine.
@@ -2410,8 +2406,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/* @} */ // group tr1_random_distributions_continuous
/* @} */ // group tr1_random_distributions
/* @} */ // group tr1_random
-_GLIBCXX_END_NAMESPACE_VERSION
}
+
+_GLIBCXX_END_NAMESPACE_VERSION
}
#endif // _GLIBCXX_TR1_RANDOM_H
diff --git a/libstdc++-v3/include/tr1/random.tcc b/libstdc++-v3/include/tr1/random.tcc
index 265bd0bc2db..25f444a1644 100644
--- a/libstdc++-v3/include/tr1/random.tcc
+++ b/libstdc++-v3/include/tr1/random.tcc
@@ -33,6 +33,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace tr1
{
/*
@@ -40,8 +42,6 @@ namespace tr1
*/
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// General case for x = (ax + c) mod m -- use Schrage's algorithm to avoid
// integer overflow.
//
@@ -92,11 +92,8 @@ namespace tr1
__calc(_Tp __x)
{ return __a * __x + __c; }
};
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
template<class _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
const _UIntType
linear_congruential<_UIntType, __a, __c, __m>::multiplier;
@@ -1713,9 +1710,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__os.precision(__precision);
return __os;
}
+}
_GLIBCXX_END_NAMESPACE_VERSION
}
-}
#endif
diff --git a/libstdc++-v3/include/tr1/regex b/libstdc++-v3/include/tr1/regex
index bfb5ef770d4..6cb8c154e86 100644
--- a/libstdc++-v3/include/tr1/regex
+++ b/libstdc++-v3/include/tr1/regex
@@ -45,6 +45,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace tr1
{
/**
@@ -58,8 +60,6 @@ namespace tr1
*/
namespace regex_constants
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @name 5.1 Regular Expression Syntax Options
*/
@@ -397,11 +397,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static const error_type error_stack(_S_error_stack);
//@}
-_GLIBCXX_END_NAMESPACE_VERSION
}
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// [7.8] Class regex_error
/**
* @brief A regular expression exception class.
@@ -2722,9 +2719,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#endif
//@}
+}
_GLIBCXX_END_NAMESPACE_VERSION
}
-}
#endif // _GLIBCXX_TR1_REGEX
diff --git a/libstdc++-v3/include/tr1/riemann_zeta.tcc b/libstdc++-v3/include/tr1/riemann_zeta.tcc
index b4992f265ae..130cef63c45 100644
--- a/libstdc++-v3/include/tr1/riemann_zeta.tcc
+++ b/libstdc++-v3/include/tr1/riemann_zeta.tcc
@@ -46,6 +46,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
#if _GLIBCXX_USE_STD_SPEC_FUNCS
# define _GLIBCXX_MATH_NS ::std
#elif defined(_GLIBCXX_TR1_CMATH)
@@ -60,8 +62,6 @@ namespace tr1
// Implementation-space details.
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/**
* @brief Compute the Riemann zeta function @f$ \zeta(s) @f$
* by summation for s > 1.
@@ -431,13 +431,13 @@ namespace tr1
inline _Tp
__hurwitz_zeta(_Tp __a, _Tp __s)
{ return __hurwitz_zeta_glob(__a, __s); }
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
#undef _GLIBCXX_MATH_NS
#if ! _GLIBCXX_USE_STD_SPEC_FUNCS && defined(_GLIBCXX_TR1_CMATH)
} // namespace tr1
#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
}
#endif // _GLIBCXX_TR1_RIEMANN_ZETA_TCC
diff --git a/libstdc++-v3/include/tr1/shared_ptr.h b/libstdc++-v3/include/tr1/shared_ptr.h
index f702cd68972..95ac9775b9b 100644
--- a/libstdc++-v3/include/tr1/shared_ptr.h
+++ b/libstdc++-v3/include/tr1/shared_ptr.h
@@ -51,10 +51,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr1
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr1
+{
/**
* @brief Exception possibly thrown by @c shared_ptr.
* @ingroup exceptions
@@ -1162,9 +1162,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
mutable weak_ptr<_Tp> _M_weak_this;
};
+}
_GLIBCXX_END_NAMESPACE_VERSION
}
-}
#endif // _TR1_SHARED_PTR_H
diff --git a/libstdc++-v3/include/tr1/special_function_util.h b/libstdc++-v3/include/tr1/special_function_util.h
index 9d40a16ca6c..c4e9c476150 100644
--- a/libstdc++-v3/include/tr1/special_function_util.h
+++ b/libstdc++-v3/include/tr1/special_function_util.h
@@ -38,6 +38,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
#if _GLIBCXX_USE_STD_SPEC_FUNCS
#elif defined(_GLIBCXX_TR1_CMATH)
namespace tr1
@@ -47,8 +49,6 @@ namespace tr1
#endif
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
/// A class to encapsulate type dependent floating point
/// constants. Not everything will be able to be expressed as
/// type logic.
@@ -130,12 +130,12 @@ namespace tr1
{ return __builtin_isnanl(__x); }
#endif
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
#if ! _GLIBCXX_USE_STD_SPEC_FUNCS && defined(_GLIBCXX_TR1_CMATH)
} // namespace tr1
#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
}
#endif // _GLIBCXX_TR1_SPECIAL_FUNCTION_UTIL_H
diff --git a/libstdc++-v3/include/tr1/tuple b/libstdc++-v3/include/tr1/tuple
index fe53a8b99b0..997542d241b 100644
--- a/libstdc++-v3/include/tr1/tuple
+++ b/libstdc++-v3/include/tr1/tuple
@@ -38,10 +38,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr1
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr1
+{
// Adds a const reference to a non-reference type.
template<typename _Tp>
struct __add_c_ref
@@ -418,9 +418,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
_Swallow_assign ignore;
}; // anonymous namespace
+}
_GLIBCXX_END_NAMESPACE_VERSION
}
-}
#endif // _GLIBCXX_TR1_TUPLE
diff --git a/libstdc++-v3/include/tr1/type_traits b/libstdc++-v3/include/tr1/type_traits
index abdb83b48ec..83dd7b7dcf2 100644
--- a/libstdc++-v3/include/tr1/type_traits
+++ b/libstdc++-v3/include/tr1/type_traits
@@ -35,10 +35,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr1
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr1
+{
/**
* @addtogroup metaprogramming
* @{
@@ -679,9 +679,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#undef _DEFINE_SPEC
/// @} group metaprogramming
+}
_GLIBCXX_END_NAMESPACE_VERSION
}
-}
#endif // _GLIBCXX_TR1_TYPE_TRAITS
diff --git a/libstdc++-v3/include/tr1/unordered_map.h b/libstdc++-v3/include/tr1/unordered_map.h
index 34776aeea58..a27654a45d2 100644
--- a/libstdc++-v3/include/tr1/unordered_map.h
+++ b/libstdc++-v3/include/tr1/unordered_map.h
@@ -29,10 +29,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr1
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr1
+{
// NB: When we get typedef templates these class definitions
// will be unnecessary.
template<class _Key, class _Tp,
@@ -272,7 +272,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
{ __x.swap(__y); }
+}
_GLIBCXX_END_NAMESPACE_VERSION
}
-}
diff --git a/libstdc++-v3/include/tr1/unordered_set.h b/libstdc++-v3/include/tr1/unordered_set.h
index f9d04901cc5..df24ca6b299 100644
--- a/libstdc++-v3/include/tr1/unordered_set.h
+++ b/libstdc++-v3/include/tr1/unordered_set.h
@@ -29,10 +29,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr1
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr1
+{
// NB: When we get typedef templates these class definitions
// will be unnecessary.
template<class _Value,
@@ -261,7 +261,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
{ __x.swap(__y); }
+}
_GLIBCXX_END_NAMESPACE_VERSION
}
-}
diff --git a/libstdc++-v3/include/tr1/utility b/libstdc++-v3/include/tr1/utility
index 91076d9882c..f114160005f 100644
--- a/libstdc++-v3/include/tr1/utility
+++ b/libstdc++-v3/include/tr1/utility
@@ -37,10 +37,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr1
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr1
+{
template<class _Tp>
class tuple_size;
@@ -100,9 +100,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline const typename tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type&
get(const std::pair<_Tp1, _Tp2>& __in)
{ return __pair_get<_Int>::__const_get(__in); }
+}
_GLIBCXX_END_NAMESPACE_VERSION
}
-}
#endif // _GLIBCXX_TR1_UTILITY
diff --git a/libstdc++-v3/include/tr2/bool_set b/libstdc++-v3/include/tr2/bool_set
index 9d55b3c0ebd..f89a8658932 100644
--- a/libstdc++-v3/include/tr2/bool_set
+++ b/libstdc++-v3/include/tr2/bool_set
@@ -36,10 +36,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr2
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr2
+{
/**
* bool_set
*
@@ -310,10 +310,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline bool_set
operator!=(bool_set __s, bool_set __t)
{ return ! (__s == __t); }
+}
_GLIBCXX_END_NAMESPACE_VERSION
}
-}
#include <tr2/bool_set.tcc>
diff --git a/libstdc++-v3/include/tr2/bool_set.tcc b/libstdc++-v3/include/tr2/bool_set.tcc
index a5fd898a822..1ffcccac901 100644
--- a/libstdc++-v3/include/tr2/bool_set.tcc
+++ b/libstdc++-v3/include/tr2/bool_set.tcc
@@ -33,10 +33,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr2
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr2
+{
bool_set::_Bool_set_val
bool_set::_S_not[4] =
{ _S_true_, _S_false, _S_indet, _S_empty };
@@ -68,10 +68,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ _S_false, _S_true_, _S_indet, _S_empty },
{ _S_indet, _S_indet, _S_indet, _S_empty },
{ _S_empty, _S_empty, _S_empty, _S_empty } };
+}
_GLIBCXX_END_NAMESPACE_VERSION
}
-}
// I object to these things.
// The stuff in locale facets are for basic types.
diff --git a/libstdc++-v3/include/tr2/dynamic_bitset b/libstdc++-v3/include/tr2/dynamic_bitset
index ff4e5887eb9..4d16f8178b6 100644
--- a/libstdc++-v3/include/tr2/dynamic_bitset
+++ b/libstdc++-v3/include/tr2/dynamic_bitset
@@ -42,10 +42,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr2
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr2
+{
/**
* @defgroup dynamic_bitset Dynamic Bitset.
* @ingroup extensions
@@ -1220,9 +1220,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @}
*/
+} // tr2
_GLIBCXX_END_NAMESPACE_VERSION
-} // tr2
} // std
#include <tr2/dynamic_bitset.tcc>
diff --git a/libstdc++-v3/include/tr2/dynamic_bitset.tcc b/libstdc++-v3/include/tr2/dynamic_bitset.tcc
index 7b64580ccfc..c2875e54257 100644
--- a/libstdc++-v3/include/tr2/dynamic_bitset.tcc
+++ b/libstdc++-v3/include/tr2/dynamic_bitset.tcc
@@ -34,10 +34,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr2
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr2
+{
// Definitions of non-inline functions from __dynamic_bitset_base.
template<typename _WordT, typename _Alloc>
void
@@ -272,9 +272,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__is.setstate(__state);
return __is;
}
+} // tr2
_GLIBCXX_END_NAMESPACE_VERSION
-} // tr2
} // std
#endif /* _GLIBCXX_TR2_DYNAMIC_BITSET_TCC */
diff --git a/libstdc++-v3/include/tr2/ratio b/libstdc++-v3/include/tr2/ratio
index c0a2d4d3065..a9b71c8f121 100644
--- a/libstdc++-v3/include/tr2/ratio
+++ b/libstdc++-v3/include/tr2/ratio
@@ -30,10 +30,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr2
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr2
+{
template<intmax_t _Pn, size_t _Bit,
bool = _Bit < static_cast<size_t>
(std::numeric_limits<intmax_t>::digits)>
@@ -53,7 +53,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef ratio<__safe_lshift<1, 60>::__value, 1> exbi;
//typedef ratio<__safe_lshift<1, 70>::__value, 1> zebi;
//typedef ratio<__safe_lshift<1, 80>::__value, 1> yobi;
+}
_GLIBCXX_END_NAMESPACE_VERSION
}
-}
diff --git a/libstdc++-v3/include/tr2/type_traits b/libstdc++-v3/include/tr2/type_traits
index 35f621500d6..b442ba5dc64 100644
--- a/libstdc++-v3/include/tr2/type_traits
+++ b/libstdc++-v3/include/tr2/type_traits
@@ -35,10 +35,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
-namespace tr2
-{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+namespace tr2
+{
/**
* @addtogroup metaprogramming
* @{
@@ -98,9 +98,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
/// @} group metaprogramming
+}
_GLIBCXX_END_NAMESPACE_VERSION
}
-}
#endif // _GLIBCXX_TR2_TYPE_TRAITS
diff --git a/libstdc++-v3/python/libstdcxx/v6/printers.py b/libstdc++-v3/python/libstdcxx/v6/printers.py
index 8122cf81834..04f413adf04 100644
--- a/libstdc++-v3/python/libstdcxx/v6/printers.py
+++ b/libstdc++-v3/python/libstdcxx/v6/printers.py
@@ -1555,15 +1555,15 @@ def build_libstdcxx_dictionary ():
libstdcxx_printer.add_container('std::', 'forward_list',
StdForwardListPrinter)
- libstdcxx_printer.add_version('std::tr1::', 'shared_ptr', SharedPointerPrinter)
- libstdcxx_printer.add_version('std::tr1::', 'weak_ptr', SharedPointerPrinter)
- libstdcxx_printer.add_version('std::tr1::', 'unordered_map',
+ libstdcxx_printer.add_version('std::', 'tr1::shared_ptr', SharedPointerPrinter)
+ libstdcxx_printer.add_version('std::', 'tr1::weak_ptr', SharedPointerPrinter)
+ libstdcxx_printer.add_version('std::', 'tr1::unordered_map',
Tr1UnorderedMapPrinter)
- libstdcxx_printer.add_version('std::tr1::', 'unordered_set',
+ libstdcxx_printer.add_version('std::', 'tr1::unordered_set',
Tr1UnorderedSetPrinter)
- libstdcxx_printer.add_version('std::tr1::', 'unordered_multimap',
+ libstdcxx_printer.add_version('std::', 'tr1::unordered_multimap',
Tr1UnorderedMapPrinter)
- libstdcxx_printer.add_version('std::tr1::', 'unordered_multiset',
+ libstdcxx_printer.add_version('std::', 'tr1::unordered_multiset',
Tr1UnorderedSetPrinter)
# These are the C++11 printer registrations for -D_GLIBCXX_DEBUG cases.
diff --git a/libstdc++-v3/src/c++11/chrono.cc b/libstdc++-v3/src/c++11/chrono.cc
index 39a52aea619..337860c23d8 100644
--- a/libstdc++-v3/src/c++11/chrono.cc
+++ b/libstdc++-v3/src/c++11/chrono.cc
@@ -41,10 +41,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace chrono
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// XXX GLIBCXX_ABI Deprecated
inline namespace _V2 {
@@ -97,9 +97,9 @@ namespace std _GLIBCXX_VISIBILITY(default)
}
} // end inline namespace _V2
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace chrono
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // _GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/src/c++11/compatibility-c++0x.cc b/libstdc++-v3/src/c++11/compatibility-c++0x.cc
index 358263baff4..811ccb5f120 100644
--- a/libstdc++-v3/src/c++11/compatibility-c++0x.cc
+++ b/libstdc++-v3/src/c++11/compatibility-c++0x.cc
@@ -44,6 +44,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
// gcc-4.4.0
// <mutex> exported std::lock_error
#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
@@ -130,7 +132,6 @@ namespace std _GLIBCXX_VISIBILITY(default)
constexpr bool system_clock::is_monotonic;
} // namespace chrono
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
// gcc-5 replaces this with _V2::error_category
class error_category
{
@@ -169,7 +170,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
operator!=(const error_category& __other) const noexcept
{ return this != &__other; }
};
-_GLIBCXX_END_NAMESPACE_VERSION
// gcc-4.9.0
// LWG 2145 changes this constructor to constexpr i.e. inline
@@ -215,7 +215,6 @@ _GLIBCXX_END_NAMESPACE_VERSION
const system_error_category system_category_instance{};
}
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
const error_category&
system_category() noexcept { return system_category_instance; }
@@ -227,7 +226,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_CONST const error_categoryxx& system_category() noexcept;
_GLIBCXX_CONST const error_categoryxx& generic_category() noexcept;
}
-_GLIBCXX_END_NAMESPACE_VERSION
error_condition
error_category::default_error_condition(int __i) const noexcept
@@ -254,5 +252,6 @@ _GLIBCXX_END_NAMESPACE_VERSION
return false;
}
+_GLIBCXX_END_NAMESPACE_VERSION
}
#endif
diff --git a/libstdc++-v3/src/c++11/compatibility-chrono.cc b/libstdc++-v3/src/c++11/compatibility-chrono.cc
index e401375928d..941eaf83556 100644
--- a/libstdc++-v3/src/c++11/compatibility-chrono.cc
+++ b/libstdc++-v3/src/c++11/compatibility-chrono.cc
@@ -38,10 +38,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace chrono
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// NB: Default configuration was no realtime.
struct system_clock
{
@@ -84,9 +84,9 @@ namespace std _GLIBCXX_VISIBILITY(default)
(__from(chrono::seconds(__sec)));
#endif
}
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace chrono
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // _GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/src/c++11/cxx11-shim_facets.cc b/libstdc++-v3/src/c++11/cxx11-shim_facets.cc
index b69959f4f13..fbff59eb5f0 100644
--- a/libstdc++-v3/src/c++11/cxx11-shim_facets.cc
+++ b/libstdc++-v3/src/c++11/cxx11-shim_facets.cc
@@ -45,6 +45,8 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
// Base class of facet shims, holds a reference to the underlying facet
// that the shim forwards to.
class locale::facet::__shim
@@ -67,8 +69,6 @@ namespace std _GLIBCXX_VISIBILITY(default)
namespace __facet_shims
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
namespace // unnamed
{
template<typename C>
@@ -777,10 +777,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
bool, ios_base&, wchar_t, long double, const __any_string*);
#endif
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __facet_shims
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
// Create a new shim facet of type WHICH that forwards calls to F.
// F is the replacement facet provided by the user, WHICH is the ID of
// F's "other ABI twin" which we are replacing with a shim.
diff --git a/libstdc++-v3/src/c++11/hashtable_c++0x.cc b/libstdc++-v3/src/c++11/hashtable_c++0x.cc
index 1b099928942..3ddc10c72f7 100644
--- a/libstdc++-v3/src/c++11/hashtable_c++0x.cc
+++ b/libstdc++-v3/src/c++11/hashtable_c++0x.cc
@@ -34,12 +34,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
#include "../shared/hashtable-aux.cc"
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
// Return a prime no smaller than n.
std::size_t
_Prime_rehash_policy::_M_next_bkt(std::size_t __n) const
@@ -111,7 +111,7 @@ namespace __detail
else
return std::make_pair(false, 0);
}
+} // namespace __detail
_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace __detail
} // namespace std
diff --git a/libstdc++-v3/src/c++11/placeholders.cc b/libstdc++-v3/src/c++11/placeholders.cc
index fad78f2e98d..48a05fab365 100644
--- a/libstdc++-v3/src/c++11/placeholders.cc
+++ b/libstdc++-v3/src/c++11/placeholders.cc
@@ -30,9 +30,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace placeholders
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
extern const _Placeholder<1> _1{};
extern const _Placeholder<2> _2{};
extern const _Placeholder<3> _3{};
@@ -62,6 +63,7 @@ namespace std _GLIBCXX_VISIBILITY(default)
extern const _Placeholder<27> _27{};
extern const _Placeholder<28> _28{};
extern const _Placeholder<29> _29{};
- _GLIBCXX_END_NAMESPACE_VERSION
}
+
+_GLIBCXX_END_NAMESPACE_VERSION
}
diff --git a/libstdc++-v3/src/c++11/thread.cc b/libstdc++-v3/src/c++11/thread.cc
index 4a94bdd2f8c..cd6d9fe6635 100644
--- a/libstdc++-v3/src/c++11/thread.cc
+++ b/libstdc++-v3/src/c++11/thread.cc
@@ -180,12 +180,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __n;
}
-_GLIBCXX_END_NAMESPACE_VERSION
-
namespace this_thread
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
void
__sleep_for(chrono::seconds __s, chrono::nanoseconds __ns)
{
@@ -217,10 +213,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
::Sleep(chrono::milliseconds(__s).count() + ms);
#endif
}
-
-_GLIBCXX_END_NAMESPACE_VERSION
}
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/src/c++98/bitmap_allocator.cc b/libstdc++-v3/src/c++98/bitmap_allocator.cc
index 5a9696d97e0..b16c29143f1 100644
--- a/libstdc++-v3/src/c++98/bitmap_allocator.cc
+++ b/libstdc++-v3/src/c++98/bitmap_allocator.cc
@@ -26,9 +26,10 @@
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
template class __mini_vector<
std::pair<bitmap_allocator<char>::_Alloc_block*,
bitmap_allocator<char>::_Alloc_block*> >;
@@ -41,11 +42,8 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
template size_t** __lower_bound(size_t**, size_t**, size_t const&,
free_list::_LT_pointer_compare);
- _GLIBCXX_END_NAMESPACE_VERSION
}
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
size_t*
free_list::
_M_get(size_t __sz) throw(std::bad_alloc)
diff --git a/libstdc++-v3/src/c++98/hashtable_tr1.cc b/libstdc++-v3/src/c++98/hashtable_tr1.cc
index 199b8fd5a5a..ac320696ad2 100644
--- a/libstdc++-v3/src/c++98/hashtable_tr1.cc
+++ b/libstdc++-v3/src/c++98/hashtable_tr1.cc
@@ -26,8 +26,12 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace tr1
{
#include "../shared/hashtable-aux.cc"
}
+
+_GLIBCXX_END_NAMESPACE_VERSION
}
diff --git a/libstdc++-v3/src/c++98/list.cc b/libstdc++-v3/src/c++98/list.cc
index 3de7d2d0e02..25e72717eca 100644
--- a/libstdc++-v3/src/c++98/list.cc
+++ b/libstdc++-v3/src/c++98/list.cc
@@ -52,10 +52,10 @@
namespace std _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
namespace __detail
{
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
void
_List_node_base::swap(_List_node_base& __x,
_List_node_base& __y) _GLIBCXX_USE_NOEXCEPT
@@ -141,7 +141,7 @@ namespace std _GLIBCXX_VISIBILITY(default)
__prev_node->_M_next = __next_node;
__next_node->_M_prev = __prev_node;
}
-
- _GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
diff --git a/libstdc++-v3/src/shared/hashtable-aux.cc b/libstdc++-v3/src/shared/hashtable-aux.cc
index 01c01fa3155..f1d19974bd7 100644
--- a/libstdc++-v3/src/shared/hashtable-aux.cc
+++ b/libstdc++-v3/src/shared/hashtable-aux.cc
@@ -24,7 +24,6 @@
namespace __detail
{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
// The sentinel value is kept only for abi backward compatibility.
extern const unsigned long __prime_list[] = // 256 + 1 or 256 + 48 + 1
{
@@ -90,5 +89,4 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
18446744073709551557ul, 18446744073709551557ul
#endif
};
-_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __detail
diff --git a/libstdc++-v3/testsuite/20_util/duration/literals/range.cc b/libstdc++-v3/testsuite/20_util/duration/literals/range.cc
index c0d1a6e5885..b5105dff38b 100644
--- a/libstdc++-v3/testsuite/20_util/duration/literals/range.cc
+++ b/libstdc++-v3/testsuite/20_util/duration/literals/range.cc
@@ -26,6 +26,6 @@ test01()
// std::numeric_limits<int64_t>::max() == 9223372036854775807;
auto h = 9223372036854775808h;
- // { dg-error "cannot be represented" "" { target *-*-* } 892 }
+ // { dg-error "cannot be represented" "" { target *-*-* } 880 }
}
// { dg-prune-output "in constexpr expansion" } // needed for -O0
diff --git a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc
index 189e97bf984..17f74187098 100644
--- a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc
+++ b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc
@@ -30,4 +30,4 @@ void test01()
test_type d; // { dg-error "required from here" }
}
-// { dg-error "rep cannot be a duration" "" { target *-*-* } 308 }
+// { dg-error "rep cannot be a duration" "" { target *-*-* } 300 }
diff --git a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc
index 501de5ee752..282a9dbdc85 100644
--- a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc
+++ b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc
@@ -31,5 +31,5 @@ void test01()
test_type d; // { dg-error "required from here" }
}
-// { dg-error "must be a specialization of ratio" "" { target *-*-* } 309 }
+// { dg-error "must be a specialization of ratio" "" { target *-*-* } 301 }
// { dg-prune-output "not a member" }
diff --git a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc
index a56bb96f5d0..c57f9d947a5 100644
--- a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc
+++ b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc
@@ -32,4 +32,4 @@ void test01()
test_type d; // { dg-error "required from here" }
}
-// { dg-error "period must be positive" "" { target *-*-* } 311 }
+// { dg-error "period must be positive" "" { target *-*-* } 303 }
diff --git a/libstdc++-v3/testsuite/20_util/forward/c_neg.cc b/libstdc++-v3/testsuite/20_util/forward/c_neg.cc
index c7830d7b2d4..d098164c0f7 100644
--- a/libstdc++-v3/testsuite/20_util/forward/c_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/forward/c_neg.cc
@@ -17,7 +17,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// { dg-error "static assertion failed" "" { target *-*-* } 86 }
+// { dg-error "static assertion failed" "" { target *-*-* } 87 }
#include <list>
diff --git a/libstdc++-v3/testsuite/20_util/forward/f_neg.cc b/libstdc++-v3/testsuite/20_util/forward/f_neg.cc
index 7d073fe822b..0ca36d4b5a6 100644
--- a/libstdc++-v3/testsuite/20_util/forward/f_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/forward/f_neg.cc
@@ -17,7 +17,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// { dg-error "static assertion failed" "" { target *-*-* } 86 }
+// { dg-error "static assertion failed" "" { target *-*-* } 87 }
#include <utility>
diff --git a/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc b/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc
index d88f145d754..8c3494d7041 100644
--- a/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc
+++ b/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc
@@ -31,9 +31,9 @@ test01()
std::gcd(0.1, 0.1); // { dg-error "from here" }
}
-// { dg-error "integers" "" { target *-*-* } 134 }
-// { dg-error "integers" "" { target *-*-* } 135 }
-// { dg-error "not bools" "" { target *-*-* } 136 }
-// { dg-error "not bools" "" { target *-*-* } 137 }
+// { dg-error "integers" "" { target *-*-* } 130 }
+// { dg-error "integers" "" { target *-*-* } 131 }
+// { dg-error "not bools" "" { target *-*-* } 132 }
+// { dg-error "not bools" "" { target *-*-* } 133 }
// { dg-prune-output "deleted function" }
// { dg-prune-output "invalid operands" }
diff --git a/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc b/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc
index f2d82894531..abcac4f18c1 100644
--- a/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc
+++ b/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc
@@ -31,9 +31,9 @@ test01()
std::lcm(0.1, 0.1); // { dg-error "from here" }
}
-// { dg-error "integers" "" { target *-*-* } 147 }
-// { dg-error "integers" "" { target *-*-* } 148 }
-// { dg-error "not bools" "" { target *-*-* } 149 }
-// { dg-error "not bools" "" { target *-*-* } 150 }
+// { dg-error "integers" "" { target *-*-* } 143 }
+// { dg-error "integers" "" { target *-*-* } 144 }
+// { dg-error "not bools" "" { target *-*-* } 145 }
+// { dg-error "not bools" "" { target *-*-* } 146 }
// { dg-prune-output "deleted function" }
// { dg-prune-output "invalid operands" }
diff --git a/libstdc++-v3/testsuite/26_numerics/random/pr60037-neg.cc b/libstdc++-v3/testsuite/26_numerics/random/pr60037-neg.cc
index ad2cbc6e71b..22485222f28 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/pr60037-neg.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/pr60037-neg.cc
@@ -9,6 +9,6 @@ std::__detail::_Adaptor<std::mt19937, unsigned long> aurng(urng);
auto x = std::generate_canonical<std::size_t,
std::numeric_limits<std::size_t>::digits>(urng);
-// { dg-error "static assertion failed: template argument must be a floating point type" "" { target *-*-* } 160 }
+// { dg-error "static assertion failed: template argument must be a floating point type" "" { target *-*-* } 156 }
-// { dg-error "static assertion failed: template argument must be a floating point type" "" { target *-*-* } 3314 }
+// { dg-error "static assertion failed: template argument must be a floating point type" "" { target *-*-* } 3311 }
diff --git a/libstdc++-v3/testsuite/27_io/basic_fstream/53984.cc b/libstdc++-v3/testsuite/27_io/basic_fstream/53984.cc
new file mode 100644
index 00000000000..a319aff1c62
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_fstream/53984.cc
@@ -0,0 +1,64 @@
+// Copyright (C) 2017 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-require-fileio "" }
+
+// PR libstdc++/53984
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ std::ifstream in(".");
+ if (in)
+ {
+ char c;
+ if (in.get(c))
+ {
+ // Reading a directory doesn't produce an error on this target
+ // so the formatted input functions below wouldn't fail anyway
+ // (see PR libstdc++/81808).
+ return;
+ }
+ int x;
+ in.clear();
+ // Formatted input function should set badbit, but not throw:
+ in >> x;
+ VERIFY( in.bad() );
+
+ in.clear();
+ in.exceptions(std::ios::badbit);
+ try
+ {
+ // Formatted input function should set badbit, and throw:
+ in >> x;
+ VERIFY( false );
+ }
+ catch (const std::exception&)
+ {
+ VERIFY( in.bad() );
+ }
+ }
+}
+
+int
+main()
+{
+ test01();
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/53984.cc b/libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/53984.cc
new file mode 100644
index 00000000000..9c08c7236da
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/53984.cc
@@ -0,0 +1,41 @@
+// Copyright (C) 2017 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 <streambuf>
+#include <istream>
+#include <testsuite_hooks.h>
+
+struct SB : std::streambuf
+{
+ virtual int_type underflow() { throw 1; }
+};
+
+void
+test01()
+{
+ SB sb;
+ std::istream is(&sb);
+ int i;
+ is >> i;
+ VERIFY( is.bad() );
+}
+
+int
+main()
+{
+ test01();
+}
diff --git a/libstdc++-v3/testsuite/27_io/types/1.cc b/libstdc++-v3/testsuite/27_io/types/1.cc
index 88f6ff868d7..0756f8a1709 100644
--- a/libstdc++-v3/testsuite/27_io/types/1.cc
+++ b/libstdc++-v3/testsuite/27_io/types/1.cc
@@ -15,6 +15,8 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
+// { dg-do compile { target c++14_down } }
+
// 27.4.2.1 - Types [lib.ios.types]
#include <ios>
@@ -27,9 +29,3 @@ void test01()
typedef std::ios_base::streampos streampos_type;
typedef std::ios_base::streamoff streamoff_type;
}
-
-int main(void)
-{
- test01();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/27_io/types/4.cc b/libstdc++-v3/testsuite/27_io/types/4.cc
new file mode 100644
index 00000000000..ee1a77736ce
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/types/4.cc
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 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++17" }
+// { dg-do compile { target c++1z } }
+
+// In C++17 these names are not reserved by the library.
+#define io_state 1
+#define open_mode 2
+#define seek_dir 3
+#define stossc 4
+#include <streambuf>
+
+template class std::basic_streambuf<char>;
+template class std::basic_streambuf<wchar_t>;
diff --git a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc
new file mode 100644
index 00000000000..ba566f869c6
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 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-require-fileio "" }
+
+#include <ext/stdio_filebuf.h>
+#include <cstdio>
+#include <cerrno>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ FILE* f = std::fopen("79820.txt", "w");
+ std::fclose(f);
+ errno = 127;
+ __gnu_cxx::stdio_filebuf<char> b(f, std::ios::out, BUFSIZ);
+ VERIFY(errno == 127); // PR libstdc++/79820
+}
+
+int
+main()
+{
+ test01();
+}
diff --git a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc
new file mode 100644
index 00000000000..22191dcb6a3
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc
@@ -0,0 +1,53 @@
+// Copyright (C) 2017 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-require-fileio "" }
+
+#include <ext/stdio_filebuf.h>
+#include <cstdio>
+#include <cerrno>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ FILE* out = std::fopen("81751.txt", "w");
+ std::fwrite("Some words.", 1, 10, out);
+
+ FILE* in1 = std::fopen("81751.txt", "r");
+ __gnu_cxx::stdio_filebuf<char> buf1(in1, std::ios::in, BUFSIZ);
+ int c = buf1.sgetc();
+ VERIFY( c == std::char_traits<char>::eof() ); // PR libstdc++/81751
+
+ std::fflush(out);
+ FILE* in2 = std::fopen("81751.txt", "r");
+ __gnu_cxx::stdio_filebuf<char> buf2(in2, std::ios::in, BUFSIZ);
+ c = buf2.sgetc();
+ VERIFY( c == 'S' );
+
+ buf1.close();
+ buf2.close();
+ std::fclose(in1);
+ std::fclose(in2);
+ std::fclose(out);
+}
+
+int
+main()
+{
+ test01();
+}
diff --git a/lto-plugin/ChangeLog b/lto-plugin/ChangeLog
index c1859e2bbee..d3617a12ea3 100644
--- a/lto-plugin/ChangeLog
+++ b/lto-plugin/ChangeLog
@@ -1,3 +1,10 @@
+2017-07-21 Georg-Johann Lay <avr@gjlay.de>
+
+ PR lto/81487
+ * lto-plugin.c (claim_file_handler): Use xasprintf instead of
+ asprintf.
+ [hi!=0]: Swap hi and lo arguments supplied to xasprintf.
+
2017-01-17 Jakub Jelinek <jakub@redhat.com>
PR other/79046
diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c
index f713c5dab0d..27fcfbeca09 100644
--- a/lto-plugin/lto-plugin.c
+++ b/lto-plugin/lto-plugin.c
@@ -975,17 +975,16 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
if (file->offset != 0)
{
- char *objname;
/* We pass the offset of the actual file, not the archive header.
Can't use PRIx64, because that's C99, so we have to print the
- 64-bit hex int as two 32-bit ones. */
- int lo, hi, t;
+ 64-bit hex int as two 32-bit ones. Use xasprintf instead of
+ asprintf because asprintf doesn't work as expected on some older
+ mingw32 hosts. */
+ int lo, hi;
lo = file->offset & 0xffffffff;
hi = ((int64_t)file->offset >> 32) & 0xffffffff;
- t = hi ? asprintf (&objname, "%s@0x%x%08x", file->name, lo, hi)
- : asprintf (&objname, "%s@0x%x", file->name, lo);
- check (t >= 0, LDPL_FATAL, "asprintf failed");
- lto_file.name = objname;
+ lto_file.name = hi ? xasprintf ("%s@0x%x%08x", file->name, hi, lo)
+ : xasprintf ("%s@0x%x", file->name, lo);
}
else
{